<?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>118338</bug_id>
          
          <creation_ts>2013-07-02 21:57:34 -0700</creation_ts>
          <short_desc>fourthTier: DFG should have an SSA form for use by FTL</short_desc>
          <delta_ts>2013-07-15 18:34:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>118339</dependson>
    
    <dependson>118452</dependson>
    
    <dependson>118486</dependson>
          <blocked>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>905686</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-02 21:57:34 -0700</bug_when>
    <thetext>This will be fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906522</commentid>
    <comment_count>1</comment_count>
      <attachid>206181</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-05 18:59:33 -0700</bug_when>
    <thetext>Created attachment 206181
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906524</commentid>
    <comment_count>2</comment_count>
      <attachid>206182</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-05 19:38:37 -0700</bug_when>
    <thetext>Created attachment 206182
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906530</commentid>
    <comment_count>3</comment_count>
      <attachid>206183</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-05 20:27:05 -0700</bug_when>
    <thetext>Created attachment 206183
more

I&apos;m going to do phi reduction and SSA conversion in one phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906596</commentid>
    <comment_count>4</comment_count>
      <attachid>206196</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-06 19:33:36 -0700</bug_when>
    <thetext>Created attachment 206196
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906598</commentid>
    <comment_count>5</comment_count>
      <attachid>206198</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-06 20:54:10 -0700</bug_when>
    <thetext>Created attachment 206198
more

This is starting to crystalize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906599</commentid>
    <comment_count>6</comment_count>
      <attachid>206199</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-06 21:24:07 -0700</bug_when>
    <thetext>Created attachment 206199
even more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906631</commentid>
    <comment_count>7</comment_count>
      <attachid>206209</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-07 10:46:10 -0700</bug_when>
    <thetext>Created attachment 206209
reworked it again

I think I might be getting this to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906657</commentid>
    <comment_count>8</comment_count>
      <attachid>206214</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-07 21:39:40 -0700</bug_when>
    <thetext>Created attachment 206214
slowly adding things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906842</commentid>
    <comment_count>9</comment_count>
      <attachid>206254</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-08 09:49:44 -0700</bug_when>
    <thetext>Created attachment 206254
liveness analysis is done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906960</commentid>
    <comment_count>10</comment_count>
      <attachid>206282</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-08 16:58:50 -0700</bug_when>
    <thetext>Created attachment 206282
started on CFA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906988</commentid>
    <comment_count>11</comment_count>
      <attachid>206288</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-08 21:38:34 -0700</bug_when>
    <thetext>Created attachment 206288
started thinking about FTL backend for SSA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906997</commentid>
    <comment_count>12</comment_count>
      <attachid>206290</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-08 22:26:29 -0700</bug_when>
    <thetext>Created attachment 206290
more

Starting to make sense of how to deal with flushed locals and their silly value formats.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907173</commentid>
    <comment_count>13</comment_count>
      <attachid>206338</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-09 10:21:58 -0700</bug_when>
    <thetext>Created attachment 206338
getting there

Still working on constructing OSR exit data over SSA.  Doing it as a separate phase that the FTL can run before lowering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907435</commentid>
    <comment_count>14</comment_count>
      <attachid>206407</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-10 12:30:08 -0700</bug_when>
    <thetext>Created attachment 206407
it&apos;s getting real

OMG.  So much code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907437</commentid>
    <comment_count>15</comment_count>
      <attachid>206408</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-10 12:37:27 -0700</bug_when>
    <thetext>Created attachment 206408
forgot to delete a file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907751</commentid>
    <comment_count>16</comment_count>
      <attachid>206486</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-11 14:10:58 -0700</bug_when>
    <thetext>Created attachment 206486
I might be done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907758</commentid>
    <comment_count>17</comment_count>
      <attachid>206489</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-11 14:33:40 -0700</bug_when>
    <thetext>Created attachment 206489
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907810</commentid>
    <comment_count>18</comment_count>
      <attachid>206503</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-11 20:03:27 -0700</bug_when>
    <thetext>Created attachment 206503
still not compiling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907817</commentid>
    <comment_count>19</comment_count>
      <attachid>206504</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-11 21:56:47 -0700</bug_when>
    <thetext>Created attachment 206504
OMG it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907818</commentid>
    <comment_count>20</comment_count>
      <attachid>206505</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-11 21:57:51 -0700</bug_when>
    <thetext>Created attachment 206505
removed a file I accidentally added</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908037</commentid>
    <comment_count>21</comment_count>
      <attachid>206561</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-12 12:20:48 -0700</bug_when>
    <thetext>Created attachment 206561
added dumping of SSA metadata</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908083</commentid>
    <comment_count>22</comment_count>
      <attachid>206575</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-12 15:41:41 -0700</bug_when>
    <thetext>Created attachment 206575
it just ran something

Obviously I still have work to do but it&apos;s getting exciting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908117</commentid>
    <comment_count>23</comment_count>
      <attachid>206586</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-12 20:01:53 -0700</bug_when>
    <thetext>Created attachment 206586
runs some more code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908124</commentid>
    <comment_count>24</comment_count>
      <attachid>206589</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-12 20:32:51 -0700</bug_when>
    <thetext>Created attachment 206589
it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908130</commentid>
    <comment_count>25</comment_count>
      <attachid>206589</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-12 22:28:14 -0700</bug_when>
    <thetext>Comment on attachment 206589
it works.

Never mind.  This still has bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908131</commentid>
    <comment_count>26</comment_count>
      <attachid>206592</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-12 22:42:33 -0700</bug_when>
    <thetext>Created attachment 206592
it really works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908585</commentid>
    <comment_count>27</comment_count>
      <attachid>206592</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-07-15 16:50:45 -0700</bug_when>
    <thetext>Comment on attachment 206592
it really works.

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

r=me with small changes.

&gt; Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.cpp:144
&gt; +                // Three possibilities:
&gt; +                // 1) Predecessor format is Dead, in which case it acquires our format.
&gt; +                // 2) Predecessor format is identical to our format, in which case we
&gt; +                //    do nothing.
&gt; +                // 3) Predecessor format is different from our format and it&apos;s not Dead,
&gt; +                //    in which case we have an erroneous set of Flushes and SetLocals.

What if the predecessor was already processed by the fixpoint and says &quot;not Dead&quot; and the current block says &quot;Dead&quot;?

&gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:260
&gt; +        //   backwards analysis that LivenessAnalysisPhase does. As part of the

FlushLivenessAnalysisPhase?

&gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:338
&gt; +                case SetArgument: {
&gt; +                    node-&gt;setOpAndDefaultFlags(GetArgument);
&gt; +                    node-&gt;mergeFlags(resultFor(node-&gt;variableAccessData()-&gt;flushFormat()));
&gt; +                    break;
&gt; +                }

Should consider keeping SetArgument for captured arguments.

&gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:346
&gt; +        // Free all phis and reset variables vectors.

CPS phis?

&gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:373
&gt; +                continue;

break;

&gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:386
&gt; +                return edge.node();

node = edge.node();
break;

&gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:392
&gt; +                return node-&gt;child1().node();

node = node-&gt;child1().node();
break;

&gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.h:46
&gt; +//   After this, any remaining SetLocal means Flush. Flush nodes are
&gt; +//   eliminated. PhantomLocals become Phantoms. Nodes may may have children

Flush nodes aren&apos;t eliminated.

&quot;may may&quot;.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:157
&gt; +            dataLog(&quot;Compiling block &quot;, *block, &quot;\n&quot;);

Null guard for &quot;block&quot;? Or hoist check above.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:475
&gt; +        MethodOfGettingAValueProfile profile =
&gt; +            MethodOfGettingAValueProfile::fromLazyOperand(
&gt; +                m_graph.m_profiledBlock,
&gt; +                LazyOperandValueProfileKey(0, operand));

CodeBlock::profileForArgument?

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1873
&gt; +        ExitKind kind, FormattedValue lowValue, MethodOfGettingAValueProfile profile,
&gt; +        LValue failCondition)
&gt; +    {
&gt; +        appendOSRExit(
&gt; +            kind, lowValue, profile, failCondition, BackwardSpeculation, FormattedValue());
&gt; +    }

Passing GetArgument as high value also works.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2467
&gt; +        ExitKind kind, FormattedValue lowValue, MethodOfGettingAValueProfile profile,

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908616</commentid>
    <comment_count>28</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-15 18:18:50 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 206592 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=206592&amp;action=review
&gt; 
&gt; r=me with small changes.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.cpp:144
&gt; &gt; +                // Three possibilities:
&gt; &gt; +                // 1) Predecessor format is Dead, in which case it acquires our format.
&gt; &gt; +                // 2) Predecessor format is identical to our format, in which case we
&gt; &gt; +                //    do nothing.
&gt; &gt; +                // 3) Predecessor format is different from our format and it&apos;s not Dead,
&gt; &gt; +                //    in which case we have an erroneous set of Flushes and SetLocals.
&gt; 
&gt; What if the predecessor was already processed by the fixpoint and says &quot;not Dead&quot; and the current block says &quot;Dead&quot;?

We ain&apos;t sure about this yet and have no example of where this is needed, so I put in a FIXME for now.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:260
&gt; &gt; +        //   backwards analysis that LivenessAnalysisPhase does. As part of the
&gt; 
&gt; FlushLivenessAnalysisPhase?

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:338
&gt; &gt; +                case SetArgument: {
&gt; &gt; +                    node-&gt;setOpAndDefaultFlags(GetArgument);
&gt; &gt; +                    node-&gt;mergeFlags(resultFor(node-&gt;variableAccessData()-&gt;flushFormat()));
&gt; &gt; +                    break;
&gt; &gt; +                }
&gt; 
&gt; Should consider keeping SetArgument for captured arguments.

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:346
&gt; &gt; +        // Free all phis and reset variables vectors.
&gt; 
&gt; CPS phis?

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:373
&gt; &gt; +                continue;
&gt; 
&gt; break;

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:386
&gt; &gt; +                return edge.node();
&gt; 
&gt; node = edge.node();
&gt; break;

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.cpp:392
&gt; &gt; +                return node-&gt;child1().node();
&gt; 
&gt; node = node-&gt;child1().node();
&gt; break;

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSSAConversionPhase.h:46
&gt; &gt; +//   After this, any remaining SetLocal means Flush. Flush nodes are
&gt; &gt; +//   eliminated. PhantomLocals become Phantoms. Nodes may may have children
&gt; 
&gt; Flush nodes aren&apos;t eliminated.

Fixed.

&gt; 
&gt; &quot;may may&quot;.

Fixed.


&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:157
&gt; &gt; +            dataLog(&quot;Compiling block &quot;, *block, &quot;\n&quot;);
&gt; 
&gt; Null guard for &quot;block&quot;? Or hoist check above.

Fixed by hoisting the check.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:475
&gt; &gt; +        MethodOfGettingAValueProfile profile =
&gt; &gt; +            MethodOfGettingAValueProfile::fromLazyOperand(
&gt; &gt; +                m_graph.m_profiledBlock,
&gt; &gt; +                LazyOperandValueProfileKey(0, operand));
&gt; 
&gt; CodeBlock::profileForArgument?

Fixed by passing m_node as the highValue.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1873
&gt; &gt; +        ExitKind kind, FormattedValue lowValue, MethodOfGettingAValueProfile profile,
&gt; &gt; +        LValue failCondition)
&gt; &gt; +    {
&gt; &gt; +        appendOSRExit(
&gt; &gt; +            kind, lowValue, profile, failCondition, BackwardSpeculation, FormattedValue());
&gt; &gt; +    }
&gt; 
&gt; Passing GetArgument as high value also works.

Yup, fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:2467
&gt; &gt; +        ExitKind kind, FormattedValue lowValue, MethodOfGettingAValueProfile profile,
&gt; 
&gt; Ditto.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>908621</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-15 18:34:34 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/152692</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206181</attachid>
            <date>2013-07-05 18:59:33 -0700</date>
            <delta_ts>2013-07-05 19:38:37 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31033</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3Vu
dGVkPEJhc2ljQmxvYwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7
IH0KICAgICBOb2RlKiYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAgICBO
b2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5vZGUq
JiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9wZXJh
dG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFzdCgp
IGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6ZV90
IHNpemUpIHsgbV9ub2Rlcy5yZXNpemUoc2l6ZSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgREZH
QmxvY2tJbnNlcnRpb25TZXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSA8d3RmL0lu
c2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPFJlZlB0cjxCYXNpY0Jsb2Nr
PiA+IEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6
CisgICAgQmxvY2tJbnNlcnRpb25TZXQoR3JhcGgmIGdyYXBoKTsKKyAgICB+QmxvY2tJbnNlcnRp
b25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGluc2VydChjb25zdCBCbG9ja0luc2VydGlvbiYgaW5z
ZXJ0aW9uKTsKKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFzaWNC
bG9jaz4gYmxvY2spOworICAgIEJhc2ljQmxvY2sqIGluc2VydChzaXplX3QgaW5kZXgpOworICAg
IEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpOworICAgIAorICAg
IGJvb2wgZXhlY3V0ZSgpOworCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIFZl
Y3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdCbG9ja0luc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUg
IkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0lu
c2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiREZHVmFsaWRh
dGUuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCisjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFw
aCwgImNyaXRpY2FsIGVkZ2UgYnJlYWtpbmciKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdy
YXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IEFuIGVkZ2UgQS0+QiBpcyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0aXBsZSBzdWNjZXNzb3IgYW5k
IEIgaGFzIG11bHRpcGxlCisgICAgICAgICAgICAvLyBwcmVkZWNlc3NvcnMuIFRodXMgd2UgZmFp
bCBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIG11bHRpcGxlIHN1Y2Nlc3NvcnMuCisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChibG9jay0+bnVtU3VjY2Vzc29ycygpIDw9IDEpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiogc3VjY2Vzc29yID0gJmJsb2NrLT5zdWNjZXNzb3IoaSk7CisgICAgICAgICAg
ICAgICAgaWYgKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLnNpemUoKSA8PSAxKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBi
cmVha0NyaXRpY2FsRWRnZShibG9jaywgc3VjY2Vzc29yKTsgCisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5leGVjdXRlKCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgYnJlYWtDcml0aWNhbEVkZ2UoCisgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCwgQmFzaWNCbG9jayoq
IHN1Y2Nlc3NvcikKKyAgICB7CisgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKKyAgICAgICAg
CisgICAgICAgIEJhc2ljQmxvY2sqIHBhZCA9IG1fcGFkcy5nZXQoKnN1Y2Nlc3Nvcik7CisgICAg
ICAgIGlmICghcGFkKSB7CisgICAgICAgICAgICBwYWQgPSBtX2luc2VydGlvblNldC5pbnNlcnRC
ZWZvcmUoKnN1Y2Nlc3Nvcik7CisgICAgICAgICAgICBwYWQtPmFwcGVuZE5vZGUobV9ncmFwaCwg
U3BlY05vbmUsIEp1bXAsIE9wSW5mbygqc3VjY2Vzc29yKSk7CisgICAgICAgICAgICBtX3BhZHMu
YWRkKCpzdWNjZXNzb3IsIHBhZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICpzdWNj
ZXNzb3IgPSBwYWQ7CisgICAgfQorICAgIAorICAgIEJsb2NrSW5zZXJ0aW9uU2V0IG1faW5zZXJ0
aW9uU2V0OworICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIEJhc2ljQmxvY2sqPiBtX3BhZHM7Cit9
OworCitib29sIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhHcmFwaCYgZ3JhcGgpCit7Cisg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDcml0aWNhbCBFZGdlIEJyZWFr
aW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPENyaXRpY2FsRWRnZUJyZWFraW5nUGhh
c2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQ
aGFzZV9oCisjZGVmaW5lIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gSW5zZXJ0cyBkdW1teSBi
YXNpYyBibG9ja3MgdG8gYnJlYWsgY3JpdGljYWwgZWRnZXMuIEFuIGVkZ2UgQS0+QiBpcworLy8g
Y3JpdGljYWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29ycyBhbmQgQiBoYXMgbXVsdGlwbGUg
cHJlZGVzc29ycy4KKworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoR3JhcGgmKTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxNTI0
MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwyNiArMzEsMTIgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1jbGFz
cyBJbnNlcnRpb24gewotcHVibGljOgotICAgIEluc2VydGlvbigpIHsgfQotICAgIAotICAgIElu
c2VydGlvbihzaXplX3QgaW5kZXgsIE5vZGUqIGVsZW1lbnQpCi0gICAgICAgIDogbV9pbmRleChp
bmRleCkKLSAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KLSAgICBOb2RlKiBl
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9Ci1wcml2YXRlOgotICAgIHNpemVf
dCBtX2luZGV4OwotICAgIE5vZGUqIG1fZWxlbWVudDsKLX07Cit0eXBlZGVmIFdURjo6SW5zZXJ0
aW9uPE5vZGUqPiBJbnNlcnRpb247CiAKIGNsYXNzIEluc2VydGlvblNldCB7CiBwdWJsaWM6CkBA
IC04MSwyMCArNjcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxv
Y2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2luc2VydGlvbnMuc2l6ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBibG9jay0+Z3JvdyhibG9jay0+c2l6ZSgpICsgbV9p
bnNlcnRpb25zLnNpemUoKSk7Ci0gICAgICAgIHNpemVfdCBsYXN0SW5kZXggPSBibG9jay0+c2l6
ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9ucyA9IG1faW5zZXJ0aW9u
cy5zaXplKCk7IGluZGV4SW5JbnNlcnRpb25zLS07KSB7Ci0gICAgICAgICAgICBJbnNlcnRpb24m
IGluc2VydGlvbiA9IG1faW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc107Ci0gICAgICAgICAg
ICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbi5pbmRleCgpICsgaW5kZXhJbkluc2VydGlv
bnM7Ci0gICAgICAgICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyAr
IDE7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJzdElu
ZGV4OykKLSAgICAgICAgICAgICAgICBibG9jay0+YXQoaSkgPSBibG9jay0+YXQoaSAtIGluZGV4
T2Zmc2V0KTsKLSAgICAgICAgICAgIGJsb2NrLT5hdChmaXJzdEluZGV4KSA9IGluc2VydGlvbi5l
bGVtZW50KCk7Ci0gICAgICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4OwotICAgICAgICB9
Ci0gICAgICAgIG1faW5zZXJ0aW9ucy5yZXNpemUoMCk7CisgICAgICAgIGV4ZWN1dGVJbnNlcnRp
b25zKCpibG9jaywgbV9pbnNlcnRpb25zKTsKICAgICB9CiBwcml2YXRlOgogICAgIEdyYXBoJiBt
X2dyYXBoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1
MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03NzMsMTYgKzc3MywxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3BJbmZv
MiA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgQmFz
aWNCbG9jayogdGFrZW5CbG9jaygpCisgICAgQmFzaWNCbG9jayomIHRha2VuQmxvY2soKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOwotICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbyk7CisgICAgICAgIHJldHVybiAq
Yml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZvKTsKICAgICB9CiAgICAgCi0gICAg
QmFzaWNCbG9jayogbm90VGFrZW5CbG9jaygpCisgICAgQmFzaWNCbG9jayomIG5vdFRha2VuQmxv
Y2soKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwotICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbzIpOworICAgICAgICByZXR1cm4gKmJp
dHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbzIpOwogICAgIH0KICAgICAKICAgICBT
d2l0Y2hEYXRhKiBzd2l0Y2hEYXRhKCkKQEAgLTgwNSw3ICs4MDUsNyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2ln
bmVkIGluZGV4KQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCiAg
ICAgewogICAgICAgICBpZiAoaXNTd2l0Y2goKSkgewogICAgICAgICAgICAgaWYgKGluZGV4IDwg
c3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkpCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAK
IAkJMEZEODFBQzUxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUM0MTU0RkIyMkUwMDk4
M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsg
fTsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE1
MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBGRERC
RkE4MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTYxNjY2REZBMzAwQzU1RkVG
IC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi87IH07CisJCTBGRTUwNTU3MTc4N0E4MDYwMEIzNUY4
QyAvKiBJbnNlcnRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLzsgfTsKIAkJ
MTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8q
IFJBTVNpemUuY3BwICovOyB9OwogCQkxNDNGNjEyMDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYx
MUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9ICgpOyB9OyB9OwogCQkxNDY5NDE5MjE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDY5NDE5
MDE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1Miw2ICszNTMsNyBAQAogCQkwRkQ4MUFD
NDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAv
KiBTdHJpbmdQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJpbmdQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU1
NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc2VydGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDM0VFNDE3MUI4MzQ3MDBGREFD
OEQgLyogQnl0ZVNwaW5Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVTcGluTG9jay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFN
U2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSQU1TaXplLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRjYxMUUxNTY1RjBGOTAwREI1MTRB
IC8qIFJBTVNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUkFNU2l6ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzg1LDYgKzc4Nyw3IEBACiAJCQkJQThB
NDcyQkExNTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzJCQjE1
MUE4MjVBMDA0MTIzRkYgLyogSGV4TnVtYmVyLmggKi8sCiAJCQkJQThBNDcyQkMxNTFBODI1QTAw
NDEyM0ZGIC8qIElubGluZUFTTS5oICovLAorCQkJCTBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAv
KiBJbnNlcnRpb24uaCAqLywKIAkJCQlBOEE0NzJCRTE1MUE4MjVBMDA0MTIzRkYgLyogSW50MTZB
cnJheS5oICovLAogCQkJCUE4QTQ3MkJGMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQzMkFycmF5Lmgg
Ki8sCiAJCQkJQThBNDcyQkQxNTFBODI1QTAwNDEyM0ZGIC8qIEludDhBcnJheS5oICovLApAQCAt
MTE4MSw2ICsxMTg0LDcgQEAKIAkJCQlBOEE0NzNFODE1MUE4MjVCMDA0MTIzRkYgLyogTWF0aEV4
dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRUExNTFBODI1QjAwNDEyM0ZGIC8qIE1E
NS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1NDk3QUQxNTg1N0QwMzAwQjVCQzMwIC8qIE1lZGlh
VGltZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NTcxNzg3QTgwNjAwQjM1RjhDIC8qIElu
c2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEYxRDExNTQxNUZGMTFCRTAwMjZFOTA4IC8q
IE1lbW9yeUluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEZEODU1NDcxNjEz
M0UwRTAwQzVCNzA0IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvbkFycmF5QnVmZmVyVmlldy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjNGQkM3MUUxNjFBRjdCRjAwQkI0QkQ0IC8qIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbkhhc2hDb3VudGVkU2V0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0luc2VydGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luc2VydGlv
bi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEluc2VydGlvbl9oCisjZGVmaW5lIEluc2VydGlvbl9oCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5zZXJ0aW9u
IHsKK3B1YmxpYzoKKyAgICBJbnNlcnRpb24oKSB7IH0KKyAgICAKKyAgICBJbnNlcnRpb24oc2l6
ZV90IGluZGV4LCBUIGVsZW1lbnQpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAg
LCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICBUIGVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2VsZW1lbnQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBJbnNlcnRp
b24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXggPCBvdGhlci5t
X2luZGV4OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1faW5kZXg7CisgICAg
VCBtX2VsZW1lbnQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXRWZWN0b3JUeXBlLCB0
eXBlbmFtZSBJbnNlcnRpb25WZWN0b3JUeXBlPgordm9pZCBleGVjdXRlSW5zZXJ0aW9ucyhUYXJn
ZXRWZWN0b3JUeXBlJiB0YXJnZXQsIEluc2VydGlvblZlY3RvclR5cGUmIGluc2VydGlvbnMpCit7
CisgICAgaWYgKCFpbnNlcnRpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHRhcmdl
dC5ncm93KHRhcmdldC5zaXplKCkgKyBpbnNlcnRpb25zLnNpemUoKSk7CisgICAgc2l6ZV90IGxh
c3RJbmRleCA9IHRhcmdldC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaW5kZXhJbkluc2VydGlv
bnMgPSBpbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsKKyAgICAgICAg
c2l6ZV90IGZpcnN0SW5kZXggPSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5pbmRleCgp
ICsgaW5kZXhJbkluc2VydGlvbnM7CisgICAgICAgIHNpemVfdCBpbmRleE9mZnNldCA9IGluZGV4
SW5JbnNlcnRpb25zICsgMTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxhc3RJbmRleDsgLS1p
ID4gZmlyc3RJbmRleDspCisgICAgICAgICAgICB0YXJnZXRbaV0gPSB0YXJnZXRbaSAtIGluZGV4
T2Zmc2V0XTsKKyAgICAgICAgdGFyZ2V0W2ZpcnN0SW5kZXhdID0gaW5zZXJ0aW9uc1tpbmRleElu
SW5zZXJ0aW9uc10uZWxlbWVudCgpOworICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4Owor
ICAgIH0KKyAgICBpbnNlcnRpb25zLnJlc2l6ZSgwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6SW5zZXJ0aW9uOwordXNpbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9uczsK
KworI2VuZGlmIC8vIEluc2VydGlvbl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206182</attachid>
            <date>2013-07-05 19:38:37 -0700</date>
            <delta_ts>2013-07-05 20:27:05 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>41010</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1MywxMSBAQAogCQkwRkREQkZCNjE2NjZFRURB
MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4
RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0
aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi87IH07CisJCTBGRTUwNTU5
MTc4N0FBODkwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhD
IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1NUMxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRn
ZUJyZWFraW5nUGhhc2UuY3BwICovOyB9OworCQkwRkU1MDU1RDE3ODdCMENGMDBCMzVGOEMgLyog
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NUIxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkU1MDU2MDE3ODdCOUMxMDBCMzVGOEMgLyogREZHUGhpUmVkdWN0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFNTA1NUUxNzg3QjlDMTAwQjM1RjhDIC8qIERGR1BoaVJlZHVjdGlvblBoYXNlLmNwcCAq
LzsgfTsKKwkJMEZFNTA1NjExNzg3QjlDMTAwQjM1RjhDIC8qIERGR1BoaVJlZHVjdGlvblBoYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1
RjE3ODdCOUMxMDBCMzVGOEMgLyogREZHUGhpUmVkdWN0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU4NTM0QjE3MjNDREE1MDBC
NjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4RjUg
LyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdh
dGNocG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZFQTBBMDgxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwOUZEMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExODYsMTMgKzExOTEsMTMgQEAKIAkJMEY0NkU2
QjcxNzZGODlEOTAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMU3dpdGNoQ2FzZS5oOyBwYXRoID0gZnRsL0ZUTFN3aXRjaENhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NkU2QzIxNzZGOEE1QjAwRTFGNzU1
IC8qIERGR0xhenlKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0xhenlKU1ZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdMYXp5SlNWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDZFNkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBE
RkdMYXp5SlNWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdMYXp5
SlNWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGNDZFNkVFMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdBbmFseXNpcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBbmFseXNpcy5oOyBwYXRoID0gZGZn
L0RGR0FuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYxMTc3
Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmNwcDsgcGF0aCA9IGRmZy9ERkdOYXR1
cmFsTG9vcHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjQ2RTZGMjE3N0NG
MEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5oOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZENzE3N0NCOEZDMDBFMUY3NTUg
LyogTExWTURpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBMTFZNRGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9MTFZNRGlzYXNz
ZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NkU2RTAxNzdDQzM2
NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExWTURpc2Fzc2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNh
c3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NkU2RTExNzdDQzM2
NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBVRGlzODZEaXNhc3NlbWJsZXIuaDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9VRGlz
ODZEaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NkU2RTIx
NzdDQzM2NjAwRTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBYODZEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1i
bGVyL1g4NkRpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NDZFNkVFMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdBbmFseXNpcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdBbmFseXNpcy5oOyBwYXRoID0gZGZnL0RGR0FuYWx5c2lzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDZFNkYxMTc3Q0YwRDIwMEUxRjc1NSAv
KiBERkdOYXR1cmFsTG9vcHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHTmF0dXJhbExvb3BzLmNwcDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ2RTZGMjE3N0NGMEQyMDBFMUY3NTUgLyog
REZHTmF0dXJhbExvb3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05h
dHVyYWxMb29wcy5oOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyogU291cmNlUHJvdmlk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlUHJvdmlk
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRFMUEwQzE3M0FFRERDMDA3
RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM4NCw2ICsx
Mzg5LDExIEBACiAJCTBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vz
c0RhdGFEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAv
KiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlv
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyMjhFQjE0MzZBQjIzMDAx
OTZDNDggLyogT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRp
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTU4MTc4N0FBODgwMEIz
NUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCbG9ja0lu
c2VydGlvblNldC5oOyBwYXRoID0gZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0Ny
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU1RTE3ODdCOUMxMDBCMzVGOEMgLyog
REZHUGhpUmVkdWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHUGhpUmVkdWN0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1BoaVJlZHVjdGlv
blBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUYxNzg3QjlD
MTAwQjM1RjhDIC8qIERGR1BoaVJlZHVjdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1BoaVJlZHVjdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUGhpUmVk
dWN0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNDkxNzIz
Q0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBwYXRoID0g
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7
IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFiYnJldmlhdGlvbnMuaDsgcGF0
aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yOTY2LDYgKzI5NzYsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4MEEwMDE5NzY1MyAvKiBERkdC
YXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3OTNCRTMwMEJCQjBGMyAvKiBE
RkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3OTNCRTMwMEJCQjBGMyAvKiBE
RkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZH
QmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyog
REZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcg
LyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiArMjk5Niw4IEBACiAJCQkJMEYz
QjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi8sCiAJ
CQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3Bw
ICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRn
ZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJMEZGRkM5NEQxNEVGOTA5NTAw
QzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk0RTE0RUY5MDk1MDBDNzI1
MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyog
REZHRENFUGhhc2UuY3BwICovLApAQCAtMzA2MCw2ICszMDczLDggQEAKIAkJCQkwRjIzNUJFQTE3
MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi8sCiAJCQkJMEZGRkM5
NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0RUY5
MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuaCAqLywKKwkJCQkwRkU1MDU1RTE3ODdCOUMxMDBCMzVG
OEMgLyogREZHUGhpUmVkdWN0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVGMTc4N0I5QzEw
MEIzNUY4QyAvKiBERkdQaGlSZWR1Y3Rpb25QaGFzZS5oICovLAogCQkJCTBGREIyQ0Q3MTc0MkQ4
MDQwMDdCM0MxQiAvKiBERkdQbGFuLmNwcCAqLywKIAkJCQkwRkRCMkNEODE3NDJEODA0MDA3QjND
MUIgLyogREZHUGxhbi5oICovLAogCQkJCTBGQkUwRjZEMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQ
cmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDU5LDcgQEAKIAkJ
CQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJp
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRj
aGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhDIC8qIERG
R0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ4
MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjA3LDcgQEAKIAkJCQkw
Rjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRC
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVt
cFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVGOEMgLyog
REZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0MTM5OTg1
QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcy
QTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2MDA5N0E2
MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAgLTM2Mjgs
NiArMzY0NSw3IEBACiAJCQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1i
bGVyTUlQUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8q
IE1hY3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUw
NTYxMTc4N0I5QzEwMEIzNUY4QyAvKiBERkdQaGlSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEExMDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93
ZXJERkdUb0xMVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgzQzEwMEY4NDcx
MCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC00NDA2LDYg
KzQ0MjQsNyBAQAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYxMDdFQzdFNzAwNjUwNDQ2IC8qIE1hdGhPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTAyMTNFM0QxMjNBNDBDMjAwRDQyMkYzIC8qIE1l
bW9yeVN0YXRpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NUMxNzg3QjBDRjAw
QjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZEMjgxMjcxNzc5M0JFNTAwQkJCMEYzIC8qIERGR0JpbmFyeVN3aXRjaC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkI1NDY3RDE0RjVDRkQ2MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVCRjJGRjE1NjBGMDZB
MDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDQ4MCw2
ICs0NDk5LDcgQEAKIAkJCQkxNDQ2OURFRDEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBT
dHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDREUzQjQzMEU2
QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1
NjAxNzg3QjlDMTAwQjM1RjhDIC8qIERGR1BoaVJlZHVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdFNEVFNzBGMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJl
UmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNF
IC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDE1IEBAIHB1YmxpYzoKICAgICAKICAg
ICBFZGdlIGNoaWxkMVVuY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29yZHNbMF07IH0KICAg
ICAKKyAgICBFZGdlIGp1c3RPbmVDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISFj
aGlsZDEoKSAmJiAhY2hpbGQyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBF
ZGdlKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZShFZGdlIGNoaWxkMSwgRWRn
ZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAgICAgICAgY2hpbGQoMCkgPSBjaGlsZDE7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNp
b24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZD
b3VudGVkPEJhc2ljQmxvYwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXpl
KCk7IH0KICAgICBOb2RlKiYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAg
ICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5v
ZGUqJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9w
ZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFz
dCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6
ZV90IHNpemUpIHsgbV9ub2Rlcy5yZXNpemUoc2l6ZSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUg
REZHQmxvY2tJbnNlcnRpb25TZXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSA8d3Rm
L0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPFJlZlB0cjxCYXNpY0Js
b2NrPiA+IEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitwdWJs
aWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoR3JhcGgmIGdyYXBoKTsKKyAgICB+QmxvY2tJbnNl
cnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGluc2VydChjb25zdCBCbG9ja0luc2VydGlvbiYg
aW5zZXJ0aW9uKTsKKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFz
aWNCbG9jaz4gYmxvY2spOworICAgIEJhc2ljQmxvY2sqIGluc2VydChzaXplX3QgaW5kZXgpOwor
ICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpOworICAgIAor
ICAgIGJvb2wgZXhlY3V0ZSgpOworCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAg
IFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdCbG9ja0luc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJl
YWtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUg
IkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIENyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIENyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBo
LCAiY3JpdGljYWwgZWRnZSBicmVha2luZyIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3Jh
cGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJs
b2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEFuIGVk
Z2UgQS0+QiBpcyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0aXBsZSBzdWNjZXNzb3IgYW5kIEIgaGFz
IG11bHRpcGxlCisgICAgICAgICAgICAvLyBwcmVkZWNlc3NvcnMuIFRodXMgd2UgZmFpbCBlYXJs
eSBpZiB3ZSBkb24ndCBoYXZlIG11bHRpcGxlIHN1Y2Nlc3NvcnMuCisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChibG9jay0+bnVtU3VjY2Vzc29ycygpIDw9IDEpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Js
b2NrKiogc3VjY2Vzc29yID0gJmJsb2NrLT5zdWNjZXNzb3IoaSk7CisgICAgICAgICAgICAgICAg
aWYgKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLnNpemUoKSA8PSAxKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBicmVha0Ny
aXRpY2FsRWRnZShibG9jaywgc3VjY2Vzc29yKTsgCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5leGVjdXRlKCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIHZvaWQgYnJlYWtDcml0aWNhbEVkZ2UoCisgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCwgQmFzaWNCbG9jayoqIHN1Y2Nl
c3NvcikKKyAgICB7CisgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKKyAgICAgICAgCisgICAg
ICAgIEJhc2ljQmxvY2sqIHBhZCA9IG1fcGFkcy5nZXQoKnN1Y2Nlc3Nvcik7CisgICAgICAgIGlm
ICghcGFkKSB7CisgICAgICAgICAgICBwYWQgPSBtX2luc2VydGlvblNldC5pbnNlcnRCZWZvcmUo
KnN1Y2Nlc3Nvcik7CisgICAgICAgICAgICBwYWQtPmFwcGVuZE5vZGUobV9ncmFwaCwgU3BlY05v
bmUsIEp1bXAsIE9wSW5mbygqc3VjY2Vzc29yKSk7CisgICAgICAgICAgICBtX3BhZHMuYWRkKCpz
dWNjZXNzb3IsIHBhZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICpzdWNjZXNzb3Ig
PSBwYWQ7CisgICAgfQorICAgIAorICAgIEJsb2NrSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0
OworICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIEJhc2ljQmxvY2sqPiBtX3BhZHM7Cit9OworCiti
b29sIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2Ft
cGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDcml0aWNhbCBFZGdlIEJyZWFraW5nIFBo
YXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2U+KGdy
YXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNh
bEVkZ2VCcmVha2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZV9o
CisjZGVmaW5lIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gSW5zZXJ0cyBkdW1teSBiYXNpYyBi
bG9ja3MgdG8gYnJlYWsgY3JpdGljYWwgZWRnZXMuIEFuIGVkZ2UgQS0+QiBpcworLy8gY3JpdGlj
YWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29ycyBhbmQgQiBoYXMgbXVsdGlwbGUgcHJlZGVz
c29ycy4KKworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoR3JhcGgmKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxNTI0MzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSwyNiArMzEsMTIgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1jbGFzcyBJbnNl
cnRpb24gewotcHVibGljOgotICAgIEluc2VydGlvbigpIHsgfQotICAgIAotICAgIEluc2VydGlv
bihzaXplX3QgaW5kZXgsIE5vZGUqIGVsZW1lbnQpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkK
LSAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHNp
emVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KLSAgICBOb2RlKiBlbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9Ci1wcml2YXRlOgotICAgIHNpemVfdCBtX2lu
ZGV4OwotICAgIE5vZGUqIG1fZWxlbWVudDsKLX07Cit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPE5v
ZGUqPiBJbnNlcnRpb247CiAKIGNsYXNzIEluc2VydGlvblNldCB7CiBwdWJsaWM6CkBAIC04MSwy
MCArNjcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqIGJs
b2NrKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2luc2VydGlvbnMuc2l6ZSgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBibG9jay0+Z3JvdyhibG9jay0+c2l6ZSgpICsgbV9pbnNlcnRp
b25zLnNpemUoKSk7Ci0gICAgICAgIHNpemVfdCBsYXN0SW5kZXggPSBibG9jay0+c2l6ZSgpOwot
ICAgICAgICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9ucyA9IG1faW5zZXJ0aW9ucy5zaXpl
KCk7IGluZGV4SW5JbnNlcnRpb25zLS07KSB7Ci0gICAgICAgICAgICBJbnNlcnRpb24mIGluc2Vy
dGlvbiA9IG1faW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc107Ci0gICAgICAgICAgICBzaXpl
X3QgZmlyc3RJbmRleCA9IGluc2VydGlvbi5pbmRleCgpICsgaW5kZXhJbkluc2VydGlvbnM7Ci0g
ICAgICAgICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7Ci0g
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJzdEluZGV4OykK
LSAgICAgICAgICAgICAgICBibG9jay0+YXQoaSkgPSBibG9jay0+YXQoaSAtIGluZGV4T2Zmc2V0
KTsKLSAgICAgICAgICAgIGJsb2NrLT5hdChmaXJzdEluZGV4KSA9IGluc2VydGlvbi5lbGVtZW50
KCk7Ci0gICAgICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4OwotICAgICAgICB9Ci0gICAg
ICAgIG1faW5zZXJ0aW9ucy5yZXNpemUoMCk7CisgICAgICAgIGV4ZWN1dGVJbnNlcnRpb25zKCpi
bG9jaywgbV9pbnNlcnRpb25zKTsKICAgICB9CiBwcml2YXRlOgogICAgIEdyYXBoJiBtX2dyYXBo
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1MjQzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03NzMsMTYgKzc3MywxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3BJbmZvMiA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9j
ayogdGFrZW5CbG9jaygpCisgICAgQmFzaWNCbG9jayomIHRha2VuQmxvY2soKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOwotICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbyk7CisgICAgICAgIHJldHVybiAqYml0d2lz
ZV9jYXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZvKTsKICAgICB9CiAgICAgCi0gICAgQmFzaWNC
bG9jayogbm90VGFrZW5CbG9jaygpCisgICAgQmFzaWNCbG9jayomIG5vdFRha2VuQmxvY2soKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwotICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbzIpOworICAgICAgICByZXR1cm4gKmJpdHdpc2Vf
Y2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbzIpOwogICAgIH0KICAgICAKICAgICBTd2l0Y2hE
YXRhKiBzd2l0Y2hEYXRhKCkKQEAgLTgwNSw3ICs4MDUsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCiAgICAgewog
ICAgICAgICBpZiAoaXNTd2l0Y2goKSkgewogICAgICAgICAgICAgaWYgKGluZGV4IDwgc3dpdGNo
RGF0YSgpLT5jYXNlcy5zaXplKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoaVJlZHVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BoaVJlZHVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhpUmVkdWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQaGlSZWR1Y3Rpb25Q
aGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgor
I2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFBoaVJlZHVjdGlvblBoYXNlIDogcHVi
bGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBQaGlSZWR1Y3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgp
CisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwaGkgcmVkdWN0aW9uIikKKyAgICAgICAgLCBtX2No
YW5nZWQoZmFsc2UpCisgICAgICAgICwgbV9pckNoYW5nZWQoZmFsc2UpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dy
YXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAorICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewor
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2st
PnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBw
aGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGZvcndhcmRQ
aGlDaGlsZHJlbihwaGkpOworICAgICAgICAgICAgICAgICAgICBkZWR1cGxpY2F0ZUNoaWxkcmVu
KHBoaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCFtX2NoYW5nZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtX2lyQ2hh
bmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4
LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAg
IGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAg
ICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICAgICAgbV9pckNoYW5nZWQg
fD0gZm9yd2FyZFBoaUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9pckNoYW5nZWQ7CisgICAg
fQorCitwcml2YXRlOgorICAgIHZvaWQgZm9yd2FyZFBoaUNoaWxkcmVuKE5vZGUqIG5vZGUpCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6
ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlJiBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQo
aSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBtX2NoYW5nZWQgfD0gZm9yd2FyZFBoaUVkZ2UoZWRnZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgYm9vbCBmb3J3YXJkUGhpRWRnZShFZGdlJiBlZGdlKQorICAgIHsK
KyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gUGhpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBFZGdlIG5ld0VkZ2UgPSBlZGdlLT5jaGlsZHJlbi5qdXN0T25lQ2hpbGQoKTsK
KyAgICAgICAgaWYgKCFuZXdFZGdlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBlZGdlID0gbmV3RWRnZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IHZvaWQgZGVkdXBsaWNhdGVDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAgICAg
ICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBp
ZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZWRnZSA9
PSBub2RlKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0p
OworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsg
MTsgaiA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZHJlbi5jaGlsZChqKSA9PSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2Uoai0tKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7CisgICAgYm9vbCBtX2lyQ2hhbmdlZDsK
K307CisKK2Jvb2wgcGVyZm9ybVBoaVJlZHVjdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2Ft
cGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBQaGkgUmVkdWN0aW9uIFBoYXNlIik7Cisg
ICAgcmV0dXJuIHJ1blBoYXNlPFBoaVJlZHVjdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoaVJlZHVjdGlvblBoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlSZWR1Y3Rpb25QaGFzZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGlSZWR1Y3Rp
b25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQaGlSZWR1Y3Rpb25Q
aGFzZV9oCisjZGVmaW5lIERGR1BoaVJlZHVjdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIEVsaW1pbmF0ZXMgYWxsIFBoaSBmdW5j
dGlvbnMgb2YgdGhlIGZvcm06CisvLworLy8gcDogUGhpKHYxLCB2MiwgdjMpCisvLworLy8gV2hl
cmUgYWxsIHZpIGFyZSBlcXVhbCB0byBlaXRoZXIgcCwgeCwgb3IgMCwgZm9yIGFueSB4LiBSZWZl
cmVuY2VzIHRvCisvLyBzdWNoIFBoaSBmdW5jdGlvbnMgYXJlIHJlcGxhY2VkIHdpdGggcmVmZXJl
bmNlcyB0byB4LgorCitib29sIHBlcmZvcm1QaGlSZWR1Y3Rpb24oR3JhcGgmKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdQaGlSZWR1Y3Rpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBA
QAogCQkwRkQ4MUFDNTE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBQzQxNTRGQjIyRTAw
OTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgp
OyB9OyB9OwogCQkwRkREQkZBNzE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJG
QTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZE
REJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVG
RUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLzsgfTsKKwkJMEZFNTA1NTcxNzg3QTgwNjAwQjM1
RjhDIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovOyB9Owog
CQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEg
LyogUkFNU2l6ZS5jcHAgKi87IH07CiAJCTE0M0Y2MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1T
aXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNG
NjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKCk7IH07IH07CiAJCTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGlt
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Njk0
MTkwMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUyLDYgKzM1Myw3IEBACiAJCTBGRDgx
QUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVG
IC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUw
NTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zZXJ0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUMzRUU0MTcxQjgzNDcwMEZE
QUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZVNwaW5Mb2NrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBS
QU1TaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJBTVNpemUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUx
NEEgLyogUkFNU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSQU1TaXpl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODUsNiArNzg3LDcgQEAKIAkJCQlB
OEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJC
MTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1iZXIuaCAqLywKIAkJCQlBOEE0NzJCQzE1MUE4MjVB
MDA0MTIzRkYgLyogSW5saW5lQVNNLmggKi8sCisJCQkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhD
IC8qIEluc2VydGlvbi5oICovLAogCQkJCUE4QTQ3MkJFMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQx
NkFycmF5LmggKi8sCiAJCQkJQThBNDcyQkYxNTFBODI1QTAwNDEyM0ZGIC8qIEludDMyQXJyYXku
aCAqLywKIAkJCQlBOEE0NzJCRDE1MUE4MjVBMDA0MTIzRkYgLyogSW50OEFycmF5LmggKi8sCkBA
IC0xMTgxLDYgKzExODQsNyBAQAogCQkJCUE4QTQ3M0U4MTUxQTgyNUIwMDQxMjNGRiAvKiBNYXRo
RXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFQTE1MUE4MjVCMDA0MTIzRkYgLyog
TUQ1LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDU0OTdBRDE1ODU3RDAzMDBCNUJDMzAgLyogTWVk
aWFUaW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyog
SW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjFEMTE1NDE1RkYxMUJFMDAyNkU5MDgg
LyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RkQ4NTU0NzE2
MTMzRTBFMDBDNUI3MDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uQXJyYXlCdWZmZXJWaWV3Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGM0ZCQzcxRTE2MUFGN0JGMDBCQjRCRDQgLyogTWVtb3J5SW5z
dHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNl
L1dURi93dGYvSW5zZXJ0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5zZXJ0
aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5zZXJ0aW9uX2gKKyNkZWZpbmUgSW5zZXJ0aW9uX2gK
KworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBJbnNlcnRp
b24geworcHVibGljOgorICAgIEluc2VydGlvbigpIHsgfQorICAgIAorICAgIEluc2VydGlvbihz
aXplX3QgaW5kZXgsIFQgZWxlbWVudCkKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAg
ICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIFQgZWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZWxlbWVudDsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEluc2Vy
dGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleCA8IG90aGVy
Lm1faW5kZXg7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzaXplX3QgbV9pbmRleDsKKyAg
ICBUIG1fZWxlbWVudDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRhcmdldFZlY3RvclR5cGUs
IHR5cGVuYW1lIEluc2VydGlvblZlY3RvclR5cGU+Cit2b2lkIGV4ZWN1dGVJbnNlcnRpb25zKFRh
cmdldFZlY3RvclR5cGUmIHRhcmdldCwgSW5zZXJ0aW9uVmVjdG9yVHlwZSYgaW5zZXJ0aW9ucykK
K3sKKyAgICBpZiAoIWluc2VydGlvbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgdGFy
Z2V0Lmdyb3codGFyZ2V0LnNpemUoKSArIGluc2VydGlvbnMuc2l6ZSgpKTsKKyAgICBzaXplX3Qg
bGFzdEluZGV4ID0gdGFyZ2V0LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0
aW9ucyA9IGluc2VydGlvbnMuc2l6ZSgpOyBpbmRleEluSW5zZXJ0aW9ucy0tOykgeworICAgICAg
ICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4
KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKKyAgICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5k
ZXhJbkluc2VydGlvbnMgKyAxOworICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAt
LWkgPiBmaXJzdEluZGV4OykKKyAgICAgICAgICAgIHRhcmdldFtpXSA9IHRhcmdldFtpIC0gaW5k
ZXhPZmZzZXRdOworICAgICAgICB0YXJnZXRbZmlyc3RJbmRleF0gPSBpbnNlcnRpb25zW2luZGV4
SW5JbnNlcnRpb25zXS5lbGVtZW50KCk7CisgICAgICAgIGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7
CisgICAgfQorICAgIGluc2VydGlvbnMucmVzaXplKDApOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwordXNpbmcgV1RGOjpJbnNlcnRpb247Cit1c2luZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25z
OworCisjZW5kaWYgLy8gSW5zZXJ0aW9uX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206183</attachid>
            <date>2013-07-05 20:27:05 -0700</date>
            <delta_ts>2013-07-06 19:33:36 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>39318</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDE1IEBAIHB1YmxpYzoKICAgICAKICAg
ICBFZGdlIGNoaWxkMVVuY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29yZHNbMF07IH0KICAg
ICAKKyAgICBFZGdlIGp1c3RPbmVDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISFj
aGlsZDEoKSAmJiAhY2hpbGQyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBF
ZGdlKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZShFZGdlIGNoaWxkMSwgRWRn
ZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAgICAgICAgY2hpbGQoMCkgPSBjaGlsZDE7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNp
b24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZD
b3VudGVkPEJhc2ljQmxvYwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXpl
KCk7IH0KICAgICBOb2RlKiYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAg
ICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5v
ZGUqJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9w
ZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFz
dCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6
ZV90IHNpemUpIHsgbV9ub2Rlcy5yZXNpemUoc2l6ZSk7IH0KQEAgLTEzMCw2ICsxMzEsMTEgQEAg
c3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIERGR19WQVJJQURJ
Q19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERGR19E
RUZJTkVfQVBQRU5EX05PREUKICAgICAKKyNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0
ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2
YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1w
bGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9uVGVybWluYWwoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSB2
YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVf
RlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVO
RF9OT0RFCisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAg
ewogICAgICAgICBvdXQucHJpbnQoIiMiLCBpbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNTI0MzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDE3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBF
TkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAKKyNkZWZpbmUgREZHX0RF
RklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2
YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQ
cmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVu
ZE5vblRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFt
c0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgeyBcCisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdy
YXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKKyAgICAgICAg
YXBwZW5kKGxhc3QoKSk7IFwKKyAgICAgICAgYXQoc2l6ZSgpIC0gMikgPSByZXN1bHQ7IFwKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVf
RlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVO
RF9OT0RFCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJ
bnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
QmxvY2tJbnNlcnRpb25TZXRfaAorI2RlZmluZSBERkdCbG9ja0luc2VydGlvblNldF9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYg
V1RGOjpJbnNlcnRpb248UmVmUHRyPEJhc2ljQmxvY2s+ID4gQmxvY2tJbnNlcnRpb247CisKK2Ns
YXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChH
cmFwaCYgZ3JhcGgpOworICAgIH5CbG9ja0luc2VydGlvblNldCgpOworICAgIAorICAgIHZvaWQg
aW5zZXJ0KGNvbnN0IEJsb2NrSW5zZXJ0aW9uJiBpbnNlcnRpb24pOworICAgIHZvaWQgaW5zZXJ0
KHNpemVfdCBpbmRleCwgUGFzc1JlZlB0cjxCYXNpY0Jsb2NrPiBibG9jayk7CisgICAgQmFzaWNC
bG9jayogaW5zZXJ0KHNpemVfdCBpbmRleCk7CisgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3Jl
KEJhc2ljQmxvY2sqIGJlZm9yZSk7CisgICAgCisgICAgYm9vbCBleGVjdXRlKCk7CisKK3ByaXZh
dGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgVmVjdG9yPEJsb2NrSW5zZXJ0aW9uLCA4PiBt
X2luc2VydGlvbnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNp
bmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJjcml0aWNhbCBlZGdlIGJyZWFraW5nIikK
KyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gQW4gZWRnZSBBLT5CIGlzIGNyaXRpY2FsIGlmIEEgaGFz
IG11bHRpcGxlIHN1Y2Nlc3NvciBhbmQgQiBoYXMgbXVsdGlwbGUKKyAgICAgICAgICAgIC8vIHBy
ZWRlY2Vzc29ycy4gVGh1cyB3ZSBmYWlsIGVhcmx5IGlmIHdlIGRvbid0IGhhdmUgbXVsdGlwbGUg
c3VjY2Vzc29ycy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrLT5udW1TdWNj
ZXNzb3JzKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0t
OykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqKiBzdWNjZXNzb3IgPSAmYmxvY2stPnN1
Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMu
c2l6ZSgpIDw9IDEpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGJyZWFrQ3JpdGljYWxFZGdlKGJsb2NrLCBzdWNjZXNzb3Ip
OyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1f
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBicmVh
a0NyaXRpY2FsRWRnZSgKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIHN1Y2Nl
c3NvckluZGV4LCBCYXNpY0Jsb2NrKiogc3VjY2Vzc29yKQorICAgIHsKKyAgICAgICAgbV9ncmFw
aC5kZXRocmVhZCgpOworICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogcGFkID0gbV9wYWRz
LmdldCgqc3VjY2Vzc29yKTsKKyAgICAgICAgaWYgKCFwYWQpIHsKKyAgICAgICAgICAgIHBhZCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZSgqc3VjY2Vzc29yKTsKKyAgICAgICAgICAgIHBh
ZC0+YXBwZW5kTm9kZShtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgT3BJbmZvKCpzdWNjZXNzb3Ip
KTsKKyAgICAgICAgICAgIG1fcGFkcy5hZGQoKnN1Y2Nlc3NvciwgcGFkKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgKnN1Y2Nlc3NvciA9IHBhZDsKKyAgICB9CisgICAgCisgICAgQmxv
Y2tJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwg
QmFzaWNCbG9jayo+IG1fcGFkczsKK307CisKK2Jvb2wgcGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFr
aW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
REZHIENyaXRpY2FsIEVkZ2UgQnJlYWtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5n
UGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKyNkZWZpbmUgREZHQ3JpdGljYWxFZGdlQnJl
YWtpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBo
OworCisvLyBJbnNlcnRzIGR1bW15IGJhc2ljIGJsb2NrcyB0byBicmVhayBjcml0aWNhbCBlZGdl
cy4gQW4gZWRnZSBBLT5CIGlzCisvLyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0aXBsZSBzdWNjZXNz
b3JzIGFuZCBCIGhhcyBtdWx0aXBsZSBwcmVkZXNzb3JzLgorCitib29sIHBlcmZvcm1Dcml0aWNh
bEVkZ2VCcmVha2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NyaXRpY2FsRWRnZUJyZWFr
aW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0
aW9uU2V0LmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI2ICszMSwxMiBAQAogI2lm
IEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYv
SW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLWNsYXNzIEluc2VydGlvbiB7Ci1wdWJsaWM6Ci0gICAgSW5zZXJ0
aW9uKCkgeyB9Ci0gICAgCi0gICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVu
dCkKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleDsgfQotICAgIE5vZGUqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7
IH0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1faW5kZXg7Ci0gICAgTm9kZSogbV9lbGVtZW50Owot
fTsKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248Tm9kZSo+IEluc2VydGlvbjsKIAogY2xhc3MgSW5z
ZXJ0aW9uU2V0IHsKIHB1YmxpYzoKQEAgLTgxLDIwICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBpZiAoIW1f
aW5zZXJ0aW9ucy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJsb2NrLT5n
cm93KGJsb2NrLT5zaXplKCkgKyBtX2luc2VydGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgc2l6ZV90
IGxhc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5J
bnNlcnRpb25zID0gbV9pbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsK
LSAgICAgICAgICAgIEluc2VydGlvbiYgaW5zZXJ0aW9uID0gbV9pbnNlcnRpb25zW2luZGV4SW5J
bnNlcnRpb25zXTsKLSAgICAgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uLmlu
ZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9mZnNl
dCA9IGluZGV4SW5JbnNlcnRpb25zICsgMTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBs
YXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQotICAgICAgICAgICAgICAgIGJsb2NrLT5hdChp
KSA9IGJsb2NrLT5hdChpIC0gaW5kZXhPZmZzZXQpOwotICAgICAgICAgICAgYmxvY2stPmF0KGZp
cnN0SW5kZXgpID0gaW5zZXJ0aW9uLmVsZW1lbnQoKTsKLSAgICAgICAgICAgIGxhc3RJbmRleCA9
IGZpcnN0SW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgbV9pbnNlcnRpb25zLnJlc2l6ZSgwKTsK
KyAgICAgICAgZXhlY3V0ZUluc2VydGlvbnMoKmJsb2NrLCBtX2luc2VydGlvbnMpOwogICAgIH0K
IHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3MywxNiArNzczLDE2IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgbV9vcEluZm8yID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYmxvY2sp
OwogICAgIH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbkJsb2NrKCkKKyAgICBCYXNpY0Js
b2NrKiYgdGFrZW5CbG9jaygpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBp
c0p1bXAoKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJ
bmZvKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcElu
Zm8pOwogICAgIH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbkJsb2NrKCkKKyAgICBC
YXNpY0Jsb2NrKiYgbm90VGFrZW5CbG9jaygpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFu
Y2goKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJbmZv
Mik7CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZv
Mik7CiAgICAgfQogICAgIAogICAgIFN3aXRjaERhdGEqIHN3aXRjaERhdGEoKQpAQCAtODA1LDcg
KzgwNSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCisgICAgQmFzaWNCbG9jayomIHN1Y2Nl
c3Nvcih1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CiAg
ICAgICAgICAgICBpZiAoaW5kZXggPCBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNl
dC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFNTQUNvbnZlcnNpb25QaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBo
JiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikKKyAgICAg
ICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
cnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRo
cmVhZGVkQ1BTKTsKKyAgICAgICAgCisgICAgICAgIC8vIEVsaW1pbmF0ZSBhbGwgZHVwbGljYXRl
IG9yIHNlbGYtcG9pbnRpbmcgUGhpIGVkZ2VzLgorICAgICAgICBkbyB7CisgICAgICAgICAgICBt
X2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBw
aGlJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhp
c1twaGlJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGZvcndhcmRQaGlDaGlsZHJlbihwaGkp
OworICAgICAgICAgICAgICAgICAgICBkZWR1cGxpY2F0ZUNoaWxkcmVuKHBoaSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwor
ICAgICAgICAKKyAgICAgICAgLy8gUmVwbGFjZSByZWZlcmVuY2VzIHRvIHRyaXZpYWwgUGhpcyB3
aXRoIHJlZmVyZW5jZXMgdG8gdGhlaXIgY2hpbGRyZW4uCisgICAgICAgIC8vIEFsc28gcGxhY2Ug
bm9uLXRyaXZpYWwgUGhpcyBpbnRvIHRoZSBub2RlcyBsaXN0LCBhbmQgaW5zZXJ0IFVwc2lsb25z
CisgICAgICAgIC8vIGludG8gdGhlIHByZWRlY2Vzc29ycy4gUmVwbGFjZSBhbGwgZWRnZXMgdG8g
R2V0TG9jYWxzIHdpdGggZWRnZXMgdG8KKyAgICAgICAgLy8gdGhlaXIgY2hpbGRyZW4uCisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2st
PnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgIGNh
c2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAg
ICAgICAgZm9yd2FyZFBoaUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgZm9yd2FyZEdldFNldExvY2FsQ2hpbGRyZW4obm9kZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zemUo
KTsgcGhpSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhp
c1twaGlJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKCEhcGhpLT5jaGlsZHJlbi5qdXN0T25l
Q2hpbGQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaSk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwgTW92SGludCwg
T3BJbmZvKHBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBwaGkpOworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FIGluc2VydCBVcHNpbG9uCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CisgICAgICAgICAgICBibG9jay0+cGhpcy5jbGVhcigpOworICAgICAgICB9CisgICAg
fQorCitwcml2YXRlOgorICAgIHZvaWQgZm9yd2FyZFBoaUNoaWxkcmVuKE5vZGUqIG5vZGUpCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6
ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlJiBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQo
aSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBtX2NoYW5nZWQgfD0gZm9yd2FyZFBoaUVkZ2UoZWRnZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgYm9vbCBmb3J3YXJkUGhpRWRnZShFZGdlJiBlZGdlKQorICAgIHsK
KyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgIT0gUGhpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBFZGdlIG5ld0VkZ2UgPSBlZGdlLT5jaGlsZHJlbi5qdXN0T25lQ2hpbGQoKTsK
KyAgICAgICAgaWYgKCFuZXdFZGdlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBlZGdlID0gbmV3RWRnZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IHZvaWQgZGVkdXBsaWNhdGVDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAgICAg
ICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBp
ZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZWRnZSA9
PSBub2RlKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0p
OworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsg
MTsgaiA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZHJlbi5jaGlsZChqKSA9PSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2Uoai0tKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgdm9pZCBmb3J3YXJkR2V0TG9jYWxDaGlsZHJlbihOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwg
Zm9yd2FyZEdldExvY2FsRWRnZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm9yd2FyZEdldFNl
dExvY2FsRWRnZShOb2RlKiwgRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIHdoaWxlIChlZGdl
LT5vcCgpID09IEdldExvY2FsIHx8IGVkZ2UtPm9wKCkgPT0gU2V0TG9jYWwpCisgICAgICAgICAg
ICBlZGdlLnNldE5vZGUoZWRnZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAg
SW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIGJvb2wgbV9jaGFuZ2VkOworfTsKKwor
Ym9vbCBwZXJmb3JtU1NBQ29udmVyc2lvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBTU0EgQ29udmVyc2lvbiBQaGFzZSIpOworICAgIHJl
dHVybiBydW5QaGFzZTxTU0FDb252ZXJzaW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUyNDMyKQor
KysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsNyBAQAogCQkwRkQ4MUFDNTE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJp
dFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwRkREQkZBNzE2NjZERkEzMDBDNTVGRUYgLyog
U3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFt
LmNwcCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3Ry
ZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRE
QkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLzsgfTsKKwkJMEZF
NTA1NTcxNzg3QTgwNjAwQjM1RjhDIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIElu
c2VydGlvbi5oICovOyB9OwogCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjEx
RDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi87IH07CiAJCTE0M0Y2MTIwMTU2NUYw
RjkwMERCNTE0QSAvKiBSQU1TaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTE0Njk0MTkyMTZFQUFGNkQwMDI0
RTE0NiAvKiBSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0Njk0MTkwMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUyLDYg
KzM1Myw3IEBACiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
cmluZ1ByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJG
QTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zZXJ0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFEMTU2
NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJBTVNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNG
NjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSQU1TaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODUs
NiArNzg3LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaFRyYWl0cy5o
ICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1iZXIuaCAqLywKIAkJ
CQlBOEE0NzJCQzE1MUE4MjVBMDA0MTIzRkYgLyogSW5saW5lQVNNLmggKi8sCisJCQkJMEZFNTA1
NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovLAogCQkJCUE4QTQ3MkJFMTUxQTgy
NUEwMDQxMjNGRiAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQThBNDcyQkYxNTFBODI1QTAwNDEy
M0ZGIC8qIEludDMyQXJyYXkuaCAqLywKIAkJCQlBOEE0NzJCRDE1MUE4MjVBMDA0MTIzRkYgLyog
SW50OEFycmF5LmggKi8sCkBAIC0xMTgxLDYgKzExODQsNyBAQAogCQkJCUE4QTQ3M0U4MTUxQTgy
NUIwMDQxMjNGRiAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFQTE1
MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDU0OTdBRDE1ODU3
RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1NzE3
ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjFEMTE1
NDE1RkYxMUJFMDAyNkU5MDggLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0RkQ4NTU0NzE2MTMzRTBFMDBDNUI3MDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9u
QXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlGM0ZCQzcxRTE2MUFGN0JGMDBC
QjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCBpbiBIZWFkZXJz
ICovLApJbmRleDogU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9J
bnNlcnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5zZXJ0aW9uX2gKKyNk
ZWZpbmUgSW5zZXJ0aW9uX2gKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBJbnNlcnRpb24geworcHVibGljOgorICAgIEluc2VydGlvbigpIHsgfQorICAg
IAorICAgIEluc2VydGlvbihzaXplX3QgaW5kZXgsIFQgZWxlbWVudCkKKyAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQorICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIFQg
ZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IEluc2VydGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9pbmRleCA8IG90aGVyLm1faW5kZXg7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBz
aXplX3QgbV9pbmRleDsKKyAgICBUIG1fZWxlbWVudDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFRhcmdldFZlY3RvclR5cGUsIHR5cGVuYW1lIEluc2VydGlvblZlY3RvclR5cGU+Cit2b2lkIGV4
ZWN1dGVJbnNlcnRpb25zKFRhcmdldFZlY3RvclR5cGUmIHRhcmdldCwgSW5zZXJ0aW9uVmVjdG9y
VHlwZSYgaW5zZXJ0aW9ucykKK3sKKyAgICBpZiAoIWluc2VydGlvbnMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm47CisgICAgdGFyZ2V0Lmdyb3codGFyZ2V0LnNpemUoKSArIGluc2VydGlvbnMuc2l6
ZSgpKTsKKyAgICBzaXplX3QgbGFzdEluZGV4ID0gdGFyZ2V0LnNpemUoKTsKKyAgICBmb3IgKHNp
emVfdCBpbmRleEluSW5zZXJ0aW9ucyA9IGluc2VydGlvbnMuc2l6ZSgpOyBpbmRleEluSW5zZXJ0
aW9ucy0tOykgeworICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbnNbaW5kZXhJ
bkluc2VydGlvbnNdLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKKyAgICAgICAgc2l6ZV90
IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJzdEluZGV4OykKKyAgICAgICAgICAgIHRhcmdldFtp
XSA9IHRhcmdldFtpIC0gaW5kZXhPZmZzZXRdOworICAgICAgICB0YXJnZXRbZmlyc3RJbmRleF0g
PSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5lbGVtZW50KCk7CisgICAgICAgIGxhc3RJ
bmRleCA9IGZpcnN0SW5kZXg7CisgICAgfQorICAgIGluc2VydGlvbnMucmVzaXplKDApOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpJbnNlcnRpb247Cit1c2luZyBXVEY6
OmV4ZWN1dGVJbnNlcnRpb25zOworCisjZW5kaWYgLy8gSW5zZXJ0aW9uX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206196</attachid>
            <date>2013-07-06 19:33:36 -0700</date>
            <delta_ts>2013-07-06 20:54:10 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44798</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDE1IEBAIHB1YmxpYzoKICAgICAKICAg
ICBFZGdlIGNoaWxkMVVuY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29yZHNbMF07IH0KICAg
ICAKKyAgICBFZGdlIGp1c3RPbmVDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISFj
aGlsZDEoKSAmJiAhY2hpbGQyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBF
ZGdlKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZShFZGdlIGNoaWxkMSwgRWRn
ZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAgICAgICAgY2hpbGQoMCkgPSBjaGlsZDE7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNp
b24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZD
b3VudGVkPEJhc2ljQmxvYwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXpl
KCk7IH0KICAgICBOb2RlKiYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAg
ICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5v
ZGUqJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9w
ZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFz
dCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6
ZV90IHNpemUpIHsgbV9ub2Rlcy5yZXNpemUoc2l6ZSk7IH0KQEAgLTEzMCw2ICsxMzEsMTEgQEAg
c3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIERGR19WQVJJQURJ
Q19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERGR19E
RUZJTkVfQVBQRU5EX05PREUKICAgICAKKyNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0
ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2
YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1w
bGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9uVGVybWluYWwoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSB2
YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVf
RlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVO
RF9OT0RFCisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAg
ewogICAgICAgICBvdXQucHJpbnQoIiMiLCBpbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNTI0MzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDE3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBF
TkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAKKyNkZWZpbmUgREZHX0RF
RklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2
YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQ
cmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVu
ZE5vblRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFt
c0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgeyBcCisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdy
YXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKKyAgICAgICAg
YXBwZW5kKGxhc3QoKSk7IFwKKyAgICAgICAgYXQoc2l6ZSgpIC0gMikgPSByZXN1bHQ7IFwKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVf
RlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVO
RF9OT0RFCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJ
bnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
QmxvY2tJbnNlcnRpb25TZXRfaAorI2RlZmluZSBERkdCbG9ja0luc2VydGlvblNldF9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYg
V1RGOjpJbnNlcnRpb248UmVmUHRyPEJhc2ljQmxvY2s+ID4gQmxvY2tJbnNlcnRpb247CisKK2Ns
YXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChH
cmFwaCYgZ3JhcGgpOworICAgIH5CbG9ja0luc2VydGlvblNldCgpOworICAgIAorICAgIHZvaWQg
aW5zZXJ0KGNvbnN0IEJsb2NrSW5zZXJ0aW9uJiBpbnNlcnRpb24pOworICAgIHZvaWQgaW5zZXJ0
KHNpemVfdCBpbmRleCwgUGFzc1JlZlB0cjxCYXNpY0Jsb2NrPiBibG9jayk7CisgICAgQmFzaWNC
bG9jayogaW5zZXJ0KHNpemVfdCBpbmRleCk7CisgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3Jl
KEJhc2ljQmxvY2sqIGJlZm9yZSk7CisgICAgCisgICAgYm9vbCBleGVjdXRlKCk7CisKK3ByaXZh
dGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgVmVjdG9yPEJsb2NrSW5zZXJ0aW9uLCA4PiBt
X2luc2VydGlvbnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNp
bmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJjcml0aWNhbCBlZGdlIGJyZWFraW5nIikK
KyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gQW4gZWRnZSBBLT5CIGlzIGNyaXRpY2FsIGlmIEEgaGFz
IG11bHRpcGxlIHN1Y2Nlc3NvciBhbmQgQiBoYXMgbXVsdGlwbGUKKyAgICAgICAgICAgIC8vIHBy
ZWRlY2Vzc29ycy4gVGh1cyB3ZSBmYWlsIGVhcmx5IGlmIHdlIGRvbid0IGhhdmUgbXVsdGlwbGUg
c3VjY2Vzc29ycy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrLT5udW1TdWNj
ZXNzb3JzKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0t
OykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqKiBzdWNjZXNzb3IgPSAmYmxvY2stPnN1
Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMu
c2l6ZSgpIDw9IDEpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGJyZWFrQ3JpdGljYWxFZGdlKGJsb2NrLCBzdWNjZXNzb3Ip
OyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1f
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBicmVh
a0NyaXRpY2FsRWRnZSgKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIHN1Y2Nl
c3NvckluZGV4LCBCYXNpY0Jsb2NrKiogc3VjY2Vzc29yKQorICAgIHsKKyAgICAgICAgbV9ncmFw
aC5kZXRocmVhZCgpOworICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogcGFkID0gbV9wYWRz
LmdldCgqc3VjY2Vzc29yKTsKKyAgICAgICAgaWYgKCFwYWQpIHsKKyAgICAgICAgICAgIHBhZCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZSgqc3VjY2Vzc29yKTsKKyAgICAgICAgICAgIHBh
ZC0+YXBwZW5kTm9kZShtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgT3BJbmZvKCpzdWNjZXNzb3Ip
KTsKKyAgICAgICAgICAgIG1fcGFkcy5hZGQoKnN1Y2Nlc3NvciwgcGFkKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgKnN1Y2Nlc3NvciA9IHBhZDsKKyAgICB9CisgICAgCisgICAgQmxv
Y2tJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwg
QmFzaWNCbG9jayo+IG1fcGFkczsKK307CisKK2Jvb2wgcGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFr
aW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
REZHIENyaXRpY2FsIEVkZ2UgQnJlYWtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5n
UGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKyNkZWZpbmUgREZHQ3JpdGljYWxFZGdlQnJl
YWtpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBo
OworCisvLyBJbnNlcnRzIGR1bW15IGJhc2ljIGJsb2NrcyB0byBicmVhayBjcml0aWNhbCBlZGdl
cy4gQW4gZWRnZSBBLT5CIGlzCisvLyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0aXBsZSBzdWNjZXNz
b3JzIGFuZCBCIGhhcyBtdWx0aXBsZSBwcmVkZXNzb3JzLgorCitib29sIHBlcmZvcm1Dcml0aWNh
bEVkZ2VCcmVha2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NyaXRpY2FsRWRnZUJyZWFr
aW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0
aW9uU2V0LmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI2ICszMSwxMiBAQAogI2lm
IEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYv
SW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLWNsYXNzIEluc2VydGlvbiB7Ci1wdWJsaWM6Ci0gICAgSW5zZXJ0
aW9uKCkgeyB9Ci0gICAgCi0gICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVu
dCkKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleDsgfQotICAgIE5vZGUqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7
IH0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1faW5kZXg7Ci0gICAgTm9kZSogbV9lbGVtZW50Owot
fTsKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248Tm9kZSo+IEluc2VydGlvbjsKIAogY2xhc3MgSW5z
ZXJ0aW9uU2V0IHsKIHB1YmxpYzoKQEAgLTgxLDIwICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBpZiAoIW1f
aW5zZXJ0aW9ucy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJsb2NrLT5n
cm93KGJsb2NrLT5zaXplKCkgKyBtX2luc2VydGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgc2l6ZV90
IGxhc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5J
bnNlcnRpb25zID0gbV9pbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsK
LSAgICAgICAgICAgIEluc2VydGlvbiYgaW5zZXJ0aW9uID0gbV9pbnNlcnRpb25zW2luZGV4SW5J
bnNlcnRpb25zXTsKLSAgICAgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uLmlu
ZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9mZnNl
dCA9IGluZGV4SW5JbnNlcnRpb25zICsgMTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBs
YXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQotICAgICAgICAgICAgICAgIGJsb2NrLT5hdChp
KSA9IGJsb2NrLT5hdChpIC0gaW5kZXhPZmZzZXQpOwotICAgICAgICAgICAgYmxvY2stPmF0KGZp
cnN0SW5kZXgpID0gaW5zZXJ0aW9uLmVsZW1lbnQoKTsKLSAgICAgICAgICAgIGxhc3RJbmRleCA9
IGZpcnN0SW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgbV9pbnNlcnRpb25zLnJlc2l6ZSgwKTsK
KyAgICAgICAgZXhlY3V0ZUluc2VydGlvbnMoKmJsb2NrLCBtX2luc2VydGlvbnMpOwogICAgIH0K
IHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3MywxNiArNzczLDE2IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgbV9vcEluZm8yID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYmxvY2sp
OwogICAgIH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbkJsb2NrKCkKKyAgICBCYXNpY0Js
b2NrKiYgdGFrZW5CbG9jaygpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBp
c0p1bXAoKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJ
bmZvKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcElu
Zm8pOwogICAgIH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbkJsb2NrKCkKKyAgICBC
YXNpY0Jsb2NrKiYgbm90VGFrZW5CbG9jaygpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFu
Y2goKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJbmZv
Mik7CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZv
Mik7CiAgICAgfQogICAgIAogICAgIFN3aXRjaERhdGEqIHN3aXRjaERhdGEoKQpAQCAtODA1LDcg
KzgwNSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCisgICAgQmFzaWNCbG9jayomIHN1Y2Nl
c3Nvcih1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CiAg
ICAgICAgICAgICBpZiAoaW5kZXggPCBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNl
dC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFNTQUNvbnZlcnNpb25QaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBo
JiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikKKyAgICAg
ICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
cnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRo
cmVhZGVkQ1BTKTsKKyAgICAgICAgCisgICAgICAgIC8vIEVsaW1pbmF0ZSBhbGwgZHVwbGljYXRl
IG9yIHNlbGYtcG9pbnRpbmcgUGhpIGVkZ2VzLgorICAgICAgICBkbyB7CisgICAgICAgICAgICBt
X2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBw
aGlJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhp
c1twaGlJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGZvcndhcmRQaGlDaGlsZHJlbihwaGkp
OworICAgICAgICAgICAgICAgICAgICBkZWR1cGxpY2F0ZUNoaWxkcmVuKHBoaSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwor
ICAgICAgICAKKyAgICAgICAgLy8gSW5zZXJ0IFVwc2lsb25zIGFuZCBjb3B5IFBoaXMgaW50byB0
aGUgbWFpbiBub2RlcyBsaXN0IHJhdGhlciB0aGFuIHRoZQorICAgICAgICAvLyBzcGVjaWFsIHBo
aSBsaXN0LiBEbyB0aGlzIGJlZm9yZSBmb3J3YXJkaW5nIGFsbCByZWZlcmVuY2VzIGJlY2F1c2Ug
d2UKKyAgICAgICAgLy8gd2FudCB0aGUgVXBzaWxvbiByZWZlcmVuY2VzIHRvIGdldCBmb3J3YXJk
ZWQuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXgg
PSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogcGhpID0gYmxvY2stPnBoaXNbcGhpSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghIXBo
aS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBwaGktPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIHBoaSA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydCgwLCBTcGVjTm9uZSwgUGhpKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBPcElu
Zm8odmFyaWFibGUpLCBwaGkpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tpXTsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBwcmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQocGhpLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgY2hpbGQgPSBmb3J3YXJkKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGNoaWxkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBwaGktPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3ItPmFwcGVuZE5vblRl
cm1pbmFsKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFVwc2ls
b24sIE9wSW5mbyhwaGkpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBSZXBsYWNlIHJlZmVyZW5jZXMgdG8g
dHJpdmlhbCBQaGlzIHdpdGggcmVmZXJlbmNlcyB0byB0aGVpciBjaGlsZHJlbi4KKyAgICAgICAg
Ly8gQWxzbyBkbyBmb3J3YXJkaW5nIG92ZXIgR2V0TG9jYWwvU2V0TG9jYWwgcGFpcnMuCisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2st
PnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRSBjb252ZXJ0IHRoaXMgdG8gYSBQaGFudG9tLCB1bmxlc3MgaXQncyBhIGNhcHR1
cmVkCisgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlLCBpbiB3aGljaCBjYXNlIGRvIG5v
dGhpbmcuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIGZvcndhcmRDaGlsZHJlbihub2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIEZJWE1FOiBmb3IgYWxsIFNldExvY2FsL0dldExvY2FsL0ZsdXNoLCBk
byBhcyBmb2xsb3dzOgorICAgICAgICAvLyBTZXRMb2NhbCBiZWNvbWVzIE1vdkhpbnRBbmRDaGVj
ayB1bmxlc3MgaXQncyBmbHVzaGVkIG9yIGNhcHR1cmVkLgorICAgICAgICAvLyBHZXRMb2NhbCBk
aWVzIHVubGVzcyBpdCdzIGNhcHR1cmVkLgorICAgICAgICAvLyBGbHVzaCBkaWVzLgorICAgICAg
ICAKKyAgICAgICAgLy8gRnJlZSBhbGwgcGhpcyBhbmQgcmVzZXQgdmFyaWFibGVzIHZlY3RvcnMu
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBi
bG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgICAgIG1fZ3JhcGgu
bV9hbGxvY2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOworICAgICAgICAgICAgYmxv
Y2stPnBoaXMuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuY2xl
YXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuY2xlYXIoKTsKKyAgICAg
ICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52
YWx1ZXNBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ncmFw
aC5tX2Zvcm0gPSBTU0E7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZm9yd2FyZFBoaUNo
aWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlJiBlZGdlID0g
bm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gZm9yd2FyZEVkZ2Uo
ZWRnZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBmb3J3YXJkQ2hpbGRyZW4o
Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3Jh
cGgsIG5vZGUsIGZvcndhcmRHZXRMb2NhbEVkZ2UpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBm
b3J3YXJkKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAg
ICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+anVzdE9uZUNoaWxkKCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZWRnZS5ub2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIEdldExvY2FsOgorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9v
bCBmb3J3YXJkRWRnZShFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSogbmV3Tm9kZSA9
IGZvcndhcmQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAobmV3Tm9kZSA9PSBlZGdlLm5vZGUo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG5ld05v
ZGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmb3J3YXJk
RWRnZShOb2RlKiwgRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIGZvcndhcmRFZGdlKGVkZ2Up
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlZHVwbGljYXRlQ2hpbGRyZW4oTm9kZSogbm9kZSkK
KyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpT
aXplOyArK2kpIHsKKyAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxk
KGkpOworICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgaWYgKGVkZ2UgPT0gbm9kZSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLnJlbW92ZUVkZ2UoaS0tKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2opIHsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGRyZW4uY2hpbGQoaikgPT0gZWRnZSkgeworICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGotLSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIEluc2VydGlvblNldCBtX2luc2Vy
dGlvblNldDsKKyAgICBib29sIG1fY2hhbmdlZDsKK307CisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZl
cnNpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9u
KCJERkcgU1NBIENvbnZlcnNpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U1NBQ29u
dmVyc2lvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorI2RlZmluZSBERkdT
U0FDb252ZXJzaW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBHcmFwaDsKKworLy8gQ29udmVydCBUaHJlYWRlZENQUyBmb3JtIGludG8gU1NBIGZvcm0uIFRo
aXMgcmVzdWx0cyBpbiBhIGZvcm0gdGhhdCBoYXM6CisvLworLy8gLSBSb3VnaGx5IG1pbmltYWwg
UGhpJ3MuIFdlIHVzZSB0aGUgQXljb2NrICYgSG9yc3Bvb2wgZml4cG9pbnQgZm9yCisvLyAgIGNv
bnZlcnRpbmcgdGhlIENQUyBtYXhpbWFsIFBoaXMgaW50byBTU0EgbWluaW1hbCBQaGlzLCB3aXRo
IHRoZSBjYXZlYXQKKy8vICAgdGhhdCBpcnJlZHVjaWJsZSBjb250cm9sIGZsb3cgbWF5IHJlc3Vs
dCBpbiBzb21lIG1pc3NlZCBvcHBvcnR1bml0aWVzCisvLyAgIGZvciBQaGkgcmVkdWN0aW9uLgor
Ly8KKy8vIC0gTm8gdXNlcyBvZiBHZXRMb2NhbC9TZXRMb2NhbCBleGNlcHQgZm9yIGNhcHR1cmVk
IHZhcmlhYmxlcyBhbmQgZmx1c2hlcy4KKy8vICAgQWZ0ZXIgdGhpcywgYW55IHJlbWFpbmluZyBT
ZXRMb2NhbCBtZWFucyBGbHVzaC4gRmx1c2ggbm9kZXMgYXJlCisvLyAgIGVsaW1pbmF0ZWQuIFBo
YW50b21Mb2NhbHMgYmVjb21lIFBoYW50b21zLiBOb2RlcyBtYXkgbWF5IGhhdmUgY2hpbGRyZW4K
Ky8vICAgdGhhdCBhcmUgaW4gYW5vdGhlciBiYXNpYyBibG9jay4KKy8vCisvLyAtIE1vdkhpbnRz
IGFyZSB1c2VkIGZvciBPU1IgaW5mb3JtYXRpb24sIGFuZCBhcmUgdGhlbXNlbHZlcyBtaW5pbWFs
LgorLy8gICBBIE1vdkhpbnQgd2lsbCBvY2N1ciBhdCBzb21lIHBvaW50IGFmdGVyIHRoZSBhc3Np
Z25pbmcsIGFuZCBhdCBQaGkKKy8vICAgcG9pbnRzLgorLy8KKy8vIC0gVW5saWtlIGNvbnZlbnRp
b25hbCBTU0EgaW4gd2hpY2ggUGhpIGZ1bmN0aW9ucyByZWZlciB0byBwcmVkZWNlc3NvcnMKKy8v
ICAgYW5kIHZhbHVlcywgb3VyIFNTQSB1c2VzIFVwc2lsb24gZnVuY3Rpb25zIHRvIGluZGljYXRl
IHZhbHVlcyBpbgorLy8gICBwcmVkZWNlc3NvcnMuIEEgbWVyZ2Ugd2lsbCBsb29rIGxpa2U6Cisv
LworLy8gICBsYWJlbEE6CisvLyAgICAgICBhOiBVcHNpbG9uKCRjKQorLy8gICAgICAgSnVtcChs
YWJlbEMpCisvLworLy8gICBsYWJlbEI6CisvLyAgICAgICBiOiBVcHNpbG9uKCRjKQorLy8gICAg
ICAgSnVtcChsYWJlbEMpCisvLworLy8gICBsYWJlbEM6CisvLyAgICAgICBjOiBQaGkoKQorLy8K
Ky8vICAgTm90ZSB0aGF0IHRoZSBQaGkgaGFzIG5vIGNoaWxkcmVuLCBidXQgdGhlIHByZWRlY2Vz
c29ycyBoYXZlIFVwc2lsb25zCisvLyAgIHRoYXQgaGF2ZSBhIHdlYWsgcmVmZXJlbmNlIHRvIHRo
ZSBQaGkgKCRjIGluc3RlYWQgb2YgQGM7IHdlIHN0b3JlIGl0CisvLyAgIGluIHRoZSBPcEluZm8g
cmF0aGVyIHRoYW4gdGhlIEFkamFjZW5jeUxpc3QpLgorLy8KKy8vICAgRnVuIGZhY3Q6IFVwc2ls
b24gaXMgc28gbmFtZWQgYmVjYXVzZSBpdCBjb21lcyBiZWZvcmUgUGhpIGluIHRoZQorLy8gICBh
bHBoYWJldC4gSXQgY2FuIGJlIHdyaXR0ZW4gYXMgIlkiLgorCitib29sIHBlcmZvcm1TU0FDb252
ZXJzaW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKwpJ
bmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
NTI0MzIpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAJCTBGRDgxQUM1MTU0RkIyMkUwMDk4M0U3MiAv
KiBGYXN0Qml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQ4MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTBGRERCRkE3MTY2NkRGQTMwMEM1
NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJp
bnRTdHJlYW0uY3BwICovOyB9OwogCQkwRkREQkZBODE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5n
UHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovOyB9
OworCQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1NjE3ODdBODAyMDBCMzVG
OEMgLyogSW5zZXJ0aW9uLmggKi87IH07CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBS
QU1TaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsKIAkJMTQzRjYx
MjAxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXpl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMTQ2OTQxOTIxNkVB
QUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2OTQxOTAxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BU
aW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0zNTIsNiArMzUzLDcgQEAKIAkJMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRW
ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdEJpdFZlY3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYg
LyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3RyaW5nUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nUHJpbnRTdHJlYW0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnNlcnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFQzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCeXRlU3BpbkxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQz
RjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTc4NSw2ICs3ODcsNyBAQAogCQkJCUE4QTQ3MkJBMTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNo
VHJhaXRzLmggKi8sCiAJCQkJQThBNDcyQkIxNTFBODI1QTAwNDEyM0ZGIC8qIEhleE51bWJlci5o
ICovLAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCAqLywKKwkJ
CQkwRkU1MDU1NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi8sCiAJCQkJQThBNDcy
QkUxNTFBODI1QTAwNDEyM0ZGIC8qIEludDE2QXJyYXkuaCAqLywKIAkJCQlBOEE0NzJCRjE1MUE4
MjVBMDA0MTIzRkYgLyogSW50MzJBcnJheS5oICovLAogCQkJCUE4QTQ3MkJEMTUxQTgyNUEwMDQx
MjNGRiAvKiBJbnQ4QXJyYXkuaCAqLywKQEAgLTExODEsNiArMTE4NCw3IEBACiAJCQkJQThBNDcz
RTgxNTFBODI1QjAwNDEyM0ZGIC8qIE1hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3M0VBMTUxQTgyNUIwMDQxMjNGRiAvKiBNRDUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNENTQ5
N0FEMTU4NTdEMDMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RTUwNTU3MTc4N0E4MDYwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTRGMUQxMTU0MTVGRjExQkUwMDI2RTkwOCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTRGRDg1NTQ3MTYxMzNFMEUwMEM1QjcwNCAvKiBNZW1vcnlJbnN0cnVt
ZW50YXRpb25BcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzRkJDNzFFMTYx
QUY3QkYwMEJCNEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoQ291bnRlZFNldC5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
VEYvd3RmL0luc2VydGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbnNlcnRp
b25faAorI2RlZmluZSBJbnNlcnRpb25faAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2NsYXNzIEluc2VydGlvbiB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uKCkg
eyB9CisgICAgCisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorICAgICAg
ICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9
CisgICAgVCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgSW5zZXJ0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2luZGV4IDwgb3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIHNpemVfdCBtX2luZGV4OworICAgIFQgbV9lbGVtZW50OworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVGFyZ2V0VmVjdG9yVHlwZSwgdHlwZW5hbWUgSW5zZXJ0aW9uVmVjdG9yVHlwZT4K
K3ZvaWQgZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYgdGFyZ2V0LCBJbnNlcnRp
b25WZWN0b3JUeXBlJiBpbnNlcnRpb25zKQoreworICAgIGlmICghaW5zZXJ0aW9ucy5zaXplKCkp
CisgICAgICAgIHJldHVybjsKKyAgICB0YXJnZXQuZ3Jvdyh0YXJnZXQuc2l6ZSgpICsgaW5zZXJ0
aW9ucy5zaXplKCkpOworICAgIHNpemVfdCBsYXN0SW5kZXggPSB0YXJnZXQuc2l6ZSgpOworICAg
IGZvciAoc2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gaW5zZXJ0aW9ucy5zaXplKCk7IGluZGV4
SW5JbnNlcnRpb25zLS07KSB7CisgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9u
c1tpbmRleEluSW5zZXJ0aW9uc10uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOworICAgICAg
ICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQorICAgICAgICAgICAg
dGFyZ2V0W2ldID0gdGFyZ2V0W2kgLSBpbmRleE9mZnNldF07CisgICAgICAgIHRhcmdldFtmaXJz
dEluZGV4XSA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmVsZW1lbnQoKTsKKyAgICAg
ICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleDsKKyAgICB9CisgICAgaW5zZXJ0aW9ucy5yZXNpemUo
MCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Okluc2VydGlvbjsKK3Vz
aW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnM7CisKKyNlbmRpZiAvLyBJbnNlcnRpb25faAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206198</attachid>
            <date>2013-07-06 20:54:10 -0700</date>
            <delta_ts>2013-07-06 21:24:07 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>49266</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDE1IEBAIHB1YmxpYzoKICAgICAKICAg
ICBFZGdlIGNoaWxkMVVuY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29yZHNbMF07IH0KICAg
ICAKKyAgICBFZGdlIGp1c3RPbmVDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISFj
aGlsZDEoKSAmJiAhY2hpbGQyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBF
ZGdlKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZShFZGdlIGNoaWxkMSwgRWRn
ZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAgICAgICAgY2hpbGQoMCkgPSBjaGlsZDE7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNp
b24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZD
b3VudGVkPEJhc2ljQmxvYwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXpl
KCk7IH0KICAgICBOb2RlKiYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAg
ICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5v
ZGUqJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9w
ZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFz
dCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6
ZV90IHNpemUpIHsgbV9ub2Rlcy5yZXNpemUoc2l6ZSk7IH0KQEAgLTEzMCw2ICsxMzEsMTEgQEAg
c3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIERGR19WQVJJQURJ
Q19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERGR19E
RUZJTkVfQVBQRU5EX05PREUKICAgICAKKyNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0
ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2
YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1w
bGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9uVGVybWluYWwoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSB2
YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVf
RlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVO
RF9OT0RFCisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAg
ewogICAgICAgICBvdXQucHJpbnQoIiMiLCBpbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNTI0MzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDE3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBF
TkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAKKyNkZWZpbmUgREZHX0RF
RklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2
YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQ
cmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVu
ZE5vblRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFt
c0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgeyBcCisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdy
YXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKKyAgICAgICAg
YXBwZW5kKGxhc3QoKSk7IFwKKyAgICAgICAgYXQoc2l6ZSgpIC0gMikgPSByZXN1bHQ7IFwKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVf
RlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVO
RF9OT0RFCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJ
bnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
QmxvY2tJbnNlcnRpb25TZXRfaAorI2RlZmluZSBERkdCbG9ja0luc2VydGlvblNldF9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYg
V1RGOjpJbnNlcnRpb248UmVmUHRyPEJhc2ljQmxvY2s+ID4gQmxvY2tJbnNlcnRpb247CisKK2Ns
YXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChH
cmFwaCYgZ3JhcGgpOworICAgIH5CbG9ja0luc2VydGlvblNldCgpOworICAgIAorICAgIHZvaWQg
aW5zZXJ0KGNvbnN0IEJsb2NrSW5zZXJ0aW9uJiBpbnNlcnRpb24pOworICAgIHZvaWQgaW5zZXJ0
KHNpemVfdCBpbmRleCwgUGFzc1JlZlB0cjxCYXNpY0Jsb2NrPiBibG9jayk7CisgICAgQmFzaWNC
bG9jayogaW5zZXJ0KHNpemVfdCBpbmRleCk7CisgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3Jl
KEJhc2ljQmxvY2sqIGJlZm9yZSk7CisgICAgCisgICAgYm9vbCBleGVjdXRlKCk7CisKK3ByaXZh
dGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgVmVjdG9yPEJsb2NrSW5zZXJ0aW9uLCA4PiBt
X2luc2VydGlvbnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNp
bmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJjcml0aWNhbCBlZGdlIGJyZWFraW5nIikK
KyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gQW4gZWRnZSBBLT5CIGlzIGNyaXRpY2FsIGlmIEEgaGFz
IG11bHRpcGxlIHN1Y2Nlc3NvciBhbmQgQiBoYXMgbXVsdGlwbGUKKyAgICAgICAgICAgIC8vIHBy
ZWRlY2Vzc29ycy4gVGh1cyB3ZSBmYWlsIGVhcmx5IGlmIHdlIGRvbid0IGhhdmUgbXVsdGlwbGUg
c3VjY2Vzc29ycy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrLT5udW1TdWNj
ZXNzb3JzKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0t
OykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqKiBzdWNjZXNzb3IgPSAmYmxvY2stPnN1
Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMu
c2l6ZSgpIDw9IDEpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGJyZWFrQ3JpdGljYWxFZGdlKGJsb2NrLCBzdWNjZXNzb3Ip
OyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1f
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBicmVh
a0NyaXRpY2FsRWRnZSgKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIHN1Y2Nl
c3NvckluZGV4LCBCYXNpY0Jsb2NrKiogc3VjY2Vzc29yKQorICAgIHsKKyAgICAgICAgbV9ncmFw
aC5kZXRocmVhZCgpOworICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogcGFkID0gbV9wYWRz
LmdldCgqc3VjY2Vzc29yKTsKKyAgICAgICAgaWYgKCFwYWQpIHsKKyAgICAgICAgICAgIHBhZCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZSgqc3VjY2Vzc29yKTsKKyAgICAgICAgICAgIHBh
ZC0+YXBwZW5kTm9kZShtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgT3BJbmZvKCpzdWNjZXNzb3Ip
KTsKKyAgICAgICAgICAgIG1fcGFkcy5hZGQoKnN1Y2Nlc3NvciwgcGFkKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgKnN1Y2Nlc3NvciA9IHBhZDsKKyAgICB9CisgICAgCisgICAgQmxv
Y2tJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwg
QmFzaWNCbG9jayo+IG1fcGFkczsKK307CisKK2Jvb2wgcGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFr
aW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
REZHIENyaXRpY2FsIEVkZ2UgQnJlYWtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5n
UGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKyNkZWZpbmUgREZHQ3JpdGljYWxFZGdlQnJl
YWtpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBo
OworCisvLyBJbnNlcnRzIGR1bW15IGJhc2ljIGJsb2NrcyB0byBicmVhayBjcml0aWNhbCBlZGdl
cy4gQW4gZWRnZSBBLT5CIGlzCisvLyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0aXBsZSBzdWNjZXNz
b3JzIGFuZCBCIGhhcyBtdWx0aXBsZSBwcmVkZXNzb3JzLgorCitib29sIHBlcmZvcm1Dcml0aWNh
bEVkZ2VCcmVha2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NyaXRpY2FsRWRnZUJyZWFr
aW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0
aW9uU2V0LmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI2ICszMSwxMiBAQAogI2lm
IEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYv
SW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLWNsYXNzIEluc2VydGlvbiB7Ci1wdWJsaWM6Ci0gICAgSW5zZXJ0
aW9uKCkgeyB9Ci0gICAgCi0gICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVu
dCkKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleDsgfQotICAgIE5vZGUqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7
IH0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1faW5kZXg7Ci0gICAgTm9kZSogbV9lbGVtZW50Owot
fTsKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248Tm9kZSo+IEluc2VydGlvbjsKIAogY2xhc3MgSW5z
ZXJ0aW9uU2V0IHsKIHB1YmxpYzoKQEAgLTgxLDIwICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBpZiAoIW1f
aW5zZXJ0aW9ucy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJsb2NrLT5n
cm93KGJsb2NrLT5zaXplKCkgKyBtX2luc2VydGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgc2l6ZV90
IGxhc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5J
bnNlcnRpb25zID0gbV9pbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsK
LSAgICAgICAgICAgIEluc2VydGlvbiYgaW5zZXJ0aW9uID0gbV9pbnNlcnRpb25zW2luZGV4SW5J
bnNlcnRpb25zXTsKLSAgICAgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uLmlu
ZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9mZnNl
dCA9IGluZGV4SW5JbnNlcnRpb25zICsgMTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBs
YXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQotICAgICAgICAgICAgICAgIGJsb2NrLT5hdChp
KSA9IGJsb2NrLT5hdChpIC0gaW5kZXhPZmZzZXQpOwotICAgICAgICAgICAgYmxvY2stPmF0KGZp
cnN0SW5kZXgpID0gaW5zZXJ0aW9uLmVsZW1lbnQoKTsKLSAgICAgICAgICAgIGxhc3RJbmRleCA9
IGZpcnN0SW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgbV9pbnNlcnRpb25zLnJlc2l6ZSgwKTsK
KyAgICAgICAgZXhlY3V0ZUluc2VydGlvbnMoKmJsb2NrLCBtX2luc2VydGlvbnMpOwogICAgIH0K
IHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3MywxNiArNzczLDE2IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgbV9vcEluZm8yID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYmxvY2sp
OwogICAgIH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbkJsb2NrKCkKKyAgICBCYXNpY0Js
b2NrKiYgdGFrZW5CbG9jaygpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBp
c0p1bXAoKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJ
bmZvKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcElu
Zm8pOwogICAgIH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbkJsb2NrKCkKKyAgICBC
YXNpY0Jsb2NrKiYgbm90VGFrZW5CbG9jaygpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFu
Y2goKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJbmZv
Mik7CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZv
Mik7CiAgICAgfQogICAgIAogICAgIFN3aXRjaERhdGEqIHN3aXRjaERhdGEoKQpAQCAtODA1LDcg
KzgwNSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCisgICAgQmFzaWNCbG9jayomIHN1Y2Nl
c3Nvcih1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CiAg
ICAgICAgICAgICBpZiAoaW5kZXggPCBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNl
dC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFNTQUNvbnZlcnNpb25QaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBo
JiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikKKyAgICAg
ICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
cnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRo
cmVhZGVkQ1BTKTsKKyAgICAgICAgCisgICAgICAgIC8vIEVsaW1pbmF0ZSBhbGwgZHVwbGljYXRl
IG9yIHNlbGYtcG9pbnRpbmcgUGhpIGVkZ2VzLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgLy8g
d2UgdHJhbnNmb3JtOgorICAgICAgICAvLworICAgICAgICAvLyBwOiBQaGkoQG4xLCBAbjIsIEBu
MykKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaW50bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
cDogUGhpKEB4KQorICAgICAgICAvLworICAgICAgICAvLyBpZiBlYWNoIEBuaSBpbiB7QG4xLCBA
bjIsIEBuM30gaXMgZWl0aGVyIGVxdWFsIHRvIEBwIHRvIGlzIGVxdWFsCisgICAgICAgIC8vIHRv
IEB4LCBmb3IgZXhhY3RseSBvbmUgb3RoZXIgQHguIEFkZGl0aW9uYWxseSwgdHJpdmlhbCBQaGlz
IChpLmUuCisgICAgICAgIC8vIHA6IFBoaShAeCkpIGFyZSBmb3J3YXJkZWQsIHNvIHRoYXQgaWYg
aGF2ZSBhbiBlZGdlIHRvIHN1Y2ggQHAsIHdlCisgICAgICAgIC8vIHJlcGxhY2UgaXQgd2l0aCBA
eC4gVGhpcyBsb29wIGRvZXMgdGhpcyBmb3IgUGhpcyBvbmx5OyBsYXRlciB3ZSBkbworICAgICAg
ICAvLyBzdWNoIGZvcndhcmRpbmcgZm9yIFBoaSByZWZlcmVuY2VzIGZvdW5kIGluIG90aGVyIG5v
ZGVzLgorICAgICAgICAvLworICAgICAgICAvLyBTZWUgQXljb2NrIGFuZCBIb3JzcG9vbCBpbiBD
QycwMCBmb3IgYSBiZXR0ZXIgZGVzY3JpcHRpb24gb2Ygd2hhdAorICAgICAgICAvLyB3ZSdyZSBk
b2luZyBoZXJlLgorICAgICAgICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2Nr
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yd2FyZFBoaUNoaWxkcmVuKHBoaSk7CisgICAgICAgICAgICAgICAgICAgIGRlZHVwbGlj
YXRlQ2hpbGRyZW4ocGhpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBJbnNlcnQgVXBz
aWxvbnMgYW5kIGNvcHkgUGhpcyBpbnRvIHRoZSBtYWluIG5vZGVzIGxpc3QgcmF0aGVyIHRoYW4g
dGhlCisgICAgICAgIC8vIHNwZWNpYWwgcGhpIGxpc3QuIERvIHRoaXMgYmVmb3JlIGZvcndhcmRp
bmcgYWxsIHJlZmVyZW5jZXMgYmVjYXVzZSB3ZQorICAgICAgICAvLyB3YW50IHRoZSBVcHNpbG9u
IHJlZmVyZW5jZXMgdG8gZ2V0IGZvcndhcmRlZC4gTm90ZSB0aGF0IHRoaXMgc3RpbGwKKyAgICAg
ICAgLy8gbGVhdmVzIGJlaGluZCB0aGUgb2xkIFBoaXMuIFRoZSBvbGQgUGhpcyBoYXZlIFZhcmlh
YmxlQWNjZXNzRGF0YSdzLAorICAgICAgICAvLyB0aGV5IGxpdmUgaW4gdGhlIEJhc2ljQmxvY2s6
OnBoaXMgbGlzdCwgYW5kIHRoZXkgcmVmZXIgdG8gdHdvIG9yIG1vcmUKKyAgICAgICAgLy8gY2hp
bGRyZW4gdGhhdCBhcmUgb3RoZXIgbG9jYWwgb3BzLiBUaGUgbmV3IFBoaXMgbGl2ZSBpbiB0aGUK
KyAgICAgICAgLy8gQmFzaWNCbG9jazo6bV9ub2RlcyBsaXN0LCBoYXZlIFVwc2lsb25zIG9yIFBo
aXMgYXMgY2hpbGRyZW4sIGFuZCBoYXZlCisgICAgICAgIC8vIG5vIFZhcmlhYmxlQWNjZXNzRGF0
YSdzLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBjb25zaWRl
cnMgYWxsIFBoaXMsIGJ1dCB3ZSBtYXkgaGF2ZSBkdXBsaWNhdGUgUGhpcworICAgICAgICAgICAg
Ly8gaW4gY2FzZSBvZiBtb3JlIHRoYW4gdGhyZWUgcHJlZGVjZXNzb3JzLiBIcm0uCisgICAgICAg
ICAgICBDUkFTSCgpOyAvLyBMZWF2ZSB0aGlzIGhlcmUgYmVjYXVzZSB3ZSBoYXZlIG1vcmUgd29y
ayB0byBkby4KKyAgICAgICAgICAgIC8vIFdlIGNvdWxkIGp1c3QgY29uc2lkZXIgdGhlIHZhcmlh
Ymxlc0F0SGVhZC4gRmluZCB0aGUgUGhpLiBJZiBpdCdzCisgICAgICAgICAgICAvLyBhIG5vbi10
cml2aWFsIFBoaSwgdGhlbiBkbyB0aGUgdGhpbmd5LiBPdGhlcndpc2Ugd2UndmUgZ290IG5vdGhp
bmcKKyAgICAgICAgICAgIC8vIHRvIHdvcnJ5IGFib3V0LiBUaG91Z2ggSSdtIG5vdCB0b3RhbGx5
IHN1cmUgYWJvdXQgdGhhdC4gQW5vdGhlcgorICAgICAgICAgICAgLy8gd2F5IHRvIGRvIGl0IGlz
IHRvIHNlYXJjaCB0aGUgUGhpIGxpc3QgYW5kIGlkZW50aWZ5IHdoaWNoIGxvY2FscworICAgICAg
ICAgICAgLy8gbmVlZCBub24tdHJpdmlhbCBwaGlzIGluIHRoaXMgYmxvY2s7IHRoZW4gZ28gYmFj
ayBhbmQgZG8gdGhpbmdzIGZvcgorICAgICAgICAgICAgLy8gdGhvc2UgbG9jYWxzLgorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRl
eF07CisgICAgICAgICAgICAgICAgaWYgKCEhcGhpLT5jaGlsZHJlbi5qdXN0T25lQ2hpbGQoKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHBoaSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydCgw
LCBTcGVjTm9uZSwgUGhpKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQo
CisgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBPcEluZm8odmFyaWFi
bGUpLCBwaGkpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5wcmVk
ZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogY2hpbGQgPSBwcmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocGhp
LT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSA9PSBwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgY2hpbGQgPSBmb3J3YXJkKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGNoaWxkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3ItPmFwcGVuZE5vblRlcm1pbmFsKAor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFVwc2lsb24sIE9wSW5m
byhwaGkpLCBjaGlsZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIFJlcGxhY2UgcmVmZXJlbmNlcyB0byB0cml2aWFsIFBoaXMgd2l0aCByZWZl
cmVuY2VzIHRvIHRoZWlyIGNoaWxkcmVuLgorICAgICAgICAvLyBBbHNvIGRvIGZvcndhcmRpbmcg
b3ZlciBHZXRMb2NhbC9TZXRMb2NhbCBwYWlycy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTsp
CisgICAgICAgICAgICAgICAgZm9yd2FyZENoaWxkcmVuKGJsb2NrLT5hdChub2RlSW5kZXgpKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBTZXRMb2Nh
bCdzIG5lZWQgZmx1c2hpbmcuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpICE9IEZsdXNoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChub2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoIW1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2ZsdXNoZWRMb2NhbE9wV29y
a2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2ZsdXNoZWRMb2NhbE9wcy5j
b250YWlucyhub2RlKSk7CisgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dy
YXBoLCBub2RlLCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gQ29udmVydCBsb2NhbCBvcGVyYXRpb25zOgorICAgICAgICAvLyAtIFNldExvY2Fs
L0dldExvY2FsIG92ZXIgY2FwdHVyZWQgdmFyaWFibGVzIGxvc2UgdGhlaXIgcGhpcy4KKyAgICAg
ICAgLy8gLSBHZXRMb2NhbCBvdmVyIHVuY2FwdHVyZWQgdmFyaWFibGVzIGRpZS4KKyAgICAgICAg
Ly8gLSBTZXRMb2NhbCBlaXRoZXIgc3RheXMgU2V0TG9jYWwsIGlmIGl0J3MgZmx1c2hlZCwgb3Ig
dHVybnMgaW50bworICAgICAgICAvLyAgIE1vdkhpbnRBbmRDaGVjay4KKyAgICAgICAgLy8gLSBG
bHVzaCBsb3NlcyBpdHMgY2hpbGRyZW4gYW5kIHR1cm5zIGludG8gYSBQaGFudG9tIChpLmUuIGl0
IGRpZXMpLgorICAgICAgICAvLyAtIFBoYW50b21Mb2NhbCBiZWNvbWVzIFBoYW50b20uCisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2st
PnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMu
Y29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludEFuZENoZWNrKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZyZWUgYWxsIHBoaXMgYW5kIHJl
c2V0IHZhcmlhYmxlcyB2ZWN0b3JzLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5k
ZXhdKTsKKyAgICAgICAgICAgIGJsb2NrLT5waGlzLmNsZWFyKCk7CisgICAgICAgICAgICBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFyaWFibGVz
QXRUYWlsLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmNsZWFyKCk7
CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmNsZWFyKCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gU1NBOworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIGZvcndhcmRQaGlDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAg
ICAgICAgICAgRWRnZSYgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOworICAgICAgICAg
ICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9j
aGFuZ2VkIHw9IGZvcndhcmRFZGdlKGVkZ2UpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHZvaWQgZm9yd2FyZENoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBERkdfTk9E
RV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBmb3J3YXJkR2V0TG9jYWxFZGdlKTsKKyAg
ICB9CisgICAgCisgICAgTm9kZSogZm9yd2FyZChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
Zm9yICg7OykgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAg
ICBjYXNlIFBoaTogeworICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmp1c3RPbmVD
aGlsZCgpOworICAgICAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVkZ2Uubm9kZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIGNhc2UgU2V0
TG9jYWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5p
c0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGJvb2wgZm9yd2FyZEVkZ2UoRWRnZSYgZWRnZSkKKyAgICB7Cisg
ICAgICAgIE5vZGUqIG5ld05vZGUgPSBmb3J3YXJkKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYg
KG5ld05vZGUgPT0gZWRnZS5ub2RlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGVkZ2Uuc2V0Tm9kZShuZXdOb2RlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZm9yd2FyZEVkZ2UoTm9kZSosIEVkZ2UmIGVkZ2UpCisgICAgeworICAg
ICAgICBmb3J3YXJkRWRnZShlZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWR1cGxpY2F0
ZUNoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlIGVkZ2Ug
PSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChlZGdlID09IG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGktLSk7CisgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgQWRqYWNlbmN5
TGlzdDo6U2l6ZTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkcmVuLmNo
aWxkKGopID09IGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVt
b3ZlRWRnZShqLS0pOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIGFkZEZsdXNoZWRMb2NhbE9wKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAo
bV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1fZmx1c2hlZExvY2FsT3BzLmFkZChub2RlKTsKKyAgICAgICAgbV9mbHVzaGVkTG9j
YWxPcFdvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZEZsdXNoZWRM
b2NhbEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2Nh
bE9wKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25T
ZXQ7CisgICAgSGFzaFNldDxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7CisgICAgVmVjdG9yPE5v
ZGUqPiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7CisgICAgYm9vbCBtX2NoYW5nZWQ7Cit9Owor
Citib29sIHBlcmZvcm1TU0FDb252ZXJzaW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFNTQSBDb252ZXJzaW9uIFBoYXNlIik7CisgICAg
cmV0dXJuIHJ1blBoYXNlPFNTQUNvbnZlcnNpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHU1NBQ29udmVyc2lv
blBoYXNlX2gKKyNkZWZpbmUgREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbnZlcnQgVGhyZWFkZWRDUFMg
Zm9ybSBpbnRvIFNTQSBmb3JtLiBUaGlzIHJlc3VsdHMgaW4gYSBmb3JtIHRoYXQgaGFzOgorLy8K
Ky8vIC0gUm91Z2hseSBtaW5pbWFsIFBoaSdzLiBXZSB1c2UgdGhlIEF5Y29jayAmIEhvcnNwb29s
IGZpeHBvaW50IGZvcgorLy8gICBjb252ZXJ0aW5nIHRoZSBDUFMgbWF4aW1hbCBQaGlzIGludG8g
U1NBIG1pbmltYWwgUGhpcywgd2l0aCB0aGUgY2F2ZWF0CisvLyAgIHRoYXQgaXJyZWR1Y2libGUg
Y29udHJvbCBmbG93IG1heSByZXN1bHQgaW4gc29tZSBtaXNzZWQgb3Bwb3J0dW5pdGllcworLy8g
ICBmb3IgUGhpIHJlZHVjdGlvbi4KKy8vCisvLyAtIE5vIHVzZXMgb2YgR2V0TG9jYWwvU2V0TG9j
YWwgZXhjZXB0IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGZsdXNoZXMuCisvLyAgIEFmdGVy
IHRoaXMsIGFueSByZW1haW5pbmcgU2V0TG9jYWwgbWVhbnMgRmx1c2guIEZsdXNoIG5vZGVzIGFy
ZQorLy8gICBlbGltaW5hdGVkLiBQaGFudG9tTG9jYWxzIGJlY29tZSBQaGFudG9tcy4gTm9kZXMg
bWF5IG1heSBoYXZlIGNoaWxkcmVuCisvLyAgIHRoYXQgYXJlIGluIGFub3RoZXIgYmFzaWMgYmxv
Y2suCisvLworLy8gLSBNb3ZIaW50cyBhcmUgdXNlZCBmb3IgT1NSIGluZm9ybWF0aW9uLCBhbmQg
YXJlIHRoZW1zZWx2ZXMgbWluaW1hbC4KKy8vICAgQSBNb3ZIaW50IHdpbGwgb2NjdXIgYXQgc29t
ZSBwb2ludCBhZnRlciB0aGUgYXNzaWduaW5nLCBhbmQgYXQgUGhpCisvLyAgIHBvaW50cy4KKy8v
CisvLyAtIFVubGlrZSBjb252ZW50aW9uYWwgU1NBIGluIHdoaWNoIFBoaSBmdW5jdGlvbnMgcmVm
ZXIgdG8gcHJlZGVjZXNzb3JzCisvLyAgIGFuZCB2YWx1ZXMsIG91ciBTU0EgdXNlcyBVcHNpbG9u
IGZ1bmN0aW9ucyB0byBpbmRpY2F0ZSB2YWx1ZXMgaW4KKy8vICAgcHJlZGVjZXNzb3JzLiBBIG1l
cmdlIHdpbGwgbG9vayBsaWtlOgorLy8KKy8vICAgbGFiZWxBOgorLy8gICAgICAgYTogVXBzaWxv
bigkYykKKy8vICAgICAgIEp1bXAobGFiZWxDKQorLy8KKy8vICAgbGFiZWxCOgorLy8gICAgICAg
YjogVXBzaWxvbigkYykKKy8vICAgICAgIEp1bXAobGFiZWxDKQorLy8KKy8vICAgbGFiZWxDOgor
Ly8gICAgICAgYzogUGhpKCkKKy8vCisvLyAgIE5vdGUgdGhhdCB0aGUgUGhpIGhhcyBubyBjaGls
ZHJlbiwgYnV0IHRoZSBwcmVkZWNlc3NvcnMgaGF2ZSBVcHNpbG9ucworLy8gICB0aGF0IGhhdmUg
YSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgUGhpICgkYyBpbnN0ZWFkIG9mIEBjOyB3ZSBzdG9yZSBp
dAorLy8gICBpbiB0aGUgT3BJbmZvIHJhdGhlciB0aGFuIHRoZSBBZGphY2VuY3lMaXN0KS4KKy8v
CisvLyAgIEZ1biBmYWN0OiBVcHNpbG9uIGlzIHNvIG5hbWVkIGJlY2F1c2UgaXQgY29tZXMgYmVm
b3JlIFBoaSBpbiB0aGUKKy8vICAgYWxwaGFiZXQuIEl0IGNhbiBiZSB3cml0dGVuIGFzICJZIi4K
KworYm9vbCBwZXJmb3JtU1NBQ29udmVyc2lvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1NT
QUNvbnZlcnNpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCQkwRkQ4
MUFDNTE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8q
IEZhc3RCaXRWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9Owog
CQkwRkREQkZBNzE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZB
MzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2
REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3Ry
aW5nUHJpbnRTdHJlYW0uaCAqLzsgfTsKKwkJMEZFNTA1NTcxNzg3QTgwNjAwQjM1RjhDIC8qIElu
c2VydGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovOyB9OwogCQkxNDNGNjEx
RjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6
ZS5jcHAgKi87IH07CiAJCTE0M0Y2MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVG
MEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7
IH07IH07CiAJCTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Njk0MTkwMTZFQUFG
NkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUyLDYgKzM1Myw3IEBACiAJCTBGRDgxQUM0MTU0RkIy
MkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZhc3RCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
REJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1By
aW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTU2MTc4N0E4
MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zZXJ0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBC
eXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJBTVNpemUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFN
U2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSQU1TaXplLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODUsNiArNzg3LDcgQEAKIAkJCQlBOEE0NzJCQTE1
MUE4MjVBMDA0MTIzRkYgLyogSGFzaFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEw
MDQxMjNGRiAvKiBIZXhOdW1iZXIuaCAqLywKIAkJCQlBOEE0NzJCQzE1MUE4MjVBMDA0MTIzRkYg
LyogSW5saW5lQVNNLmggKi8sCisJCQkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2Vy
dGlvbi5oICovLAogCQkJCUE4QTQ3MkJFMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQxNkFycmF5Lmgg
Ki8sCiAJCQkJQThBNDcyQkYxNTFBODI1QTAwNDEyM0ZGIC8qIEludDMyQXJyYXkuaCAqLywKIAkJ
CQlBOEE0NzJCRDE1MUE4MjVBMDA0MTIzRkYgLyogSW50OEFycmF5LmggKi8sCkBAIC0xMTgxLDYg
KzExODQsNyBAQAogCQkJCUE4QTQ3M0U4MTUxQTgyNUIwMDQxMjNGRiAvKiBNYXRoRXh0cmFzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFQTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmggaW4g
SGVhZGVycyAqLywKIAkJCQlDRDU0OTdBRDE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjFEMTE1NDE1RkYxMUJFMDAyNkU5MDggLyogTWVtb3J5
SW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RkQ4NTU0NzE2MTMzRTBFMDBD
NUI3MDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGM0ZCQzcxRTE2MUFGN0JGMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0
aW9uSGFzaENvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYv
SW5zZXJ0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSW5zZXJ0aW9uX2gKKyNkZWZpbmUgSW5zZXJ0aW9uX2gKKworbmFtZXNw
YWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBJbnNlcnRpb24geworcHVi
bGljOgorICAgIEluc2VydGlvbigpIHsgfQorICAgIAorICAgIEluc2VydGlvbihzaXplX3QgaW5k
ZXgsIFQgZWxlbWVudCkKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fZWxl
bWVudChlbGVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIFQgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWxlbWVudDsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEluc2VydGlvbiYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleCA8IG90aGVyLm1faW5kZXg7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzaXplX3QgbV9pbmRleDsKKyAgICBUIG1fZWxl
bWVudDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRhcmdldFZlY3RvclR5cGUsIHR5cGVuYW1l
IEluc2VydGlvblZlY3RvclR5cGU+Cit2b2lkIGV4ZWN1dGVJbnNlcnRpb25zKFRhcmdldFZlY3Rv
clR5cGUmIHRhcmdldCwgSW5zZXJ0aW9uVmVjdG9yVHlwZSYgaW5zZXJ0aW9ucykKK3sKKyAgICBp
ZiAoIWluc2VydGlvbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgdGFyZ2V0Lmdyb3co
dGFyZ2V0LnNpemUoKSArIGluc2VydGlvbnMuc2l6ZSgpKTsKKyAgICBzaXplX3QgbGFzdEluZGV4
ID0gdGFyZ2V0LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9ucyA9IGlu
c2VydGlvbnMuc2l6ZSgpOyBpbmRleEluSW5zZXJ0aW9ucy0tOykgeworICAgICAgICBzaXplX3Qg
Zmlyc3RJbmRleCA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgKyBpbmRl
eEluSW5zZXJ0aW9uczsKKyAgICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2Vy
dGlvbnMgKyAxOworICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJz
dEluZGV4OykKKyAgICAgICAgICAgIHRhcmdldFtpXSA9IHRhcmdldFtpIC0gaW5kZXhPZmZzZXRd
OworICAgICAgICB0YXJnZXRbZmlyc3RJbmRleF0gPSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRp
b25zXS5lbGVtZW50KCk7CisgICAgICAgIGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7CisgICAgfQor
ICAgIGluc2VydGlvbnMucmVzaXplKDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNp
bmcgV1RGOjpJbnNlcnRpb247Cit1c2luZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zOworCisjZW5k
aWYgLy8gSW5zZXJ0aW9uX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206199</attachid>
            <date>2013-07-06 21:24:07 -0700</date>
            <delta_ts>2013-07-07 10:46:10 -0700</delta_ts>
            <desc>even more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54254</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9j
YWxGaXJzdFRpbWUob3BlcmFuZCwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFy
KCkKKyAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IHZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgp
OworICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBmaWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNp
b24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBF
ZGdlIGNoaWxkMVVuY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29yZHNbMF07IH0KICAgICAK
KyAgICBFZGdlIGp1c3RPbmVDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISFjaGls
ZDEoKSAmJiAhY2hpbGQyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBFZGdl
KCk7CisgICAgfQorICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZShFZGdlIGNoaWxkMSwgRWRnZSBj
aGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAgICAgICAgY2hpbGQoMCkgPSBjaGlsZDE7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3Vu
dGVkPEJhc2ljQmxvYwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7
IH0KICAgICBOb2RlKiYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAgICBO
b2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5vZGUq
JiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9wZXJh
dG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFzdCgp
IGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6ZV90
IHNpemUpIHsgbV9ub2Rlcy5yZXNpemUoc2l6ZSk7IH0KQEAgLTEzMCw2ICsxMzEsMTEgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIERGR19WQVJJQURJQ19U
RU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERGR19ERUZJ
TkVfQVBQRU5EX05PREUKICAgICAKKyNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1w
bGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1
ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0
ZVBvc3QgTm9kZSogYXBwZW5kTm9uVGVybWluYWwoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSB2YWx1
ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVO
Q1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9O
T0RFCisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewog
ICAgICAgICBvdXQucHJpbnQoIiMiLCBpbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNTI0MzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDE3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRf
Tk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAKKyNkZWZpbmUgREZHX0RFRklO
RV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1
ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQcmUg
dHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5v
blRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0Nv
bW1hIHZhbHVlUGFyYW1zKSBcCisgICAgeyBcCisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBo
LmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKKyAgICAgICAgYXBw
ZW5kKGxhc3QoKSk7IFwKKyAgICAgICAgYXQoc2l6ZSgpIC0gMikgPSByZXN1bHQ7IFwKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVO
Q1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9O
T0RFCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0lu
c2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Jsb2Nr
SW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChHcmFwaCYgZ3JhcGgpCisgICAgOiBtX2dy
YXBoKGdyYXBoKQoreworfQorCitCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0
KCkgeyB9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChjb25zdCBCbG9ja0luc2Vy
dGlvbiYgaW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoaW5zZXJ0aW9uKTsK
K30KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgUGFzc1Jl
ZlB0cjxCYXNpY0Jsb2NrPiBibG9jaykKK3sKKyAgICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5k
ZXgsIGJsb2NrKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQo
c2l6ZV90IGluZGV4KQoreworICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVm
KG5ldyBCYXNpY0Jsb2NrKAorICAgICAgICBVSU5UX01BWCwKKyAgICAgICAgbV9ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgIG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKSk7CisgICAgaW5z
ZXJ0KGluZGV4LCBibG9jayk7CisgICAgcmV0dXJuIGJsb2NrLmdldCgpOworfQorCitCYXNpY0Js
b2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSkK
K3sKKyAgICByZXR1cm4gaW5zZXJ0KGJsb2NrLT5pbmRleCk7Cit9CisKK2Jvb2wgQmxvY2tJbnNl
cnRpb25TZXQ6OmV4ZWN1dGUoKQoreworICAgIGlmIChtX2luc2VydGlvbnMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0
byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVkIHRvCisgICAgLy8gc29y
dCB0aGVtIGJlZm9yZSBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuCisgICAgc3RkOjpz
b3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworCisgICAgZXhl
Y3V0ZUluc2VydGlvbnMobV9ncmFwaC5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKKyAgICAKKyAg
ICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3Nh
cnkgYnV0IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBn
cm93aW5nLgorICAgIHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVk
IHNvdXJjZUluZGV4ID0gMDsgc291cmNlSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsp
IHsKKyAgICAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tz
b3VyY2VJbmRleCsrXTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEluZGV4KytdID0gYmxvY2s7CisgICAg
fQorICAgIG1fZ3JhcGgubV9ibG9ja3MucmVzaXplKHRhcmdldEluZGV4KTsKKyAgICAKKyAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbaV0tPmluZGV4ID0gaTsKKyAgICAKKyAgICAvLyBBbmQg
ZmluYWxseSwgaW52YWxpZGF0ZSBhbGwgYW5hbHlzZXMgdGhhdCByZWx5IG9uIHRoZSBDRkcuCisg
ICAgbV9ncmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlv
blNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9j
a0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja0lu
c2VydGlvblNldF9oCisjZGVmaW5lIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdH
cmFwaC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBXVEY6Oklu
c2VydGlvbjxSZWZQdHI8QmFzaWNCbG9jaz4gPiBCbG9ja0luc2VydGlvbjsKKworY2xhc3MgQmxv
Y2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0KEdyYXBoJiBn
cmFwaCk7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgdm9pZCBpbnNlcnQo
Y29uc3QgQmxvY2tJbnNlcnRpb24mIGluc2VydGlvbik7CisgICAgdm9pZCBpbnNlcnQoc2l6ZV90
IGluZGV4LCBQYXNzUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrKTsKKyAgICBCYXNpY0Jsb2NrKiBp
bnNlcnQoc2l6ZV90IGluZGV4KTsKKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNC
bG9jayogYmVmb3JlKTsKKyAgICAKKyAgICBib29sIGV4ZWN1dGUoKTsKKworcHJpdmF0ZToKKyAg
ICBHcmFwaCYgbV9ncmFwaDsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5zZXJ0
aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tJbnNlcnRpb25TZXRfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jh
c2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlIDogcHVibGljIFBoYXNl
IHsKK3B1YmxpYzoKKyAgICBDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlKEdyYXBoJiBncmFwaCkK
KyAgICAgICAgOiBQaGFzZShncmFwaCwgImNyaXRpY2FsIGVkZ2UgYnJlYWtpbmciKQorICAgICAg
ICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBy
dW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBBbiBlZGdlIEEtPkIgaXMgY3JpdGljYWwgaWYgQSBoYXMgbXVsdGlw
bGUgc3VjY2Vzc29yIGFuZCBCIGhhcyBtdWx0aXBsZQorICAgICAgICAgICAgLy8gcHJlZGVjZXNz
b3JzLiBUaHVzIHdlIGZhaWwgZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSBtdWx0aXBsZSBzdWNjZXNz
b3JzLgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMo
KSA8PSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayoqIHN1Y2Nlc3NvciA9ICZibG9jay0+c3VjY2Vzc29y
KGkpOworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnByZWRlY2Vzc29ycy5zaXplKCkg
PD0gMSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgYnJlYWtDcml0aWNhbEVkZ2UoYmxvY2ssIHN1Y2Nlc3Nvcik7IAorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9pbnNlcnRp
b25TZXQuZXhlY3V0ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGJyZWFrQ3JpdGlj
YWxFZGdlKAorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgc3VjY2Vzc29ySW5k
ZXgsIEJhc2ljQmxvY2sqKiBzdWNjZXNzb3IpCisgICAgeworICAgICAgICBtX2dyYXBoLmRldGhy
ZWFkKCk7CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBwYWQgPSBtX3BhZHMuZ2V0KCpz
dWNjZXNzb3IpOworICAgICAgICBpZiAoIXBhZCkgeworICAgICAgICAgICAgcGFkID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0QmVmb3JlKCpzdWNjZXNzb3IpOworICAgICAgICAgICAgcGFkLT5hcHBl
bmROb2RlKG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBPcEluZm8oKnN1Y2Nlc3NvcikpOworICAg
ICAgICAgICAgbV9wYWRzLmFkZCgqc3VjY2Vzc29yLCBwYWQpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAqc3VjY2Vzc29yID0gcGFkOworICAgIH0KKyAgICAKKyAgICBCbG9ja0luc2Vy
dGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBCYXNpY0Js
b2NrKj4gbV9wYWRzOworfTsKKworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoR3Jh
cGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ3Jp
dGljYWwgRWRnZSBCcmVha2luZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxDcml0aWNh
bEVkZ2VCcmVha2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0NyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2VfaAorI2RlZmluZSBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8v
IEluc2VydHMgZHVtbXkgYmFzaWMgYmxvY2tzIHRvIGJyZWFrIGNyaXRpY2FsIGVkZ2VzLiBBbiBl
ZGdlIEEtPkIgaXMKKy8vIGNyaXRpY2FsIGlmIEEgaGFzIG11bHRpcGxlIHN1Y2Nlc3NvcnMgYW5k
IEIgaGFzIG11bHRpcGxlIHByZWRlc3NvcnMuCisKK2Jvb2wgcGVyZm9ybUNyaXRpY2FsRWRnZUJy
ZWFraW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFz
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQu
aAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNl
cnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjYgKzMxLDEyIEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRp
b24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAotY2xhc3MgSW5zZXJ0aW9uIHsKLXB1YmxpYzoKLSAgICBJbnNlcnRpb24oKSB7
IH0KLSAgICAKLSAgICBJbnNlcnRpb24oc2l6ZV90IGluZGV4LCBOb2RlKiBlbGVtZW50KQotICAg
ICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCi0gICAg
ewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
OyB9Ci0gICAgTm9kZSogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQotcHJp
dmF0ZToKLSAgICBzaXplX3QgbV9pbmRleDsKLSAgICBOb2RlKiBtX2VsZW1lbnQ7Ci19OwordHlw
ZWRlZiBXVEY6Okluc2VydGlvbjxOb2RlKj4gSW5zZXJ0aW9uOwogCiBjbGFzcyBJbnNlcnRpb25T
ZXQgewogcHVibGljOgpAQCAtODEsMjAgKzY3LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
ZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIGlmICghbV9pbnNlcnRp
b25zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYmxvY2stPmdyb3coYmxv
Y2stPnNpemUoKSArIG1faW5zZXJ0aW9ucy5zaXplKCkpOwotICAgICAgICBzaXplX3QgbGFzdElu
ZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXhJbkluc2VydGlv
bnMgPSBtX2luc2VydGlvbnMuc2l6ZSgpOyBpbmRleEluSW5zZXJ0aW9ucy0tOykgewotICAgICAg
ICAgICAgSW5zZXJ0aW9uJiBpbnNlcnRpb24gPSBtX2luc2VydGlvbnNbaW5kZXhJbkluc2VydGlv
bnNdOwotICAgICAgICAgICAgc2l6ZV90IGZpcnN0SW5kZXggPSBpbnNlcnRpb24uaW5kZXgoKSAr
IGluZGV4SW5JbnNlcnRpb25zOwotICAgICAgICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5k
ZXhJbkluc2VydGlvbnMgKyAxOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGxhc3RJbmRl
eDsgLS1pID4gZmlyc3RJbmRleDspCi0gICAgICAgICAgICAgICAgYmxvY2stPmF0KGkpID0gYmxv
Y2stPmF0KGkgLSBpbmRleE9mZnNldCk7Ci0gICAgICAgICAgICBibG9jay0+YXQoZmlyc3RJbmRl
eCkgPSBpbnNlcnRpb24uZWxlbWVudCgpOwotICAgICAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJ
bmRleDsKLSAgICAgICAgfQotICAgICAgICBtX2luc2VydGlvbnMucmVzaXplKDApOworICAgICAg
ICBleGVjdXRlSW5zZXJ0aW9ucygqYmxvY2ssIG1faW5zZXJ0aW9ucyk7CiAgICAgfQogcHJpdmF0
ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzczLDE2ICs3NzMsMTYgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICBtX29wSW5mbzIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7CiAgICAg
fQogICAgIAotICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2soKQorICAgIEJhc2ljQmxvY2sqJiB0
YWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgp
KTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8pOwor
ICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbyk7CiAg
ICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuQmxvY2soKQorICAgIEJhc2ljQmxv
Y2sqJiBub3RUYWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8yKTsKKyAg
ICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcEluZm8yKTsKICAg
ICB9CiAgICAgCiAgICAgU3dpdGNoRGF0YSogc3dpdGNoRGF0YSgpCkBAIC04MDUsNyArODA1LDcg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVu
c2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKGlzU3dpdGNoKCkpIHsKICAgICAgICAg
ICAgIGlmIChpbmRleCA8IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisj
aW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVi
bGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBTU0FDb252ZXJzaW9uUGhhc2UoR3JhcGgmIGdyYXBo
KQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiU1NBIGNvbnZlcnNpb24iKQorICAgICAgICAsIG1f
aW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgICAgICAsIG1fbm9uVHJpdmlhbFBoaXMoT3BlcmFuZHNM
aWtlLCBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fY2hhbmdl
ZChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEVsaW1pbmF0ZSBhbGwgZHVwbGljYXRlIG9yIHNlbGYtcG9pbnRpbmcg
UGhpIGVkZ2VzLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgLy8gd2UgdHJhbnNmb3JtOgorICAg
ICAgICAvLworICAgICAgICAvLyBwOiBQaGkoQG4xLCBAbjIsIEBuMykKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gaW50bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gcDogUGhpKEB4KQorICAgICAg
ICAvLworICAgICAgICAvLyBpZiBlYWNoIEBuaSBpbiB7QG4xLCBAbjIsIEBuM30gaXMgZWl0aGVy
IGVxdWFsIHRvIEBwIHRvIGlzIGVxdWFsCisgICAgICAgIC8vIHRvIEB4LCBmb3IgZXhhY3RseSBv
bmUgb3RoZXIgQHguIEFkZGl0aW9uYWxseSwgdHJpdmlhbCBQaGlzIChpLmUuCisgICAgICAgIC8v
IHA6IFBoaShAeCkpIGFyZSBmb3J3YXJkZWQsIHNvIHRoYXQgaWYgaGF2ZSBhbiBlZGdlIHRvIHN1
Y2ggQHAsIHdlCisgICAgICAgIC8vIHJlcGxhY2UgaXQgd2l0aCBAeC4gVGhpcyBsb29wIGRvZXMg
dGhpcyBmb3IgUGhpcyBvbmx5OyBsYXRlciB3ZSBkbworICAgICAgICAvLyBzdWNoIGZvcndhcmRp
bmcgZm9yIFBoaSByZWZlcmVuY2VzIGZvdW5kIGluIG90aGVyIG5vZGVzLgorICAgICAgICAvLwor
ICAgICAgICAvLyBTZWUgQXljb2NrIGFuZCBIb3JzcG9vbCBpbiBDQycwMCBmb3IgYSBiZXR0ZXIg
ZGVzY3JpcHRpb24gb2Ygd2hhdAorICAgICAgICAvLyB3ZSdyZSBkb2luZyBoZXJlLgorICAgICAg
ICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0g
YmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBO
b2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlm
IChwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yd2FyZFBoaUNoaWxk
cmVuKHBoaSk7CisgICAgICAgICAgICAgICAgICAgIGRlZHVwbGljYXRlQ2hpbGRyZW4ocGhpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKG1fY2hh
bmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBJbnNlcnQgVXBzaWxvbnMgYW5kIGNvcHkgUGhp
cyBpbnRvIHRoZSBtYWluIG5vZGVzIGxpc3QgcmF0aGVyIHRoYW4gdGhlCisgICAgICAgIC8vIHNw
ZWNpYWwgcGhpIGxpc3QuIERvIHRoaXMgYmVmb3JlIGZvcndhcmRpbmcgYWxsIHJlZmVyZW5jZXMg
YmVjYXVzZSB3ZQorICAgICAgICAvLyB3YW50IHRoZSBVcHNpbG9uIHJlZmVyZW5jZXMgdG8gZ2V0
IGZvcndhcmRlZC4gTm90ZSB0aGF0IHRoaXMgc3RpbGwKKyAgICAgICAgLy8gbGVhdmVzIGJlaGlu
ZCB0aGUgb2xkIFBoaXMuIFRoZSBvbGQgUGhpcyBoYXZlIFZhcmlhYmxlQWNjZXNzRGF0YSdzLAor
ICAgICAgICAvLyB0aGV5IGxpdmUgaW4gdGhlIEJhc2ljQmxvY2s6OnBoaXMgbGlzdCwgYW5kIHRo
ZXkgcmVmZXIgdG8gdHdvIG9yIG1vcmUKKyAgICAgICAgLy8gY2hpbGRyZW4gdGhhdCBhcmUgb3Ro
ZXIgbG9jYWwgb3BzLiBUaGUgbmV3IFBoaXMgbGl2ZSBpbiB0aGUKKyAgICAgICAgLy8gQmFzaWNC
bG9jazo6bV9ub2RlcyBsaXN0LCBoYXZlIFVwc2lsb25zIG9yIFBoaXMgYXMgY2hpbGRyZW4sIGFu
ZCBoYXZlCisgICAgICAgIC8vIG5vIFZhcmlhYmxlQWNjZXNzRGF0YSdzLgorICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgt
LTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggb3BlcmFu
ZHMgaGF2ZSBub24tdHJpdmlhbCBwaGlzIGluIHRoaXMgYmxvY2suCisgICAgICAgICAgICBtX25v
blRyaXZpYWxQaGlzLmZpbGwoZmFsc2UpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJ
bmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07CisgICAgICAgICAgICAgICAgaWYg
KCEhcGhpLT5jaGlsZHJlbi5qdXN0T25lQ2hpbGQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHBo
aS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5p
c0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIG1fbm9uVHJpdmlhbFBoaXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGb3IgYWxsIG5vbi10
cml2aWFsIHBoaXMgaW4gdGhpcyBibG9jaywgaW5zZXJ0IGFuIFVwc2lsb24gaW4gdGhlCisgICAg
ICAgICAgICAvLyBwcmVkZWNlc3NvciBhbmQgYSBuZXcgU1NBIFBoaSBpbiB0aGlzIGJsb2NrLiBO
b3RlIHRoYXQgd2UgbWF5IGhhdmUKKyAgICAgICAgICAgIC8vIFBoaSdzIHBvaW50aW5nIGF0IG90
aGVyIFBoaSdzLiBFYWNoIFBoaSBiZWhhdmVzIGFzIGl0cyBvd24gbm9uLVNTQQorICAgICAgICAg
ICAgLy8gdmFyaWFibGUgZHVyaW5nIGRlLVNTQS1pZmljYXRpb24uCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX25vblRyaXZpYWxQaGlzLnNpemUoKTsgaS0tOykgeworICAgICAgICAg
ICAgICAgIGlmICghbV9ub25Ucml2aWFsUGhpc1tpXSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBt
X25vblRyaXZpYWxQaGlzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBwaGkgPSBtX2luc2VydGlvblNldC5pbnNlcnQoMCwgU3BlY05vbmUsIFBoaSk7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hpbGRJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsKKyAgICAgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3Jz
W2pdOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxk
SW5kZXggPT0gQWRqYWNlbmN5TGlzdDo6U2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cGhpID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAsIFNwZWNOb25lLCBQaGksIHBoaSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjaGlsZEluZGV4ID0gMTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogdXBzaWxv
biA9IHByZWRlY2Vzc29yLT5hcHBlbmROb25UZXJtaW5hbCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBPcEluZm8ocGhpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByZWRlY2Vzc29yLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5k
KSk7CisgICAgICAgICAgICAgICAgICAgIHBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJbmRleCsr
KSA9IHVwc2lsb247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgMCwg
U3BlY05vbmUsIE1vdkhpbnQsCisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhibG9jay0+dmFy
aWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgcGhpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFJlcGxhY2UgcmVmZXJlbmNlcyB0byB0cml2aWFsIFBoaXMgd2l0aCByZWZlcmVuY2VzIHRv
IHRoZWlyIGNoaWxkcmVuLgorICAgICAgICAvLyBBbHNvIGRvIGZvcndhcmRpbmcgb3ZlciBHZXRM
b2NhbC9TZXRMb2NhbCBwYWlycy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAg
ICAgICAgICAgZm9yd2FyZENoaWxkcmVuKGJsb2NrLT5hdChub2RlSW5kZXgpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBTZXRMb2NhbCdzIG5lZWQg
Zmx1c2hpbmcuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5u
dW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IEZsdXNoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB3aGlsZSAoIW1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QudGFr
ZUxhc3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhu
b2RlKSk7CisgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
Q29udmVydCBsb2NhbCBvcGVyYXRpb25zOgorICAgICAgICAvLyAtIFNldExvY2FsL0dldExvY2Fs
IG92ZXIgY2FwdHVyZWQgdmFyaWFibGVzIGxvc2UgdGhlaXIgcGhpcy4KKyAgICAgICAgLy8gLSBH
ZXRMb2NhbCBvdmVyIHVuY2FwdHVyZWQgdmFyaWFibGVzIGRpZS4KKyAgICAgICAgLy8gLSBTZXRM
b2NhbCBlaXRoZXIgc3RheXMgU2V0TG9jYWwsIGlmIGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50
bworICAgICAgICAvLyAgIE1vdkhpbnRBbmRDaGVjay4KKyAgICAgICAgLy8gLSBGbHVzaCBsb3Nl
cyBpdHMgY2hpbGRyZW4gYW5kIHR1cm5zIGludG8gYSBQaGFudG9tIChpLmUuIGl0IGRpZXMpLgor
ICAgICAgICAvLyAtIFBoYW50b21Mb2NhbCBiZWNvbWVzIFBoYW50b20uCisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsg
bm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGRyZW4ucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMo
bm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludEFuZENoZWNrKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRv
bSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNh
c2UgUGhhbnRvbUxvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1Bo
YW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZyZWUgYWxsIHBoaXMgYW5kIHJlc2V0IHZhcmlh
YmxlcyB2ZWN0b3JzLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAg
ICAgICAgICAgIGJsb2NrLT5waGlzLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLmNs
ZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmNsZWFyKCk7CisgICAgICAg
ICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1fZ3JhcGgubV9mb3JtID0gU1NBOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lk
IGZvcndhcmRQaGlDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAgICAgICAgICAg
RWRnZSYgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOworICAgICAgICAgICAgaWYgKCFl
ZGdlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9jaGFuZ2VkIHw9
IGZvcndhcmRFZGdlKGVkZ2UpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZm9y
d2FyZENoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBERkdfTk9ERV9ET19UT19D
SElMRFJFTihtX2dyYXBoLCBub2RlLCBmb3J3YXJkR2V0TG9jYWxFZGdlKTsKKyAgICB9CisgICAg
CisgICAgTm9kZSogZm9yd2FyZChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIFBo
aTogeworICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmp1c3RPbmVDaGlsZCgpOwor
ICAgICAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVkZ2Uubm9kZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIGJvb2wgZm9yd2FyZEVkZ2UoRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIE5v
ZGUqIG5ld05vZGUgPSBmb3J3YXJkKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKG5ld05vZGUg
PT0gZWRnZS5ub2RlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVkZ2Uu
c2V0Tm9kZShuZXdOb2RlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IHZvaWQgZm9yd2FyZEVkZ2UoTm9kZSosIEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBmb3J3
YXJkRWRnZShlZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWR1cGxpY2F0ZUNoaWxkcmVu
KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRq
YWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5j
aGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmIChlZGdlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGktLSk7CisgICAgICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6
ZTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGopID09
IGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShq
LS0pOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFk
ZEZsdXNoZWRMb2NhbE9wKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobV9mbHVzaGVk
TG9jYWxPcHMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1f
Zmx1c2hlZExvY2FsT3BzLmFkZChub2RlKTsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmts
aXN0LmFwcGVuZChub2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbEVkZ2Uo
Tm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKGVkZ2Uu
bm9kZSgpKTsKKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAg
SGFzaFNldDxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX2Zs
dXNoZWRMb2NhbE9wV29ya2xpc3Q7CisgICAgT3BlcmFuZHM8Ym9vbD4gbV9ub25Ucml2aWFsUGhp
czsKKyAgICBib29sIG1fY2hhbmdlZDsKK307CisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNpb24o
R3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcg
U1NBIENvbnZlcnNpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U1NBQ29udmVyc2lv
blBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NTQUNvbnZlcnNpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorI2RlZmluZSBERkdTU0FDb252
ZXJzaW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFw
aDsKKworLy8gQ29udmVydCBUaHJlYWRlZENQUyBmb3JtIGludG8gU1NBIGZvcm0uIFRoaXMgcmVz
dWx0cyBpbiBhIGZvcm0gdGhhdCBoYXM6CisvLworLy8gLSBSb3VnaGx5IG1pbmltYWwgUGhpJ3Mu
IFdlIHVzZSB0aGUgQXljb2NrICYgSG9yc3Bvb2wgZml4cG9pbnQgZm9yCisvLyAgIGNvbnZlcnRp
bmcgdGhlIENQUyBtYXhpbWFsIFBoaXMgaW50byBTU0EgbWluaW1hbCBQaGlzLCB3aXRoIHRoZSBj
YXZlYXQKKy8vICAgdGhhdCBpcnJlZHVjaWJsZSBjb250cm9sIGZsb3cgbWF5IHJlc3VsdCBpbiBz
b21lIG1pc3NlZCBvcHBvcnR1bml0aWVzCisvLyAgIGZvciBQaGkgcmVkdWN0aW9uLgorLy8KKy8v
IC0gTm8gdXNlcyBvZiBHZXRMb2NhbC9TZXRMb2NhbCBleGNlcHQgZm9yIGNhcHR1cmVkIHZhcmlh
YmxlcyBhbmQgZmx1c2hlcy4KKy8vICAgQWZ0ZXIgdGhpcywgYW55IHJlbWFpbmluZyBTZXRMb2Nh
bCBtZWFucyBGbHVzaC4gRmx1c2ggbm9kZXMgYXJlCisvLyAgIGVsaW1pbmF0ZWQuIFBoYW50b21M
b2NhbHMgYmVjb21lIFBoYW50b21zLiBOb2RlcyBtYXkgbWF5IGhhdmUgY2hpbGRyZW4KKy8vICAg
dGhhdCBhcmUgaW4gYW5vdGhlciBiYXNpYyBibG9jay4KKy8vCisvLyAtIE1vdkhpbnRzIGFyZSB1
c2VkIGZvciBPU1IgaW5mb3JtYXRpb24sIGFuZCBhcmUgdGhlbXNlbHZlcyBtaW5pbWFsLgorLy8g
ICBBIE1vdkhpbnQgd2lsbCBvY2N1ciBhdCBzb21lIHBvaW50IGFmdGVyIHRoZSBhc3NpZ25pbmcs
IGFuZCBhdCBQaGkKKy8vICAgcG9pbnRzLgorLy8KKy8vIC0gVW5saWtlIGNvbnZlbnRpb25hbCBT
U0EgaW4gd2hpY2ggUGhpIGZ1bmN0aW9ucyByZWZlciB0byBwcmVkZWNlc3NvcnMKKy8vICAgYW5k
IHZhbHVlcywgb3VyIFNTQSB1c2VzIFVwc2lsb24gZnVuY3Rpb25zIHRvIGluZGljYXRlIHZhbHVl
cyBpbgorLy8gICBwcmVkZWNlc3NvcnMuIEEgbWVyZ2Ugd2lsbCBsb29rIGxpa2U6CisvLworLy8g
ICBsYWJlbEE6CisvLyAgICAgICBhOiBVcHNpbG9uKCRjKQorLy8gICAgICAgSnVtcChsYWJlbEMp
CisvLworLy8gICBsYWJlbEI6CisvLyAgICAgICBiOiBVcHNpbG9uKCRjKQorLy8gICAgICAgSnVt
cChsYWJlbEMpCisvLworLy8gICBsYWJlbEM6CisvLyAgICAgICBjOiBQaGkoKQorLy8KKy8vICAg
Tm90ZSB0aGF0IHRoZSBQaGkgaGFzIG5vIGNoaWxkcmVuLCBidXQgdGhlIHByZWRlY2Vzc29ycyBo
YXZlIFVwc2lsb25zCisvLyAgIHRoYXQgaGF2ZSBhIHdlYWsgcmVmZXJlbmNlIHRvIHRoZSBQaGkg
KCRjIGluc3RlYWQgb2YgQGM7IHdlIHN0b3JlIGl0CisvLyAgIGluIHRoZSBPcEluZm8gcmF0aGVy
IHRoYW4gdGhlIEFkamFjZW5jeUxpc3QpLgorLy8KKy8vICAgRnVuIGZhY3Q6IFVwc2lsb24gaXMg
c28gbmFtZWQgYmVjYXVzZSBpdCBjb21lcyBiZWZvcmUgUGhpIGluIHRoZQorLy8gICBhbHBoYWJl
dC4gSXQgY2FuIGJlIHdyaXR0ZW4gYXMgIlkiLgorCitib29sIHBlcmZvcm1TU0FDb252ZXJzaW9u
KEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKwpJbmRleDog
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIp
CisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw2ICszNiw3IEBACiAJCTBGRDgxQUM1MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0
Qml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQ4MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTBGRERCRkE3MTY2NkRGQTMwMEM1NUZFRiAv
KiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJl
YW0uY3BwICovOyB9OwogCQkwRkREQkZBODE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRT
dHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovOyB9OworCQkw
RkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1NjE3ODdBODAyMDBCMzVGOEMgLyog
SW5zZXJ0aW9uLmggKi87IH07CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXpl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2
MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsKIAkJMTQzRjYxMjAxNTY1
RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMTQ2OTQxOTIxNkVBQUY2RDAw
MjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ2OTQxOTAxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTIs
NiArMzUzLDcgQEAKIAkJMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdEJpdFZlY3Rvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3Ry
aW5nUHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RyaW5nUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRE
QkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnNlcnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCeXRlU3BpbkxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRjYxMUQx
NTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4
NSw2ICs3ODcsNyBAQAogCQkJCUE4QTQ3MkJBMTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoVHJhaXRz
LmggKi8sCiAJCQkJQThBNDcyQkIxNTFBODI1QTAwNDEyM0ZGIC8qIEhleE51bWJlci5oICovLAog
CQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCAqLywKKwkJCQkwRkU1
MDU1NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi8sCiAJCQkJQThBNDcyQkUxNTFB
ODI1QTAwNDEyM0ZGIC8qIEludDE2QXJyYXkuaCAqLywKIAkJCQlBOEE0NzJCRjE1MUE4MjVBMDA0
MTIzRkYgLyogSW50MzJBcnJheS5oICovLAogCQkJCUE4QTQ3MkJEMTUxQTgyNUEwMDQxMjNGRiAv
KiBJbnQ4QXJyYXkuaCAqLywKQEAgLTExODEsNiArMTE4NCw3IEBACiAJCQkJQThBNDczRTgxNTFB
ODI1QjAwNDEyM0ZGIC8qIE1hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VB
MTUxQTgyNUIwMDQxMjNGRiAvKiBNRDUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNENTQ5N0FEMTU4
NTdEMDMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTU3
MTc4N0E4MDYwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRGMUQx
MTU0MTVGRjExQkUwMDI2RTkwOCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRGRDg1NTQ3MTYxMzNFMEUwMEM1QjcwNCAvKiBNZW1vcnlJbnN0cnVtZW50YXRp
b25BcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzRkJDNzFFMTYxQUY3QkYw
MEJCNEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoQ291bnRlZFNldC5oIGluIEhlYWRl
cnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0luc2VydGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbnNlcnRpb25faAor
I2RlZmluZSBJbnNlcnRpb25faAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NsYXNzIEluc2VydGlvbiB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uKCkgeyB9Cisg
ICAgCisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAg
VCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcjwoY29uc3QgSW5zZXJ0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2luZGV4IDwgb3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IHNpemVfdCBtX2luZGV4OworICAgIFQgbV9lbGVtZW50OworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVGFyZ2V0VmVjdG9yVHlwZSwgdHlwZW5hbWUgSW5zZXJ0aW9uVmVjdG9yVHlwZT4KK3ZvaWQg
ZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYgdGFyZ2V0LCBJbnNlcnRpb25WZWN0
b3JUeXBlJiBpbnNlcnRpb25zKQoreworICAgIGlmICghaW5zZXJ0aW9ucy5zaXplKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICB0YXJnZXQuZ3Jvdyh0YXJnZXQuc2l6ZSgpICsgaW5zZXJ0aW9ucy5z
aXplKCkpOworICAgIHNpemVfdCBsYXN0SW5kZXggPSB0YXJnZXQuc2l6ZSgpOworICAgIGZvciAo
c2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gaW5zZXJ0aW9ucy5zaXplKCk7IGluZGV4SW5JbnNl
cnRpb25zLS07KSB7CisgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uc1tpbmRl
eEluSW5zZXJ0aW9uc10uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOworICAgICAgICBzaXpl
X3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQorICAgICAgICAgICAgdGFyZ2V0
W2ldID0gdGFyZ2V0W2kgLSBpbmRleE9mZnNldF07CisgICAgICAgIHRhcmdldFtmaXJzdEluZGV4
XSA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmVsZW1lbnQoKTsKKyAgICAgICAgbGFz
dEluZGV4ID0gZmlyc3RJbmRleDsKKyAgICB9CisgICAgaW5zZXJ0aW9ucy5yZXNpemUoMCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Okluc2VydGlvbjsKK3VzaW5nIFdU
Rjo6ZXhlY3V0ZUluc2VydGlvbnM7CisKKyNlbmRpZiAvLyBJbnNlcnRpb25faAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206209</attachid>
            <date>2013-07-07 10:46:10 -0700</date>
            <delta_ts>2013-07-07 21:39:40 -0700</delta_ts>
            <desc>reworked it again</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56682</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9j
YWxGaXJzdFRpbWUob3BlcmFuZCwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFy
KCkKKyAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IHZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgp
OworICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBmaWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNp
b24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBF
ZGdlIGNoaWxkMVVuY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29yZHNbMF07IH0KICAgICAK
KyAgICBFZGdlIGp1c3RPbmVDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISFjaGls
ZDEoKSAmJiAhY2hpbGQyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBFZGdl
KCk7CisgICAgfQorICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZShFZGdlIGNoaWxkMSwgRWRnZSBj
aGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAgICAgICAgY2hpbGQoMCkgPSBjaGlsZDE7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3Vu
dGVkPEJhc2ljQmxvYwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7
IH0KICAgICBOb2RlKiYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAgICBO
b2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5vZGUq
JiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9wZXJh
dG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFzdCgp
IGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6ZV90
IHNpemUpIHsgbV9ub2Rlcy5yZXNpemUoc2l6ZSk7IH0KQEAgLTEzMCw2ICsxMzEsMTEgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIERGR19WQVJJQURJQ19U
RU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERGR19ERUZJ
TkVfQVBQRU5EX05PREUKICAgICAKKyNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1w
bGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1
ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0
ZVBvc3QgTm9kZSogYXBwZW5kTm9uVGVybWluYWwoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSB2YWx1
ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVO
Q1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9O
T0RFCisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewog
ICAgICAgICBvdXQucHJpbnQoIiMiLCBpbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNTI0MzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDE3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRf
Tk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAKKyNkZWZpbmUgREZHX0RFRklO
RV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1
ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQcmUg
dHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5v
blRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0Nv
bW1hIHZhbHVlUGFyYW1zKSBcCisgICAgeyBcCisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBo
LmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKKyAgICAgICAgYXBw
ZW5kKGxhc3QoKSk7IFwKKyAgICAgICAgYXQoc2l6ZSgpIC0gMikgPSByZXN1bHQ7IFwKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVO
Q1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9O
T0RFCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0lu
c2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Jsb2Nr
SW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChHcmFwaCYgZ3JhcGgpCisgICAgOiBtX2dy
YXBoKGdyYXBoKQoreworfQorCitCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0
KCkgeyB9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChjb25zdCBCbG9ja0luc2Vy
dGlvbiYgaW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoaW5zZXJ0aW9uKTsK
K30KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgUGFzc1Jl
ZlB0cjxCYXNpY0Jsb2NrPiBibG9jaykKK3sKKyAgICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5k
ZXgsIGJsb2NrKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQo
c2l6ZV90IGluZGV4KQoreworICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVm
KG5ldyBCYXNpY0Jsb2NrKAorICAgICAgICBVSU5UX01BWCwKKyAgICAgICAgbV9ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgIG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKSk7CisgICAgaW5z
ZXJ0KGluZGV4LCBibG9jayk7CisgICAgcmV0dXJuIGJsb2NrLmdldCgpOworfQorCitCYXNpY0Js
b2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSkK
K3sKKyAgICByZXR1cm4gaW5zZXJ0KGJsb2NrLT5pbmRleCk7Cit9CisKK2Jvb2wgQmxvY2tJbnNl
cnRpb25TZXQ6OmV4ZWN1dGUoKQoreworICAgIGlmIChtX2luc2VydGlvbnMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0
byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVkIHRvCisgICAgLy8gc29y
dCB0aGVtIGJlZm9yZSBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuCisgICAgc3RkOjpz
b3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworCisgICAgZXhl
Y3V0ZUluc2VydGlvbnMobV9ncmFwaC5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKKyAgICAKKyAg
ICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3Nh
cnkgYnV0IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBn
cm93aW5nLgorICAgIHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVk
IHNvdXJjZUluZGV4ID0gMDsgc291cmNlSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsp
IHsKKyAgICAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tz
b3VyY2VJbmRleCsrXTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEluZGV4KytdID0gYmxvY2s7CisgICAg
fQorICAgIG1fZ3JhcGgubV9ibG9ja3MucmVzaXplKHRhcmdldEluZGV4KTsKKyAgICAKKyAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbaV0tPmluZGV4ID0gaTsKKyAgICAKKyAgICAvLyBBbmQg
ZmluYWxseSwgaW52YWxpZGF0ZSBhbGwgYW5hbHlzZXMgdGhhdCByZWx5IG9uIHRoZSBDRkcuCisg
ICAgbV9ncmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlv
blNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9j
a0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja0lu
c2VydGlvblNldF9oCisjZGVmaW5lIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdH
cmFwaC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBXVEY6Oklu
c2VydGlvbjxSZWZQdHI8QmFzaWNCbG9jaz4gPiBCbG9ja0luc2VydGlvbjsKKworY2xhc3MgQmxv
Y2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0KEdyYXBoJiBn
cmFwaCk7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgdm9pZCBpbnNlcnQo
Y29uc3QgQmxvY2tJbnNlcnRpb24mIGluc2VydGlvbik7CisgICAgdm9pZCBpbnNlcnQoc2l6ZV90
IGluZGV4LCBQYXNzUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrKTsKKyAgICBCYXNpY0Jsb2NrKiBp
bnNlcnQoc2l6ZV90IGluZGV4KTsKKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNC
bG9jayogYmVmb3JlKTsKKyAgICAKKyAgICBib29sIGV4ZWN1dGUoKTsKKworcHJpdmF0ZToKKyAg
ICBHcmFwaCYgbV9ncmFwaDsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5zZXJ0
aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tJbnNlcnRpb25TZXRfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jh
c2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlIDogcHVibGljIFBoYXNl
IHsKK3B1YmxpYzoKKyAgICBDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlKEdyYXBoJiBncmFwaCkK
KyAgICAgICAgOiBQaGFzZShncmFwaCwgImNyaXRpY2FsIGVkZ2UgYnJlYWtpbmciKQorICAgICAg
ICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBy
dW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBBbiBlZGdlIEEtPkIgaXMgY3JpdGljYWwgaWYgQSBoYXMgbXVsdGlw
bGUgc3VjY2Vzc29yIGFuZCBCIGhhcyBtdWx0aXBsZQorICAgICAgICAgICAgLy8gcHJlZGVjZXNz
b3JzLiBUaHVzIHdlIGZhaWwgZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSBtdWx0aXBsZSBzdWNjZXNz
b3JzLgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMo
KSA8PSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayoqIHN1Y2Nlc3NvciA9ICZibG9jay0+c3VjY2Vzc29y
KGkpOworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnByZWRlY2Vzc29ycy5zaXplKCkg
PD0gMSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgYnJlYWtDcml0aWNhbEVkZ2UoYmxvY2ssIHN1Y2Nlc3Nvcik7IAorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9pbnNlcnRp
b25TZXQuZXhlY3V0ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGJyZWFrQ3JpdGlj
YWxFZGdlKAorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgc3VjY2Vzc29ySW5k
ZXgsIEJhc2ljQmxvY2sqKiBzdWNjZXNzb3IpCisgICAgeworICAgICAgICBtX2dyYXBoLmRldGhy
ZWFkKCk7CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBwYWQgPSBtX3BhZHMuZ2V0KCpz
dWNjZXNzb3IpOworICAgICAgICBpZiAoIXBhZCkgeworICAgICAgICAgICAgcGFkID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0QmVmb3JlKCpzdWNjZXNzb3IpOworICAgICAgICAgICAgcGFkLT5hcHBl
bmROb2RlKG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBPcEluZm8oKnN1Y2Nlc3NvcikpOworICAg
ICAgICAgICAgbV9wYWRzLmFkZCgqc3VjY2Vzc29yLCBwYWQpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAqc3VjY2Vzc29yID0gcGFkOworICAgIH0KKyAgICAKKyAgICBCbG9ja0luc2Vy
dGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBCYXNpY0Js
b2NrKj4gbV9wYWRzOworfTsKKworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoR3Jh
cGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ3Jp
dGljYWwgRWRnZSBCcmVha2luZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxDcml0aWNh
bEVkZ2VCcmVha2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0NyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2VfaAorI2RlZmluZSBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8v
IEluc2VydHMgZHVtbXkgYmFzaWMgYmxvY2tzIHRvIGJyZWFrIGNyaXRpY2FsIGVkZ2VzLiBBbiBl
ZGdlIEEtPkIgaXMKKy8vIGNyaXRpY2FsIGlmIEEgaGFzIG11bHRpcGxlIHN1Y2Nlc3NvcnMgYW5k
IEIgaGFzIG11bHRpcGxlIHByZWRlc3NvcnMuCisKK2Jvb2wgcGVyZm9ybUNyaXRpY2FsRWRnZUJy
ZWFraW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFz
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQu
aAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNl
cnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjYgKzMxLDEyIEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRp
b24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAotY2xhc3MgSW5zZXJ0aW9uIHsKLXB1YmxpYzoKLSAgICBJbnNlcnRpb24oKSB7
IH0KLSAgICAKLSAgICBJbnNlcnRpb24oc2l6ZV90IGluZGV4LCBOb2RlKiBlbGVtZW50KQotICAg
ICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCi0gICAg
ewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
OyB9Ci0gICAgTm9kZSogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQotcHJp
dmF0ZToKLSAgICBzaXplX3QgbV9pbmRleDsKLSAgICBOb2RlKiBtX2VsZW1lbnQ7Ci19OwordHlw
ZWRlZiBXVEY6Okluc2VydGlvbjxOb2RlKj4gSW5zZXJ0aW9uOwogCiBjbGFzcyBJbnNlcnRpb25T
ZXQgewogcHVibGljOgpAQCAtODEsMjAgKzY3LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
ZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIGlmICghbV9pbnNlcnRp
b25zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYmxvY2stPmdyb3coYmxv
Y2stPnNpemUoKSArIG1faW5zZXJ0aW9ucy5zaXplKCkpOwotICAgICAgICBzaXplX3QgbGFzdElu
ZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXhJbkluc2VydGlv
bnMgPSBtX2luc2VydGlvbnMuc2l6ZSgpOyBpbmRleEluSW5zZXJ0aW9ucy0tOykgewotICAgICAg
ICAgICAgSW5zZXJ0aW9uJiBpbnNlcnRpb24gPSBtX2luc2VydGlvbnNbaW5kZXhJbkluc2VydGlv
bnNdOwotICAgICAgICAgICAgc2l6ZV90IGZpcnN0SW5kZXggPSBpbnNlcnRpb24uaW5kZXgoKSAr
IGluZGV4SW5JbnNlcnRpb25zOwotICAgICAgICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5k
ZXhJbkluc2VydGlvbnMgKyAxOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGxhc3RJbmRl
eDsgLS1pID4gZmlyc3RJbmRleDspCi0gICAgICAgICAgICAgICAgYmxvY2stPmF0KGkpID0gYmxv
Y2stPmF0KGkgLSBpbmRleE9mZnNldCk7Ci0gICAgICAgICAgICBibG9jay0+YXQoZmlyc3RJbmRl
eCkgPSBpbnNlcnRpb24uZWxlbWVudCgpOwotICAgICAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJ
bmRleDsKLSAgICAgICAgfQotICAgICAgICBtX2luc2VydGlvbnMucmVzaXplKDApOworICAgICAg
ICBleGVjdXRlSW5zZXJ0aW9ucygqYmxvY2ssIG1faW5zZXJ0aW9ucyk7CiAgICAgfQogcHJpdmF0
ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzczLDE2ICs3NzMsMTYgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICBtX29wSW5mbzIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7CiAgICAg
fQogICAgIAotICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2soKQorICAgIEJhc2ljQmxvY2sqJiB0
YWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgp
KTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8pOwor
ICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbyk7CiAg
ICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuQmxvY2soKQorICAgIEJhc2ljQmxv
Y2sqJiBub3RUYWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8yKTsKKyAg
ICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcEluZm8yKTsKICAg
ICB9CiAgICAgCiAgICAgU3dpdGNoRGF0YSogc3dpdGNoRGF0YSgpCkBAIC04MDUsNyArODA1LDcg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVu
c2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKGlzU3dpdGNoKCkpIHsKICAgICAgICAg
ICAgIGlmIChpbmRleCA8IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NCw2ICs2NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyha
b21iaWVIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBtYWNy
byhVcHNpbG9uLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikgXAogICAgIG1h
Y3JvKFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwKICAgICBtYWNy
byhGbHVzaCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3Jv
KFBoYW50b21Mb2NhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU1NBQ29udmVyc2lvblBo
YXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBTU0FDb252ZXJzaW9uUGhhc2UoR3Jh
cGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiU1NBIGNvbnZlcnNpb24iKQorICAg
ICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgICAgICAsIG1fbm9uVHJpdmlhbFBoaXMo
T3BlcmFuZHNMaWtlLCBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAs
IG1fY2hhbmdlZChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAg
ICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BT
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggU2V0TG9jYWwncyBuZWVk
IGZsdXNoaW5nLiBOZWVkIHRvIGRvIHRoaXMgd2hpbGUgdGhlCisgICAgICAgIC8vIFBoaSBncmFw
aCBpcyBzdGlsbCBpbnRhY3QuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpICE9IEZsdXNoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChub2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoIW1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2ZsdXNoZWRMb2NhbE9wV29y
a2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2ZsdXNoZWRMb2NhbE9wcy5j
b250YWlucyhub2RlKSk7CisgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dy
YXBoLCBub2RlLCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gRWxpbWluYXRlIGFsbCBkdXBsaWNhdGUgb3Igc2VsZi1wb2ludGluZyBQaGkgZWRn
ZXMuIFRoaXMgbWVhbnMgdGhhdAorICAgICAgICAvLyB3ZSB0cmFuc2Zvcm06CisgICAgICAgIC8v
CisgICAgICAgIC8vIHA6IFBoaShAbjEsIEBuMiwgQG4zKQorICAgICAgICAvLworICAgICAgICAv
LyBpbnRvOgorICAgICAgICAvLworICAgICAgICAvLyBwOiBQaGkoQHgpCisgICAgICAgIC8vCisg
ICAgICAgIC8vIGlmIGVhY2ggQG5pIGluIHtAbjEsIEBuMiwgQG4zfSBpcyBlaXRoZXIgZXF1YWwg
dG8gQHAgdG8gaXMgZXF1YWwKKyAgICAgICAgLy8gdG8gQHgsIGZvciBleGFjdGx5IG9uZSBvdGhl
ciBAeC4gQWRkaXRpb25hbGx5LCB0cml2aWFsIFBoaXMgKGkuZS4KKyAgICAgICAgLy8gcDogUGhp
KEB4KSkgYXJlIGZvcndhcmRlZCwgc28gdGhhdCBpZiBoYXZlIGFuIGVkZ2UgdG8gc3VjaCBAcCwg
d2UKKyAgICAgICAgLy8gcmVwbGFjZSBpdCB3aXRoIEB4LiBUaGlzIGxvb3AgZG9lcyB0aGlzIGZv
ciBQaGlzIG9ubHk7IGxhdGVyIHdlIGRvCisgICAgICAgIC8vIHN1Y2ggZm9yd2FyZGluZyBmb3Ig
UGhpIHJlZmVyZW5jZXMgZm91bmQgaW4gb3RoZXIgbm9kZXMuCisgICAgICAgIC8vCisgICAgICAg
IC8vIFNlZSBBeWNvY2sgYW5kIEhvcnNwb29sIGluIENDJzAwIGZvciBhIGJldHRlciBkZXNjcmlw
dGlvbiBvZiB3aGF0CisgICAgICAgIC8vIHdlJ3JlIGRvaW5nIGhlcmUuCisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Cisg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+
cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBo
aSA9IGJsb2NrLT5waGlzW3BoaUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBoaS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBmb3J3YXJkUGhpQ2hpbGRyZW4ocGhp
KTsKKyAgICAgICAgICAgICAgICAgICAgZGVkdXBsaWNhdGVDaGlsZHJlbihwaGkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEZvciBlYWNoIGJhc2ljIGJsb2NrLCBmb3IgZWFjaCBsb2Nh
bCBsaXZlIGF0IHRoZSBoZWFkIG9mIHRoYXQgYmxvY2ssCisgICAgICAgIC8vIGZpZ3VyZSBvdXQg
d2hhdCBub2RlIHdlIHNob3VsZCBiZSByZWZlcnJpbmcgdG8gaW5zdGVhZCBvZiB0aGF0IGxvY2Fs
LgorICAgICAgICAvLyBJZiBpdCB0dXJucyBvdXQgdG8gYmUgYSBub24tdHJpdmlhbCBQaGksIG1h
a2Ugc3VyZSB0aGF0IHRvIGNyZWF0ZSBhbgorICAgICAgICAvLyBTU0EgUGhpIGFuZCBVcHNpbG9u
cyBpbiBwcmVkZWNlc3NvciBibG9ja3MuIFdlIHJldXNlCisgICAgICAgIC8vIEJhc2ljQmxvY2s6
OnZhcmlhYmxlc0F0SGVhZCBmb3IgdHJhY2tpbmcgd2hpY2ggbm9kZXMgdG8gcmVmZXIgdG8uCisg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsg
YmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlz
Q2FwdHVyZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBQb2lzb24gdGhpcyBlbnRyeSBp
biB2YXJpYWJsZXNBdEhlYWQgYmVjYXVzZSB3ZSBkb24ndAorICAgICAgICAgICAgICAgICAgICAv
LyB3YW50IGFueW9uZSB0byB0cnkgdG8gcmVmZXIgdG8gaXQsIGlmIHRoZSB2YXJpYWJsZSBpcwor
ICAgICAgICAgICAgICAgICAgICAvLyBjYXB0dXJlZC4KKyAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZFtpXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBoaToKKyAgICAgICAg
ICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAg
IG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IFBoaSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkp
IHsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9u
ZUNoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IGVkZ2Uubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgYSBub24tdHJpdmlhbCBQaGkuCisgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAsIFNwZWNO
b25lLCBQaGkpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tOykg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0g
YmxvY2stPnByZWRlY2Vzc29yc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiB1cHNpbG9uID0gcHJlZGVjZXNzb3ItPmFwcGVuZE5vblRlcm1pbmFsKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgVXBzaWxvbiwgT3BJbmZvKG5v
ZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3Nvci0+dmFyaWFi
bGVzQXRUYWlsW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhibG9jay0+dmFyaWFibGVzQXRIZWFkLm9w
ZXJhbmQob3BlcmFuZCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRI
ZWFkW2ldID0gbm9kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENvbnZl
cnQgb3BlcmF0aW9ucyBvdmVyIGxvY2FscyBpbnRvIG9wZXJhdGlvbnMgb3ZlciBTU0Egbm9kZXMu
CisgICAgICAgIC8vIC0gR2V0TG9jYWwgb3ZlciBjYXB0dXJlZCB2YXJpYWJsZXMgbG9zZSB0aGVp
ciBwaGlzLgorICAgICAgICAvLyAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMg
ZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzCisgICAgICAgIC8vICAgdG8gdGhl
IG5vZGUgc3BlY2lmaWVkIGJ5IHZhcmlhYmxlc0F0SGVhZC4KKyAgICAgICAgLy8gLSBTZXRMb2Nh
bCBlaXRoZXIgc3RheXMgU2V0TG9jYWwsIGlmIGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50bwor
ICAgICAgICAvLyAgIE1vdkhpbnRBbmRDaGVjay4KKyAgICAgICAgLy8gLSBGbHVzaCBsb3NlcyBp
dHMgY2hpbGRyZW4gYW5kIHR1cm5zIGludG8gYSBQaGFudG9tIChpLmUuIGl0IGRpZXMpLgorICAg
ICAgICAvLyAtIFBoYW50b21Mb2NhbCBiZWNvbWVzIFBoYW50b20sIGFuZCBpdHMgY2hpbGQgaXMg
d2hhdGV2ZXIgaXMgc3BlY2lmaWVkCisgICAgICAgIC8vICAgYnkgdmFyaWFibGVzQXRIZWFkLgor
ICAgICAgICAvLyAtIFNldEFyZ3VtZW50IHR1cm5zIGludG8gR2V0TG9jYWwuCisgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRl
eC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgICAgICAgICAgYmxvY2stPmF0
KG5vZGVJbmRleCktPnJlcGxhY2VtZW50ID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyAr
K25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnBlcmZv
cm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewor
ICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+
aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhNb3ZIaW50QW5kQ2hlY2spOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
cmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IEZsdXNoOiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogeworICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLnNldE5vZGUoYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldExvY2FsKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGcmVlIGFs
bCBwaGlzIGFuZCByZXNldCB2YXJpYWJsZXMgdmVjdG9ycy4KKyAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhp
SW5kZXgtLTspCisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2Nr
LT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgICAgICBibG9jay0+cGhpcy5jbGVhcigpOworICAg
ICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0
SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFNTQTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCBmb3J3YXJkUGhpQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXpl
OyArK2kpIHsKKyAgICAgICAgICAgIEVkZ2UmIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChp
KTsKKyAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIG1fY2hhbmdlZCB8PSBmb3J3YXJkUGhpRWRnZShlZGdlKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBOb2RlKiBmb3J3YXJkUGhpKE5vZGUqIG5vZGUpCisgICAgeworICAg
ICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+anVz
dE9uZUNoaWxkKCk7CisgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWRnZS5ub2RlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgY2Fz
ZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBmb3J3YXJkUGhpRWRnZShFZGdlJiBlZGdlKQor
ICAgIHsKKyAgICAgICAgTm9kZSogbmV3Tm9kZSA9IGZvcndhcmQoZWRnZS5ub2RlKCkpOworICAg
ICAgICBpZiAobmV3Tm9kZSA9PSBlZGdlLm5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkZWR1cGxpY2F0ZUNoaWxkcmVuKE5vZGUqIG5vZGUpCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6
ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChp
KTsKKyAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmIChlZGdlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJl
bi5yZW1vdmVFZGdlKGktLSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytqKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGopID09IGVkZ2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShqLS0pOworICAgICAgICAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGZvcndhcmROb2RlQ2hpbGRy
ZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1f
Z3JhcGgsIG5vZGUsIGZvcndhcmROb2RlRWRnZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm9y
d2FyZE5vZGVFZGdlKE5vZGUqLCBFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKGVkZ2Ut
Pm9wKCkgCisgICAgICAgIHN3aXRjaCAoZWRnZS0+b3AoKSkgeworICAgICAgICBjYXNlIEdldExv
Y2FsOgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsT3Ao
Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlu
cyhub2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcHMu
YWRkKG5vZGUpOworICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuYXBwZW5kKG5vZGUp
OworICAgIH0KKworICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsRWRnZShOb2RlKiwgRWRnZSBlZGdl
KQorICAgIHsKKyAgICAgICAgYWRkRmx1c2hlZExvY2FsT3AoZWRnZS5ub2RlKCkpOworICAgIH0K
KworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBIYXNoU2V0PE5vZGUqPiBt
X2ZsdXNoZWRMb2NhbE9wczsKKyAgICBWZWN0b3I8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BXb3Jr
bGlzdDsKKyAgICBib29sIG1fY2hhbmdlZDsKK307CisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNp
b24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJE
RkcgU1NBIENvbnZlcnNpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U1NBQ29udmVy
c2lvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKyNkZWZpbmUgREZHU1NB
Q29udmVyc2lvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
R3JhcGg7CisKKy8vIENvbnZlcnQgVGhyZWFkZWRDUFMgZm9ybSBpbnRvIFNTQSBmb3JtLiBUaGlz
IHJlc3VsdHMgaW4gYSBmb3JtIHRoYXQgaGFzOgorLy8KKy8vIC0gUm91Z2hseSBtaW5pbWFsIFBo
aSdzLiBXZSB1c2UgdGhlIEF5Y29jayAmIEhvcnNwb29sIGZpeHBvaW50IGZvcgorLy8gICBjb252
ZXJ0aW5nIHRoZSBDUFMgbWF4aW1hbCBQaGlzIGludG8gU1NBIG1pbmltYWwgUGhpcywgd2l0aCB0
aGUgY2F2ZWF0CisvLyAgIHRoYXQgaXJyZWR1Y2libGUgY29udHJvbCBmbG93IG1heSByZXN1bHQg
aW4gc29tZSBtaXNzZWQgb3Bwb3J0dW5pdGllcworLy8gICBmb3IgUGhpIHJlZHVjdGlvbi4KKy8v
CisvLyAtIE5vIHVzZXMgb2YgR2V0TG9jYWwvU2V0TG9jYWwgZXhjZXB0IGZvciBjYXB0dXJlZCB2
YXJpYWJsZXMgYW5kIGZsdXNoZXMuCisvLyAgIEFmdGVyIHRoaXMsIGFueSByZW1haW5pbmcgU2V0
TG9jYWwgbWVhbnMgRmx1c2guIEZsdXNoIG5vZGVzIGFyZQorLy8gICBlbGltaW5hdGVkLiBQaGFu
dG9tTG9jYWxzIGJlY29tZSBQaGFudG9tcy4gTm9kZXMgbWF5IG1heSBoYXZlIGNoaWxkcmVuCisv
LyAgIHRoYXQgYXJlIGluIGFub3RoZXIgYmFzaWMgYmxvY2suCisvLworLy8gLSBNb3ZIaW50cyBh
cmUgdXNlZCBmb3IgT1NSIGluZm9ybWF0aW9uLCBhbmQgYXJlIHRoZW1zZWx2ZXMgbWluaW1hbC4K
Ky8vICAgQSBNb3ZIaW50IHdpbGwgb2NjdXIgYXQgc29tZSBwb2ludCBhZnRlciB0aGUgYXNzaWdu
aW5nLCBhbmQgYXQgUGhpCisvLyAgIHBvaW50cy4KKy8vCisvLyAtIFVubGlrZSBjb252ZW50aW9u
YWwgU1NBIGluIHdoaWNoIFBoaSBmdW5jdGlvbnMgcmVmZXIgdG8gcHJlZGVjZXNzb3JzCisvLyAg
IGFuZCB2YWx1ZXMsIG91ciBTU0EgdXNlcyBVcHNpbG9uIGZ1bmN0aW9ucyB0byBpbmRpY2F0ZSB2
YWx1ZXMgaW4KKy8vICAgcHJlZGVjZXNzb3JzLiBBIG1lcmdlIHdpbGwgbG9vayBsaWtlOgorLy8K
Ky8vICAgbGFiZWxBOgorLy8gICAgICAgYTogVGhpbmd5KC4uLikKKy8vICAgICAgIGI6IFVwc2ls
b24oJGUsIEBhKQorLy8gICAgICAgSnVtcChsYWJlbEMpCisvLworLy8gICBsYWJlbEI6CisvLyAg
ICAgICBjOiBPdGhlclRoaW5neSguLi4pCisvLyAgICAgICBkOiBVcHNpbG9uKCRlLCBAYykKKy8v
ICAgICAgIEp1bXAobGFiZWxDKQorLy8KKy8vICAgbGFiZWxDOgorLy8gICAgICAgZTogUGhpKCkK
Ky8vCisvLyAgIE5vdGUgdGhhdCB0aGUgUGhpIGhhcyBubyBjaGlsZHJlbiwgYnV0IHRoZSBwcmVk
ZWNlc3NvcnMgaGF2ZSBVcHNpbG9ucworLy8gICB0aGF0IGhhdmUgYSB3ZWFrIHJlZmVyZW5jZSB0
byB0aGUgUGhpICgkZSBpbnN0ZWFkIG9mIEBlOyB3ZSBzdG9yZSBpdAorLy8gICBpbiB0aGUgT3BJ
bmZvIHJhdGhlciB0aGFuIHRoZSBBZGphY2VuY3lMaXN0KS4gVGhpbmsgb2YgdGhlIFVwc2lsb24K
Ky8vICAgYXMgImFzc2lnbmluZyIgdG8gdGhlICJ2YXJpYWJsZSIgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBQaGksIGFuZCB0aGF0CisvLyAgIHRoaXMgaXMgdGhlIG9uZSBwbGFjZSBpbiBTU0EgZm9ybSB3
aGVyZSB5b3UgY2FuIGhhdmUgbXVsdGlwbGUKKy8vICAgYXNzaWdubWVudHMuCisvLworLy8gICBU
aGlzIGltcGxpZXMgc29tZSBvdGhlciBsb29zZW5pbmdzIG9mIFNTQS4gRm9yIGV4YW1wbGUsIGFu
IFVwc2lsb24KKy8vICAgbWF5IHByZWNlZGUgYSBQaGkgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2s7
IHRoaXMgbWF5IGFyaXNlIGFmdGVyIENGRworLy8gICBzaW1wbGlmaWNhdGlvbi4gQWx0aG91Z2gg
aXQncyBwcm9maXRhYmxlIGZvciBDRkcgc2ltcGxpZmljYXRpb24gKG9yCisvLyAgIHNvbWUgb3Ro
ZXIgcGhhc2UpIHRvIHJlbW92ZSB0aGVzZSwgaXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBB
cworLy8gICB3ZWxsLCB0aGlzIGZvcm0gYWxsb3dzIHRoZSBVcHNpbG9uIHRvIGJlIGluIGFueSBi
bG9jayB0aGF0IGRvbWluYXRlcworLy8gICB0aGUgcHJlZGVjZXNzb3IgYmxvY2sgb2YgdGhlIFBo
aSwgd2hpY2ggYWxsb3dzIGZvciBibG9jayBzcGxpdHRpbmcgdG8KKy8vICAgaWdub3JlIHRoZSBw
b3NzaWJpbGl0eSBvZiBpbnRyb2R1Y2luZyBhbiBleHRyYSBlZGdlIGJldHdlZW4gdGhlIFBoaQor
Ly8gICBhbmQgdGhlIHByZWRlY2Vzc29yICh0aG91Z2ggbm9ybWFsIFNTQSB3b3VsZCBhbGxvdyB0
aGlzLCBhbHNvLCB3aXRoCisvLyAgIHRoZSBjYXZlYXQgdGhhdCB0aGUgUGhpIHByZWRlY2Vzc29y
IGJsb2NrIGxpc3RzIHdvdWxkIGhhdmUgdG8gYmUKKy8vICAgdXBkYXRlZCkuCisvLworLy8gICBU
aGUgZWFzaWVzdCB3YXkgdG8gY29udmVydCBmcm9tIHRoaXMgU1NBIGZvcm0gaW50byBhIGRpZmZl
cmVudCBTU0EKKy8vICAgZm9ybSBpcyB0byByZWRvIFNTQSBjb252ZXJzaW9uIGZvciBQaGkgZnVu
Y3Rpb25zLiBUaGF0IGlzLCB0cmVhdCBlYWNoCisvLyAgIFBoaSBpbiBvdXIgSVIgYXMgYSBub24t
U1NBIHZhcmlhYmxlIGluIHRoZSBmb3JlaWduIElSIChzbywgYXMgYW4KKy8vICAgYWxsb2NhIGlu
IExMVk0gSVIsIGZvciBleGFtcGxlKTsgdGhlIFVwc2lsb25zIHRoYXQgcmVmZXIgdG8gdGhlIFBo
aQorLy8gICBiZWNvbWUgc3RvcmVzIGFuZCB0aGUgUGhpcyB0aGVtc2VsdmVzIGJlY29tZSBsb2Fk
cy4KKy8vCisvLyAgIEZ1biBmYWN0OiBVcHNpbG9uIGlzIHNvIG5hbWVkIGJlY2F1c2UgaXQgY29t
ZXMgYmVmb3JlIFBoaSBpbiB0aGUKKy8vICAgYWxwaGFiZXQuIEl0IGNhbiBiZSB3cml0dGVuIGFz
ICJZIi4KKworYm9vbCBwZXJmb3JtU1NBQ29udmVyc2lvbihHcmFwaCYpOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAog
CQkwRkQ4MUFDNTE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBQzQxNTRGQjIyRTAwOTgz
RTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9
OyB9OwogCQkwRkREQkZBNzE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUx
NjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZEREJG
QTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYg
LyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLzsgfTsKKwkJMEZFNTA1NTcxNzg3QTgwNjAwQjM1RjhD
IC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovOyB9OwogCQkx
NDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyog
UkFNU2l6ZS5jcHAgKi87IH07CiAJCTE0M0Y2MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXpl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjEx
RTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKCk7IH07IH07CiAJCTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Njk0MTkw
MTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUyLDYgKzM1Myw3IEBACiAJCTBGRDgxQUM0
MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8q
IFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTU2
MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zZXJ0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4
RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZVNwaW5Mb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1T
aXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJBTVNpemUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEg
LyogUkFNU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSQU1TaXplLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODUsNiArNzg3LDcgQEAKIAkJCQlBOEE0
NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUx
QTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1iZXIuaCAqLywKIAkJCQlBOEE0NzJCQzE1MUE4MjVBMDA0
MTIzRkYgLyogSW5saW5lQVNNLmggKi8sCisJCQkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8q
IEluc2VydGlvbi5oICovLAogCQkJCUE4QTQ3MkJFMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQxNkFy
cmF5LmggKi8sCiAJCQkJQThBNDcyQkYxNTFBODI1QTAwNDEyM0ZGIC8qIEludDMyQXJyYXkuaCAq
LywKIAkJCQlBOEE0NzJCRDE1MUE4MjVBMDA0MTIzRkYgLyogSW50OEFycmF5LmggKi8sCkBAIC0x
MTgxLDYgKzExODQsNyBAQAogCQkJCUE4QTQ3M0U4MTUxQTgyNUIwMDQxMjNGRiAvKiBNYXRoRXh0
cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFQTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDU0OTdBRDE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFU
aW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5z
ZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjFEMTE1NDE1RkYxMUJFMDAyNkU5MDggLyog
TWVtb3J5SW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RkQ4NTU0NzE2MTMz
RTBFMDBDNUI3MDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uQXJyYXlCdWZmZXJWaWV3LmggaW4g
SGVhZGVycyAqLywKIAkJCQlGM0ZCQzcxRTE2MUFGN0JGMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1
bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dU
Ri93dGYvSW5zZXJ0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5zZXJ0aW9u
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSW5zZXJ0aW9uX2gKKyNkZWZpbmUgSW5zZXJ0aW9uX2gKKwor
bmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBJbnNlcnRpb24g
eworcHVibGljOgorICAgIEluc2VydGlvbigpIHsgfQorICAgIAorICAgIEluc2VydGlvbihzaXpl
X3QgaW5kZXgsIFQgZWxlbWVudCkKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAs
IG1fZWxlbWVudChlbGVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIFQgZWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZWxlbWVudDsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEluc2VydGlv
biYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleCA8IG90aGVyLm1f
aW5kZXg7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzaXplX3QgbV9pbmRleDsKKyAgICBU
IG1fZWxlbWVudDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRhcmdldFZlY3RvclR5cGUsIHR5
cGVuYW1lIEluc2VydGlvblZlY3RvclR5cGU+Cit2b2lkIGV4ZWN1dGVJbnNlcnRpb25zKFRhcmdl
dFZlY3RvclR5cGUmIHRhcmdldCwgSW5zZXJ0aW9uVmVjdG9yVHlwZSYgaW5zZXJ0aW9ucykKK3sK
KyAgICBpZiAoIWluc2VydGlvbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgdGFyZ2V0
Lmdyb3codGFyZ2V0LnNpemUoKSArIGluc2VydGlvbnMuc2l6ZSgpKTsKKyAgICBzaXplX3QgbGFz
dEluZGV4ID0gdGFyZ2V0LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9u
cyA9IGluc2VydGlvbnMuc2l6ZSgpOyBpbmRleEluSW5zZXJ0aW9ucy0tOykgeworICAgICAgICBz
aXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkg
KyBpbmRleEluSW5zZXJ0aW9uczsKKyAgICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJ
bkluc2VydGlvbnMgKyAxOworICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkg
PiBmaXJzdEluZGV4OykKKyAgICAgICAgICAgIHRhcmdldFtpXSA9IHRhcmdldFtpIC0gaW5kZXhP
ZmZzZXRdOworICAgICAgICB0YXJnZXRbZmlyc3RJbmRleF0gPSBpbnNlcnRpb25zW2luZGV4SW5J
bnNlcnRpb25zXS5lbGVtZW50KCk7CisgICAgICAgIGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7Cisg
ICAgfQorICAgIGluc2VydGlvbnMucmVzaXplKDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwordXNpbmcgV1RGOjpJbnNlcnRpb247Cit1c2luZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zOwor
CisjZW5kaWYgLy8gSW5zZXJ0aW9uX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206214</attachid>
            <date>2013-07-07 21:39:40 -0700</date>
            <delta_ts>2013-07-08 09:49:44 -0700</delta_ts>
            <desc>slowly adding things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>66297</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9j
YWxGaXJzdFRpbWUob3BlcmFuZCwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFy
KCkKKyAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IHZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgp
OworICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBmaWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODYsNiArMTU4NiwxNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgY2FzZSBQaGk6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3Jt
ID09IFNTQSk7CisgICAgICAgIC8vIFRoZSBzdGF0ZSBvZiB0aGlzIG5vZGUgd291bGQgaGF2ZSBh
bHJlYWR5IGJlZW4gZGVjaWRlZC4KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2Ug
VXBzaWxvbjoKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBmb3JOb2Rl
KG5vZGUtPnBoaSgpKSA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgY2Fz
ZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICBjYXNlIEJyZWFrcG9pbnQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDE1IEBAIHB1YmxpYzoKICAgICAKICAg
ICBFZGdlIGNoaWxkMVVuY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29yZHNbMF07IH0KICAg
ICAKKyAgICBFZGdlIGp1c3RPbmVDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISFj
aGlsZDEoKSAmJiAhY2hpbGQyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBF
ZGdlKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZShFZGdlIGNoaWxkMSwgRWRn
ZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAgICAgICAgY2hpbGQoMCkgPSBjaGlsZDE7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNp
b24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJERkdOb2RlLmgiCiAj
aW5jbHVkZSAiREZHVmFyaWFkaWNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTgwLDYgKzgy
LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KICAgICBOb2RlKiYgYXQoc2l6ZV90
IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAgICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3Qg
eyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5vZGUqJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7
IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsg
cmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUo
KSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpIHsgbV9ub2Rlcy5yZXNpemUo
c2l6ZSk7IH0KQEAgLTEzMCw2ICsxMzMsMTEgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3Vu
dGVkPEJhc2ljQmxvYwogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVG
SU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKKyNk
ZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0
eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisg
ICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9uVGVy
bWluYWwoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1z
KTsKKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRf
Tk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCisgICAgCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewogICAgICAgICBvdXQucHJpbnQoIiMiLCBp
bmRleCk7CkBAIC0xNjAsNiArMTY4LDE0IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRl
ZDxCYXNpY0Jsb2MKICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhl
YWQ7CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworICAgIAorICAg
IHN0cnVjdCBTU0FEYXRhIHsKKyAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKKyAg
ICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwg
QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0
cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7CisgICAgfTsKKyAgICBPd25QdHI8U1NBRGF0YT4gc3Nh
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZp
c2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDE3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZH
X0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAKKyNk
ZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0
eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisg
ICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2lj
QmxvY2s6OmFwcGVuZE5vblRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgeyBcCisgICAgICAgIE5vZGUq
IHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7
IFwKKyAgICAgICAgYXBwZW5kKGxhc3QoKSk7IFwKKyAgICAgICAgYXQoc2l6ZSgpIC0gMikgPSBy
ZXN1bHQ7IFwKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKyAgICBERkdfVkFSSUFE
SUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdf
REVGSU5FX0FQUEVORF9OT0RFCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
bG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25T
ZXQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChHcmFwaCYgZ3Jh
cGgpCisgICAgOiBtX2dyYXBoKGdyYXBoKQoreworfQorCitCbG9ja0luc2VydGlvblNldDo6fkJs
b2NrSW5zZXJ0aW9uU2V0KCkgeyB9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChj
b25zdCBCbG9ja0luc2VydGlvbiYgaW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5hcHBl
bmQoaW5zZXJ0aW9uKTsKK30KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVf
dCBpbmRleCwgUGFzc1JlZlB0cjxCYXNpY0Jsb2NrPiBibG9jaykKK3sKKyAgICBpbnNlcnQoQmxv
Y2tJbnNlcnRpb24oaW5kZXgsIGJsb2NrKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4KQoreworICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBi
bG9jayA9IGFkb3B0UmVmKG5ldyBCYXNpY0Jsb2NrKAorICAgICAgICBVSU5UX01BWCwKKyAgICAg
ICAgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCks
CisgICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fs
cygpKSk7CisgICAgaW5zZXJ0KGluZGV4LCBibG9jayk7CisgICAgcmV0dXJuIGJsb2NrLmdldCgp
OworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2lj
QmxvY2sqIGJlZm9yZSkKK3sKKyAgICByZXR1cm4gaW5zZXJ0KGJsb2NrLT5pbmRleCk7Cit9CisK
K2Jvb2wgQmxvY2tJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoKQoreworICAgIGlmIChtX2luc2VydGlv
bnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxs
b3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVk
IHRvCisgICAgLy8gc29ydCB0aGVtIGJlZm9yZSBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlv
bnMuCisgICAgc3RkOjpzb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5k
KCkpOworCisgICAgZXhlY3V0ZUluc2VydGlvbnMobV9ncmFwaC5tX2Jsb2NrcywgbV9pbnNlcnRp
b25zKTsKKyAgICAKKyAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBz
dHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJs
b2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgIHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIHNvdXJjZUluZGV4ID0gMDsgc291cmNlSW5kZXggPCBtX2dyYXBoLm1f
YmxvY2tzLnNpemUoKTspIHsKKyAgICAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tzb3VyY2VJbmRleCsrXTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEluZGV4Kytd
ID0gYmxvY2s7CisgICAgfQorICAgIG1fZ3JhcGgubV9ibG9ja3MucmVzaXplKHRhcmdldEluZGV4
KTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3
IGluZGljZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbaV0tPmluZGV4ID0gaTsKKyAg
ICAKKyAgICAvLyBBbmQgZmluYWxseSwgaW52YWxpZGF0ZSBhbGwgYW5hbHlzZXMgdGhhdCByZWx5
IG9uIHRoZSBDRkcuCisgICAgbV9ncmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2Nr
SW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdCbG9ja0luc2VydGlvblNldF9oCisjZGVmaW5lIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
dHlwZWRlZiBXVEY6Okluc2VydGlvbjxSZWZQdHI8QmFzaWNCbG9jaz4gPiBCbG9ja0luc2VydGlv
bjsKKworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0
aW9uU2V0KEdyYXBoJiBncmFwaCk7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisg
ICAgdm9pZCBpbnNlcnQoY29uc3QgQmxvY2tJbnNlcnRpb24mIGluc2VydGlvbik7CisgICAgdm9p
ZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNzUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrKTsKKyAg
ICBCYXNpY0Jsb2NrKiBpbnNlcnQoc2l6ZV90IGluZGV4KTsKKyAgICBCYXNpY0Jsb2NrKiBpbnNl
cnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlKTsKKyAgICAKKyAgICBib29sIGV4ZWN1dGUoKTsK
KworcHJpdmF0ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRp
b24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tJbnNlcnRpb25T
ZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNl
dC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
IDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImNyaXRpY2FsIGVkZ2UgYnJl
YWtpbmciKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4
KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJ
bmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBBbiBlZGdlIEEtPkIgaXMgY3JpdGljYWwg
aWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29yIGFuZCBCIGhhcyBtdWx0aXBsZQorICAgICAgICAg
ICAgLy8gcHJlZGVjZXNzb3JzLiBUaHVzIHdlIGZhaWwgZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSBt
dWx0aXBsZSBzdWNjZXNzb3JzLgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKSA8PSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29y
cygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayoqIHN1Y2Nlc3NvciA9ICZi
bG9jay0+c3VjY2Vzc29yKGkpOworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnByZWRl
Y2Vzc29ycy5zaXplKCkgPD0gMSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYnJlYWtDcml0aWNhbEVkZ2UoYmxvY2ssIHN1
Y2Nlc3Nvcik7IAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gbV9pbnNlcnRpb25TZXQuZXhlY3V0ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2
b2lkIGJyZWFrQ3JpdGljYWxFZGdlKAorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWdu
ZWQgc3VjY2Vzc29ySW5kZXgsIEJhc2ljQmxvY2sqKiBzdWNjZXNzb3IpCisgICAgeworICAgICAg
ICBtX2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBwYWQg
PSBtX3BhZHMuZ2V0KCpzdWNjZXNzb3IpOworICAgICAgICBpZiAoIXBhZCkgeworICAgICAgICAg
ICAgcGFkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKCpzdWNjZXNzb3IpOworICAgICAg
ICAgICAgcGFkLT5hcHBlbmROb2RlKG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBPcEluZm8oKnN1
Y2Nlc3NvcikpOworICAgICAgICAgICAgbV9wYWRzLmFkZCgqc3VjY2Vzc29yLCBwYWQpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAqc3VjY2Vzc29yID0gcGFkOworICAgIH0KKyAgICAK
KyAgICBCbG9ja0luc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBIYXNoTWFwPEJhc2lj
QmxvY2sqLCBCYXNpY0Jsb2NrKj4gbV9wYWRzOworfTsKKworYm9vbCBwZXJmb3JtQ3JpdGljYWxF
ZGdlQnJlYWtpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKCJERkcgQ3JpdGljYWwgRWRnZSBCcmVha2luZyBQaGFzZSIpOworICAgIHJldHVybiBy
dW5QaGFzZTxDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorI2RlZmluZSBERkdDcml0aWNh
bEVkZ2VCcmVha2luZ1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgR3JhcGg7CisKKy8vIEluc2VydHMgZHVtbXkgYmFzaWMgYmxvY2tzIHRvIGJyZWFrIGNyaXRp
Y2FsIGVkZ2VzLiBBbiBlZGdlIEEtPkIgaXMKKy8vIGNyaXRpY2FsIGlmIEEgaGFzIG11bHRpcGxl
IHN1Y2Nlc3NvcnMgYW5kIEIgaGFzIG11bHRpcGxlIHByZWRlc3NvcnMuCisKK2Jvb2wgcGVyZm9y
bUNyaXRpY2FsRWRnZUJyZWFraW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RENFUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBwdWJs
aWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgu
bV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAgICAgICAgIC8vIEZpcnN0IHJlc2V0
IHRoZSBjb3VudHMgdG8gMCBmb3IgYWxsIG5vZGVzLgogICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2Nr
SW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9u
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRp
b25TZXQuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjYgKzMxLDEyIEBACiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgPHd0Zi9J
bnNlcnRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAotY2xhc3MgSW5zZXJ0aW9uIHsKLXB1YmxpYzoKLSAgICBJbnNlcnRp
b24oKSB7IH0KLSAgICAKLSAgICBJbnNlcnRpb24oc2l6ZV90IGluZGV4LCBOb2RlKiBlbGVtZW50
KQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4OyB9Ci0gICAgTm9kZSogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsg
fQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9pbmRleDsKLSAgICBOb2RlKiBtX2VsZW1lbnQ7Ci19
OwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxOb2RlKj4gSW5zZXJ0aW9uOwogCiBjbGFzcyBJbnNl
cnRpb25TZXQgewogcHVibGljOgpAQCAtODEsMjAgKzY3LDcgQEAgcHVibGljOgogICAgIAogICAg
IHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIGlmICghbV9p
bnNlcnRpb25zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYmxvY2stPmdy
b3coYmxvY2stPnNpemUoKSArIG1faW5zZXJ0aW9ucy5zaXplKCkpOwotICAgICAgICBzaXplX3Qg
bGFzdEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXhJbklu
c2VydGlvbnMgPSBtX2luc2VydGlvbnMuc2l6ZSgpOyBpbmRleEluSW5zZXJ0aW9ucy0tOykgewot
ICAgICAgICAgICAgSW5zZXJ0aW9uJiBpbnNlcnRpb24gPSBtX2luc2VydGlvbnNbaW5kZXhJbklu
c2VydGlvbnNdOwotICAgICAgICAgICAgc2l6ZV90IGZpcnN0SW5kZXggPSBpbnNlcnRpb24uaW5k
ZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOwotICAgICAgICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0
ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGxh
c3RJbmRleDsgLS1pID4gZmlyc3RJbmRleDspCi0gICAgICAgICAgICAgICAgYmxvY2stPmF0KGkp
ID0gYmxvY2stPmF0KGkgLSBpbmRleE9mZnNldCk7Ci0gICAgICAgICAgICBibG9jay0+YXQoZmly
c3RJbmRleCkgPSBpbnNlcnRpb24uZWxlbWVudCgpOwotICAgICAgICAgICAgbGFzdEluZGV4ID0g
Zmlyc3RJbmRleDsKLSAgICAgICAgfQotICAgICAgICBtX2luc2VydGlvbnMucmVzaXplKDApOwor
ICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucygqYmxvY2ssIG1faW5zZXJ0aW9ucyk7CiAgICAgfQog
cHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDYgKzUzOCwxNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1fb3BJbmZv
KTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNQaGkoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG9wKCkgPT0gVXBzaWxvbjsKKyAgICB9CisgICAgCisgICAgTm9kZSogcGhpKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChoYXNQaGkoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9k
ZSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNJZGVudGlmaWVyKCkKICAg
ICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewpAQCAtNzczLDE2ICs3ODQsMTYgQEAgc3RydWN0
IE5vZGUgewogICAgICAgICBtX29wSW5mbzIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9j
ayk7CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2soKQorICAgIEJhc2lj
QmxvY2sqJiB0YWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8
IGlzSnVtcCgpKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9v
cEluZm8pOworICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29w
SW5mbyk7CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuQmxvY2soKQorICAg
IEJhc2ljQmxvY2sqJiBub3RUYWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0Jy
YW5jaCgpKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcElu
Zm8yKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcElu
Zm8yKTsKICAgICB9CiAgICAgCiAgICAgU3dpdGNoRGF0YSogc3dpdGNoRGF0YSgpCkBAIC04MDUs
NyArODE2LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEJh
c2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICBCYXNpY0Jsb2NrKiYgc3Vj
Y2Vzc29yKHVuc2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKGlzU3dpdGNoKCkpIHsK
ICAgICAgICAgICAgIGlmIChpbmRleCA8IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTUyNDMy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw2ICs2NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhab21iaWVIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9t
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwK
KyAgICBtYWNybyhVcHNpbG9uLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikg
XAogICAgIG1hY3JvKFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwK
ICAgICBtYWNybyhGbHVzaCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAog
ICAgIG1hY3JvKFBoYW50b21Mb2NhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhp
dCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjQzMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NzIsMTQgKzQ3MiwxOSBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIg
YmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAg
ICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgotICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2Fz
ZSBQaGk6CiAgICAgICAgICAgICAvLyBQaGlzIHNob3VsZCBub3QgYmUgdmlzaWJsZSBoZXJlIHNp
bmNlIHdlJ3JlIGl0ZXJhdGluZyB0aGUgYWxsLWJ1dC1QaGkncwogICAgICAgICAgICAgLy8gcGFy
dCBvZiBiYXNpYyBibG9ja3MuCi0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAgIC8vIFRoZXNlIGRvbid0IGdl
dCBpbnNlcnRlZCB1bnRpbCB3ZSBnbyBpbnRvIFNTQS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEdl
dFNjb3BlOgpAQCAtNTQxLDcgKzU0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKLSAgICAgICAgICAgIENS
QVNIKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAjZWxzZQogICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVk
ZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVibGljIFBo
YXNlIHsKK3B1YmxpYzoKKyAgICBTU0FDb252ZXJzaW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAg
ICAgICA6IFBoYXNlKGdyYXBoLCAiU1NBIGNvbnZlcnNpb24iKQorICAgICAgICAsIG1faW5zZXJ0
aW9uU2V0KGdyYXBoKQorICAgICAgICAsIG1fbm9uVHJpdmlhbFBoaXMoT3BlcmFuZHNMaWtlLCBn
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fY2hhbmdlZChmYWxz
ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggU2V0TG9jYWwncyBuZWVkIGZsdXNoaW5nLiBOZWVk
IHRvIGRvIHRoaXMgd2hpbGUgdGhlCisgICAgICAgIC8vIFBoaSBncmFwaCBpcyBzdGlsbCBpbnRh
Y3QuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4
ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpICE9IEZsdXNoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBhZGRGbHVzaGVkTG9jYWxPcChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICB3aGlsZSAoIW1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QudGFrZUxhc3Qo
KTsKKyAgICAgICAgICAgIEFTU0VSVChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSk7
CisgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRG
bHVzaGVkTG9jYWxFZGdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRWxpbWlu
YXRlIGFsbCBkdXBsaWNhdGUgb3Igc2VsZi1wb2ludGluZyBQaGkgZWRnZXMuIFRoaXMgbWVhbnMg
dGhhdAorICAgICAgICAvLyB3ZSB0cmFuc2Zvcm06CisgICAgICAgIC8vCisgICAgICAgIC8vIHA6
IFBoaShAbjEsIEBuMiwgQG4zKQorICAgICAgICAvLworICAgICAgICAvLyBpbnRvOgorICAgICAg
ICAvLworICAgICAgICAvLyBwOiBQaGkoQHgpCisgICAgICAgIC8vCisgICAgICAgIC8vIGlmIGVh
Y2ggQG5pIGluIHtAbjEsIEBuMiwgQG4zfSBpcyBlaXRoZXIgZXF1YWwgdG8gQHAgdG8gaXMgZXF1
YWwKKyAgICAgICAgLy8gdG8gQHgsIGZvciBleGFjdGx5IG9uZSBvdGhlciBAeC4gQWRkaXRpb25h
bGx5LCB0cml2aWFsIFBoaXMgKGkuZS4KKyAgICAgICAgLy8gcDogUGhpKEB4KSkgYXJlIGZvcndh
cmRlZCwgc28gdGhhdCBpZiBoYXZlIGFuIGVkZ2UgdG8gc3VjaCBAcCwgd2UKKyAgICAgICAgLy8g
cmVwbGFjZSBpdCB3aXRoIEB4LiBUaGlzIGxvb3AgZG9lcyB0aGlzIGZvciBQaGlzIG9ubHk7IGxh
dGVyIHdlIGRvCisgICAgICAgIC8vIHN1Y2ggZm9yd2FyZGluZyBmb3IgUGhpIHJlZmVyZW5jZXMg
Zm91bmQgaW4gb3RoZXIgbm9kZXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIFNlZSBBeWNvY2sg
YW5kIEhvcnNwb29sIGluIENDJzAwIGZvciBhIGJldHRlciBkZXNjcmlwdGlvbiBvZiB3aGF0Cisg
ICAgICAgIC8vIHdlJ3JlIGRvaW5nIGhlcmUuCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAg
ICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBo
aUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJsb2NrLT5waGlz
W3BoaUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBoaS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkUGhpQ2hpbGRyZW4ocGhpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZGVkdXBsaWNhdGVDaGlsZHJlbihwaGkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIEZvciBlYWNoIGJhc2ljIGJsb2NrLCBmb3IgZWFjaCBsb2NhbCBsaXZlIGF0IHRoZSBo
ZWFkIG9mIHRoYXQgYmxvY2ssCisgICAgICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBub2RlIHdlIHNo
b3VsZCBiZSByZWZlcnJpbmcgdG8gaW5zdGVhZCBvZiB0aGF0IGxvY2FsLgorICAgICAgICAvLyBJ
ZiBpdCB0dXJucyBvdXQgdG8gYmUgYSBub24tdHJpdmlhbCBQaGksIG1ha2Ugc3VyZSB0aGF0IHRv
IGNyZWF0ZSBhbgorICAgICAgICAvLyBTU0EgUGhpIGFuZCBVcHNpbG9ucyBpbiBwcmVkZWNlc3Nv
ciBibG9ja3MuIFdlIHJldXNlCisgICAgICAgIC8vIEJhc2ljQmxvY2s6OnZhcmlhYmxlc0F0SGVh
ZCBmb3IgdHJhY2tpbmcgd2hpY2ggbm9kZXMgdG8gcmVmZXIgdG8uCisgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBQb2lzb24gdGhpcyBlbnRyeSBpbiB2YXJpYWJsZXNBdEhl
YWQgYmVjYXVzZSB3ZSBkb24ndAorICAgICAgICAgICAgICAgICAgICAvLyB3YW50IGFueW9uZSB0
byB0cnkgdG8gcmVmZXIgdG8gaXQsIGlmIHRoZSB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAg
ICAgICAvLyBjYXB0dXJlZC4KKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0
SGVhZFtpXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICBjYXNlIFNl
dEFyZ3VtZW50OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAg
ICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IFBoaSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChlZGdlKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IGVkZ2Uubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEl0J3MgYSBub24tdHJpdmlhbCBQaGkuCisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAsIFNwZWNOb25lLCBQaGkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vz
c29yc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB1cHNpbG9uID0gcHJl
ZGVjZXNzb3ItPmFwcGVuZE5vblRlcm1pbmFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgVXBzaWxvbiwgT3BJbmZvKG5vZGUpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsW2ldKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyhibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCkt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gbm9kZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9j
ayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnQgb3BlcmF0aW9ucyBv
dmVyIGxvY2FscyBpbnRvIG9wZXJhdGlvbnMgb3ZlciBTU0Egbm9kZXMuCisgICAgICAgIC8vIC0g
R2V0TG9jYWwgb3ZlciBjYXB0dXJlZCB2YXJpYWJsZXMgbG9zZSB0aGVpciBwaGlzLgorICAgICAg
ICAvLyAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGllIGFuZCBnZXQgcmVw
bGFjZWQgd2l0aCByZWZlcmVuY2VzCisgICAgICAgIC8vICAgdG8gdGhlIG5vZGUgc3BlY2lmaWVk
IGJ5IHZhcmlhYmxlc0F0SGVhZC4KKyAgICAgICAgLy8gLSBTZXRMb2NhbCBlaXRoZXIgc3RheXMg
U2V0TG9jYWwsIGlmIGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50bworICAgICAgICAvLyAgIE1v
dkhpbnRBbmRDaGVjay4KKyAgICAgICAgLy8gLSBGbHVzaCBsb3NlcyBpdHMgY2hpbGRyZW4gYW5k
IHR1cm5zIGludG8gYSBQaGFudG9tIChpLmUuIGl0IGRpZXMpLgorICAgICAgICAvLyAtIFBoYW50
b21Mb2NhbCBiZWNvbWVzIFBoYW50b20sIGFuZCBpdHMgY2hpbGQgaXMgd2hhdGV2ZXIgaXMgc3Bl
Y2lmaWVkCisgICAgICAgIC8vICAgYnkgdmFyaWFibGVzQXRIZWFkLgorICAgICAgICAvLyAtIFNl
dEFyZ3VtZW50IHR1cm5zIGludG8gR2V0TG9jYWwuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgp
OyBub2RlSW5kZXgtLTspCisgICAgICAgICAgICAgICAgYmxvY2stPmF0KG5vZGVJbmRleCktPnJl
cGxhY2VtZW50ID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewor
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24o
bm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICht
X2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhN
b3ZIaW50QW5kQ2hlY2spOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOiB7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIFBoYW50b21Mb2NhbDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldE5vZGUo
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGcmVlIGFsbCBwaGlzIGFuZCByZXNl
dCB2YXJpYWJsZXMgdmVjdG9ycy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4
XSk7CisgICAgICAgICAgICBibG9jay0+cGhpcy5jbGVhcigpOworICAgICAgICAgICAgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOwor
ICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxv
Y2stPnNzYSA9IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrOjpTU0FEYXRhKCkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFNTQTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdm9pZCBmb3J3YXJkUGhpQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsK
KyAgICAgICAgICAgIEVkZ2UmIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAg
ICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IG1fY2hhbmdlZCB8PSBmb3J3YXJkUGhpRWRnZShlZGdlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBOb2RlKiBmb3J3YXJkUGhpKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3Ig
KDs7KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgUGhpOiB7CisgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+anVzdE9uZUNoaWxk
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWRnZS5ub2RlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgYm9vbCBmb3J3YXJkUGhpRWRnZShFZGdlJiBlZGdlKQorICAgIHsKKyAg
ICAgICAgTm9kZSogbmV3Tm9kZSA9IGZvcndhcmQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAo
bmV3Tm9kZSA9PSBlZGdlLm5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkZWR1cGxpY2F0ZUNoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7
CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAg
ICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlm
IChlZGdlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVF
ZGdlKGktLSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IGkgKyAxOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytqKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGopID09IGVkZ2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShqLS0pOworICAgICAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGZvcndhcmROb2RlQ2hpbGRyZW4oTm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5v
ZGUsIGZvcndhcmROb2RlRWRnZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm9yd2FyZE5vZGVF
ZGdlKE5vZGUqLCBFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgCisg
ICAgICAgIHN3aXRjaCAoZWRnZS0+b3AoKSkgeworICAgICAgICBjYXNlIEdldExvY2FsOgorICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsT3AoTm9kZSogbm9k
ZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcHMuYWRkKG5vZGUp
OworICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgIH0K
KworICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsRWRnZShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsK
KyAgICAgICAgYWRkRmx1c2hlZExvY2FsT3AoZWRnZS5ub2RlKCkpOworICAgIH0KKworICAgIElu
c2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2ZsdXNoZWRM
b2NhbE9wczsKKyAgICBWZWN0b3I8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKKyAg
ICBib29sIG1fY2hhbmdlZDsKK307CisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNpb24oR3JhcGgm
IGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgU1NBIENv
bnZlcnNpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U1NBQ29udmVyc2lvblBoYXNl
PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKyNkZWZpbmUgREZHU1NBQ29udmVyc2lv
blBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisK
Ky8vIENvbnZlcnQgVGhyZWFkZWRDUFMgZm9ybSBpbnRvIFNTQSBmb3JtLiBUaGlzIHJlc3VsdHMg
aW4gYSBmb3JtIHRoYXQgaGFzOgorLy8KKy8vIC0gUm91Z2hseSBtaW5pbWFsIFBoaSdzLiBXZSB1
c2UgdGhlIEF5Y29jayAmIEhvcnNwb29sIGZpeHBvaW50IGZvcgorLy8gICBjb252ZXJ0aW5nIHRo
ZSBDUFMgbWF4aW1hbCBQaGlzIGludG8gU1NBIG1pbmltYWwgUGhpcywgd2l0aCB0aGUgY2F2ZWF0
CisvLyAgIHRoYXQgaXJyZWR1Y2libGUgY29udHJvbCBmbG93IG1heSByZXN1bHQgaW4gc29tZSBt
aXNzZWQgb3Bwb3J0dW5pdGllcworLy8gICBmb3IgUGhpIHJlZHVjdGlvbi4KKy8vCisvLyAtIE5v
IHVzZXMgb2YgR2V0TG9jYWwvU2V0TG9jYWwgZXhjZXB0IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMg
YW5kIGZsdXNoZXMuCisvLyAgIEFmdGVyIHRoaXMsIGFueSByZW1haW5pbmcgU2V0TG9jYWwgbWVh
bnMgRmx1c2guIEZsdXNoIG5vZGVzIGFyZQorLy8gICBlbGltaW5hdGVkLiBQaGFudG9tTG9jYWxz
IGJlY29tZSBQaGFudG9tcy4gTm9kZXMgbWF5IG1heSBoYXZlIGNoaWxkcmVuCisvLyAgIHRoYXQg
YXJlIGluIGFub3RoZXIgYmFzaWMgYmxvY2suCisvLworLy8gLSBNb3ZIaW50cyBhcmUgdXNlZCBm
b3IgT1NSIGluZm9ybWF0aW9uLCBhbmQgYXJlIHRoZW1zZWx2ZXMgbWluaW1hbC4KKy8vICAgQSBN
b3ZIaW50IHdpbGwgb2NjdXIgYXQgc29tZSBwb2ludCBhZnRlciB0aGUgYXNzaWduaW5nLCBhbmQg
YXQgUGhpCisvLyAgIHBvaW50cy4KKy8vCisvLyAtIFVubGlrZSBjb252ZW50aW9uYWwgU1NBIGlu
IHdoaWNoIFBoaSBmdW5jdGlvbnMgcmVmZXIgdG8gcHJlZGVjZXNzb3JzCisvLyAgIGFuZCB2YWx1
ZXMsIG91ciBTU0EgdXNlcyBVcHNpbG9uIGZ1bmN0aW9ucyB0byBpbmRpY2F0ZSB2YWx1ZXMgaW4K
Ky8vICAgcHJlZGVjZXNzb3JzLiBBIG1lcmdlIHdpbGwgbG9vayBsaWtlOgorLy8KKy8vICAgbGFi
ZWxBOgorLy8gICAgICAgYTogVGhpbmd5KC4uLikKKy8vICAgICAgIGI6IFVwc2lsb24oJGUsIEBh
KQorLy8gICAgICAgSnVtcChsYWJlbEMpCisvLworLy8gICBsYWJlbEI6CisvLyAgICAgICBjOiBP
dGhlclRoaW5neSguLi4pCisvLyAgICAgICBkOiBVcHNpbG9uKCRlLCBAYykKKy8vICAgICAgIEp1
bXAobGFiZWxDKQorLy8KKy8vICAgbGFiZWxDOgorLy8gICAgICAgZTogUGhpKCkKKy8vCisvLyAg
IE5vdGUgdGhhdCB0aGUgUGhpIGhhcyBubyBjaGlsZHJlbiwgYnV0IHRoZSBwcmVkZWNlc3NvcnMg
aGF2ZSBVcHNpbG9ucworLy8gICB0aGF0IGhhdmUgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgUGhp
ICgkZSBpbnN0ZWFkIG9mIEBlOyB3ZSBzdG9yZSBpdAorLy8gICBpbiB0aGUgT3BJbmZvIHJhdGhl
ciB0aGFuIHRoZSBBZGphY2VuY3lMaXN0KS4gVGhpbmsgb2YgdGhlIFVwc2lsb24KKy8vICAgYXMg
ImFzc2lnbmluZyIgdG8gdGhlICJ2YXJpYWJsZSIgYXNzb2NpYXRlZCB3aXRoIHRoZSBQaGksIGFu
ZCB0aGF0CisvLyAgIHRoaXMgaXMgdGhlIG9uZSBwbGFjZSBpbiBTU0EgZm9ybSB3aGVyZSB5b3Ug
Y2FuIGhhdmUgbXVsdGlwbGUKKy8vICAgYXNzaWdubWVudHMuCisvLworLy8gICBUaGlzIGltcGxp
ZXMgc29tZSBvdGhlciBsb29zZW5pbmdzIG9mIFNTQS4gRm9yIGV4YW1wbGUsIGFuIFVwc2lsb24K
Ky8vICAgbWF5IHByZWNlZGUgYSBQaGkgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2s7IHRoaXMgbWF5
IGFyaXNlIGFmdGVyIENGRworLy8gICBzaW1wbGlmaWNhdGlvbi4gQWx0aG91Z2ggaXQncyBwcm9m
aXRhYmxlIGZvciBDRkcgc2ltcGxpZmljYXRpb24gKG9yCisvLyAgIHNvbWUgb3RoZXIgcGhhc2Up
IHRvIHJlbW92ZSB0aGVzZSwgaXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBBcworLy8gICB3
ZWxsLCB0aGlzIGZvcm0gYWxsb3dzIHRoZSBVcHNpbG9uIHRvIGJlIGluIGFueSBibG9jayB0aGF0
IGRvbWluYXRlcworLy8gICB0aGUgcHJlZGVjZXNzb3IgYmxvY2sgb2YgdGhlIFBoaSwgd2hpY2gg
YWxsb3dzIGZvciBibG9jayBzcGxpdHRpbmcgdG8KKy8vICAgaWdub3JlIHRoZSBwb3NzaWJpbGl0
eSBvZiBpbnRyb2R1Y2luZyBhbiBleHRyYSBlZGdlIGJldHdlZW4gdGhlIFBoaQorLy8gICBhbmQg
dGhlIHByZWRlY2Vzc29yICh0aG91Z2ggbm9ybWFsIFNTQSB3b3VsZCBhbGxvdyB0aGlzLCBhbHNv
LCB3aXRoCisvLyAgIHRoZSBjYXZlYXQgdGhhdCB0aGUgUGhpIHByZWRlY2Vzc29yIGJsb2NrIGxp
c3RzIHdvdWxkIGhhdmUgdG8gYmUKKy8vICAgdXBkYXRlZCkuCisvLworLy8gICBUaGUgZWFzaWVz
dCB3YXkgdG8gY29udmVydCBmcm9tIHRoaXMgU1NBIGZvcm0gaW50byBhIGRpZmZlcmVudCBTU0EK
Ky8vICAgZm9ybSBpcyB0byByZWRvIFNTQSBjb252ZXJzaW9uIGZvciBQaGkgZnVuY3Rpb25zLiBU
aGF0IGlzLCB0cmVhdCBlYWNoCisvLyAgIFBoaSBpbiBvdXIgSVIgYXMgYSBub24tU1NBIHZhcmlh
YmxlIGluIHRoZSBmb3JlaWduIElSIChzbywgYXMgYW4KKy8vICAgYWxsb2NhIGluIExMVk0gSVIs
IGZvciBleGFtcGxlKTsgdGhlIFVwc2lsb25zIHRoYXQgcmVmZXIgdG8gdGhlIFBoaQorLy8gICBi
ZWNvbWUgc3RvcmVzIGFuZCB0aGUgUGhpcyB0aGVtc2VsdmVzIGJlY29tZSBsb2Fkcy4KKy8vCisv
LyAgIEZ1biBmYWN0OiBVcHNpbG9uIGlzIHNvIG5hbWVkIGJlY2F1c2UgaXQgY29tZXMgYmVmb3Jl
IFBoaSBpbiB0aGUKKy8vICAgYWxwaGFiZXQuIEl0IGNhbiBiZSB3cml0dGVuIGFzICJZIi4KKwor
Ym9vbCBwZXJmb3JtU1NBQ29udmVyc2lvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1NTQUNv
bnZlcnNpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
RENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U1NBRENFUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR1NTQURDRVBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5o
IgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBTU0FEQ0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAg
U1NBRENFUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiU1NBIGRl
YWQgY29kZSBlbGltaW5hdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigp
CisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAg
CisgICAgICAgIC8vIExpdmVuZXNzIGlzIGEgYmFja3dhcmRzIGFuYWx5c2lzOyB0aGUgcm9vdHMg
YXJlIHRoZSBibG9ja3MgdGhhdAorICAgICAgICAvLyBlbmQgaW4gYSB0ZXJtaW5hbCAoUmV0dXJu
L1Rocm93L1Rocm93UmVmZXJlbmNlRXJyb3IpLiBGb3Igbm93LCB3ZQorICAgICAgICAvLyB1c2Ug
YSBmaXhwb2ludCBmb3JtdWxhdGlvbiBzaW5jZSBsaXZlbmVzcyBpcyBhIHJhcGlkIGFuYWx5c2lz
IHdpdGgKKyAgICAgICAgLy8gY29udmVyZ2VuY2UgZ3VhcmFudGVlZCBhZnRlciBPKGNvbm5lY3Rp
dml0eSkuCisgICAgICAgIAorICAgICAgICAvLyBTdGFydCBieSBhc3N1bWluZyB0aGF0IGV2ZXJ5
dGhpbmcgaXMgZGVhZC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYmxvY2stPmxpdmVB
dEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT5saXZlQXRUYWlsLmNsZWFyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykKKyAg
ICAgICAgICAgICAgICBwcm9jZXNzKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFtX2No
YW5nZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Js
b2NrSW5kZXgpCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9ja0luZGV4KTsKKyAgICAgICAg
fSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNTQSArIEV4YWN0UmVm
Q291bnQgbWVhbnMgdGhhdCB3ZSBoYXZlIGxpdmVuZXNzIGluZm9ybWF0aW9uCisgICAgICAgIC8v
IChsaXZlQXRIZWFkL2xpdmVBdFRhaWwpLgorICAgICAgICBtX2dyYXBoLm1fcmVmQ291bnRTdGF0
ZSA9IEV4YWN0UmVmQ291bnQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAg
ICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4
KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIC8vIEhhbmRsaW5nIFVwc2lsb24ncyB3aWxsIGJlIHNvb3BlciB3ZWlyZC4gSSBndWVz
cyBpdCBtYWtlcyBzZW5zZSBmb3IgdGhlbQorICAgICAgICAvLyB0byBiZSByZWYnZCBieSB0aGUg
UGhpcyBldmVuIHRob3VnaCB0aGV5IGFyZW4ndCByZWZlcnJlZCB0byBieSB0aGUgUGhpcy4KKyAg
ICB9CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7CisgICAgSGFzaFNldDxOb2RlKj4gbV9saXZl
OworfTsKKworYm9vbCBwZXJmb3JtRENFKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1Jl
Z2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFNTQSBEQ0UgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVu
UGhhc2U8U1NBRENFUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBRENFUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQURDRVBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQURDRVBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR1NTQURDRVBoYXNlX2gKKyNkZWZpbmUgREZHU1NBRENFUGhhc2VfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdy
YXBoOworCisvLyBHbG9iYWwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIG92ZXIgU1NBLiBFbGltaW5h
dGVzIGFueSBub2RlIHRoYXQgaXMgbm90CisvLyBOb2RlTXVzdEdlbmVyYXRlLCBub3QgdXNlZCBi
eSBhbnkgb3RoZXIgbGl2ZSBub2RlLCBhbmQgbm90IHN1YmplY3QgdG8gYW55CisvLyB0eXBlIGNo
ZWNrLiBBbHNvIGNvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+bGl2ZUF0SGVhZC9saXZlQXRUYWls
LgorCitib29sIHBlcmZvcm1TU0FEQ0UoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTU0FEQ0VQ
aGFzZV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCQkwRkQ4MUFDNTE1NEZCMjJF
MDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwRkREQkZBNzE2
NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8q
IFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVG
IC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJl
YW0uaCAqLzsgfTsKKwkJMEZFNTA1NTcxNzg3QTgwNjAwQjM1RjhDIC8qIEluc2VydGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTYxNzg3
QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovOyB9OwogCQkxNDNGNjExRjE1NjVGMEY5MDBE
QjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi87IH07
CiAJCTE0M0Y2MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEg
LyogUkFNU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTE0
Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Njk0MTkwMTZFQUFGNkQwMDI0RTE0NiAv
KiBSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMzUyLDYgKzM1Myw3IEBACiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAv
KiBGYXN0Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RC
aXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2REZB
MzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFt
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAv
KiBJbnNlcnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zZXJ0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJBTVNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSQU1TaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC03ODUsNiArNzg3LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIz
RkYgLyogSGFzaFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBI
ZXhOdW1iZXIuaCAqLywKIAkJCQlBOEE0NzJCQzE1MUE4MjVBMDA0MTIzRkYgLyogSW5saW5lQVNN
LmggKi8sCisJCQkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovLAog
CQkJCUE4QTQ3MkJFMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQThB
NDcyQkYxNTFBODI1QTAwNDEyM0ZGIC8qIEludDMyQXJyYXkuaCAqLywKIAkJCQlBOEE0NzJCRDE1
MUE4MjVBMDA0MTIzRkYgLyogSW50OEFycmF5LmggKi8sCkBAIC0xMTgxLDYgKzExODQsNyBAQAog
CQkJCUE4QTQ3M0U4MTUxQTgyNUIwMDQxMjNGRiAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzNFQTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmggaW4gSGVhZGVycyAqLywK
IAkJCQlDRDU0OTdBRDE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0RjFEMTE1NDE1RkYxMUJFMDAyNkU5MDggLyogTWVtb3J5SW5zdHJ1bWVudGF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RkQ4NTU0NzE2MTMzRTBFMDBDNUI3MDQgLyogTWVt
b3J5SW5zdHJ1bWVudGF0aW9uQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlG
M0ZCQzcxRTE2MUFGN0JGMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50
ZWRTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSW5zZXJ0aW9uX2gKKyNkZWZpbmUgSW5zZXJ0aW9uX2gKKworbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBJbnNlcnRpb24geworcHVibGljOgorICAgIElu
c2VydGlvbigpIHsgfQorICAgIAorICAgIEluc2VydGlvbihzaXplX3QgaW5kZXgsIFQgZWxlbWVu
dCkKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleDsgfQorICAgIFQgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEluc2VydGlvbiYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9pbmRleCA8IG90aGVyLm1faW5kZXg7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBzaXplX3QgbV9pbmRleDsKKyAgICBUIG1fZWxlbWVudDsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFRhcmdldFZlY3RvclR5cGUsIHR5cGVuYW1lIEluc2VydGlvblZl
Y3RvclR5cGU+Cit2b2lkIGV4ZWN1dGVJbnNlcnRpb25zKFRhcmdldFZlY3RvclR5cGUmIHRhcmdl
dCwgSW5zZXJ0aW9uVmVjdG9yVHlwZSYgaW5zZXJ0aW9ucykKK3sKKyAgICBpZiAoIWluc2VydGlv
bnMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgdGFyZ2V0Lmdyb3codGFyZ2V0LnNpemUo
KSArIGluc2VydGlvbnMuc2l6ZSgpKTsKKyAgICBzaXplX3QgbGFzdEluZGV4ID0gdGFyZ2V0LnNp
emUoKTsKKyAgICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9ucyA9IGluc2VydGlvbnMuc2l6
ZSgpOyBpbmRleEluSW5zZXJ0aW9ucy0tOykgeworICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9
IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9u
czsKKyAgICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJzdEluZGV4OykKKyAg
ICAgICAgICAgIHRhcmdldFtpXSA9IHRhcmdldFtpIC0gaW5kZXhPZmZzZXRdOworICAgICAgICB0
YXJnZXRbZmlyc3RJbmRleF0gPSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5lbGVtZW50
KCk7CisgICAgICAgIGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7CisgICAgfQorICAgIGluc2VydGlv
bnMucmVzaXplKDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpJbnNl
cnRpb247Cit1c2luZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zOworCisjZW5kaWYgLy8gSW5zZXJ0
aW9uX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206254</attachid>
            <date>2013-07-08 09:49:44 -0700</date>
            <delta_ts>2013-07-08 16:58:50 -0700</delta_ts>
            <desc>liveness analysis is done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>71693</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9j
YWxGaXJzdFRpbWUob3BlcmFuZCwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFy
KCkKKyAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IHZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgp
OworICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBmaWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODYsNiArMTU4NiwxNiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgY2FzZSBQaGk6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3Jt
ID09IFNTQSk7CisgICAgICAgIC8vIFRoZSBzdGF0ZSBvZiB0aGlzIG5vZGUgd291bGQgaGF2ZSBh
bHJlYWR5IGJlZW4gZGVjaWRlZC4KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2Ug
VXBzaWxvbjoKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBmb3JOb2Rl
KG5vZGUtPnBoaSgpKSA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgY2Fz
ZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICBjYXNlIEJyZWFrcG9pbnQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2
aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDE1IEBAIHB1YmxpYzoKICAgICAKICAg
ICBFZGdlIGNoaWxkMVVuY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29yZHNbMF07IH0KICAg
ICAKKyAgICBFZGdlIGp1c3RPbmVDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISFj
aGlsZDEoKSAmJiAhY2hpbGQyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBF
ZGdlKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZShFZGdlIGNoaWxkMSwgRWRn
ZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAgIHsKICAgICAgICAgY2hpbGQoMCkgPSBjaGlsZDE7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNp
b24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJERkdOb2RlLmgiCiAj
aW5jbHVkZSAiREZHVmFyaWFkaWNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTgwLDYgKzgy
LDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KICAgICBOb2RlKiYgYXQoc2l6ZV90
IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAgICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3Qg
eyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5vZGUqJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7
IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsg
cmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUo
KSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpIHsgbV9ub2Rlcy5yZXNpemUo
c2l6ZSk7IH0KQEAgLTEzMCw2ICsxMzMsMTEgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3Vu
dGVkPEJhc2ljQmxvYwogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVG
SU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKKyNk
ZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0
eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisg
ICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9uVGVy
bWluYWwoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1z
KTsKKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRf
Tk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCisgICAgCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewogICAgICAgICBvdXQucHJpbnQoIiMiLCBp
bmRleCk7CkBAIC0xNjAsNiArMTY4LDE0IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRl
ZDxCYXNpY0Jsb2MKICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhl
YWQ7CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworICAgIAorICAg
IHN0cnVjdCBTU0FEYXRhIHsKKyAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKKyAg
ICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwg
QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0
cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7CisgICAgfTsKKyAgICBPd25QdHI8U1NBRGF0YT4gc3Nh
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZp
c2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDE3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZH
X0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAKKyNk
ZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0
eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisg
ICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2lj
QmxvY2s6OmFwcGVuZE5vblRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgeyBcCisgICAgICAgIE5vZGUq
IHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7
IFwKKyAgICAgICAgYXBwZW5kKGxhc3QoKSk7IFwKKyAgICAgICAgYXQoc2l6ZSgpIC0gMikgPSBy
ZXN1bHQ7IFwKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKyAgICBERkdfVkFSSUFE
SUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdf
REVGSU5FX0FQUEVORF9OT0RFCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
bG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25T
ZXQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChHcmFwaCYgZ3Jh
cGgpCisgICAgOiBtX2dyYXBoKGdyYXBoKQoreworfQorCitCbG9ja0luc2VydGlvblNldDo6fkJs
b2NrSW5zZXJ0aW9uU2V0KCkgeyB9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChj
b25zdCBCbG9ja0luc2VydGlvbiYgaW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5hcHBl
bmQoaW5zZXJ0aW9uKTsKK30KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVf
dCBpbmRleCwgUGFzc1JlZlB0cjxCYXNpY0Jsb2NrPiBibG9jaykKK3sKKyAgICBpbnNlcnQoQmxv
Y2tJbnNlcnRpb24oaW5kZXgsIGJsb2NrKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4KQoreworICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBi
bG9jayA9IGFkb3B0UmVmKG5ldyBCYXNpY0Jsb2NrKAorICAgICAgICBVSU5UX01BWCwKKyAgICAg
ICAgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCks
CisgICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fs
cygpKSk7CisgICAgaW5zZXJ0KGluZGV4LCBibG9jayk7CisgICAgcmV0dXJuIGJsb2NrLmdldCgp
OworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2lj
QmxvY2sqIGJlZm9yZSkKK3sKKyAgICByZXR1cm4gaW5zZXJ0KGJsb2NrLT5pbmRleCk7Cit9CisK
K2Jvb2wgQmxvY2tJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoKQoreworICAgIGlmIChtX2luc2VydGlv
bnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxs
b3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVk
IHRvCisgICAgLy8gc29ydCB0aGVtIGJlZm9yZSBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlv
bnMuCisgICAgc3RkOjpzb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5k
KCkpOworCisgICAgZXhlY3V0ZUluc2VydGlvbnMobV9ncmFwaC5tX2Jsb2NrcywgbV9pbnNlcnRp
b25zKTsKKyAgICAKKyAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBz
dHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJs
b2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgIHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIHNvdXJjZUluZGV4ID0gMDsgc291cmNlSW5kZXggPCBtX2dyYXBoLm1f
YmxvY2tzLnNpemUoKTspIHsKKyAgICAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tzb3VyY2VJbmRleCsrXTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEluZGV4Kytd
ID0gYmxvY2s7CisgICAgfQorICAgIG1fZ3JhcGgubV9ibG9ja3MucmVzaXplKHRhcmdldEluZGV4
KTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3
IGluZGljZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbaV0tPmluZGV4ID0gaTsKKyAg
ICAKKyAgICAvLyBBbmQgZmluYWxseSwgaW52YWxpZGF0ZSBhbGwgYW5hbHlzZXMgdGhhdCByZWx5
IG9uIHRoZSBDRkcuCisgICAgbV9ncmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2Nr
SW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdCbG9ja0luc2VydGlvblNldF9oCisjZGVmaW5lIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
dHlwZWRlZiBXVEY6Okluc2VydGlvbjxSZWZQdHI8QmFzaWNCbG9jaz4gPiBCbG9ja0luc2VydGlv
bjsKKworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0
aW9uU2V0KEdyYXBoJiBncmFwaCk7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisg
ICAgdm9pZCBpbnNlcnQoY29uc3QgQmxvY2tJbnNlcnRpb24mIGluc2VydGlvbik7CisgICAgdm9p
ZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNzUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrKTsKKyAg
ICBCYXNpY0Jsb2NrKiBpbnNlcnQoc2l6ZV90IGluZGV4KTsKKyAgICBCYXNpY0Jsb2NrKiBpbnNl
cnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlKTsKKyAgICAKKyAgICBib29sIGV4ZWN1dGUoKTsK
KworcHJpdmF0ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRp
b24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tJbnNlcnRpb25T
ZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9u
IDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxMiw3ICsyMTIsMTAgQEAgZW51bSBHcmFwaEZvcm0gewogICAgIC8vCiAg
ICAgLy8gVGhyZWFkZWRDUFMgZm9ybSBpcyBzdWl0YWJsZSBmb3IgZGF0YSBmbG93IGFuYWx5c2lz
IChDRkEsIHByZWRpY3Rpb24KICAgICAvLyBwcm9wYWdhdGlvbiksIHJlZ2lzdGVyIGFsbG9jYXRp
b24sIGFuZCBjb2RlIGdlbmVyYXRpb24uCi0gICAgVGhyZWFkZWRDUFMKKyAgICBUaHJlYWRlZENQ
UywKKyAgICAKKyAgICAvLyBTU0EgZm9ybS4gU2VlIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIGZv
ciBhIGRlc2NyaXB0aW9uLgorICAgIFNTQQogfTsKIAogLy8gRGVzY3JpYmVzIHRoZSBzdGF0ZSBv
ZiB0aGUgVW5pb25GaW5kIHN0cnVjdHVyZSBvZiBWYXJpYWJsZUFjY2Vzc0RhdGEncy4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NyaXRpY2FsRWRn
ZUJyZWFraW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
QmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UgOiBwdWJsaWMgUGhh
c2UgeworcHVibGljOgorICAgIENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UoR3JhcGgmIGdyYXBo
KQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiY3JpdGljYWwgZWRnZSBicmVha2luZyIpCisgICAg
ICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29s
IHJ1bigpCisgICAgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAg
ICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEFuIGVkZ2UgQS0+QiBpcyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0
aXBsZSBzdWNjZXNzb3IgYW5kIEIgaGFzIG11bHRpcGxlCisgICAgICAgICAgICAvLyBwcmVkZWNl
c3NvcnMuIFRodXMgd2UgZmFpbCBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIG11bHRpcGxlIHN1Y2Nl
c3NvcnMuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChibG9jay0+bnVtU3VjY2Vzc29y
cygpIDw9IDEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsK
KyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiogc3VjY2Vzc29yID0gJmJsb2NrLT5zdWNjZXNz
b3IoaSk7CisgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLnNpemUo
KSA8PSAxKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBicmVha0NyaXRpY2FsRWRnZShibG9jaywgc3VjY2Vzc29yKTsgCisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2luc2Vy
dGlvblNldC5leGVjdXRlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgYnJlYWtDcml0
aWNhbEVkZ2UoCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBzdWNjZXNzb3JJ
bmRleCwgQmFzaWNCbG9jayoqIHN1Y2Nlc3NvcikKKyAgICB7CisgICAgICAgIG1fZ3JhcGguZGV0
aHJlYWQoKTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHBhZCA9IG1fcGFkcy5nZXQo
KnN1Y2Nlc3Nvcik7CisgICAgICAgIGlmICghcGFkKSB7CisgICAgICAgICAgICBwYWQgPSBtX2lu
c2VydGlvblNldC5pbnNlcnRCZWZvcmUoKnN1Y2Nlc3Nvcik7CisgICAgICAgICAgICBwYWQtPmFw
cGVuZE5vZGUobV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIE9wSW5mbygqc3VjY2Vzc29yKSk7Cisg
ICAgICAgICAgICBtX3BhZHMuYWRkKCpzdWNjZXNzb3IsIHBhZCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgICpzdWNjZXNzb3IgPSBwYWQ7CisgICAgfQorICAgIAorICAgIEJsb2NrSW5z
ZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIEJhc2lj
QmxvY2sqPiBtX3BhZHM7Cit9OworCitib29sIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhH
cmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBD
cml0aWNhbCBFZGdlIEJyZWFraW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPENyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2Fs
RWRnZUJyZWFraW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZV9oCisjZGVmaW5lIERGR0NyaXRpY2FsRWRnZUJyZWFraW5n
UGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKwor
Ly8gSW5zZXJ0cyBkdW1teSBiYXNpYyBibG9ja3MgdG8gYnJlYWsgY3JpdGljYWwgZWRnZXMuIEFu
IGVkZ2UgQS0+QiBpcworLy8gY3JpdGljYWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29ycyBh
bmQgQiBoYXMgbXVsdGlwbGUgcHJlZGVzc29ycy4KKworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdl
QnJlYWtpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJ
KHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAgICAKICAg
ICBib29sIHJ1bigpCiAgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhy
ZWFkZWRDUFMpOworICAgICAgICAKICAgICAgICAgLy8gRmlyc3QgcmVzZXQgdGhlIGNvdW50cyB0
byAwIGZvciBhbGwgbm9kZXMuCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewogICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZp
c2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyNiArMzEsMTIgQEAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCi1jbGFzcyBJbnNlcnRpb24gewotcHVibGljOgotICAgIEluc2VydGlvbigpIHsgfQotICAg
IAotICAgIEluc2VydGlvbihzaXplX3QgaW5kZXgsIE5vZGUqIGVsZW1lbnQpCi0gICAgICAgIDog
bV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KLSAg
ICBOb2RlKiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9Ci1wcml2YXRlOgot
ICAgIHNpemVfdCBtX2luZGV4OwotICAgIE5vZGUqIG1fZWxlbWVudDsKLX07Cit0eXBlZGVmIFdU
Rjo6SW5zZXJ0aW9uPE5vZGUqPiBJbnNlcnRpb247CiAKIGNsYXNzIEluc2VydGlvblNldCB7CiBw
dWJsaWM6CkBAIC04MSwyMCArNjcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBleGVjdXRl
KEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2luc2VydGlvbnMuc2l6
ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBibG9jay0+Z3JvdyhibG9jay0+c2l6
ZSgpICsgbV9pbnNlcnRpb25zLnNpemUoKSk7Ci0gICAgICAgIHNpemVfdCBsYXN0SW5kZXggPSBi
bG9jay0+c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9ucyA9IG1f
aW5zZXJ0aW9ucy5zaXplKCk7IGluZGV4SW5JbnNlcnRpb25zLS07KSB7Ci0gICAgICAgICAgICBJ
bnNlcnRpb24mIGluc2VydGlvbiA9IG1faW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc107Ci0g
ICAgICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbi5pbmRleCgpICsgaW5kZXhJ
bkluc2VydGlvbnM7Ci0gICAgICAgICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5z
ZXJ0aW9ucyArIDE7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkg
PiBmaXJzdEluZGV4OykKLSAgICAgICAgICAgICAgICBibG9jay0+YXQoaSkgPSBibG9jay0+YXQo
aSAtIGluZGV4T2Zmc2V0KTsKLSAgICAgICAgICAgIGJsb2NrLT5hdChmaXJzdEluZGV4KSA9IGlu
c2VydGlvbi5lbGVtZW50KCk7Ci0gICAgICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4Owot
ICAgICAgICB9Ci0gICAgICAgIG1faW5zZXJ0aW9ucy5yZXNpemUoMCk7CisgICAgICAgIGV4ZWN1
dGVJbnNlcnRpb25zKCpibG9jaywgbV9pbnNlcnRpb25zKTsKICAgICB9CiBwcml2YXRlOgogICAg
IEdyYXBoJiBtX2dyYXBoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJE
RkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBMaXZl
bmVzc0FuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIExpdmVuZXNz
QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJsaXZl
bmVzcyBhbmFseXNpcyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAg
eworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIExpdmVuZXNzIGlzIGEgYmFja3dhcmRzIGFuYWx5c2lzOyB0aGUgcm9vdHMgYXJlIHRo
ZSBibG9ja3MgdGhhdAorICAgICAgICAvLyBlbmQgaW4gYSB0ZXJtaW5hbCAoUmV0dXJuL1Rocm93
L1Rocm93UmVmZXJlbmNlRXJyb3IpLiBGb3Igbm93LCB3ZQorICAgICAgICAvLyB1c2UgYSBmaXhw
b2ludCBmb3JtdWxhdGlvbiBzaW5jZSBsaXZlbmVzcyBpcyBhIHJhcGlkIGFuYWx5c2lzIHdpdGgK
KyAgICAgICAgLy8gY29udmVyZ2VuY2UgZ3VhcmFudGVlZCBhZnRlciBPKGNvbm5lY3Rpdml0eSku
CisgICAgICAgIAorICAgICAgICAvLyBTdGFydCBieSBhc3N1bWluZyB0aGF0IGV2ZXJ5dGhpbmcg
aXMgZGVhZC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYmxvY2stPmxpdmVBdEhlYWQu
Y2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT5saXZlQXRUYWlsLmNsZWFyKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykKKyAgICAgICAg
ICAgICAgICBwcm9jZXNzKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5k
ZXgpCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9ja0luZGV4KTsKKyAgICAgICAgfSB3aGls
ZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsK
KyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwor
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBz
dGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKKyAgICAgICAgbV9saXZlID0gYmxv
Y2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIEdpdmVuIGFuIFVwc2lsb246CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gICAg
bjogVXBzaWxvbigkcCwgQHgpCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Ugc2F5
IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFuZCB1c2VzIEB4LgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIEdpdmVuIGEgUGhpOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
ICAgIHA6IFBoaSgpCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Ugc2F5IG5vdGhp
bmcuIEl0J3MgbmVpdGhlciBhIHVzZSBub3IgYSBkZWYuCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gR2l2ZW4gYSBub2RlOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAg
IG46IFRoaW5neShAYSwgQGIsIEBjKQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdl
IHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwgQGMuCisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBVcHNp
bG9uOiB7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+cGhpKCk7CisgICAgICAg
ICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkpOworICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1v
dmUobm9kZSk7CisgICAgICAgICAgICAgICAgbV9saXZlLmFkZChub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAgICAgICAgICAgICBERkdfTk9E
RV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRDaGlsZFVzZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgIGJsb2NrLT5z
c2EtPmxpdmVBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2Nr
LT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgYmxvY2stPnNzYS0+bGl2
ZUF0VGFpbC5hZGQobV9saXZlLmJlZ2luKCksIG1fbGl2ZS5lbmQoKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIG1f
bGl2ZS5hZGQoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG1fY2hhbmdlZDsK
KyAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7Cit9OworCitib29sIHBlcmZvcm1EQ0UoR3JhcGgm
IGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgTGl2ZW5l
c3MgQW5hbHlzaXMgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8TGl2ZW5lc3NBbmFseXNp
c1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorI2RlZmlu
ZSBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb21wdXRl
cyBCYXNpY0Jsb2NrOjpzc2EtPmxpdmVBdEhlYWQvbGl2ZUF0VGFpbC4KKworYm9vbCBwZXJmb3Jt
TGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xpdmVuZXNzQW5hbHlz
aXNQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTM4LDYgKzUzOCwxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisg
ICAgYm9vbCBoYXNQaGkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gVXBzaWxvbjsK
KyAgICB9CisgICAgCisgICAgTm9kZSogcGhpKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNQ
aGkoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KG1fb3BJbmZvKTsKKyAg
ICB9CisgICAgCiAgICAgYm9vbCBoYXNJZGVudGlmaWVyKCkKICAgICB7CiAgICAgICAgIHN3aXRj
aCAob3AoKSkgewpAQCAtNzczLDE2ICs3ODQsMTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBt
X29wSW5mbzIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7CiAgICAgfQogICAgIAot
ICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2soKQorICAgIEJhc2ljQmxvY2sqJiB0YWtlbkJsb2Nr
KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKLSAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8pOworICAgICAgICBy
ZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbyk7CiAgICAgfQogICAg
IAotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuQmxvY2soKQorICAgIEJhc2ljQmxvY2sqJiBub3RU
YWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKLSAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8yKTsKKyAgICAgICAgcmV0
dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcEluZm8yKTsKICAgICB9CiAgICAg
CiAgICAgU3dpdGNoRGF0YSogc3dpdGNoRGF0YSgpCkBAIC04MDUsNyArODE2LDcgQEAgc3RydWN0
IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
cih1bnNpZ25lZCBpbmRleCkKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KQogICAgIHsKICAgICAgICAgaWYgKGlzU3dpdGNoKCkpIHsKICAgICAgICAgICAgIGlmIChp
bmRleCA8IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhab21iaWVIaW50
LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBtYWNybyhVcHNpbG9u
LCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikgXAogICAgIG1hY3JvKFBoaSwg
Tm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwKICAgICBtYWNybyhGbHVzaCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBoYW50b21M
b2NhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NzIsMTQgKzQ3MiwxOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsK
ICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlz
IHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkg
Zml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgotICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgICAg
ICAvLyBQaGlzIHNob3VsZCBub3QgYmUgdmlzaWJsZSBoZXJlIHNpbmNlIHdlJ3JlIGl0ZXJhdGlu
ZyB0aGUgYWxsLWJ1dC1QaGkncwogICAgICAgICAgICAgLy8gcGFydCBvZiBiYXNpYyBibG9ja3Mu
Ci0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
VXBzaWxvbjoKKyAgICAgICAgICAgIC8vIFRoZXNlIGRvbid0IGdldCBpbnNlcnRlZCB1bnRpbCB3
ZSBnbyBpbnRvIFNTQS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEdldFNjb3BlOgpAQCAtNTQxLDcg
KzU0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIExhc3ROb2RlVHlwZToKLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAjZWxz
ZQogICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU1NBQ29udmVyc2lv
blBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAg
ICBTU0FDb252ZXJzaW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBo
LCAiU1NBIGNvbnZlcnNpb24iKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAg
ICAgICAsIG1fbm9uVHJpdmlhbFBoaXMoT3BlcmFuZHNMaWtlLCBncmFwaC5ibG9jaygwKS0+dmFy
aWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fY2hhbmdlZChmYWxzZSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZpZ3VyZSBv
dXQgd2hpY2ggU2V0TG9jYWwncyBuZWVkIGZsdXNoaW5nLiBOZWVkIHRvIGRvIHRoaXMgd2hpbGUg
dGhlCisgICAgICAgIC8vIFBoaSBncmFwaCBpcyBzdGlsbCBpbnRhY3QuCisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsg
bm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IEZsdXNoKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaGVkTG9j
YWxPcChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoIW1f
Zmx1c2hlZExvY2FsT3BXb3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIEFT
U0VSVChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSk7CisgICAgICAgICAgICBERkdf
Tk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRWxpbWluYXRlIGFsbCBkdXBsaWNhdGUg
b3Igc2VsZi1wb2ludGluZyBQaGkgZWRnZXMuIFRoaXMgbWVhbnMgdGhhdAorICAgICAgICAvLyB3
ZSB0cmFuc2Zvcm06CisgICAgICAgIC8vCisgICAgICAgIC8vIHA6IFBoaShAbjEsIEBuMiwgQG4z
KQorICAgICAgICAvLworICAgICAgICAvLyBpbnRvOgorICAgICAgICAvLworICAgICAgICAvLyBw
OiBQaGkoQHgpCisgICAgICAgIC8vCisgICAgICAgIC8vIGlmIGVhY2ggQG5pIGluIHtAbjEsIEBu
MiwgQG4zfSBpcyBlaXRoZXIgZXF1YWwgdG8gQHAgdG8gaXMgZXF1YWwKKyAgICAgICAgLy8gdG8g
QHgsIGZvciBleGFjdGx5IG9uZSBvdGhlciBAeC4gQWRkaXRpb25hbGx5LCB0cml2aWFsIFBoaXMg
KGkuZS4KKyAgICAgICAgLy8gcDogUGhpKEB4KSkgYXJlIGZvcndhcmRlZCwgc28gdGhhdCBpZiBo
YXZlIGFuIGVkZ2UgdG8gc3VjaCBAcCwgd2UKKyAgICAgICAgLy8gcmVwbGFjZSBpdCB3aXRoIEB4
LiBUaGlzIGxvb3AgZG9lcyB0aGlzIGZvciBQaGlzIG9ubHk7IGxhdGVyIHdlIGRvCisgICAgICAg
IC8vIHN1Y2ggZm9yd2FyZGluZyBmb3IgUGhpIHJlZmVyZW5jZXMgZm91bmQgaW4gb3RoZXIgbm9k
ZXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIFNlZSBBeWNvY2sgYW5kIEhvcnNwb29sIGluIEND
JzAwIGZvciBhIGJldHRlciBkZXNjcmlwdGlvbiBvZiB3aGF0CisgICAgICAgIC8vIHdlJ3JlIGRv
aW5nIGhlcmUuCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJsb2NrLT5waGlzW3BoaUluZGV4XTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICBmb3J3YXJkUGhpQ2hpbGRyZW4ocGhpKTsKKyAgICAgICAgICAgICAgICAgICAgZGVkdXBsaWNh
dGVDaGlsZHJlbihwaGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZvciBlYWNoIGJh
c2ljIGJsb2NrLCBmb3IgZWFjaCBsb2NhbCBsaXZlIGF0IHRoZSBoZWFkIG9mIHRoYXQgYmxvY2ss
CisgICAgICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBub2RlIHdlIHNob3VsZCBiZSByZWZlcnJpbmcg
dG8gaW5zdGVhZCBvZiB0aGF0IGxvY2FsLgorICAgICAgICAvLyBJZiBpdCB0dXJucyBvdXQgdG8g
YmUgYSBub24tdHJpdmlhbCBQaGksIG1ha2Ugc3VyZSB0aGF0IHRvIGNyZWF0ZSBhbgorICAgICAg
ICAvLyBTU0EgUGhpIGFuZCBVcHNpbG9ucyBpbiBwcmVkZWNlc3NvciBibG9ja3MuIFdlIHJldXNl
CisgICAgICAgIC8vIEJhc2ljQmxvY2s6OnZhcmlhYmxlc0F0SGVhZCBmb3IgdHJhY2tpbmcgd2hp
Y2ggbm9kZXMgdG8gcmVmZXIgdG8uCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0
SGVhZFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBQb2lzb24gdGhpcyBlbnRyeSBpbiB2YXJpYWJsZXNBdEhlYWQgYmVjYXVzZSB3ZSBkb24n
dAorICAgICAgICAgICAgICAgICAgICAvLyB3YW50IGFueW9uZSB0byB0cnkgdG8gcmVmZXIgdG8g
aXQsIGlmIHRoZSB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICAvLyBjYXB0dXJlZC4K
KyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXSA9IDA7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAg
ICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoaSB8fCBub2Rl
LT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdl
ID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChlZGdlKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVkZ2Uubm9kZSgpOworICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3Mg
YSBub24tdHJpdmlhbCBQaGkuCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0KDAsIFNwZWNOb25lLCBQaGkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJl
ZGVjZXNzb3JzLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiB1cHNpbG9uID0gcHJlZGVjZXNzb3ItPmFwcGVuZE5v
blRlcm1pbmFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVj
Tm9uZSwgVXBzaWxvbiwgT3BJbmZvKG5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsW2ldKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IFNwZWNOb25lLCBNb3ZIaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhi
bG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCktPnZhcmlhYmxlQWNjZXNzRGF0
YSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gbm9kZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIENvbnZlcnQgb3BlcmF0aW9ucyBvdmVyIGxvY2FscyBpbnRvIG9w
ZXJhdGlvbnMgb3ZlciBTU0Egbm9kZXMuCisgICAgICAgIC8vIC0gR2V0TG9jYWwgb3ZlciBjYXB0
dXJlZCB2YXJpYWJsZXMgbG9zZSB0aGVpciBwaGlzLgorICAgICAgICAvLyAtIEdldExvY2FsIG92
ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVu
Y2VzCisgICAgICAgIC8vICAgdG8gdGhlIG5vZGUgc3BlY2lmaWVkIGJ5IHZhcmlhYmxlc0F0SGVh
ZC4KKyAgICAgICAgLy8gLSBTZXRMb2NhbCBlaXRoZXIgc3RheXMgU2V0TG9jYWwsIGlmIGl0J3Mg
Zmx1c2hlZCwgb3IgdHVybnMgaW50bworICAgICAgICAvLyAgIE1vdkhpbnRBbmRDaGVjay4KKyAg
ICAgICAgLy8gLSBGbHVzaCBsb3NlcyBpdHMgY2hpbGRyZW4gYW5kIHR1cm5zIGludG8gYSBQaGFu
dG9tIChpLmUuIGl0IGRpZXMpLgorICAgICAgICAvLyAtIFBoYW50b21Mb2NhbCBiZWNvbWVzIFBo
YW50b20sIGFuZCBpdHMgY2hpbGQgaXMgd2hhdGV2ZXIgaXMgc3BlY2lmaWVkCisgICAgICAgIC8v
ICAgYnkgdmFyaWFibGVzQXRIZWFkLgorICAgICAgICAvLyAtIFNldEFyZ3VtZW50IHR1cm5zIGlu
dG8gR2V0TG9jYWwuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9j
aykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisg
ICAgICAgICAgICAgICAgYmxvY2stPmF0KG5vZGVJbmRleCktPnJlcGxhY2VtZW50ID0gMDsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2Rl
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5j
b250YWlucyhub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZIaW50QW5kQ2hlY2spOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0
VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOiB7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldE5vZGUoYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IFNldEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVs
dEZsYWdzKEdldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBGcmVlIGFsbCBwaGlzIGFuZCByZXNldCB2YXJpYWJsZXMgdmVjdG9y
cy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9
IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICAgICAgbV9ncmFw
aC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgICAgICBi
bG9jay0+cGhpcy5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5j
bGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5jbGVhcigpOworICAg
ICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2st
PnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnNzYSA9IGFkb3B0UHRy
KG5ldyBCYXNpY0Jsb2NrOjpTU0FEYXRhKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBtX2dyYXBoLm1fZm9ybSA9IFNTQTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBmb3J3
YXJkUGhpQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKKyAgICAgICAgICAgIEVkZ2Um
IGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIGlmICghZWRnZSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBmb3J3
YXJkUGhpRWRnZShlZGdlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBmb3J3
YXJkUGhpKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAg
ICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+anVzdE9uZUNoaWxkKCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZWRnZS5ub2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIEdldExvY2FsOgorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9v
bCBmb3J3YXJkUGhpRWRnZShFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSogbmV3Tm9k
ZSA9IGZvcndhcmQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAobmV3Tm9kZSA9PSBlZGdlLm5v
ZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG5l
d05vZGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWR1
cGxpY2F0ZUNoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdl
IGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIGlmICghZWRnZSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChlZGdlID09IG5vZGUpIHsK
KyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGktLSk7CisgICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgQWRq
YWNlbmN5TGlzdDo6U2l6ZTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
cmVuLmNoaWxkKGopID09IGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4ucmVtb3ZlRWRnZShqLS0pOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB2b2lkIGZvcndhcmROb2RlQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGZvcndhcmROb2RlRWRn
ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm9yd2FyZE5vZGVFZGdlKE5vZGUqLCBFZGdlJiBl
ZGdlKQorICAgIHsKKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgCisgICAgICAgIHN3aXRjaCAoZWRn
ZS0+b3AoKSkgeworICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsT3AoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcHMuYWRkKG5vZGUpOworICAgICAgICBtX2ZsdXNo
ZWRMb2NhbE9wV29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgIH0KKworICAgIHZvaWQgYWRkRmx1
c2hlZExvY2FsRWRnZShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgYWRkRmx1c2hl
ZExvY2FsT3AoZWRnZS5ub2RlKCkpOworICAgIH0KKworICAgIEluc2VydGlvblNldCBtX2luc2Vy
dGlvblNldDsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wczsKKyAgICBWZWN0
b3I8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKKyAgICBib29sIG1fY2hhbmdlZDsK
K307CisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgU1NBIENvbnZlcnNpb24gUGhhc2UiKTsK
KyAgICByZXR1cm4gcnVuUGhhc2U8U1NBQ29udmVyc2lvblBoYXNlPihncmFwaCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHU1NBQ29u
dmVyc2lvblBoYXNlX2gKKyNkZWZpbmUgREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbnZlcnQgVGhyZWFk
ZWRDUFMgZm9ybSBpbnRvIFNTQSBmb3JtLiBUaGlzIHJlc3VsdHMgaW4gYSBmb3JtIHRoYXQgaGFz
OgorLy8KKy8vIC0gUm91Z2hseSBtaW5pbWFsIFBoaSdzLiBXZSB1c2UgdGhlIEF5Y29jayAmIEhv
cnNwb29sIGZpeHBvaW50IGZvcgorLy8gICBjb252ZXJ0aW5nIHRoZSBDUFMgbWF4aW1hbCBQaGlz
IGludG8gU1NBIG1pbmltYWwgUGhpcywgd2l0aCB0aGUgY2F2ZWF0CisvLyAgIHRoYXQgaXJyZWR1
Y2libGUgY29udHJvbCBmbG93IG1heSByZXN1bHQgaW4gc29tZSBtaXNzZWQgb3Bwb3J0dW5pdGll
cworLy8gICBmb3IgUGhpIHJlZHVjdGlvbi4KKy8vCisvLyAtIE5vIHVzZXMgb2YgR2V0TG9jYWwv
U2V0TG9jYWwgZXhjZXB0IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGZsdXNoZXMuCisvLyAg
IEFmdGVyIHRoaXMsIGFueSByZW1haW5pbmcgU2V0TG9jYWwgbWVhbnMgRmx1c2guIEZsdXNoIG5v
ZGVzIGFyZQorLy8gICBlbGltaW5hdGVkLiBQaGFudG9tTG9jYWxzIGJlY29tZSBQaGFudG9tcy4g
Tm9kZXMgbWF5IG1heSBoYXZlIGNoaWxkcmVuCisvLyAgIHRoYXQgYXJlIGluIGFub3RoZXIgYmFz
aWMgYmxvY2suCisvLworLy8gLSBNb3ZIaW50cyBhcmUgdXNlZCBmb3IgT1NSIGluZm9ybWF0aW9u
LCBhbmQgYXJlIHRoZW1zZWx2ZXMgbWluaW1hbC4KKy8vICAgQSBNb3ZIaW50IHdpbGwgb2NjdXIg
YXQgc29tZSBwb2ludCBhZnRlciB0aGUgYXNzaWduaW5nLCBhbmQgYXQgUGhpCisvLyAgIHBvaW50
cy4KKy8vCisvLyAtIFVubGlrZSBjb252ZW50aW9uYWwgU1NBIGluIHdoaWNoIFBoaSBmdW5jdGlv
bnMgcmVmZXIgdG8gcHJlZGVjZXNzb3JzCisvLyAgIGFuZCB2YWx1ZXMsIG91ciBTU0EgdXNlcyBV
cHNpbG9uIGZ1bmN0aW9ucyB0byBpbmRpY2F0ZSB2YWx1ZXMgaW4KKy8vICAgcHJlZGVjZXNzb3Jz
LiBBIG1lcmdlIHdpbGwgbG9vayBsaWtlOgorLy8KKy8vICAgbGFiZWxBOgorLy8gICAgICAgYTog
VGhpbmd5KC4uLikKKy8vICAgICAgIGI6IFVwc2lsb24oJGUsIEBhKQorLy8gICAgICAgSnVtcChs
YWJlbEMpCisvLworLy8gICBsYWJlbEI6CisvLyAgICAgICBjOiBPdGhlclRoaW5neSguLi4pCisv
LyAgICAgICBkOiBVcHNpbG9uKCRlLCBAYykKKy8vICAgICAgIEp1bXAobGFiZWxDKQorLy8KKy8v
ICAgbGFiZWxDOgorLy8gICAgICAgZTogUGhpKCkKKy8vCisvLyAgIE5vdGUgdGhhdCB0aGUgUGhp
IGhhcyBubyBjaGlsZHJlbiwgYnV0IHRoZSBwcmVkZWNlc3NvcnMgaGF2ZSBVcHNpbG9ucworLy8g
ICB0aGF0IGhhdmUgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgUGhpICgkZSBpbnN0ZWFkIG9mIEBl
OyB3ZSBzdG9yZSBpdAorLy8gICBpbiB0aGUgT3BJbmZvIHJhdGhlciB0aGFuIHRoZSBBZGphY2Vu
Y3lMaXN0KS4gVGhpbmsgb2YgdGhlIFVwc2lsb24KKy8vICAgYXMgImFzc2lnbmluZyIgdG8gdGhl
ICJ2YXJpYWJsZSIgYXNzb2NpYXRlZCB3aXRoIHRoZSBQaGksIGFuZCB0aGF0CisvLyAgIHRoaXMg
aXMgdGhlIG9uZSBwbGFjZSBpbiBTU0EgZm9ybSB3aGVyZSB5b3UgY2FuIGhhdmUgbXVsdGlwbGUK
Ky8vICAgYXNzaWdubWVudHMuCisvLworLy8gICBUaGlzIGltcGxpZXMgc29tZSBvdGhlciBsb29z
ZW5pbmdzIG9mIFNTQS4gRm9yIGV4YW1wbGUsIGFuIFVwc2lsb24KKy8vICAgbWF5IHByZWNlZGUg
YSBQaGkgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2s7IHRoaXMgbWF5IGFyaXNlIGFmdGVyIENGRwor
Ly8gICBzaW1wbGlmaWNhdGlvbi4gQWx0aG91Z2ggaXQncyBwcm9maXRhYmxlIGZvciBDRkcgc2lt
cGxpZmljYXRpb24gKG9yCisvLyAgIHNvbWUgb3RoZXIgcGhhc2UpIHRvIHJlbW92ZSB0aGVzZSwg
aXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBBcworLy8gICB3ZWxsLCB0aGlzIGZvcm0gYWxs
b3dzIHRoZSBVcHNpbG9uIHRvIGJlIGluIGFueSBibG9jayB0aGF0IGRvbWluYXRlcworLy8gICB0
aGUgcHJlZGVjZXNzb3IgYmxvY2sgb2YgdGhlIFBoaSwgd2hpY2ggYWxsb3dzIGZvciBibG9jayBz
cGxpdHRpbmcgdG8KKy8vICAgaWdub3JlIHRoZSBwb3NzaWJpbGl0eSBvZiBpbnRyb2R1Y2luZyBh
biBleHRyYSBlZGdlIGJldHdlZW4gdGhlIFBoaQorLy8gICBhbmQgdGhlIHByZWRlY2Vzc29yICh0
aG91Z2ggbm9ybWFsIFNTQSB3b3VsZCBhbGxvdyB0aGlzLCBhbHNvLCB3aXRoCisvLyAgIHRoZSBj
YXZlYXQgdGhhdCB0aGUgUGhpIHByZWRlY2Vzc29yIGJsb2NrIGxpc3RzIHdvdWxkIGhhdmUgdG8g
YmUKKy8vICAgdXBkYXRlZCkuCisvLworLy8gICBUaGUgZWFzaWVzdCB3YXkgdG8gY29udmVydCBm
cm9tIHRoaXMgU1NBIGZvcm0gaW50byBhIGRpZmZlcmVudCBTU0EKKy8vICAgZm9ybSBpcyB0byBy
ZWRvIFNTQSBjb252ZXJzaW9uIGZvciBQaGkgZnVuY3Rpb25zLiBUaGF0IGlzLCB0cmVhdCBlYWNo
CisvLyAgIFBoaSBpbiBvdXIgSVIgYXMgYSBub24tU1NBIHZhcmlhYmxlIGluIHRoZSBmb3JlaWdu
IElSIChzbywgYXMgYW4KKy8vICAgYWxsb2NhIGluIExMVk0gSVIsIGZvciBleGFtcGxlKTsgdGhl
IFVwc2lsb25zIHRoYXQgcmVmZXIgdG8gdGhlIFBoaQorLy8gICBiZWNvbWUgc3RvcmVzIGFuZCB0
aGUgUGhpcyB0aGVtc2VsdmVzIGJlY29tZSBsb2Fkcy4KKy8vCisvLyAgIEZ1biBmYWN0OiBVcHNp
bG9uIGlzIHNvIG5hbWVkIGJlY2F1c2UgaXQgY29tZXMgYmVmb3JlIFBoaSBpbiB0aGUKKy8vICAg
YWxwaGFiZXQuIEl0IGNhbiBiZSB3cml0dGVuIGFzICJZIi4KKworYm9vbCBwZXJmb3JtU1NBQ29u
dmVyc2lvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisK
SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCQkwRkQ4MUFDNTE1NEZCMjJFMDA5ODNFNzIg
LyogRmFzdEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwRkREQkZBNzE2NjZERkEzMDBD
NTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLzsg
fTsKKwkJMEZFNTA1NTcxNzg3QTgwNjAwQjM1RjhDIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTYxNzg3QTgwMjAwQjM1
RjhDIC8qIEluc2VydGlvbi5oICovOyB9OwogCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyog
UkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi87IH07CiAJCTE0M0Y2
MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTE0Njk0MTkyMTZF
QUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Njk0MTkwMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29w
VGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMzUyLDYgKzM1Myw3IEBACiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0
VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVG
IC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zZXJ0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJBTVNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSQU1TaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC03ODUsNiArNzg3LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyogSGFz
aFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1iZXIu
aCAqLywKIAkJCQlBOEE0NzJCQzE1MUE4MjVBMDA0MTIzRkYgLyogSW5saW5lQVNNLmggKi8sCisJ
CQkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovLAogCQkJCUE4QTQ3
MkJFMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQThBNDcyQkYxNTFB
ODI1QTAwNDEyM0ZGIC8qIEludDMyQXJyYXkuaCAqLywKIAkJCQlBOEE0NzJCRDE1MUE4MjVBMDA0
MTIzRkYgLyogSW50OEFycmF5LmggKi8sCkBAIC0xMTgxLDYgKzExODQsNyBAQAogCQkJCUE4QTQ3
M0U4MTUxQTgyNUIwMDQxMjNGRiAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzNFQTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDU0
OTdBRDE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0RjFEMTE1NDE1RkYxMUJFMDAyNkU5MDggLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0RkQ4NTU0NzE2MTMzRTBFMDBDNUI3MDQgLyogTWVtb3J5SW5zdHJ1
bWVudGF0aW9uQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlGM0ZCQzcxRTE2
MUFGN0JGMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvSGFzaFNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNl
L1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMiArODYsMTkgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmV2ZXJzZSB0aGUgb3Jk
ZXIgb2YgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBzbyB0aGF0IGNhbGxlcnMKICAgICAgICAgLy8g
Y2FuIGp1c3QgcGFzcyB0aGUgdHJhbnNsYXRvciBhbmQgbGV0IHRoZSBjb21waWxlciBkZWR1Y2Ug
VC4KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+
IEFkZFJlc3VsdCBhZGQoY29uc3QgVCYpOworICAgICAgICAKKyAgICAgICAgLy8gQXR0ZW1wdHMg
dG8gYWRkIGEgbGlzdCBvZiB0aGluZ3MgdG8gdGhlIHNldC4gUmV0dXJucyB0cnVlIGlmIGFueSBv
ZgorICAgICAgICAvLyB0aGVtIGFyZSBuZXcgdG8gdGhlIHNldC4gUmV0dXJucyBmYWxzZSBpZiB0
aGUgc2V0IGlzIHVuY2hhbmdlZC4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JU
eXBlPgorICAgICAgICBib29sIGFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBl
bmQpOwogCiAgICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYpOwogICAgICAgICB2
b2lkIHJlbW92ZShpdGVyYXRvcik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAgICAgICBz
dGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJik7CisgICAgICAgIAorICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaFNldCYpIGNvbnN0OwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgZnJpZW5kIHZvaWQgZGVsZXRlQWxsVmFsdWVzPD4oY29uc3QgSGFzaFNldCYp
OwpAQCAtMTkxLDYgKzE5OCwxNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojph
ZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQorICAgIHsKKyAgICAgICAg
Ym9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBi
ZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gYWRkKCpp
dGVyKS5pc05ld0VudHJ5OworICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogICAgIGlubGluZSB2
b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICB7CiAgICAgICAg
IGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQpAQCAtMjU2LDYgKzI3MywxOCBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgICAgIHZlY3RvcltpXSA9ICppdDsKICAgICB9ICAKIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CisgICAgaW5saW5l
IGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBIYXNoU2V0JiBvdGhlcikK
KyAgICB7CisgICAgICAgIGlmIChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigp
OyBpdGVyICE9IGVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmICghb3RoZXIuY29udGFp
bnMoKml0ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBX
VEY6Okhhc2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291
cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNzAsNiArMTE3MCw4
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHsKICAgICAgICAgLy8gQ29weSB0aGUgaGFzaCB0YWJs
ZSB0aGUgZHVtYiB3YXksIGJ5IGFkZGluZyBlYWNoIGVsZW1lbnQgdG8gdGhlIG5ldyB0YWJsZS4K
ICAgICAgICAgLy8gSXQgbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgdG8gY29weSB0aGUgdGFibGUg
c2xvdHMsIGJ1dCBpdCdzIG5vdCBjbGVhciB0aGF0IGVmZmljaWVuY3kgaXMgbmVlZGVkLgorICAg
ICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9y
IHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQogICAgICAgICBjb25zdF9pdGVy
YXRvciBlbmQgPSBvdGhlci5lbmQoKTsKICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9
IG90aGVyLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGFkZCgqaXQpOwpA
QCAtMTIwOSw2ICsxMjExLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBIYXNo
VGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRy
YWl0cz4mIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cywgS2V5VHJhaXRzPjo6b3BlcmF0b3I9KGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpCiAgICAg
eworICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3Zl
ZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQogICAgICAgICBIYXNo
VGFibGUgdG1wKG90aGVyKTsKICAgICAgICAgc3dhcCh0bXApOwogICAgICAgICByZXR1cm4gKnRo
aXM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0lu
c2VydGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbnNlcnRpb25faAorI2Rl
ZmluZSBJbnNlcnRpb25faAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEluc2VydGlvbiB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uKCkgeyB9CisgICAg
CisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorICAgICAgICA6IG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgVCBl
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcjwoY29uc3QgSW5zZXJ0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2luZGV4IDwgb3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHNp
emVfdCBtX2luZGV4OworICAgIFQgbV9lbGVtZW50OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VGFyZ2V0VmVjdG9yVHlwZSwgdHlwZW5hbWUgSW5zZXJ0aW9uVmVjdG9yVHlwZT4KK3ZvaWQgZXhl
Y3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYgdGFyZ2V0LCBJbnNlcnRpb25WZWN0b3JU
eXBlJiBpbnNlcnRpb25zKQoreworICAgIGlmICghaW5zZXJ0aW9ucy5zaXplKCkpCisgICAgICAg
IHJldHVybjsKKyAgICB0YXJnZXQuZ3Jvdyh0YXJnZXQuc2l6ZSgpICsgaW5zZXJ0aW9ucy5zaXpl
KCkpOworICAgIHNpemVfdCBsYXN0SW5kZXggPSB0YXJnZXQuc2l6ZSgpOworICAgIGZvciAoc2l6
ZV90IGluZGV4SW5JbnNlcnRpb25zID0gaW5zZXJ0aW9ucy5zaXplKCk7IGluZGV4SW5JbnNlcnRp
b25zLS07KSB7CisgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uc1tpbmRleElu
SW5zZXJ0aW9uc10uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOworICAgICAgICBzaXplX3Qg
aW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQorICAgICAgICAgICAgdGFyZ2V0W2ld
ID0gdGFyZ2V0W2kgLSBpbmRleE9mZnNldF07CisgICAgICAgIHRhcmdldFtmaXJzdEluZGV4XSA9
IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmVsZW1lbnQoKTsKKyAgICAgICAgbGFzdElu
ZGV4ID0gZmlyc3RJbmRleDsKKyAgICB9CisgICAgaW5zZXJ0aW9ucy5yZXNpemUoMCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Okluc2VydGlvbjsKK3VzaW5nIFdURjo6
ZXhlY3V0ZUluc2VydGlvbnM7CisKKyNlbmRpZiAvLyBJbnNlcnRpb25faAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206282</attachid>
            <date>2013-07-08 16:58:50 -0700</date>
            <delta_ts>2013-07-08 21:38:34 -0700</delta_ts>
            <desc>started on CFA</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>81224</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9j
YWxGaXJzdFRpbWUob3BlcmFuZCwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFy
KCkKKyAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IHZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgp
OworICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBmaWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2IEBAIHZvaWQgQWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2kKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3Ry
YWN0VmFsdWU+OjppdGVyYXRvciBpdGVyID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQu
YmVnaW4oKTsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9y
IGVuZCA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmVuZCgpOworICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgZm9yTm9kZShpdGVyLT5rZXkp
ID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUuaGFzQ2xvYmJlcmFi
bGVTdGF0ZSgpKQorICAgICAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorICAgIAogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBm
YWxzZTsKICAgICBiYXNpY0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsKICAgICBtX2Jsb2Nr
ID0gYmFzaWNCbG9jazsKQEAgLTgzLDYgKzkzLDE2IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKEJhc2kKICAgICBtX2N1cnJlbnROb2RlID0gMDsKIH0KIAorc3RhdGljIHZv
aWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBI
YXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3sKKyAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICAKKyAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGxpdmUuYmVnaW4oKTsKKyAgICBIYXNoU2V0
PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbGl2ZS5lbmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBl
bmQ7ICsraXRlcikKKyAgICAgICAgdmFsdWVzLmFkZCgqaXRlciwgQWJzdHJhY3RWYWx1ZSgpKTsK
K30KKwogdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKIHsKICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxvY2soMCk7CkBAIC0xNTEsNiArMTcxLDEwIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICNlbmRpZgogICAgICAg
ICB9CiAgICAgICAgIGJsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9j
ay0+c3NhLT52YWx1ZXNBdEhlYWQsIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpOworICAgICAgICAg
ICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwsIGJsb2NrLT5zc2EtPmxp
dmVBdFRhaWwpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNzIsMjAgKzE5NiwzOSBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNCiAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIUFTU0VS
VF9ESVNBQkxFRCkgewotICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50
KSB7CisgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBUaHJl
YWRlZENQUzogeworICAgICAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVu
dCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGFyZ3VtZW50ICV6dS5cbiIs
IGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0
YXRlIGZvciBhcmd1bWVudCAlenUuXG4iLCBhcmd1bWVudCk7CiAjZW5kaWYKLSAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVz
dGluYXRpb24sIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24s
IG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBz
dGF0ZSBmb3IgbG9jYWwgJXp1LlxuIiwgbG9jYWwpOworICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKICNlbmRp
ZgotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVz
QXRUYWlsLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0
VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFi
bGVzLmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFNTQTogeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0g
YmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5iZWdpbigpOworICAgICAgICAgICAgSGFzaFNldDxOb2Rl
Kj46Oml0ZXJhdG9yIGVuZCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRBaWwuZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKCppdGVyKS0+dmFsdWUubWVyZ2UoZm9y
Tm9kZShub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTU4Niw2ICsxNjI5LDE2IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFBoaToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5t
X2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3VsZCBo
YXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBVcHNpbG9uOgorICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGZv
ck5vZGUobm9kZS0+cGhpKCkpID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAg
ICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQnJlYWtwb2lu
dDoKQEAgLTE2NzksNyArMTczMiw3IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJTdHJ1Y3QKICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQorYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZh
bHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTc2Nyw3ICsxODIwLDcgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBB
YnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK2Jv
b2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8p
CiB7CiAgICAgQVNTRVJUKGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygp
ID09IHRvLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgQVNTRVJU
KGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpID09IHRvLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CkBAIC0xNzgzLDYgKzE4MzYsMTEgQEAgaW5saW5lIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbAogICAgICAgICBBYnN0cmFjdFZhbHVlJiBk
ZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9jYWwpOwogICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1
ZXNBdFRhaWwubG9jYWwobG9jYWwpLCB0by0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKSwg
ZnJvbS0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CiAgICAgfQorICAgIAorICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgLy8gRklYTUU6IHRoZSBTU0EgdmVy
c2lvbiBzaG91bGQgY29uc2lkZXIgdGhlIGZhY3QgdGhhdCB3ZSBkb24ndCBoYXZlIGxvY2FsCisg
ICAgICAgIC8vIHZhcmlhYmxlIGxpdmVuZXNzLgorICAgIH0KIAogICAgIGlmICghdG8tPmNmYUhh
c1Zpc2l0ZWQpCiAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC05OSw2ICs5OSwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgRWRnZSBjaGlsZDFVbmNoZWNr
ZWQoKSBjb25zdCB7IHJldHVybiBtX3dvcmRzWzBdOyB9CiAgICAgCisgICAgRWRnZSBqdXN0T25l
Q2hpbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEhY2hpbGQxKCkgJiYgIWNoaWxkMigp
KSB7CisgICAgICAgICAgICBBU1NFUlQoIWNoaWxkMygpKTsKKyAgICAgICAgICAgIHJldHVybiBj
aGlsZDEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRWRnZSgpOworICAgIH0KKyAgICAK
ICAgICB2b2lkIGluaXRpYWxpemUoRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyLCBFZGdlIGNoaWxk
MykKICAgICB7CiAgICAgICAgIGNoaWxkKDApID0gY2hpbGQxOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw2ICszMyw4IEBACiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGlj
RnVuY3Rpb24uaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC04MCw2ICs4Miw3IEBAIHN0cnVjdCBCYXNpY0Js
b2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiAhc2l6ZSgpOyB9CiAgICAgTm9kZSomIGF0KHNpemVfdCBpKSB7IHJldHVybiBtX25vZGVz
W2ldOyB9CiAgICAgTm9kZSogYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNbaV07
IH0KKyAgICBOb2RlKiYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gYXQoaSk7IH0KICAg
ICBOb2RlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogICAg
IE5vZGUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBhdChzaXplKCkgLSAxKTsgfQogICAgIHZvaWQg
cmVzaXplKHNpemVfdCBzaXplKSB7IG1fbm9kZXMucmVzaXplKHNpemUpOyB9CkBAIC0xMzAsNiAr
MTMzLDExIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBE
RkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1
bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCisjZGVmaW5lIERGR19ERUZJTkVfQVBQ
RU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJh
bXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQ
YXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFwcGVuZE5vblRlcm1pbmFsKEdyYXBoJiwgU3BlY3Vs
YXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CisgICAgREZHX1ZBUklBRElD
X1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCisjdW5kZWYgREZHX0RF
RklORV9BUFBFTkRfTk9ERQorICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogICAgIHsKICAgICAgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOwpAQCAtMTYwLDYgKzE2
OCwxNCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgCiAg
ICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgIE9wZXJhbmRzPEFi
c3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKKyAgICAKKyAgICBzdHJ1Y3QgU1NBRGF0YSB7Cisg
ICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdEhlYWQ7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+
IGxpdmVBdFRhaWw7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVl
c0F0SGVhZDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRU
YWlsOworICAgIH07CisgICAgT3duUHRyPFNTQURhdGE+IHNzYTsKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0MywxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAg
ICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUp
CiAjdW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQogCisjZGVmaW5lIERGR19ERUZJTkVfQVBQ
RU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJh
bXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQ
YXJhbXMgdGVtcGxhdGVQb3N0IGlubGluZSBOb2RlKiBCYXNpY0Jsb2NrOjphcHBlbmROb25UZXJt
aW5hbChHcmFwaCYgZ3JhcGgsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2
YWx1ZVBhcmFtcykgXAorICAgIHsgXAorICAgICAgICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGRO
b2RlKHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpOyBcCisgICAgICAgIGFwcGVuZChs
YXN0KCkpOyBcCisgICAgICAgIGF0KHNpemUoKSAtIDIpID0gcmVzdWx0OyBcCisgICAgICAgIHJl
dHVybiByZXN1bHQ7IFwKKyAgICB9CisgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9O
KERGR19ERUZJTkVfQVBQRU5EX05PREUpCisjdW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRp
b25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
bG9ja0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitCbG9ja0luc2Vy
dGlvblNldDo6QmxvY2tJbnNlcnRpb25TZXQoR3JhcGgmIGdyYXBoKQorICAgIDogbV9ncmFwaChn
cmFwaCkKK3sKK30KKworQmxvY2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsg
fQorCit2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoY29uc3QgQmxvY2tJbnNlcnRpb24m
IGluc2VydGlvbikKK3sKKyAgICBtX2luc2VydGlvbnMuYXBwZW5kKGluc2VydGlvbik7Cit9CisK
K3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8
QmFzaWNCbG9jaz4gYmxvY2spCit7CisgICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBi
bG9jaykpOworfQorCitCYXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVf
dCBpbmRleCkKK3sKKyAgICBSZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZihuZXcg
QmFzaWNCbG9jaygKKyAgICAgICAgVUlOVF9NQVgsCisgICAgICAgIG1fZ3JhcGguYmxvY2soMCkt
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICBtX2dyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgIGluc2VydChp
bmRleCwgYmxvY2spOworICAgIHJldHVybiBibG9jay5nZXQoKTsKK30KKworQmFzaWNCbG9jayog
QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpCit7Cisg
ICAgcmV0dXJuIGluc2VydChibG9jay0+aW5kZXgpOworfQorCitib29sIEJsb2NrSW5zZXJ0aW9u
U2V0OjpleGVjdXRlKCkKK3sKKyAgICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMgdG8gYmUg
Z2l2ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywgd2UgbmVlZCB0bworICAgIC8vIHNvcnQgdGhl
bSBiZWZvcmUgcnVubmluZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zLgorICAgIHN0ZDo6c29ydCht
X2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRpb25zLmVuZCgpKTsKKworICAgIGV4ZWN1dGVJ
bnNlcnRpb25zKG1fZ3JhcGgubV9ibG9ja3MsIG1faW5zZXJ0aW9ucyk7CisgICAgCisgICAgLy8g
UHJ1bmUgb3V0IGVtcHR5IGVudHJpZXMuIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1
dCBpdCdzCisgICAgLy8gaGVhbHRoeSB0byBrZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jvd2lu
Zy4KKyAgICB1bnNpZ25lZCB0YXJnZXRJbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBzb3Vy
Y2VJbmRleCA9IDA7IHNvdXJjZUluZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7KSB7Cisg
ICAgICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nbc291cmNl
SW5kZXgrK107CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1t0YXJnZXRJbmRleCsrXSA9IGJsb2NrOworICAgIH0KKyAg
ICBtX2dyYXBoLm1fYmxvY2tzLnJlc2l6ZSh0YXJnZXRJbmRleCk7CisgICAgCisgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIGJsb2NrcyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytpKQorICAgICAg
ICBtX2dyYXBoLm1fYmxvY2tzW2ldLT5pbmRleCA9IGk7CisgICAgCisgICAgLy8gQW5kIGZpbmFs
bHksIGludmFsaWRhdGUgYWxsIGFuYWx5c2VzIHRoYXQgcmVseSBvbiB0aGUgQ0ZHLgorICAgIG1f
Z3JhcGguaW52YWxpZGF0ZUNGRygpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNl
cnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQmxvY2tJbnNlcnRp
b25TZXRfaAorI2RlZmluZSBERkdCbG9ja0luc2VydGlvblNldF9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgV1RGOjpJbnNlcnRp
b248UmVmUHRyPEJhc2ljQmxvY2s+ID4gQmxvY2tJbnNlcnRpb247CisKK2NsYXNzIEJsb2NrSW5z
ZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja0luc2VydGlvblNldChHcmFwaCYgZ3JhcGgp
OworICAgIH5CbG9ja0luc2VydGlvblNldCgpOworICAgIAorICAgIHZvaWQgaW5zZXJ0KGNvbnN0
IEJsb2NrSW5zZXJ0aW9uJiBpbnNlcnRpb24pOworICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRl
eCwgUGFzc1JlZlB0cjxCYXNpY0Jsb2NrPiBibG9jayk7CisgICAgQmFzaWNCbG9jayogaW5zZXJ0
KHNpemVfdCBpbmRleCk7CisgICAgQmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sq
IGJlZm9yZSk7CisgICAgCisgICAgYm9vbCBleGVjdXRlKCk7CisKK3ByaXZhdGU6CisgICAgR3Jh
cGgmIG1fZ3JhcGg7CisgICAgVmVjdG9yPEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyAr
MjEyLDEwIEBAIGVudW0gR3JhcGhGb3JtIHsKICAgICAvLwogICAgIC8vIFRocmVhZGVkQ1BTIGZv
cm0gaXMgc3VpdGFibGUgZm9yIGRhdGEgZmxvdyBhbmFseXNpcyAoQ0ZBLCBwcmVkaWN0aW9uCiAg
ICAgLy8gcHJvcGFnYXRpb24pLCByZWdpc3RlciBhbGxvY2F0aW9uLCBhbmQgY29kZSBnZW5lcmF0
aW9uLgotICAgIFRocmVhZGVkQ1BTCisgICAgVGhyZWFkZWRDUFMsCisgICAgCisgICAgLy8gU1NB
IGZvcm0uIFNlZSBERkdTU0FDb252ZXJzaW9uUGhhc2UuaCBmb3IgYSBkZXNjcmlwdGlvbi4KKyAg
ICBTU0EKIH07CiAKIC8vIERlc2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhlIFVuaW9uRmluZCBzdHJ1
Y3R1cmUgb2YgVmFyaWFibGVBY2Nlc3NEYXRhJ3MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRn
ZUJyZWFraW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNs
dWRlICJERkdCbG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShn
cmFwaCwgImNyaXRpY2FsIGVkZ2UgYnJlYWtpbmciKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0
KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5u
dW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBB
biBlZGdlIEEtPkIgaXMgY3JpdGljYWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29yIGFuZCBC
IGhhcyBtdWx0aXBsZQorICAgICAgICAgICAgLy8gcHJlZGVjZXNzb3JzLiBUaHVzIHdlIGZhaWwg
ZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSBtdWx0aXBsZSBzdWNjZXNzb3JzLgorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA8PSAxKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayoqIHN1Y2Nlc3NvciA9ICZibG9jay0+c3VjY2Vzc29yKGkpOworICAgICAgICAgICAg
ICAgIGlmIChzdWNjZXNzb3ItPnByZWRlY2Vzc29ycy5zaXplKCkgPD0gMSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYnJl
YWtDcml0aWNhbEVkZ2UoYmxvY2ssIHN1Y2Nlc3Nvcik7IAorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGJyZWFrQ3JpdGljYWxFZGdlKAorICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgc3VjY2Vzc29ySW5kZXgsIEJhc2ljQmxvY2sqKiBz
dWNjZXNzb3IpCisgICAgeworICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgIAor
ICAgICAgICBCYXNpY0Jsb2NrKiBwYWQgPSBtX3BhZHMuZ2V0KCpzdWNjZXNzb3IpOworICAgICAg
ICBpZiAoIXBhZCkgeworICAgICAgICAgICAgcGFkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0QmVm
b3JlKCpzdWNjZXNzb3IpOworICAgICAgICAgICAgcGFkLT5hcHBlbmROb2RlKG1fZ3JhcGgsIFNw
ZWNOb25lLCBKdW1wLCBPcEluZm8oKnN1Y2Nlc3NvcikpOworICAgICAgICAgICAgbV9wYWRzLmFk
ZCgqc3VjY2Vzc29yLCBwYWQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAqc3VjY2Vz
c29yID0gcGFkOworICAgIH0KKyAgICAKKyAgICBCbG9ja0luc2VydGlvblNldCBtX2luc2VydGlv
blNldDsKKyAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKj4gbV9wYWRzOworfTsK
KworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoR3JhcGgmIGdyYXBoKQoreworICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ3JpdGljYWwgRWRnZSBCcmVha2lu
ZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhh
c2VfaAorI2RlZmluZSBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIEluc2VydHMgZHVtbXkgYmFz
aWMgYmxvY2tzIHRvIGJyZWFrIGNyaXRpY2FsIGVkZ2VzLiBBbiBlZGdlIEEtPkIgaXMKKy8vIGNy
aXRpY2FsIGlmIEEgaGFzIG11bHRpcGxlIHN1Y2Nlc3NvcnMgYW5kIEIgaGFzIG11bHRpcGxlIHBy
ZWRlc3NvcnMuCisKK2Jvb2wgcGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKEdyYXBoJik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI0MzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTIHx8IG1fZ3JhcGgu
bV9mb3JtID09IFNTQSk7CisgICAgICAgIAogICAgICAgICAvLyBGaXJzdCByZXNldCB0aGUgY291
bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7
CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CkBAIC03NSwxMCArNzcsMjkgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICB3aGlsZSAoIW1fd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV93b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgICAgICBtX3dvcmtsaXN0LnJlbW92ZUxh
c3QoKTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQg
c2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgotICAgICAg
ICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291bnRFZGdlKTsK
KyAgICAgICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0KCk7CisgICAgICAgICAgICAgICAgbV93
b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3Mg
aXQncyByZWYnZWQuCisgICAgICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9n
cmFwaCwgbm9kZSwgY291bnRFZGdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgICAgIC8v
IEZpbmQgUGhpLT5VcHNpbG9uIGVkZ2VzLCB3aGljaCBhcmUgcmVwcmVzZW50ZWQgYXMgbWV0YS1k
YXRhIGluIHRoZQorICAgICAgICAgICAgICAgIC8vIFVwc2lsb24uCisgICAgICAgICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVXBzaWxvbikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5waGkoKS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3VudE5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7ICsrYmxvY2tJbmRleCkgewpAQCAtOTUsNyArMTE2LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLmlzUHJvdmVkKCkgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlw
ZWRVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RI
YXZlQ2hlY2soKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgdGhlIHBv
c3NpYmlsaXR5IHRoYXQgVUludDMyVG9OdW1iZXIgaXMgZGVhZCBidXQgaXRzCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjaGlsZCBpc24ndDsgaWYgc28gdGhlbiB3ZSBzaG91bGQgTW92SGlu
dCB0aGUgY2hpbGQuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgp
LT5zaG91bGRHZW5lcmF0ZSgpCkBAIC0xMjYsNyArMTQ3LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQo
KTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBj
aGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XTsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghZWRnZSB8fCBlZGdlLmlzUHJvdmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UgfHwgZWRn
ZS53aWxsTm90SGF2ZUNoZWNrKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwg
ZWRnZSk7CkBAIC0xNTgsMjEgKzE3OSwyNSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgLy8g
V2UgbWF5IGhhdmUgYW4gInVucHJvdmVkIiB1bnR5cGVkIHVzZSBmb3IgY29kZSB0aGF0IGlzIHVu
cmVhY2hhYmxlLiBUaGUgQ0ZBCiAgICAgICAgIC8vIHdpbGwganVzdCBub3QgaGF2ZSBnb3R0ZW4g
YXJvdW5kIHRvIGl0LgotICAgICAgICBpZiAoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2lu
ZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgIGlmIChlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFlZGdlLT5wb3N0Zml4UmVmKCkpCiAg
ICAgICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgY291bnROb2RlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS0+
cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3dvcmtsaXN0LmFw
cGVuZChub2RlKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb3VudEVkZ2UoTm9kZSosIEVkZ2Ug
ZWRnZSkKICAgICB7CiAgICAgICAgIC8vIERvbid0IGNvdW50IGVkZ2VzIHRoYXQgYXJlIGFscmVh
ZHkgY291bnRlZCBmb3IgdGhlaXIgdHlwZSBjaGVja3MuCi0gICAgICAgIGlmICghKGVkZ2UuaXNQ
cm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmIChlZGdlLT5wb3N0Zml4UmVmKCkpCisgICAgICAg
IGlmIChlZGdlLndpbGxIYXZlQ2hlY2soKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
bV93b3JrbGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkpOworICAgICAgICBjb3VudE5vZGUoZWRnZS5u
b2RlKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9t
Q2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTE4MSw3ICsyMDYsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CiAgICAgICAgICAgICBp
ZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZWRn
ZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgICAg
ICBpZiAoZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCiAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGRyZW4ucmVtb3ZlRWRnZShpLS0pOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDE1IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHByb29mU3RhdHVzKCkgPT0gTmVlZHNDaGVjazsKICAg
ICB9CiAgICAgCisgICAgYm9vbCB3aWxsTm90SGF2ZUNoZWNrKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpc1Byb3ZlZCgpIHx8IHVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlOworICAgIH0K
KyAgICBib29sIHdpbGxIYXZlQ2hlY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICF3
aWxsTm90SGF2ZUNoZWNrKCk7CisgICAgfQorICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiAhIW5vZGUoKTsgfQogICAgIAogICAgIHR5cGVkZWYgdm9pZCogRWRnZTo6KlVuc3Bl
Y2lmaWVkQm9vbFR5cGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2Vy
dGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5z
ZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI2ICszMSwxMiBAQAog
I2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3
dGYvSW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKLWNsYXNzIEluc2VydGlvbiB7Ci1wdWJsaWM6Ci0gICAgSW5z
ZXJ0aW9uKCkgeyB9Ci0gICAgCi0gICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxl
bWVudCkKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVt
ZW50KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleDsgfQotICAgIE5vZGUqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1l
bnQ7IH0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1faW5kZXg7Ci0gICAgTm9kZSogbV9lbGVtZW50
OwotfTsKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248Tm9kZSo+IEluc2VydGlvbjsKIAogY2xhc3Mg
SW5zZXJ0aW9uU2V0IHsKIHB1YmxpYzoKQEAgLTgxLDIwICs2Nyw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBpZiAo
IW1faW5zZXJ0aW9ucy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJsb2Nr
LT5ncm93KGJsb2NrLT5zaXplKCkgKyBtX2luc2VydGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgc2l6
ZV90IGxhc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4
SW5JbnNlcnRpb25zID0gbV9pbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTsp
IHsKLSAgICAgICAgICAgIEluc2VydGlvbiYgaW5zZXJ0aW9uID0gbV9pbnNlcnRpb25zW2luZGV4
SW5JbnNlcnRpb25zXTsKLSAgICAgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9u
LmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9m
ZnNldCA9IGluZGV4SW5JbnNlcnRpb25zICsgMTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQotICAgICAgICAgICAgICAgIGJsb2NrLT5h
dChpKSA9IGJsb2NrLT5hdChpIC0gaW5kZXhPZmZzZXQpOwotICAgICAgICAgICAgYmxvY2stPmF0
KGZpcnN0SW5kZXgpID0gaW5zZXJ0aW9uLmVsZW1lbnQoKTsKLSAgICAgICAgICAgIGxhc3RJbmRl
eCA9IGZpcnN0SW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgbV9pbnNlcnRpb25zLnJlc2l6ZSgw
KTsKKyAgICAgICAgZXhlY3V0ZUluc2VydGlvbnMoKmJsb2NrLCBtX2luc2VydGlvbnMpOwogICAg
IH0KIHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFw
aC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgi
CisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIExpdmVuZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJs
aWM6CisgICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQ
aGFzZShncmFwaCwgImxpdmVuZXNzIGFuYWx5c2lzIikKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
OworICAgICAgICAKKyAgICAgICAgLy8gTGl2ZW5lc3MgaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXM7
IHRoZSByb290cyBhcmUgdGhlIGJsb2NrcyB0aGF0CisgICAgICAgIC8vIGVuZCBpbiBhIHRlcm1p
bmFsIChSZXR1cm4vVGhyb3cvVGhyb3dSZWZlcmVuY2VFcnJvcikuIEZvciBub3csIHdlCisgICAg
ICAgIC8vIHVzZSBhIGZpeHBvaW50IGZvcm11bGF0aW9uIHNpbmNlIGxpdmVuZXNzIGlzIGEgcmFw
aWQgYW5hbHlzaXMgd2l0aAorICAgICAgICAvLyBjb252ZXJnZW5jZSBndWFyYW50ZWVkIGFmdGVy
IE8oY29ubmVjdGl2aXR5KS4KKyAgICAgICAgCisgICAgICAgIC8vIFN0YXJ0IGJ5IGFzc3VtaW5n
IHRoYXQgZXZlcnl0aGluZyBpcyBkZWFkLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBi
bG9jay0+bGl2ZUF0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPmxpdmVBdFRhaWwu
Y2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAg
bV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAg
cHJvY2VzcyhibG9ja0luZGV4KTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHBy
b2Nlc3MoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlr
ZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1
c2UKKyAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTg0NTUKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUo
KTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5v
ZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gICAgbjogVXBzaWxvbigkcCwgQHgpCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5k
IEBuIGFuZCB1c2VzIEB4LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEg
UGhpOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVz
ZSBub3IgYSBkZWYuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2Rl
OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBj
KQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBu
IGFuZCB1c2VzIEBhLCBAYiwgQGMuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBVcHNpbG9uOiB7CisgICAgICAgICAgICAg
ICAgTm9kZSogcGhpID0gbm9kZS0+cGhpKCk7CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92
ZShwaGkpOworICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAg
ICAgICAgbV9saXZlLmFkZChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZSBQaGk6IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbV9saXZlLnJl
bW92ZShub2RlKTsKKyAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dy
YXBoLCBub2RlLCBhZGRDaGlsZFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2st
PnNzYS0+bGl2ZUF0SGVhZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xp
dmU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgp
OyBpLS07KQorICAgICAgICAgICAgYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5hZGQobV9saXZlLmJl
Z2luKCksIG1fbGl2ZS5lbmQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkQ2hpbGRVc2Uo
Tm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkp
OworICAgIH0KKyAgICAKKyAgICBib29sIG1fY2hhbmdlZDsKKyAgICBIYXNoU2V0PE5vZGUqPiBt
X2xpdmU7Cit9OworCitib29sIHBlcmZvcm1EQ0UoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBs
aW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgTGl2ZW5lc3MgQW5hbHlzaXMgUGhhc2UiKTsK
KyAgICByZXR1cm4gcnVuUGhhc2U8TGl2ZW5lc3NBbmFseXNpc1BoYXNlPihncmFwaCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorI2RlZmluZSBERkdMaXZlbmVzc0FuYWx5c2lz
UGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmxp
dmVBdEhlYWQvbGl2ZUF0VGFpbC4KKworYm9vbCBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhHcmFw
aCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDYgKzUz
OCwxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNQaGkoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gVXBzaWxvbjsKKyAgICB9CisgICAgCisgICAgTm9k
ZSogcGhpKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNQaGkoKSk7CisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBo
YXNJZGVudGlmaWVyKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewpAQCAtNzczLDE2
ICs3ODQsMTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBtX29wSW5mbzIgPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihibG9jayk7CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIHRha2Vu
QmxvY2soKQorICAgIEJhc2ljQmxvY2sqJiB0YWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFT
U0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxCYXNpY0Jsb2NrKj4obV9vcEluZm8pOworICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxC
YXNpY0Jsb2NrKio+KCZtX29wSW5mbyk7CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG5v
dFRha2VuQmxvY2soKQorICAgIEJhc2ljQmxvY2sqJiBub3RUYWtlbkJsb2NrKCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxC
YXNpY0Jsb2NrKj4obV9vcEluZm8yKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFz
aWNCbG9jayoqPigmbV9vcEluZm8yKTsKICAgICB9CiAgICAgCiAgICAgU3dpdGNoRGF0YSogc3dp
dGNoRGF0YSgpCkBAIC04MDUsNyArODE2LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAg
ICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAg
aWYgKGlzU3dpdGNoKCkpIHsKICAgICAgICAgICAgIGlmIChpbmRleCA8IHN3aXRjaERhdGEoKS0+
Y2FzZXMuc2l6ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhab21iaWVIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwK
ICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTm9wLCBO
b2RlRG9lc05vdEV4aXQpIFwKKyAgICBtYWNybyhVcHNpbG9uLCBOb2RlRG9lc05vdEV4aXQgfCBO
b2RlUmVsZXZhbnRUb09TUikgXAogICAgIG1hY3JvKFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9k
ZVJlbGV2YW50VG9PU1IpIFwKICAgICBtYWNybyhGbHVzaCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBoYW50b21Mb2NhbCwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVEb2VzTm90RXhpdCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsMTQgKzQ3MiwxOSBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAgICAgIC8vIFRoaXMg
bm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9u
LiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93
cyB0aGlzIHBoYXNlLgotICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgICAgICAvLyBQaGlzIHNob3VsZCBub3Qg
YmUgdmlzaWJsZSBoZXJlIHNpbmNlIHdlJ3JlIGl0ZXJhdGluZyB0aGUgYWxsLWJ1dC1QaGkncwog
ICAgICAgICAgICAgLy8gcGFydCBvZiBiYXNpYyBibG9ja3MuCi0gICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAg
IC8vIFRoZXNlIGRvbid0IGdldCBpbnNlcnRlZCB1bnRpbCB3ZSBnbyBpbnRvIFNTQS4KKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBjYXNlIEdldFNjb3BlOgpAQCAtNTQxLDcgKzU0Niw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExhc3ROb2RlVHlw
ZToKLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAjZWxzZQogICAgICAgICBkZWZhdWx0OgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0
aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU1NBQ29udmVyc2lv
blBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBTU0FDb252ZXJzaW9uUGhhc2Uo
R3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiU1NBIGNvbnZlcnNpb24iKQor
ICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgICAgICAsIG1fbm9uVHJpdmlhbFBo
aXMoT3BlcmFuZHNMaWtlLCBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAg
ICAsIG1fY2hhbmdlZChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkK
KyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVk
Q1BTKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggU2V0TG9jYWwncyBu
ZWVkIGZsdXNoaW5nLiBOZWVkIHRvIGRvIHRoaXMgd2hpbGUgdGhlCisgICAgICAgIC8vIFBoaSBn
cmFwaCBpcyBzdGlsbCBpbnRhY3QuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpICE9IEZsdXNoKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChub2RlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoIW1fZmx1c2hlZExvY2FsT3BXb3JrbGlz
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2ZsdXNoZWRMb2NhbE9w
V29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2ZsdXNoZWRMb2NhbE9w
cy5jb250YWlucyhub2RlKSk7CisgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTiht
X2dyYXBoLCBub2RlLCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gRWxpbWluYXRlIGFsbCBkdXBsaWNhdGUgb3Igc2VsZi1wb2ludGluZyBQaGkg
ZWRnZXMuIFRoaXMgbWVhbnMgdGhhdAorICAgICAgICAvLyB3ZSB0cmFuc2Zvcm06CisgICAgICAg
IC8vCisgICAgICAgIC8vIHA6IFBoaShAbjEsIEBuMiwgQG4zKQorICAgICAgICAvLworICAgICAg
ICAvLyBpbnRvOgorICAgICAgICAvLworICAgICAgICAvLyBwOiBQaGkoQHgpCisgICAgICAgIC8v
CisgICAgICAgIC8vIGlmIGVhY2ggQG5pIGluIHtAbjEsIEBuMiwgQG4zfSBpcyBlaXRoZXIgZXF1
YWwgdG8gQHAgdG8gaXMgZXF1YWwKKyAgICAgICAgLy8gdG8gQHgsIGZvciBleGFjdGx5IG9uZSBv
dGhlciBAeC4gQWRkaXRpb25hbGx5LCB0cml2aWFsIFBoaXMgKGkuZS4KKyAgICAgICAgLy8gcDog
UGhpKEB4KSkgYXJlIGZvcndhcmRlZCwgc28gdGhhdCBpZiBoYXZlIGFuIGVkZ2UgdG8gc3VjaCBA
cCwgd2UKKyAgICAgICAgLy8gcmVwbGFjZSBpdCB3aXRoIEB4LiBUaGlzIGxvb3AgZG9lcyB0aGlz
IGZvciBQaGlzIG9ubHk7IGxhdGVyIHdlIGRvCisgICAgICAgIC8vIHN1Y2ggZm9yd2FyZGluZyBm
b3IgUGhpIHJlZmVyZW5jZXMgZm91bmQgaW4gb3RoZXIgbm9kZXMuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIFNlZSBBeWNvY2sgYW5kIEhvcnNwb29sIGluIENDJzAwIGZvciBhIGJldHRlciBkZXNj
cmlwdGlvbiBvZiB3aGF0CisgICAgICAgIC8vIHdlJ3JlIGRvaW5nIGhlcmUuCisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9j
ay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHBoaSA9IGJsb2NrLT5waGlzW3BoaUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBo
aS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBmb3J3YXJkUGhpQ2hpbGRyZW4o
cGhpKTsKKyAgICAgICAgICAgICAgICAgICAgZGVkdXBsaWNhdGVDaGlsZHJlbihwaGkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2Vk
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEZvciBlYWNoIGJhc2ljIGJsb2NrLCBmb3IgZWFjaCBs
b2NhbCBsaXZlIGF0IHRoZSBoZWFkIG9mIHRoYXQgYmxvY2ssCisgICAgICAgIC8vIGZpZ3VyZSBv
dXQgd2hhdCBub2RlIHdlIHNob3VsZCBiZSByZWZlcnJpbmcgdG8gaW5zdGVhZCBvZiB0aGF0IGxv
Y2FsLgorICAgICAgICAvLyBJZiBpdCB0dXJucyBvdXQgdG8gYmUgYSBub24tdHJpdmlhbCBQaGks
IG1ha2Ugc3VyZSB0aGF0IHRvIGNyZWF0ZSBhbgorICAgICAgICAvLyBTU0EgUGhpIGFuZCBVcHNp
bG9ucyBpbiBwcmVkZWNlc3NvciBibG9ja3MuIFdlIHJldXNlCisgICAgICAgIC8vIEJhc2ljQmxv
Y2s6OnZhcmlhYmxlc0F0SGVhZCBmb3IgdHJhY2tpbmcgd2hpY2ggbm9kZXMgdG8gcmVmZXIgdG8u
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUt
PmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBQb2lzb24gdGhpcyBlbnRy
eSBpbiB2YXJpYWJsZXNBdEhlYWQgYmVjYXVzZSB3ZSBkb24ndAorICAgICAgICAgICAgICAgICAg
ICAvLyB3YW50IGFueW9uZSB0byB0cnkgdG8gcmVmZXIgdG8gaXQsIGlmIHRoZSB2YXJpYWJsZSBp
cworICAgICAgICAgICAgICAgICAgICAvLyBjYXB0dXJlZC4KKyAgICAgICAgICAgICAgICAgICAg
YmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBoaToKKyAgICAg
ICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoaSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQ
aGkpIHsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVz
dE9uZUNoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZSA9IGVkZ2Uubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgYSBub24tdHJpdmlhbCBQaGkuCisg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAsIFNw
ZWNOb25lLCBQaGkpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0t
OykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
ID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlKiB1cHNpbG9uID0gcHJlZGVjZXNzb3ItPmFwcGVuZE5vblRlcm1pbmFsKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgVXBzaWxvbiwgT3BJbmZv
KG5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3Nvci0+dmFy
aWFibGVzQXRUYWlsW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmQob3BlcmFuZCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVz
QXRIZWFkW2ldID0gbm9kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENv
bnZlcnQgb3BlcmF0aW9ucyBvdmVyIGxvY2FscyBpbnRvIG9wZXJhdGlvbnMgb3ZlciBTU0Egbm9k
ZXMuCisgICAgICAgIC8vIC0gR2V0TG9jYWwgb3ZlciBjYXB0dXJlZCB2YXJpYWJsZXMgbG9zZSB0
aGVpciBwaGlzLgorICAgICAgICAvLyAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJs
ZXMgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzCisgICAgICAgIC8vICAgdG8g
dGhlIG5vZGUgc3BlY2lmaWVkIGJ5IHZhcmlhYmxlc0F0SGVhZC4KKyAgICAgICAgLy8gLSBTZXRM
b2NhbCBnZXRzIE5vZGVNdXN0R2VuZXJhdGUgaWYgaXQncyBmbHVzaGVkLgorICAgICAgICAvLyAt
IEZsdXNoIGxvc2VzIGl0cyBjaGlsZHJlbiBhbmQgdHVybnMgaW50byBhIFBoYW50b20gKGkuZS4g
aXQgZGllcykuCisgICAgICAgIC8vIC0gUGhhbnRvbUxvY2FsIGJlY29tZXMgUGhhbnRvbSwgYW5k
IGl0cyBjaGlsZCBpcyB3aGF0ZXZlciBpcyBzcGVjaWZpZWQKKyAgICAgICAgLy8gICBieSB2YXJp
YWJsZXNBdEhlYWQuCisgICAgICAgIC8vIC0gU2V0QXJndW1lbnQgdHVybnMgaW50byBHZXRMb2Nh
bC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAg
ICAgICBibG9jay0+YXQobm9kZUluZGV4KS0+cmVwbGFjZW1lbnQgPSAwOworICAgICAgICAgICAg
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJs
b2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgbV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMo
bm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNdXN0
R2VuZXJhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxh
Y2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOiB7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IFBoYW50b21Mb2NhbDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldE5vZGUoYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKEdldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGcmVlIGFsbCBwaGlzIGFuZCByZXNldCB2YXJp
YWJsZXMgdmVjdG9ycy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7Cisg
ICAgICAgICAgICBibG9jay0+cGhpcy5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5j
bGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAg
ICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnNz
YSA9IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrOjpTU0FEYXRhKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFNTQTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBmb3J3YXJkUGhpQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKKyAgICAg
ICAgICAgIEVkZ2UmIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAg
IGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fY2hh
bmdlZCB8PSBmb3J3YXJkUGhpRWRnZShlZGdlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBOb2RlKiBmb3J3YXJkUGhpKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUGhp
OiB7CisgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+anVzdE9uZUNoaWxkKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWRnZS5ub2RlKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgYm9vbCBmb3J3YXJkUGhpRWRnZShFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAg
Tm9kZSogbmV3Tm9kZSA9IGZvcndhcmQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAobmV3Tm9k
ZSA9PSBlZGdlLm5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWRn
ZS5zZXROb2RlKG5ld05vZGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkZWR1cGxpY2F0ZUNoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAg
IGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChlZGdl
ID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGkt
LSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkg
KyAxOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkcmVuLmNoaWxkKGopID09IGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShqLS0pOworICAgICAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICB2b2lkIGZvcndhcmROb2RlQ2hpbGRyZW4oTm9kZSogbm9kZSkK
KyAgICB7CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGZv
cndhcmROb2RlRWRnZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm9yd2FyZE5vZGVFZGdlKE5v
ZGUqLCBFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgCisgICAgICAg
IHN3aXRjaCAoZWRnZS0+b3AoKSkgeworICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsT3AoTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcHMuYWRkKG5vZGUpOworICAg
ICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgIH0KKworICAg
IHZvaWQgYWRkRmx1c2hlZExvY2FsRWRnZShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAg
ICAgYWRkRmx1c2hlZExvY2FsT3AoZWRnZS5ub2RlKCkpOworICAgIH0KKworICAgIEluc2VydGlv
blNldCBtX2luc2VydGlvblNldDsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9w
czsKKyAgICBWZWN0b3I8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKKyAgICBib29s
IG1fY2hhbmdlZDsKK307CisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNpb24oR3JhcGgmIGdyYXBo
KQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgU1NBIENvbnZlcnNp
b24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U1NBQ29udmVyc2lvblBoYXNlPihncmFw
aCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKyNkZWZpbmUgREZHU1NBQ29udmVyc2lvblBoYXNl
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENv
bnZlcnQgVGhyZWFkZWRDUFMgZm9ybSBpbnRvIFNTQSBmb3JtLiBUaGlzIHJlc3VsdHMgaW4gYSBm
b3JtIHRoYXQgaGFzOgorLy8KKy8vIC0gUm91Z2hseSBtaW5pbWFsIFBoaSdzLiBXZSB1c2UgdGhl
IEF5Y29jayAmIEhvcnNwb29sIGZpeHBvaW50IGZvcgorLy8gICBjb252ZXJ0aW5nIHRoZSBDUFMg
bWF4aW1hbCBQaGlzIGludG8gU1NBIG1pbmltYWwgUGhpcywgd2l0aCB0aGUgY2F2ZWF0CisvLyAg
IHRoYXQgaXJyZWR1Y2libGUgY29udHJvbCBmbG93IG1heSByZXN1bHQgaW4gc29tZSBtaXNzZWQg
b3Bwb3J0dW5pdGllcworLy8gICBmb3IgUGhpIHJlZHVjdGlvbi4KKy8vCisvLyAtIE5vIHVzZXMg
b2YgR2V0TG9jYWwvU2V0TG9jYWwgZXhjZXB0IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGZs
dXNoZXMuCisvLyAgIEFmdGVyIHRoaXMsIGFueSByZW1haW5pbmcgU2V0TG9jYWwgbWVhbnMgRmx1
c2guIEZsdXNoIG5vZGVzIGFyZQorLy8gICBlbGltaW5hdGVkLiBQaGFudG9tTG9jYWxzIGJlY29t
ZSBQaGFudG9tcy4gTm9kZXMgbWF5IG1heSBoYXZlIGNoaWxkcmVuCisvLyAgIHRoYXQgYXJlIGlu
IGFub3RoZXIgYmFzaWMgYmxvY2suCisvLworLy8gLSBNb3ZIaW50cyBhcmUgdXNlZCBmb3IgT1NS
IGluZm9ybWF0aW9uLCBhbmQgYXJlIHRoZW1zZWx2ZXMgbWluaW1hbC4KKy8vICAgQSBNb3ZIaW50
IHdpbGwgb2NjdXIgYXQgc29tZSBwb2ludCBhZnRlciB0aGUgYXNzaWduaW5nLCBhbmQgYXQgUGhp
CisvLyAgIHBvaW50cy4KKy8vCisvLyAtIFVubGlrZSBjb252ZW50aW9uYWwgU1NBIGluIHdoaWNo
IFBoaSBmdW5jdGlvbnMgcmVmZXIgdG8gcHJlZGVjZXNzb3JzCisvLyAgIGFuZCB2YWx1ZXMsIG91
ciBTU0EgdXNlcyBVcHNpbG9uIGZ1bmN0aW9ucyB0byBpbmRpY2F0ZSB2YWx1ZXMgaW4KKy8vICAg
cHJlZGVjZXNzb3JzLiBBIG1lcmdlIHdpbGwgbG9vayBsaWtlOgorLy8KKy8vICAgbGFiZWxBOgor
Ly8gICAgICAgYTogVGhpbmd5KC4uLikKKy8vICAgICAgIGI6IFVwc2lsb24oJGUsIEBhKQorLy8g
ICAgICAgSnVtcChsYWJlbEMpCisvLworLy8gICBsYWJlbEI6CisvLyAgICAgICBjOiBPdGhlclRo
aW5neSguLi4pCisvLyAgICAgICBkOiBVcHNpbG9uKCRlLCBAYykKKy8vICAgICAgIEp1bXAobGFi
ZWxDKQorLy8KKy8vICAgbGFiZWxDOgorLy8gICAgICAgZTogUGhpKCkKKy8vCisvLyAgIE5vdGUg
dGhhdCB0aGUgUGhpIGhhcyBubyBjaGlsZHJlbiwgYnV0IHRoZSBwcmVkZWNlc3NvcnMgaGF2ZSBV
cHNpbG9ucworLy8gICB0aGF0IGhhdmUgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgUGhpICgkZSBp
bnN0ZWFkIG9mIEBlOyB3ZSBzdG9yZSBpdAorLy8gICBpbiB0aGUgT3BJbmZvIHJhdGhlciB0aGFu
IHRoZSBBZGphY2VuY3lMaXN0KS4gVGhpbmsgb2YgdGhlIFVwc2lsb24KKy8vICAgYXMgImFzc2ln
bmluZyIgdG8gdGhlICJ2YXJpYWJsZSIgYXNzb2NpYXRlZCB3aXRoIHRoZSBQaGksIGFuZCB0aGF0
CisvLyAgIHRoaXMgaXMgdGhlIG9uZSBwbGFjZSBpbiBTU0EgZm9ybSB3aGVyZSB5b3UgY2FuIGhh
dmUgbXVsdGlwbGUKKy8vICAgYXNzaWdubWVudHMuCisvLworLy8gICBUaGlzIGltcGxpZXMgc29t
ZSBvdGhlciBsb29zZW5pbmdzIG9mIFNTQS4gRm9yIGV4YW1wbGUsIGFuIFVwc2lsb24KKy8vICAg
bWF5IHByZWNlZGUgYSBQaGkgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2s7IHRoaXMgbWF5IGFyaXNl
IGFmdGVyIENGRworLy8gICBzaW1wbGlmaWNhdGlvbi4gQWx0aG91Z2ggaXQncyBwcm9maXRhYmxl
IGZvciBDRkcgc2ltcGxpZmljYXRpb24gKG9yCisvLyAgIHNvbWUgb3RoZXIgcGhhc2UpIHRvIHJl
bW92ZSB0aGVzZSwgaXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBBcworLy8gICB3ZWxsLCB0
aGlzIGZvcm0gYWxsb3dzIHRoZSBVcHNpbG9uIHRvIGJlIGluIGFueSBibG9jayB0aGF0IGRvbWlu
YXRlcworLy8gICB0aGUgcHJlZGVjZXNzb3IgYmxvY2sgb2YgdGhlIFBoaSwgd2hpY2ggYWxsb3dz
IGZvciBibG9jayBzcGxpdHRpbmcgdG8KKy8vICAgaWdub3JlIHRoZSBwb3NzaWJpbGl0eSBvZiBp
bnRyb2R1Y2luZyBhbiBleHRyYSBlZGdlIGJldHdlZW4gdGhlIFBoaQorLy8gICBhbmQgdGhlIHBy
ZWRlY2Vzc29yICh0aG91Z2ggbm9ybWFsIFNTQSB3b3VsZCBhbGxvdyB0aGlzLCBhbHNvLCB3aXRo
CisvLyAgIHRoZSBjYXZlYXQgdGhhdCB0aGUgUGhpIHByZWRlY2Vzc29yIGJsb2NrIGxpc3RzIHdv
dWxkIGhhdmUgdG8gYmUKKy8vICAgdXBkYXRlZCkuCisvLworLy8gICBUaGUgZWFzaWVzdCB3YXkg
dG8gY29udmVydCBmcm9tIHRoaXMgU1NBIGZvcm0gaW50byBhIGRpZmZlcmVudCBTU0EKKy8vICAg
Zm9ybSBpcyB0byByZWRvIFNTQSBjb252ZXJzaW9uIGZvciBQaGkgZnVuY3Rpb25zLiBUaGF0IGlz
LCB0cmVhdCBlYWNoCisvLyAgIFBoaSBpbiBvdXIgSVIgYXMgYSBub24tU1NBIHZhcmlhYmxlIGlu
IHRoZSBmb3JlaWduIElSIChzbywgYXMgYW4KKy8vICAgYWxsb2NhIGluIExMVk0gSVIsIGZvciBl
eGFtcGxlKTsgdGhlIFVwc2lsb25zIHRoYXQgcmVmZXIgdG8gdGhlIFBoaQorLy8gICBiZWNvbWUg
c3RvcmVzIGFuZCB0aGUgUGhpcyB0aGVtc2VsdmVzIGJlY29tZSBsb2Fkcy4KKy8vCisvLyAgIEZ1
biBmYWN0OiBVcHNpbG9uIGlzIHNvIG5hbWVkIGJlY2F1c2UgaXQgY29tZXMgYmVmb3JlIFBoaSBp
biB0aGUKKy8vICAgYWxwaGFiZXQuIEl0IGNhbiBiZSB3cml0dGVuIGFzICJZIi4KKworYm9vbCBw
ZXJmb3JtU1NBQ29udmVyc2lvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1NTQUNvbnZlcnNp
b25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCQkwRkQ4MUFDNTE1NEZC
MjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRW
ZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwRkREQkZB
NzE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVG
IC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1
RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRT
dHJlYW0uaCAqLzsgfTsKKwkJMEZFNTA1NTcxNzg3QTgwNjAwQjM1RjhDIC8qIEluc2VydGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTYx
Nzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovOyB9OwogCQkxNDNGNjExRjE1NjVGMEY5
MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi87
IH07CiAJCTE0M0Y2MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVGMEY5MDBEQjUx
NEEgLyogUkFNU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJ
CTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Njk0MTkwMTZFQUFGNkQwMDI0RTE0
NiAvKiBSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMzUyLDYgKzM1Myw3IEBACiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3
MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZh
c3RCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2
REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3Ry
ZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4
QyAvKiBJbnNlcnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zZXJ0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3Bpbkxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJBTVNpemUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSQU1TaXplLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC03ODUsNiArNzg3LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0
MTIzRkYgLyogSGFzaFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAv
KiBIZXhOdW1iZXIuaCAqLywKIAkJCQlBOEE0NzJCQzE1MUE4MjVBMDA0MTIzRkYgLyogSW5saW5l
QVNNLmggKi8sCisJCQkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICov
LAogCQkJCUE4QTQ3MkJFMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJ
QThBNDcyQkYxNTFBODI1QTAwNDEyM0ZGIC8qIEludDMyQXJyYXkuaCAqLywKIAkJCQlBOEE0NzJC
RDE1MUE4MjVBMDA0MTIzRkYgLyogSW50OEFycmF5LmggKi8sCkBAIC0xMTgxLDYgKzExODQsNyBA
QAogCQkJCUE4QTQ3M0U4MTUxQTgyNUIwMDQxMjNGRiAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNFQTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRDU0OTdBRDE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0RjFEMTE1NDE1RkYxMUJFMDAyNkU5MDggLyogTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RkQ4NTU0NzE2MTMzRTBFMDBDNUI3MDQgLyog
TWVtb3J5SW5zdHJ1bWVudGF0aW9uQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGM0ZCQzcxRTE2MUFGN0JGMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENv
dW50ZWRTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvSGFzaFNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gMTUyNDMy
KQorKysgU291cmNlL1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMiAr
ODYsMTkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmV2
ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBzbyB0aGF0IGNhbGxlcnMK
ICAgICAgICAgLy8gY2FuIGp1c3QgcGFzcyB0aGUgdHJhbnNsYXRvciBhbmQgbGV0IHRoZSBjb21w
aWxlciBkZWR1Y2UgVC4KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFz
aFRyYW5zbGF0b3I+IEFkZFJlc3VsdCBhZGQoY29uc3QgVCYpOworICAgICAgICAKKyAgICAgICAg
Ly8gQXR0ZW1wdHMgdG8gYWRkIGEgbGlzdCBvZiB0aGluZ3MgdG8gdGhlIHNldC4gUmV0dXJucyB0
cnVlIGlmIGFueSBvZgorICAgICAgICAvLyB0aGVtIGFyZSBuZXcgdG8gdGhlIHNldC4gUmV0dXJu
cyBmYWxzZSBpZiB0aGUgc2V0IGlzIHVuY2hhbmdlZC4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSXRlcmF0b3JUeXBlPgorICAgICAgICBib29sIGFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0
ZXJhdG9yVHlwZSBlbmQpOwogCiAgICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYp
OwogICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvcik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsK
IAogICAgICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJik7Cisg
ICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaFNldCYpIGNvbnN0Owog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIHZvaWQgZGVsZXRlQWxsVmFsdWVzPD4oY29u
c3QgSGFzaFNldCYpOwpAQCAtMTkxLDYgKzE5OCwxNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9
CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQorICAg
IHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoSXRlcmF0b3JU
eXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gYWRkKCppdGVyKS5pc05ld0VudHJ5OworICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgog
ICAgIGlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKICAg
ICB7CiAgICAgICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQpAQCAtMjU2LDYgKzI3
MywxOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHZlY3RvcltpXSA9ICppdDsKICAg
ICB9ICAKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
CisgICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBIYXNo
U2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmICgh
b3RoZXIuY29udGFpbnMoKml0ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIFdU
RgogCiB1c2luZyBXVEY6Okhhc2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTUy
NDMyKQorKysgU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
NzAsNiArMTE3MCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHsKICAgICAgICAgLy8gQ29weSB0
aGUgaGFzaCB0YWJsZSB0aGUgZHVtYiB3YXksIGJ5IGFkZGluZyBlYWNoIGVsZW1lbnQgdG8gdGhl
IG5ldyB0YWJsZS4KICAgICAgICAgLy8gSXQgbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgdG8gY29w
eSB0aGUgdGFibGUgc2xvdHMsIGJ1dCBpdCdzIG5vdCBjbGVhciB0aGF0IGVmZmljaWVuY3kgaXMg
bmVlZGVkLgorICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBp
bXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0
cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQogICAgICAg
ICBjb25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKICAgICAgICAgZm9yIChjb25zdF9p
dGVyYXRvciBpdCA9IG90aGVyLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAg
IGFkZCgqaXQpOwpAQCAtMTIwOSw2ICsxMjExLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KICAgICBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz4mIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6b3BlcmF0b3I9KGNvbnN0IEhhc2hUYWJsZSYg
b3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNh
biBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBI
YXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQog
ICAgICAgICBIYXNoVGFibGUgdG1wKG90aGVyKTsKICAgICAgICAgc3dhcCh0bXApOwogICAgICAg
ICByZXR1cm4gKnRoaXM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0luc2VydGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbnNl
cnRpb25faAorI2RlZmluZSBJbnNlcnRpb25faAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluc2VydGlvbiB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9u
KCkgeyB9CisgICAgCisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorICAg
ICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
OyB9CisgICAgVCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSW5zZXJ0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2luZGV4IDwgb3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIHNpemVfdCBtX2luZGV4OworICAgIFQgbV9lbGVtZW50OworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVGFyZ2V0VmVjdG9yVHlwZSwgdHlwZW5hbWUgSW5zZXJ0aW9uVmVjdG9yVHlw
ZT4KK3ZvaWQgZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYgdGFyZ2V0LCBJbnNl
cnRpb25WZWN0b3JUeXBlJiBpbnNlcnRpb25zKQoreworICAgIGlmICghaW5zZXJ0aW9ucy5zaXpl
KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0YXJnZXQuZ3Jvdyh0YXJnZXQuc2l6ZSgpICsgaW5z
ZXJ0aW9ucy5zaXplKCkpOworICAgIHNpemVfdCBsYXN0SW5kZXggPSB0YXJnZXQuc2l6ZSgpOwor
ICAgIGZvciAoc2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gaW5zZXJ0aW9ucy5zaXplKCk7IGlu
ZGV4SW5JbnNlcnRpb25zLS07KSB7CisgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0
aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOworICAg
ICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQorICAgICAgICAg
ICAgdGFyZ2V0W2ldID0gdGFyZ2V0W2kgLSBpbmRleE9mZnNldF07CisgICAgICAgIHRhcmdldFtm
aXJzdEluZGV4XSA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmVsZW1lbnQoKTsKKyAg
ICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleDsKKyAgICB9CisgICAgaW5zZXJ0aW9ucy5yZXNp
emUoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Okluc2VydGlvbjsK
K3VzaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnM7CisKKyNlbmRpZiAvLyBJbnNlcnRpb25faAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206288</attachid>
            <date>2013-07-08 21:38:34 -0700</date>
            <delta_ts>2013-07-08 22:26:29 -0700</delta_ts>
            <desc>started thinking about FTL backend for SSA</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>91817</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9j
YWxGaXJzdFRpbWUob3BlcmFuZCwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFy
KCkKKyAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IHZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgp
OworICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBmaWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2IEBAIHZvaWQgQWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2kKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3Ry
YWN0VmFsdWU+OjppdGVyYXRvciBpdGVyID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQu
YmVnaW4oKTsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9y
IGVuZCA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmVuZCgpOworICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgZm9yTm9kZShpdGVyLT5rZXkp
ID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUuaGFzQ2xvYmJlcmFi
bGVTdGF0ZSgpKQorICAgICAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorICAgIAogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBm
YWxzZTsKICAgICBiYXNpY0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsKICAgICBtX2Jsb2Nr
ID0gYmFzaWNCbG9jazsKQEAgLTgzLDYgKzkzLDE2IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKEJhc2kKICAgICBtX2N1cnJlbnROb2RlID0gMDsKIH0KIAorc3RhdGljIHZv
aWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBI
YXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3sKKyAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICAKKyAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGxpdmUuYmVnaW4oKTsKKyAgICBIYXNoU2V0
PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbGl2ZS5lbmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBl
bmQ7ICsraXRlcikKKyAgICAgICAgdmFsdWVzLmFkZCgqaXRlciwgQWJzdHJhY3RWYWx1ZSgpKTsK
K30KKwogdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKIHsKICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxvY2soMCk7CkBAIC0xNTEsNiArMTcxLDEwIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICNlbmRpZgogICAgICAg
ICB9CiAgICAgICAgIGJsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9j
ay0+c3NhLT52YWx1ZXNBdEhlYWQsIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpOworICAgICAgICAg
ICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwsIGJsb2NrLT5zc2EtPmxp
dmVBdFRhaWwpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNzIsMjAgKzE5NiwzOSBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNCiAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIUFTU0VS
VF9ESVNBQkxFRCkgewotICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50
KSB7CisgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBUaHJl
YWRlZENQUzogeworICAgICAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVu
dCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGFyZ3VtZW50ICV6dS5cbiIs
IGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0
YXRlIGZvciBhcmd1bWVudCAlenUuXG4iLCBhcmd1bWVudCk7CiAjZW5kaWYKLSAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVz
dGluYXRpb24sIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24s
IG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBz
dGF0ZSBmb3IgbG9jYWwgJXp1LlxuIiwgbG9jYWwpOworICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKICNlbmRp
ZgotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVz
QXRUYWlsLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0
VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFi
bGVzLmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFNTQTogeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0g
YmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5iZWdpbigpOworICAgICAgICAgICAgSGFzaFNldDxOb2Rl
Kj46Oml0ZXJhdG9yIGVuZCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRBaWwuZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKCppdGVyKS0+dmFsdWUubWVyZ2UoZm9y
Tm9kZShub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTU4Niw2ICsxNjI5LDE2IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFBoaToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5t
X2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3VsZCBo
YXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBVcHNpbG9uOgorICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGZv
ck5vZGUobm9kZS0+cGhpKCkpID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAg
ICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQnJlYWtwb2lu
dDoKQEAgLTE2NzksNyArMTczMiw3IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJTdHJ1Y3QKICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQorYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZh
bHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTc2NywyMSArMTgyMCw0NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQor
Ym9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0
bykKIHsKICAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRz
KCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBBU1NF
UlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gdG8tPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAKICAgICBib29sIGNoYW5nZWQgPSBmYWxz
ZTsKICAgICAKLSAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZnJvbS0+
dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGFyZ3VtZW50KTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nr
cyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8t
PnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCkpOworICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAg
ICBjYXNlIFRocmVhZGVkQ1BTOiB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKyth
cmd1bWVudCkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCksIHRvLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1l
bnQpLCBmcm9tLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20t
PnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9j
YWwpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyhk
ZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBmb3IgKHNpemVf
dCBsb2NhbCA9IDA7IGxvY2FsIDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCk7ICsrbG9jYWwpIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+
dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxv
Y2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICAKKyAgICBjYXNlIFNTQTogeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gZnJvbS0+dmFyaWFibGVzQXRUYWlsLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gdG8tPnZhcmlhYmxlc0F0SGVhZFtpXS5tZXJnZShmcm9tLT52YXJp
YWJsZXNBdFRhaWxbaV0pOworICAgICAgICAKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJh
dG9yIGl0ZXIgPSB0by0+c3NhLT5saXZlQXRIZWFkLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+OjppdGVyYXRvciBlbmQgPSB0by0+c3NhLT5saXZlQXRIZWFkLmVuZCgpOworICAgICAg
ICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9
ICppdGVyOworICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+c3NhLT52YWx1ZXNBdEhlYWQuZmlu
ZChub2RlKS0+dmFsdWUubWVyZ2UoCisgICAgICAgICAgICAgICAgZnJvbS0+c3NhLT52YWx1ZXNB
dFRhaWwuZmluZChub2RlKS0+dmFsdWUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCF0by0+Y2ZhSGFzVmlz
aXRlZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
amFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksMTUgQEAgcHVibGljOgog
ICAgIAogICAgIEVkZ2UgY2hpbGQxVW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV93b3Jkc1sw
XTsgfQogICAgIAorICAgIEVkZ2UganVzdE9uZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghIWNoaWxkMSgpICYmICFjaGlsZDIoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjaGls
ZDMoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEVkZ2UoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXplKEVkZ2UgY2hp
bGQxLCBFZGdlIGNoaWxkMiwgRWRnZSBjaGlsZDMpCiAgICAgewogICAgICAgICBjaGlsZCgwKSA9
IGNoaWxkMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5o
CShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKICNpbmNsdWRlICJERkdWYXJpYWRpY0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiT3BlcmFu
ZHMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAt
ODAsNiArODIsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQogICAgIE5vZGUqJiBh
dChzaXplX3QgaSkgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQogICAgIE5vZGUqIGF0KHNpemVfdCBp
KSBjb25zdCB7IHJldHVybiBtX25vZGVzW2ldOyB9CisgICAgTm9kZSomIG9wZXJhdG9yW10oc2l6
ZV90IGkpIHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogb3BlcmF0b3JbXShzaXplX3QgaSkg
Y29uc3QgeyByZXR1cm4gYXQoaSk7IH0KICAgICBOb2RlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4g
YXQoc2l6ZSgpIC0gMSk7IH0KICAgICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkgeyBtX25vZGVz
LnJlc2l6ZShzaXplKTsgfQpAQCAtMTMwLDYgKzEzMywxMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6
IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9O
KERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQog
ICAgIAorI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0
ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFy
Z3MpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBl
bmROb25UZXJtaW5hbChHcmFwaCYsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFs
dWVQYXJhbXMpOworICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5F
X0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKKyAgICAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICB7CiAgICAgICAgIG91dC5wcmlu
dCgiIyIsIGluZGV4KTsKQEAgLTE2MCw2ICsxNjgsMTUgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBS
ZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIAogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZh
bHVlc0F0SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7Cisg
ICAgCisgICAgc3RydWN0IFNTQURhdGEgeworICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4g
Zmx1c2hGb3JtYXRBdEhlYWQ7IC8vIENvbXB1dGVkIGJ5IGxpdmVuZXNzIGFuYWx5c2lzIGJ5IGJh
Y2t3YXJkcyBwcm9wYWdhdGlvbiBmcm9tIEZsdXNoZXMuCisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+
IGxpdmVBdEhlYWQ7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CisgICAgICAg
IEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKKyAgICAgICAgSGFz
aE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworICAgIH07CisgICAgT3du
UHRyPFNTQURhdGE+IHNzYTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9u
U2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
a0lubGluZXMuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgREZHX1ZBUklBRElDX1RFTVBM
QVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9B
UFBFTkRfTk9ERQogCisjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUs
IHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMs
IHZhbHVlQXJncykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IGlu
bGluZSBOb2RlKiBCYXNpY0Jsb2NrOjphcHBlbmROb25UZXJtaW5hbChHcmFwaCYgZ3JhcGgsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHsg
XAorICAgICAgICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHR5cGUgdmFsdWVQYXJhbXND
b21tYSB2YWx1ZUFyZ3MpOyBcCisgICAgICAgIGFwcGVuZChsYXN0KCkpOyBcCisgICAgICAgIGF0
KHNpemUoKSAtIDIpID0gcmVzdWx0OyBcCisgICAgICAgIHJldHVybiByZXN1bHQ7IFwKKyAgICB9
CisgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05P
REUpCisjdW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitCbG9ja0luc2VydGlvblNldDo6QmxvY2tJbnNlcnRp
b25TZXQoR3JhcGgmIGdyYXBoKQorICAgIDogbV9ncmFwaChncmFwaCkKK3sKK30KKworQmxvY2tJ
bnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQorCit2b2lkIEJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnQoY29uc3QgQmxvY2tJbnNlcnRpb24mIGluc2VydGlvbikKK3sKKyAgICBt
X2luc2VydGlvbnMuYXBwZW5kKGluc2VydGlvbik7Cit9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25T
ZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2spCit7
CisgICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBibG9jaykpOworfQorCitCYXNpY0Js
b2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCkKK3sKKyAgICBSZWZQ
dHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZihuZXcgQmFzaWNCbG9jaygKKyAgICAgICAg
VUlOVF9NQVgsCisgICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkFyZ3VtZW50cygpLAorICAgICAgICBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgIGluc2VydChpbmRleCwgYmxvY2spOworICAgIHJl
dHVybiBibG9jay5nZXQoKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omlu
c2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpCit7CisgICAgcmV0dXJuIGluc2VydChibG9j
ay0+aW5kZXgpOworfQorCitib29sIEJsb2NrSW5zZXJ0aW9uU2V0OjpleGVjdXRlKCkKK3sKKyAg
ICBpZiAobV9pbnNlcnRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIC8vIFdlIGFsbG93IGluc2VydGlvbnMgdG8gYmUgZ2l2ZW4gdG8gdXMgaW4gYW55IG9y
ZGVyLiBTbywgd2UgbmVlZCB0bworICAgIC8vIHNvcnQgdGhlbSBiZWZvcmUgcnVubmluZyBXVEY6
OmV4ZWN1dGVJbnNlcnRpb25zLgorICAgIHN0ZDo6c29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwg
bV9pbnNlcnRpb25zLmVuZCgpKTsKKworICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fZ3JhcGgubV9i
bG9ja3MsIG1faW5zZXJ0aW9ucyk7CisgICAgCisgICAgLy8gUHJ1bmUgb3V0IGVtcHR5IGVudHJp
ZXMuIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBpdCdzCisgICAgLy8gaGVhbHRo
eSB0byBrZWVwIHRoZSBibG9jayBsaXN0IGZyb20gZ3Jvd2luZy4KKyAgICB1bnNpZ25lZCB0YXJn
ZXRJbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBzb3VyY2VJbmRleCA9IDA7IHNvdXJjZUlu
ZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7KSB7CisgICAgICAgIFJlZlB0cjxCYXNpY0Js
b2NrPiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nbc291cmNlSW5kZXgrK107CisgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nr
c1t0YXJnZXRJbmRleCsrXSA9IGJsb2NrOworICAgIH0KKyAgICBtX2dyYXBoLm1fYmxvY2tzLnJl
c2l6ZSh0YXJnZXRJbmRleCk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJsb2Nr
cyBrbm93IHRoZWlyIG5ldyBpbmRpY2VzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytpKQorICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2ld
LT5pbmRleCA9IGk7CisgICAgCisgICAgLy8gQW5kIGZpbmFsbHksIGludmFsaWRhdGUgYWxsIGFu
YWx5c2VzIHRoYXQgcmVseSBvbiB0aGUgQ0ZHLgorICAgIG1fZ3JhcGguaW52YWxpZGF0ZUNGRygp
OworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHQmxvY2tJbnNlcnRpb25TZXRfaAorI2RlZmluZSBERkdC
bG9ja0luc2VydGlvblNldF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYvSW5z
ZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248UmVmUHRyPEJhc2ljQmxvY2s+
ID4gQmxvY2tJbnNlcnRpb247CisKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoK
KyAgICBCbG9ja0luc2VydGlvblNldChHcmFwaCYgZ3JhcGgpOworICAgIH5CbG9ja0luc2VydGlv
blNldCgpOworICAgIAorICAgIHZvaWQgaW5zZXJ0KGNvbnN0IEJsb2NrSW5zZXJ0aW9uJiBpbnNl
cnRpb24pOworICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgUGFzc1JlZlB0cjxCYXNpY0Js
b2NrPiBibG9jayk7CisgICAgQmFzaWNCbG9jayogaW5zZXJ0KHNpemVfdCBpbmRleCk7CisgICAg
QmFzaWNCbG9jayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSk7CisgICAgCisgICAg
Ym9vbCBleGVjdXRlKCk7CisKK3ByaXZhdGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgVmVj
dG9yPEJsb2NrSW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERG
R0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDEwIEBAIGVudW0gR3JhcGhG
b3JtIHsKICAgICAvLwogICAgIC8vIFRocmVhZGVkQ1BTIGZvcm0gaXMgc3VpdGFibGUgZm9yIGRh
dGEgZmxvdyBhbmFseXNpcyAoQ0ZBLCBwcmVkaWN0aW9uCiAgICAgLy8gcHJvcGFnYXRpb24pLCBy
ZWdpc3RlciBhbGxvY2F0aW9uLCBhbmQgY29kZSBnZW5lcmF0aW9uLgotICAgIFRocmVhZGVkQ1BT
CisgICAgVGhyZWFkZWRDUFMsCisgICAgCisgICAgLy8gU1NBIGZvcm0uIFNlZSBERkdTU0FDb252
ZXJzaW9uUGhhc2UuaCBmb3IgYSBkZXNjcmlwdGlvbi4KKyAgICBTU0EKIH07CiAKIC8vIERlc2Ny
aWJlcyB0aGUgc3RhdGUgb2YgdGhlIFVuaW9uRmluZCBzdHJ1Y3R1cmUgb2YgVmFyaWFibGVBY2Nl
c3NEYXRhJ3MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRn
ZUJyZWFraW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlv
blNldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImNyaXRpY2FsIGVkZ2Ug
YnJlYWtpbmciKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0lu
ZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBBbiBlZGdlIEEtPkIgaXMgY3JpdGlj
YWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29yIGFuZCBCIGhhcyBtdWx0aXBsZQorICAgICAg
ICAgICAgLy8gcHJlZGVjZXNzb3JzLiBUaHVzIHdlIGZhaWwgZWFybHkgaWYgd2UgZG9uJ3QgaGF2
ZSBtdWx0aXBsZSBzdWNjZXNzb3JzLgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxv
Y2stPm51bVN1Y2Nlc3NvcnMoKSA8PSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vz
c29ycygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayoqIHN1Y2Nlc3NvciA9
ICZibG9jay0+c3VjY2Vzc29yKGkpOworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnBy
ZWRlY2Vzc29ycy5zaXplKCkgPD0gMSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYnJlYWtDcml0aWNhbEVkZ2UoYmxvY2ss
IHN1Y2Nlc3Nvcik7IAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gbV9pbnNlcnRpb25TZXQuZXhlY3V0ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIGJyZWFrQ3JpdGljYWxFZGdlKAorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jaywgdW5z
aWduZWQgc3VjY2Vzc29ySW5kZXgsIEJhc2ljQmxvY2sqKiBzdWNjZXNzb3IpCisgICAgeworICAg
ICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBw
YWQgPSBtX3BhZHMuZ2V0KCpzdWNjZXNzb3IpOworICAgICAgICBpZiAoIXBhZCkgeworICAgICAg
ICAgICAgcGFkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKCpzdWNjZXNzb3IpOworICAg
ICAgICAgICAgcGFkLT5hcHBlbmROb2RlKG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBPcEluZm8o
KnN1Y2Nlc3NvcikpOworICAgICAgICAgICAgbV9wYWRzLmFkZCgqc3VjY2Vzc29yLCBwYWQpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAqc3VjY2Vzc29yID0gcGFkOworICAgIH0KKyAg
ICAKKyAgICBCbG9ja0luc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBIYXNoTWFwPEJh
c2ljQmxvY2sqLCBCYXNpY0Jsb2NrKj4gbV9wYWRzOworfTsKKworYm9vbCBwZXJmb3JtQ3JpdGlj
YWxFZGdlQnJlYWtpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKCJERkcgQ3JpdGljYWwgRWRnZSBCcmVha2luZyBQaGFzZSIpOworICAgIHJldHVy
biBydW5QaGFzZTxDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorI2RlZmluZSBERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgR3JhcGg7CisKKy8vIEluc2VydHMgZHVtbXkgYmFzaWMgYmxvY2tzIHRvIGJyZWFrIGNy
aXRpY2FsIGVkZ2VzLiBBbiBlZGdlIEEtPkIgaXMKKy8vIGNyaXRpY2FsIGlmIEEgaGFzIG11bHRp
cGxlIHN1Y2Nlc3NvcnMgYW5kIEIgaGFzIG11bHRpcGxlIHByZWRlc3NvcnMuCisKK2Jvb2wgcGVy
Zm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBw
dWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFRocmVhZGVkQ1BTIHx8IG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAg
ICAgIAogICAgICAgICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFsbCBub2Rl
cy4KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwg
bV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBAIC03NSwxMCArNzcsMjkg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB3aGlsZSAoIW1fd29ya2xp
c3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0
KCk7Ci0gICAgICAgICAgICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIEFT
U0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUg
d29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgotICAgICAgICAgICAgREZHX05PREVfRE9fVE9f
Q0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291bnRFZGdlKTsKKyAgICAgICAgICAgIHdoaWxlICgh
bV93b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV93
b3JrbGlzdC5sYXN0KCk7CisgICAgICAgICAgICAgICAgbV93b3JrbGlzdC5yZW1vdmVMYXN0KCk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBz
aG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCisgICAgICAg
ICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291bnRFZGdl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgICAgIC8vIEZpbmQgUGhpLT5VcHNpbG9uIGVk
Z2VzLCB3aGljaCBhcmUgcmVwcmVzZW50ZWQgYXMgbWV0YS1kYXRhIGluIHRoZQorICAgICAgICAg
ICAgICAgIC8vIFVwc2lsb24uCisgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5waGkoKS0+c2hv
dWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudE5vZGUobm9k
ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkg
ewpAQCAtOTUsNyArMTE2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9j
YWw6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLmlzUHJvdmVkKCkg
fHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2soKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgVUludDMy
VG9OdW1iZXIgaXMgZGVhZCBidXQgaXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGls
ZCBpc24ndDsgaWYgc28gdGhlbiB3ZSBzaG91bGQgTW92SGludCB0aGUgY2hpbGQuCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpCkBA
IC0xMjYsNyArMTQ3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5m
aXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSB8fCBl
ZGdlLmlzUHJvdmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UgfHwgZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgZWRnZSk7CkBAIC0xNTgsMjEgKzE3
OSwyNSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgYW4gInVucHJv
dmVkIiB1bnR5cGVkIHVzZSBmb3IgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlLiBUaGUgQ0ZBCiAg
ICAgICAgIC8vIHdpbGwganVzdCBub3QgaGF2ZSBnb3R0ZW4gYXJvdW5kIHRvIGl0LgotICAgICAg
ICBpZiAoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisg
ICAgICAgIGlmIChlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgaWYgKCFlZGdlLT5wb3N0Zml4UmVmKCkpCiAgICAgICAgICAgICBtX3dvcmtsaXN0
LmFwcGVuZChlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY291bnROb2RlKE5v
ZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICB9Cisg
ICAgCiAgICAgdm9pZCBjb3VudEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAg
IC8vIERvbid0IGNvdW50IGVkZ2VzIHRoYXQgYXJlIGFscmVhZHkgY291bnRlZCBmb3IgdGhlaXIg
dHlwZSBjaGVja3MuCi0gICAgICAgIGlmICghKGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtp
bmQoKSA9PSBVbnR5cGVkVXNlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChlZGdlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgIGlmIChlZGdlLndpbGxIYXZlQ2hl
Y2soKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV93b3JrbGlzdC5hcHBlbmQoZWRn
ZS5ub2RlKCkpOworICAgICAgICBjb3VudE5vZGUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkK
QEAgLTE4MSw3ICsyMDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9k
ZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CiAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2Uu
dXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgICAgICBpZiAoZWRnZS53aWxsTm90SGF2
ZUNoZWNrKCkpCiAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0p
OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdF
ZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJ
KHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHByb29mU3RhdHVzKCkgPT0gTmVlZHNDaGVjazsKICAgICB9CiAgICAgCisgICAgYm9vbCB3
aWxsTm90SGF2ZUNoZWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1Byb3ZlZCgp
IHx8IHVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlOworICAgIH0KKyAgICBib29sIHdpbGxIYXZlQ2hl
Y2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICF3aWxsTm90SGF2ZUNoZWNrKCk7Cisg
ICAgfQorICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW5vZGUoKTsgfQog
ICAgIAogICAgIHR5cGVkZWYgdm9pZCogRWRnZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Zs
dXNoRm9ybWF0LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIFdURiB7CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgRmx1c2hGb3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7Cisg
ICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgIG91dC5wcmludCgiRGVhZEZsdXNoIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJG
bHVzaGVkSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZERvdWJsZToK
KyAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRKU1ZhbHVl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRmx1c2hGb3JtYXRfaAorI2RlZmlu
ZSBERkdGbHVzaEZvcm1hdF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBGbHVzaEZvcm1hdCB7CisgICAgRGVhZEZs
dXNoLAorICAgIEZsdXNoZWRJbnQzMiwKKyAgICBGbHVzaGVkRG91YmxlLAorICAgIEZsdXNoZWRK
U1ZhbHVlCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYg
eworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBGbHVzaEZvcm1hdCk7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdGbHVzaEZvcm1hdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDYgKzQ3OCwzMCBAQCB2b2lkIEdyYXBo
OjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jCiAgICAgICAgICAgICBicmVhazsKICAgICB9
CiB9CisKK3ZvaWQgR3JhcGg6OmFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBIYXNoU2V0PEJh
c2ljQmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgaWYgKHNlZW4uY29u
dGFpbnMoYmxvY2spKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcmVzdWx0LmFwcGVuZChi
bG9jayk7CisgICAgd29ya2xpc3QuYXBwZW5kKGJsb2NrKTsKKyAgICBzZWVuLmFkZChibG9jayk7
Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gR3JhcGg6OmRlcHRoRmlyc3RTb3J0KCkKK3sKKyAg
ICBWZWN0b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2
PiB3b3JrbGlzdDsKKyAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBzZWVuOworICAgIGFkZEZvckRl
cHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKKyAgICB3aGls
ZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdv
cmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1T
dWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICBhZGRGb3JEZXB0aEZpcnN0U29ydChyZXN1
bHQsIHdvcmtsaXN0LCBzZWVuLCBibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KICAgICAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NTEs
NiArNjUxLDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgaW52YWxpZGF0ZUNGRygpOwogICAg
IAorICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdFNvcnQoKTsKKyAgICAKICAgICBQ
cm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBp
bGF0aW9uLmdldCgpOyB9CiAgICAgCiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVy
cygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQpAQCAtNjg5LDYgKzY5MSw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJh
c2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayogc3VjY2Vz
c29yKTsKKyAgICB2b2lkIGFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3RvcjxCYXNpY0Jsb2NrKj4m
IHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBIYXNoU2V0PEJhc2lj
QmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9jayopOwogICAgIAogICAgIEFkZFNwZWN1bGF0aW9uTW9k
ZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCwgYm9vbCB2YXJp
YWJsZVNob3VsZFNwZWN1bGF0ZUludGVnZXIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9u
IDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDI2ICszMSwxMiBAQAogI2lmIEVOQUJMRShERkdfSklUKQog
CiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
LWNsYXNzIEluc2VydGlvbiB7Ci1wdWJsaWM6Ci0gICAgSW5zZXJ0aW9uKCkgeyB9Ci0gICAgCi0g
ICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVudCkKLSAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgIHsKLSAgICB9Ci0g
ICAgCi0gICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIE5v
ZGUqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KLXByaXZhdGU6Ci0gICAg
c2l6ZV90IG1faW5kZXg7Ci0gICAgTm9kZSogbV9lbGVtZW50OwotfTsKK3R5cGVkZWYgV1RGOjpJ
bnNlcnRpb248Tm9kZSo+IEluc2VydGlvbjsKIAogY2xhc3MgSW5zZXJ0aW9uU2V0IHsKIHB1Ymxp
YzoKQEAgLTgxLDIwICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGV4ZWN1dGUoQmFz
aWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBpZiAoIW1faW5zZXJ0aW9ucy5zaXplKCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJsb2NrLT5ncm93KGJsb2NrLT5zaXplKCkg
KyBtX2luc2VydGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgc2l6ZV90IGxhc3RJbmRleCA9IGJsb2Nr
LT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gbV9pbnNl
cnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsKLSAgICAgICAgICAgIEluc2Vy
dGlvbiYgaW5zZXJ0aW9uID0gbV9pbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXTsKLSAgICAg
ICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uLmluZGV4KCkgKyBpbmRleEluSW5z
ZXJ0aW9uczsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9mZnNldCA9IGluZGV4SW5JbnNlcnRp
b25zICsgMTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZp
cnN0SW5kZXg7KQotICAgICAgICAgICAgICAgIGJsb2NrLT5hdChpKSA9IGJsb2NrLT5hdChpIC0g
aW5kZXhPZmZzZXQpOwotICAgICAgICAgICAgYmxvY2stPmF0KGZpcnN0SW5kZXgpID0gaW5zZXJ0
aW9uLmVsZW1lbnQoKTsKLSAgICAgICAgICAgIGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9pbnNlcnRpb25zLnJlc2l6ZSgwKTsKKyAgICAgICAgZXhlY3V0ZUlu
c2VydGlvbnMoKmJsb2NrLCBtX2luc2VydGlvbnMpOwogICAgIH0KIHByaXZhdGU6CiAgICAgR3Jh
cGgmIG1fZ3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNz
QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdMaXZlbmVzc0Fu
YWx5c2lzUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFz
aWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0lu
c2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIExpdmVuZXNz
QW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImxpdmVuZXNz
IGFuYWx5c2lzIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAg
Ly8gTGl2ZW5lc3MgaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXM7IHRoZSByb290cyBhcmUgdGhlIGJs
b2NrcyB0aGF0CisgICAgICAgIC8vIGVuZCBpbiBhIHRlcm1pbmFsIChSZXR1cm4vVGhyb3cvVGhy
b3dSZWZlcmVuY2VFcnJvcikuIEZvciBub3csIHdlCisgICAgICAgIC8vIHVzZSBhIGZpeHBvaW50
IGZvcm11bGF0aW9uIHNpbmNlIGxpdmVuZXNzIGlzIGEgcmFwaWQgYW5hbHlzaXMgd2l0aAorICAg
ICAgICAvLyBjb252ZXJnZW5jZSBndWFyYW50ZWVkIGFmdGVyIE8oY29ubmVjdGl2aXR5KS4KKyAg
ICAgICAgCisgICAgICAgIC8vIFN0YXJ0IGJ5IGFzc3VtaW5nIHRoYXQgZXZlcnl0aGluZyBpcyBk
ZWFkLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBibG9jay0+bGl2ZUF0SGVhZC5jbGVh
cigpOworICAgICAgICAgICAgYmxvY2stPmxpdmVBdFRhaWwuY2xlYXIoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9ja0luZGV4KTsK
KyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoQmxvY2tJbmRleCBibG9j
a0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUg
aW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAgICAgICAgLy8gSGFzaFNl
dHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKKyAgICAg
ICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7Cisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246CisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgLy8gICAgbjogVXBzaWxvbigkcCwgQHgpCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFuZCB1c2VzIEB4LgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhpOgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVzZSBub3IgYSBkZWYuCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2RlOgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwgQGMu
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgY2FzZSBVcHNpbG9uOiB7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+
cGhpKCk7CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkpOworICAgICAgICAgICAg
ICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICAgICAgbV9saXZlLmFkZChub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAgICAg
ICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRDaGlsZFVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAg
YmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5hZGQobV9saXZlLmJlZ2luKCksIG1fbGl2ZS5lbmQoKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAg
ICB7CisgICAgICAgIG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICBi
b29sIG1fY2hhbmdlZDsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7Cit9OworCitib29sIHBl
cmZvcm1EQ0UoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVn
aW9uKCJERkcgTGl2ZW5lc3MgQW5hbHlzaXMgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8
TGl2ZW5lc3NBbmFseXNpc1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdMaXZlbmVzc0FuYWx5c2lz
UGhhc2VfaAorI2RlZmluZSBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Nv
bW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBo
OworCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmxpdmVBdEhlYWQvbGl2ZUF0VGFpbC4K
KworYm9vbCBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDYgKzUzOCwxNyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1fb3BJbmZvKTsK
ICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNQaGkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9w
KCkgPT0gVXBzaWxvbjsKKyAgICB9CisgICAgCisgICAgTm9kZSogcGhpKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNQaGkoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9kZSo+
KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNJZGVudGlmaWVyKCkKICAgICB7
CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewpAQCAtNzczLDE2ICs3ODQsMTYgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICBtX29wSW5mbzIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7
CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2soKQorICAgIEJhc2ljQmxv
Y2sqJiB0YWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlz
SnVtcCgpKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcElu
Zm8pOworICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5m
byk7CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuQmxvY2soKQorICAgIEJh
c2ljQmxvY2sqJiBub3RUYWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5j
aCgpKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8y
KTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcEluZm8y
KTsKICAgICB9CiAgICAgCiAgICAgU3dpdGNoRGF0YSogc3dpdGNoRGF0YSgpCkBAIC04MDUsNyAr
ODE2LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vz
c29yKHVuc2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKGlzU3dpdGNoKCkpIHsKICAg
ICAgICAgICAgIGlmIChpbmRleCA8IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTUyNDMyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw2ICs2NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBt
YWNybyhab21iaWVIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9tLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKKyAg
ICBtYWNybyhVcHNpbG9uLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikgXAog
ICAgIG1hY3JvKFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwKICAg
ICBtYWNybyhGbHVzaCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAg
IG1hY3JvKFBoYW50b21Mb2NhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NzIsMTQgKzQ3MiwxOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IFpvbWJpZUhpbnQ6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUg
dmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAg
Ly8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgotICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2FzZSBQ
aGk6CiAgICAgICAgICAgICAvLyBQaGlzIHNob3VsZCBub3QgYmUgdmlzaWJsZSBoZXJlIHNpbmNl
IHdlJ3JlIGl0ZXJhdGluZyB0aGUgYWxsLWJ1dC1QaGkncwogICAgICAgICAgICAgLy8gcGFydCBv
ZiBiYXNpYyBibG9ja3MuCi0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAgIC8vIFRoZXNlIGRvbid0IGdldCBp
bnNlcnRlZCB1bnRpbCB3ZSBnbyBpbnRvIFNTQS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEdldFNj
b3BlOgpAQCAtNTQxLDcgKzU0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKLSAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAjZWxzZQogICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHU1NBQ29udmVyc2lvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAi
REZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVibGljIFBoYXNl
IHsKK3B1YmxpYzoKKyAgICBTU0FDb252ZXJzaW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAg
ICA6IFBoYXNlKGdyYXBoLCAiU1NBIGNvbnZlcnNpb24iKQorICAgICAgICAsIG1faW5zZXJ0aW9u
U2V0KGdyYXBoKQorICAgICAgICAsIG1fbm9uVHJpdmlhbFBoaXMoT3BlcmFuZHNMaWtlLCBncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fY2hhbmdlZChmYWxzZSkK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggU2V0TG9jYWwncyBuZWVkIGZsdXNoaW5nLiBOZWVkIHRv
IGRvIHRoaXMgd2hpbGUgdGhlCisgICAgICAgIC8vIFBoaSBncmFwaCBpcyBzdGlsbCBpbnRhY3Qu
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
YmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ICE9IEZsdXNoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBhZGRGbHVzaGVkTG9jYWxPcChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB3aGlsZSAoIW1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QudGFrZUxhc3QoKTsK
KyAgICAgICAgICAgIEFTU0VSVChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSk7Cisg
ICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRGbHVz
aGVkTG9jYWxFZGdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRWxpbWluYXRl
IGFsbCBkdXBsaWNhdGUgb3Igc2VsZi1wb2ludGluZyBQaGkgZWRnZXMuIFRoaXMgbWVhbnMgdGhh
dAorICAgICAgICAvLyB3ZSB0cmFuc2Zvcm06CisgICAgICAgIC8vCisgICAgICAgIC8vIHA6IFBo
aShAbjEsIEBuMiwgQG4zKQorICAgICAgICAvLworICAgICAgICAvLyBpbnRvOgorICAgICAgICAv
LworICAgICAgICAvLyBwOiBQaGkoQHgpCisgICAgICAgIC8vCisgICAgICAgIC8vIGlmIGVhY2gg
QG5pIGluIHtAbjEsIEBuMiwgQG4zfSBpcyBlaXRoZXIgZXF1YWwgdG8gQHAgdG8gaXMgZXF1YWwK
KyAgICAgICAgLy8gdG8gQHgsIGZvciBleGFjdGx5IG9uZSBvdGhlciBAeC4gQWRkaXRpb25hbGx5
LCB0cml2aWFsIFBoaXMgKGkuZS4KKyAgICAgICAgLy8gcDogUGhpKEB4KSkgYXJlIGZvcndhcmRl
ZCwgc28gdGhhdCBpZiBoYXZlIGFuIGVkZ2UgdG8gc3VjaCBAcCwgd2UKKyAgICAgICAgLy8gcmVw
bGFjZSBpdCB3aXRoIEB4LiBUaGlzIGxvb3AgZG9lcyB0aGlzIGZvciBQaGlzIG9ubHk7IGxhdGVy
IHdlIGRvCisgICAgICAgIC8vIHN1Y2ggZm9yd2FyZGluZyBmb3IgUGhpIHJlZmVyZW5jZXMgZm91
bmQgaW4gb3RoZXIgbm9kZXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIFNlZSBBeWNvY2sgYW5k
IEhvcnNwb29sIGluIENDJzAwIGZvciBhIGJldHRlciBkZXNjcmlwdGlvbiBvZiB3aGF0CisgICAg
ICAgIC8vIHdlJ3JlIGRvaW5nIGhlcmUuCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUlu
ZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJsb2NrLT5waGlzW3Bo
aUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBoaS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICBmb3J3YXJkUGhpQ2hpbGRyZW4ocGhpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVkdXBsaWNhdGVDaGlsZHJlbihwaGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAg
IC8vIEZvciBlYWNoIGJhc2ljIGJsb2NrLCBmb3IgZWFjaCBsb2NhbCBsaXZlIGF0IHRoZSBoZWFk
IG9mIHRoYXQgYmxvY2ssCisgICAgICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBub2RlIHdlIHNob3Vs
ZCBiZSByZWZlcnJpbmcgdG8gaW5zdGVhZCBvZiB0aGF0IGxvY2FsLgorICAgICAgICAvLyBJZiBp
dCB0dXJucyBvdXQgdG8gYmUgYSBub24tdHJpdmlhbCBQaGksIG1ha2Ugc3VyZSB0aGF0IHRvIGNy
ZWF0ZSBhbgorICAgICAgICAvLyBTU0EgUGhpIGFuZCBVcHNpbG9ucyBpbiBwcmVkZWNlc3NvciBi
bG9ja3MuIFdlIHJldXNlCisgICAgICAgIC8vIEJhc2ljQmxvY2s6OnZhcmlhYmxlc0F0SGVhZCBm
b3IgdHJhY2tpbmcgd2hpY2ggbm9kZXMgdG8gcmVmZXIgdG8uCisgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBQb2lzb24gdGhpcyBlbnRyeSBpbiB2YXJpYWJsZXNBdEhlYWQg
YmVjYXVzZSB3ZSBkb24ndAorICAgICAgICAgICAgICAgICAgICAvLyB3YW50IGFueW9uZSB0byB0
cnkgdG8gcmVmZXIgdG8gaXQsIGlmIHRoZSB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAg
ICAvLyBjYXB0dXJlZC4KKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZFtpXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IEZsdXNoOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAg
Y2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IFBoaSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChlZGdlKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVk
Z2Uubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEl0J3MgYSBub24tdHJpdmlhbCBQaGkuCisgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAsIFNwZWNOb25lLCBQaGkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29y
c1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB1cHNpbG9uID0gcHJlZGVj
ZXNzb3ItPmFwcGVuZE5vblRlcm1pbmFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBTcGVjTm9uZSwgVXBzaWxvbiwgT3BJbmZvKG5vZGUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsW2ldKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCktPnZh
cmlhYmxlQWNjZXNzRGF0YSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gbm9kZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnQgb3BlcmF0aW9ucyBvdmVy
IGxvY2FscyBpbnRvIG9wZXJhdGlvbnMgb3ZlciBTU0Egbm9kZXMuCisgICAgICAgIC8vIC0gR2V0
TG9jYWwgb3ZlciBjYXB0dXJlZCB2YXJpYWJsZXMgbG9zZSB0aGVpciBwaGlzLgorICAgICAgICAv
LyAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGllIGFuZCBnZXQgcmVwbGFj
ZWQgd2l0aCByZWZlcmVuY2VzCisgICAgICAgIC8vICAgdG8gdGhlIG5vZGUgc3BlY2lmaWVkIGJ5
IHZhcmlhYmxlc0F0SGVhZC4KKyAgICAgICAgLy8gLSBTZXRMb2NhbCBnZXRzIE5vZGVNdXN0R2Vu
ZXJhdGUgaWYgaXQncyBmbHVzaGVkLgorICAgICAgICAvLyAtIEZsdXNoIGxvc2VzIGl0cyBjaGls
ZHJlbiBidXQgcmVtYWlucywgYmVjYXVzZSB3ZSB3YW50IHRvIGtub3cgd2hlbiBhCisgICAgICAg
IC8vICAgZmx1c2hlZCBTZXRMb2NhbCdzIHZhbHVlIGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoaXMg
YWxzbyBtYWtlcyBpdCBzaW1wbGVyCisgICAgICAgIC8vICAgdG8gcmVhc29uIGFib3V0IHRoZSBm
b3JtYXQgb2YgYSBsb2NhbCwgc2luY2Ugd2UgY2FuIGp1c3QgZm9sZCBpdCBpbnRvIHRoZQorICAg
ICAgICAvLyAgIGJhY2t3YXJkcyBhbmFseXNpcyB0aGF0IExpdmVuZXNzQW5hbHlzaXNQaGFzZSBk
b2VzLiBBcyBwYXJ0IG9mIHRoZQorICAgICAgICAvLyAgIGJhY2t3YXJkcyBhbmFseXNpcywgd2Ug
c2F5IHRoYXQgdGhlIHR5cGUgb2YgYSBsb2NhbCBjYW4gYmUgZWl0aGVyCisgICAgICAgIC8vICAg
aW50MzIsIGRvdWJsZSwgdmFsdWUsIG9yIGRlYWQuCisgICAgICAgIC8vIC0gUGhhbnRvbUxvY2Fs
IGJlY29tZXMgUGhhbnRvbSwgYW5kIGl0cyBjaGlsZCBpcyB3aGF0ZXZlciBpcyBzcGVjaWZpZWQK
KyAgICAgICAgLy8gICBieSB2YXJpYWJsZXNBdEhlYWQuCisgICAgICAgIC8vIC0gU2V0QXJndW1l
bnQgdHVybnMgaW50byBHZXRMb2NhbC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJ
bmRleC0tOykKKyAgICAgICAgICAgICAgICBibG9jay0+YXQobm9kZUluZGV4KS0+cmVwbGFjZW1l
bnQgPSAwOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihub2RlKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgbV9mbHVz
aGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5tZXJnZUZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
cmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IEZsdXNoOiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKKyAgICAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVy
ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS5zZXROb2RlKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9Q
aGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDog
eworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRMb2Nh
bCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gRnJlZSBhbGwgcGhpcyBhbmQgcmVzZXQgdmFyaWFibGVzIHZlY3RvcnMuCisgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRl
eC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5z
aXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9hbGxvY2F0b3Iu
ZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOworICAgICAgICAgICAgYmxvY2stPnBoaXMuY2xl
YXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuY2xlYXIoKTsKKyAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2Nr
LT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQu
Y2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9j
azo6U1NBRGF0YSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX2Zv
cm0gPSBTU0E7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZm9yd2FyZFBoaUNoaWxkcmVu
KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRq
YWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlJiBlZGdlID0gbm9kZS0+
Y2hpbGRyZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gZm9yd2FyZFBoaUVkZ2UoZWRn
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogZm9yd2FyZFBoaShOb2RlKiBu
b2RlKQorICAgIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIFBoaTogeworICAgICAgICAgICAgICAgIEVkZ2Ug
ZWRnZSA9IG5vZGUtPmp1c3RPbmVDaGlsZCgpOworICAgICAgICAgICAgICAgIGlmICghZWRnZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVkZ2Uubm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
KyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgZm9yd2FyZFBoaUVk
Z2UoRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIE5vZGUqIG5ld05vZGUgPSBmb3J3YXJkKGVk
Z2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKG5ld05vZGUgPT0gZWRnZS5ub2RlKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVkZ2Uuc2V0Tm9kZShuZXdOb2RlKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVkdXBsaWNhdGVDaGlsZHJl
bihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFk
amFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+
Y2hpbGRyZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZWRnZSA9PSBub2RlKSB7CisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0pOworICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IEFkamFjZW5jeUxpc3Q6OlNp
emU7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZHJlbi5jaGlsZChqKSA9
PSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2Uo
ai0tKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBm
b3J3YXJkTm9kZUNoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBERkdfTk9ERV9E
T19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBmb3J3YXJkTm9kZUVkZ2UpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGZvcndhcmROb2RlRWRnZShOb2RlKiwgRWRnZSYgZWRnZSkKKyAgICB7Cisg
ICAgICAgIGlmIChlZGdlLT5vcCgpIAorICAgICAgICBzd2l0Y2ggKGVkZ2UtPm9wKCkpIHsKKyAg
ICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFk
ZEZsdXNoZWRMb2NhbE9wKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobV9mbHVzaGVk
TG9jYWxPcHMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1f
Zmx1c2hlZExvY2FsT3BzLmFkZChub2RlKTsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmts
aXN0LmFwcGVuZChub2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbEVkZ2Uo
Tm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKGVkZ2Uu
bm9kZSgpKTsKKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAg
SGFzaFNldDxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX2Zs
dXNoZWRMb2NhbE9wV29ya2xpc3Q7CisgICAgYm9vbCBtX2NoYW5nZWQ7Cit9OworCitib29sIHBl
cmZvcm1TU0FDb252ZXJzaW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIFNTQSBDb252ZXJzaW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1
blBoYXNlPFNTQUNvbnZlcnNpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1NTQUNvbnZlcnNpb25QaGFzZV9o
CisjZGVmaW5lIERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb252ZXJ0IFRocmVhZGVkQ1BTIGZvcm0gaW50
byBTU0EgZm9ybS4gVGhpcyByZXN1bHRzIGluIGEgZm9ybSB0aGF0IGhhczoKKy8vCisvLyAtIFJv
dWdobHkgbWluaW1hbCBQaGkncy4gV2UgdXNlIHRoZSBBeWNvY2sgJiBIb3JzcG9vbCBmaXhwb2lu
dCBmb3IKKy8vICAgY29udmVydGluZyB0aGUgQ1BTIG1heGltYWwgUGhpcyBpbnRvIFNTQSBtaW5p
bWFsIFBoaXMsIHdpdGggdGhlIGNhdmVhdAorLy8gICB0aGF0IGlycmVkdWNpYmxlIGNvbnRyb2wg
ZmxvdyBtYXkgcmVzdWx0IGluIHNvbWUgbWlzc2VkIG9wcG9ydHVuaXRpZXMKKy8vICAgZm9yIFBo
aSByZWR1Y3Rpb24uCisvLworLy8gLSBObyB1c2VzIG9mIEdldExvY2FsL1NldExvY2FsIGV4Y2Vw
dCBmb3IgY2FwdHVyZWQgdmFyaWFibGVzIGFuZCBmbHVzaGVzLgorLy8gICBBZnRlciB0aGlzLCBh
bnkgcmVtYWluaW5nIFNldExvY2FsIG1lYW5zIEZsdXNoLiBGbHVzaCBub2RlcyBhcmUKKy8vICAg
ZWxpbWluYXRlZC4gUGhhbnRvbUxvY2FscyBiZWNvbWUgUGhhbnRvbXMuIE5vZGVzIG1heSBtYXkg
aGF2ZSBjaGlsZHJlbgorLy8gICB0aGF0IGFyZSBpbiBhbm90aGVyIGJhc2ljIGJsb2NrLgorLy8K
Ky8vIC0gTW92SGludHMgYXJlIHVzZWQgZm9yIE9TUiBpbmZvcm1hdGlvbiwgYW5kIGFyZSB0aGVt
c2VsdmVzIG1pbmltYWwuCisvLyAgIEEgTW92SGludCB3aWxsIG9jY3VyIGF0IHNvbWUgcG9pbnQg
YWZ0ZXIgdGhlIGFzc2lnbmluZywgYW5kIGF0IFBoaQorLy8gICBwb2ludHMuCisvLworLy8gLSBV
bmxpa2UgY29udmVudGlvbmFsIFNTQSBpbiB3aGljaCBQaGkgZnVuY3Rpb25zIHJlZmVyIHRvIHBy
ZWRlY2Vzc29ycworLy8gICBhbmQgdmFsdWVzLCBvdXIgU1NBIHVzZXMgVXBzaWxvbiBmdW5jdGlv
bnMgdG8gaW5kaWNhdGUgdmFsdWVzIGluCisvLyAgIHByZWRlY2Vzc29ycy4gQSBtZXJnZSB3aWxs
IGxvb2sgbGlrZToKKy8vCisvLyAgIGxhYmVsQToKKy8vICAgICAgIGE6IFRoaW5neSguLi4pCisv
LyAgICAgICBiOiBVcHNpbG9uKCRlLCBAYSkKKy8vICAgICAgIEp1bXAobGFiZWxDKQorLy8KKy8v
ICAgbGFiZWxCOgorLy8gICAgICAgYzogT3RoZXJUaGluZ3koLi4uKQorLy8gICAgICAgZDogVXBz
aWxvbigkZSwgQGMpCisvLyAgICAgICBKdW1wKGxhYmVsQykKKy8vCisvLyAgIGxhYmVsQzoKKy8v
ICAgICAgIGU6IFBoaSgpCisvLworLy8gICBOb3RlIHRoYXQgdGhlIFBoaSBoYXMgbm8gY2hpbGRy
ZW4sIGJ1dCB0aGUgcHJlZGVjZXNzb3JzIGhhdmUgVXBzaWxvbnMKKy8vICAgdGhhdCBoYXZlIGEg
d2VhayByZWZlcmVuY2UgdG8gdGhlIFBoaSAoJGUgaW5zdGVhZCBvZiBAZTsgd2Ugc3RvcmUgaXQK
Ky8vICAgaW4gdGhlIE9wSW5mbyByYXRoZXIgdGhhbiB0aGUgQWRqYWNlbmN5TGlzdCkuIFRoaW5r
IG9mIHRoZSBVcHNpbG9uCisvLyAgIGFzICJhc3NpZ25pbmciIHRvIHRoZSAidmFyaWFibGUiIGFz
c29jaWF0ZWQgd2l0aCB0aGUgUGhpLCBhbmQgdGhhdAorLy8gICB0aGlzIGlzIHRoZSBvbmUgcGxh
Y2UgaW4gU1NBIGZvcm0gd2hlcmUgeW91IGNhbiBoYXZlIG11bHRpcGxlCisvLyAgIGFzc2lnbm1l
bnRzLgorLy8KKy8vICAgVGhpcyBpbXBsaWVzIHNvbWUgb3RoZXIgbG9vc2VuaW5ncyBvZiBTU0Eu
IEZvciBleGFtcGxlLCBhbiBVcHNpbG9uCisvLyAgIG1heSBwcmVjZWRlIGEgUGhpIGluIHRoZSBz
YW1lIGJhc2ljIGJsb2NrOyB0aGlzIG1heSBhcmlzZSBhZnRlciBDRkcKKy8vICAgc2ltcGxpZmlj
YXRpb24uIEFsdGhvdWdoIGl0J3MgcHJvZml0YWJsZSBmb3IgQ0ZHIHNpbXBsaWZpY2F0aW9uIChv
cgorLy8gICBzb21lIG90aGVyIHBoYXNlKSB0byByZW1vdmUgdGhlc2UsIGl0J3Mgbm90IHN0cmlj
dGx5IG5lY2Vzc2FyeS4gQXMKKy8vICAgd2VsbCwgdGhpcyBmb3JtIGFsbG93cyB0aGUgVXBzaWxv
biB0byBiZSBpbiBhbnkgYmxvY2sgdGhhdCBkb21pbmF0ZXMKKy8vICAgdGhlIHByZWRlY2Vzc29y
IGJsb2NrIG9mIHRoZSBQaGksIHdoaWNoIGFsbG93cyBmb3IgYmxvY2sgc3BsaXR0aW5nIHRvCisv
LyAgIGlnbm9yZSB0aGUgcG9zc2liaWxpdHkgb2YgaW50cm9kdWNpbmcgYW4gZXh0cmEgZWRnZSBi
ZXR3ZWVuIHRoZSBQaGkKKy8vICAgYW5kIHRoZSBwcmVkZWNlc3NvciAodGhvdWdoIG5vcm1hbCBT
U0Egd291bGQgYWxsb3cgdGhpcywgYWxzbywgd2l0aAorLy8gICB0aGUgY2F2ZWF0IHRoYXQgdGhl
IFBoaSBwcmVkZWNlc3NvciBibG9jayBsaXN0cyB3b3VsZCBoYXZlIHRvIGJlCisvLyAgIHVwZGF0
ZWQpLgorLy8KKy8vICAgVGhlIGVhc2llc3Qgd2F5IHRvIGNvbnZlcnQgZnJvbSB0aGlzIFNTQSBm
b3JtIGludG8gYSBkaWZmZXJlbnQgU1NBCisvLyAgIGZvcm0gaXMgdG8gcmVkbyBTU0EgY29udmVy
c2lvbiBmb3IgUGhpIGZ1bmN0aW9ucy4gVGhhdCBpcywgdHJlYXQgZWFjaAorLy8gICBQaGkgaW4g
b3VyIElSIGFzIGEgbm9uLVNTQSB2YXJpYWJsZSBpbiB0aGUgZm9yZWlnbiBJUiAoc28sIGFzIGFu
CisvLyAgIGFsbG9jYSBpbiBMTFZNIElSLCBmb3IgZXhhbXBsZSk7IHRoZSBVcHNpbG9ucyB0aGF0
IHJlZmVyIHRvIHRoZSBQaGkKKy8vICAgYmVjb21lIHN0b3JlcyBhbmQgdGhlIFBoaXMgdGhlbXNl
bHZlcyBiZWNvbWUgbG9hZHMuCisvLworLy8gICBGdW4gZmFjdDogVXBzaWxvbiBpcyBzbyBuYW1l
ZCBiZWNhdXNlIGl0IGNvbWVzIGJlZm9yZSBQaGkgaW4gdGhlCisvLyAgIGFscGhhYmV0LiBJdCBj
YW4gYmUgd3JpdHRlbiBhcyAiWSIuCisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNpb24oR3JhcGgm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMSArMTA0LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgaWYgKCFtX2hpZ2hCbG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIG1fYmxvY2tzLmFkZChtX2hpZ2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9j
ayAiLCAqbV9oaWdoQmxvY2spKSk7Ci0gICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcFJvb3Rz
KCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9w
cygpOwotICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9hcmd1bWVudENoZWNrcywg
bG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSkpOwogCiAgICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tB
cmd1bWVudHMoKTsKQEAgLTEyOSw0MCArMTI2LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IAotICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsT3BSb290cygpCi0gICAgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IG1faGlnaEJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykg
ewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOwot
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gRmx1c2gpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChub2RlKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygpCi0gICAgewot
ICAgICAgICB3aGlsZSAoIW1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QubGFzdCgpOwot
ICAgICAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5v
ZGUpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4o
bV9ncmFwaCwgbm9kZSwgYWRkRmx1c2hlZExvY2FsRWRnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxPcChOb2RlKiBub2RlKQotICAgIHsKLSAgICAg
ICAgaWYgKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wcy5hZGQobm9kZSk7Ci0gICAgICAgIG1fZmx1
c2hlZExvY2FsT3BXb3JrbGlzdC5hcHBlbmQobm9kZSk7Ci0gICAgfQotICAgIHZvaWQgYWRkRmx1
c2hlZExvY2FsRWRnZShOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgYWRkRmx1c2hl
ZExvY2FsT3AoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAgICAKICAgICB2b2lkIHRyYW5zZmVyQW5k
Q2hlY2tBcmd1bWVudHMoKQogICAgIHsKICAgICAgICAgLy8gV2hpbGUgY2hlY2tpbmcgYXJndW1l
bnRzLCBldmVyeXRoaW5nIGlzIGluIHRoZSBzdGFjay4KQEAgLTI4ODgsOSArMjg1MSw2IEBAIHBy
aXZhdGU6CiAgICAgTFZhbHVlIG1fdGFnVHlwZU51bWJlcjsKICAgICBMVmFsdWUgbV90YWdNYXNr
OwogICAgIAotICAgIEhhc2hTZXQ8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BzOwotICAgIFZlY3Rv
cjxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OwotICAgIAogICAgIEhhc2hNYXA8Tm9k
ZSosIExWYWx1ZT4gbV9pbnQzMlZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1f
anNWYWx1ZVZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fYm9vbGVhblZhbHVl
czsKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTUyNDMyKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCQkwRkQ4MUFDNTE1NEZCMjJFMDA5ODNF
NzIgLyogRmFzdEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwRkREQkZBNzE2NjZERkEz
MDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0
cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAq
LzsgfTsKKwkJMEZFNTA1NTcxNzg3QTgwNjAwQjM1RjhDIC8qIEluc2VydGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTYxNzg3QTgwMjAw
QjM1RjhDIC8qIEluc2VydGlvbi5oICovOyB9OwogCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEg
LyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi87IH07CiAJCTE0
M0Y2MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFN
U2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTE0Njk0MTky
MTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Njk0MTkwMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5M
b29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMzUyLDYgKzM1Myw3IEBACiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0
Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1
RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNl
cnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zZXJ0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJBTVNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSQU1TaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03ODUsNiArNzg3LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyog
SGFzaFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1i
ZXIuaCAqLywKIAkJCQlBOEE0NzJCQzE1MUE4MjVBMDA0MTIzRkYgLyogSW5saW5lQVNNLmggKi8s
CisJCQkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovLAogCQkJCUE4
QTQ3MkJFMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQThBNDcyQkYx
NTFBODI1QTAwNDEyM0ZGIC8qIEludDMyQXJyYXkuaCAqLywKIAkJCQlBOEE0NzJCRDE1MUE4MjVB
MDA0MTIzRkYgLyogSW50OEFycmF5LmggKi8sCkBAIC0xMTgxLDYgKzExODQsNyBAQAogCQkJCUE4
QTQ3M0U4MTUxQTgyNUIwMDQxMjNGRiAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzNFQTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmggaW4gSGVhZGVycyAqLywKIAkJCQlD
RDU0OTdBRDE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0RjFEMTE1NDE1RkYxMUJFMDAyNkU5MDggLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0RkQ4NTU0NzE2MTMzRTBFMDBDNUI3MDQgLyogTWVtb3J5SW5z
dHJ1bWVudGF0aW9uQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlGM0ZCQzcx
RTE2MUFGN0JGMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvSGFzaFNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291
cmNlL1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMiArODYsMTkgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmV2ZXJzZSB0aGUg
b3JkZXIgb2YgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBzbyB0aGF0IGNhbGxlcnMKICAgICAgICAg
Ly8gY2FuIGp1c3QgcGFzcyB0aGUgdHJhbnNsYXRvciBhbmQgbGV0IHRoZSBjb21waWxlciBkZWR1
Y2UgVC4KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0
b3I+IEFkZFJlc3VsdCBhZGQoY29uc3QgVCYpOworICAgICAgICAKKyAgICAgICAgLy8gQXR0ZW1w
dHMgdG8gYWRkIGEgbGlzdCBvZiB0aGluZ3MgdG8gdGhlIHNldC4gUmV0dXJucyB0cnVlIGlmIGFu
eSBvZgorICAgICAgICAvLyB0aGVtIGFyZSBuZXcgdG8gdGhlIHNldC4gUmV0dXJucyBmYWxzZSBp
ZiB0aGUgc2V0IGlzIHVuY2hhbmdlZC4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0
b3JUeXBlPgorICAgICAgICBib29sIGFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlw
ZSBlbmQpOwogCiAgICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYpOwogICAgICAg
ICB2b2lkIHJlbW92ZShpdGVyYXRvcik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAgICAg
ICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJik7CisgICAgICAgIAor
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaFNldCYpIGNvbnN0OwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIHZvaWQgZGVsZXRlQWxsVmFsdWVzPD4oY29uc3QgSGFzaFNl
dCYpOwpAQCAtMTkxLDYgKzE5OCwxNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+
OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQorICAgIHsKKyAgICAg
ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIg
PSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gYWRk
KCppdGVyKS5pc05ld0VudHJ5OworICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogICAgIGlubGlu
ZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICB7CiAgICAg
ICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQpAQCAtMjU2LDYgKzI3MywxOCBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHZlY3RvcltpXSA9ICppdDsKICAgICB9ICAKIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CisgICAgaW5s
aW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBIYXNoU2V0JiBvdGhl
cikKKyAgICB7CisgICAgICAgIGlmIChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdp
bigpOyBpdGVyICE9IGVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmICghb3RoZXIuY29u
dGFpbnMoKml0ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2lu
ZyBXVEY6Okhhc2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTUyNDMyKQorKysg
U291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNzAsNiArMTE3
MCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHsKICAgICAgICAgLy8gQ29weSB0aGUgaGFzaCB0
YWJsZSB0aGUgZHVtYiB3YXksIGJ5IGFkZGluZyBlYWNoIGVsZW1lbnQgdG8gdGhlIG5ldyB0YWJs
ZS4KICAgICAgICAgLy8gSXQgbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgdG8gY29weSB0aGUgdGFi
bGUgc2xvdHMsIGJ1dCBpdCdzIG5vdCBjbGVhciB0aGF0IGVmZmljaWVuY3kgaXMgbmVlZGVkLgor
ICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwg
Zm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQogICAgICAgICBjb25zdF9p
dGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBp
dCA9IG90aGVyLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGFkZCgqaXQp
OwpAQCAtMTIwOSw2ICsxMjExLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBI
YXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtl
eVRyYWl0cz4mIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6b3BlcmF0b3I9KGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpCiAg
ICAgeworICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXBy
b3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQogICAgICAgICBI
YXNoVGFibGUgdG1wKG90aGVyKTsKICAgICAgICAgc3dhcCh0bXApOwogICAgICAgICByZXR1cm4g
KnRoaXM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0luc2VydGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbnNlcnRpb25faAor
I2RlZmluZSBJbnNlcnRpb25faAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NsYXNzIEluc2VydGlvbiB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uKCkgeyB9Cisg
ICAgCisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAg
VCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcjwoY29uc3QgSW5zZXJ0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2luZGV4IDwgb3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IHNpemVfdCBtX2luZGV4OworICAgIFQgbV9lbGVtZW50OworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVGFyZ2V0VmVjdG9yVHlwZSwgdHlwZW5hbWUgSW5zZXJ0aW9uVmVjdG9yVHlwZT4KK3ZvaWQg
ZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYgdGFyZ2V0LCBJbnNlcnRpb25WZWN0
b3JUeXBlJiBpbnNlcnRpb25zKQoreworICAgIGlmICghaW5zZXJ0aW9ucy5zaXplKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICB0YXJnZXQuZ3Jvdyh0YXJnZXQuc2l6ZSgpICsgaW5zZXJ0aW9ucy5z
aXplKCkpOworICAgIHNpemVfdCBsYXN0SW5kZXggPSB0YXJnZXQuc2l6ZSgpOworICAgIGZvciAo
c2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gaW5zZXJ0aW9ucy5zaXplKCk7IGluZGV4SW5JbnNl
cnRpb25zLS07KSB7CisgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uc1tpbmRl
eEluSW5zZXJ0aW9uc10uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOworICAgICAgICBzaXpl
X3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQorICAgICAgICAgICAgdGFyZ2V0
W2ldID0gdGFyZ2V0W2kgLSBpbmRleE9mZnNldF07CisgICAgICAgIHRhcmdldFtmaXJzdEluZGV4
XSA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmVsZW1lbnQoKTsKKyAgICAgICAgbGFz
dEluZGV4ID0gZmlyc3RJbmRleDsKKyAgICB9CisgICAgaW5zZXJ0aW9ucy5yZXNpemUoMCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Okluc2VydGlvbjsKK3VzaW5nIFdU
Rjo6ZXhlY3V0ZUluc2VydGlvbnM7CisKKyNlbmRpZiAvLyBJbnNlcnRpb25faAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206290</attachid>
            <date>2013-07-08 22:26:29 -0700</date>
            <delta_ts>2013-07-09 10:21:58 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>104117</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9j
YWxGaXJzdFRpbWUob3BlcmFuZCwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFy
KCkKKyAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IHZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgp
OworICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBmaWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2IEBAIHZvaWQgQWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2kKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3Ry
YWN0VmFsdWU+OjppdGVyYXRvciBpdGVyID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQu
YmVnaW4oKTsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9y
IGVuZCA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmVuZCgpOworICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgZm9yTm9kZShpdGVyLT5rZXkp
ID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUuaGFzQ2xvYmJlcmFi
bGVTdGF0ZSgpKQorICAgICAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorICAgIAogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBm
YWxzZTsKICAgICBiYXNpY0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsKICAgICBtX2Jsb2Nr
ID0gYmFzaWNCbG9jazsKQEAgLTgzLDYgKzkzLDE2IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKEJhc2kKICAgICBtX2N1cnJlbnROb2RlID0gMDsKIH0KIAorc3RhdGljIHZv
aWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBI
YXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3sKKyAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICAKKyAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGxpdmUuYmVnaW4oKTsKKyAgICBIYXNoU2V0
PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbGl2ZS5lbmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBl
bmQ7ICsraXRlcikKKyAgICAgICAgdmFsdWVzLmFkZCgqaXRlciwgQWJzdHJhY3RWYWx1ZSgpKTsK
K30KKwogdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKIHsKICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxvY2soMCk7CkBAIC0xNTEsNiArMTcxLDEwIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICNlbmRpZgogICAgICAg
ICB9CiAgICAgICAgIGJsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9j
ay0+c3NhLT52YWx1ZXNBdEhlYWQsIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpOworICAgICAgICAg
ICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwsIGJsb2NrLT5zc2EtPmxp
dmVBdFRhaWwpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNzIsMjAgKzE5NiwzOSBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNCiAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIUFTU0VS
VF9ESVNBQkxFRCkgewotICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50
KSB7CisgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBUaHJl
YWRlZENQUzogeworICAgICAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVu
dCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGFyZ3VtZW50ICV6dS5cbiIs
IGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0
YXRlIGZvciBhcmd1bWVudCAlenUuXG4iLCBhcmd1bWVudCk7CiAjZW5kaWYKLSAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVz
dGluYXRpb24sIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24s
IG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBz
dGF0ZSBmb3IgbG9jYWwgJXp1LlxuIiwgbG9jYWwpOworICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKICNlbmRp
ZgotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVz
QXRUYWlsLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0
VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFi
bGVzLmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFNTQTogeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0g
YmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5iZWdpbigpOworICAgICAgICAgICAgSGFzaFNldDxOb2Rl
Kj46Oml0ZXJhdG9yIGVuZCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRBaWwuZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKCppdGVyKS0+dmFsdWUubWVyZ2UoZm9y
Tm9kZShub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTU4Niw2ICsxNjI5LDE2IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFBoaToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5t
X2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3VsZCBo
YXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBVcHNpbG9uOgorICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGZv
ck5vZGUobm9kZS0+cGhpKCkpID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAg
ICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQnJlYWtwb2lu
dDoKQEAgLTE2NzksNyArMTczMiw3IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJTdHJ1Y3QKICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQorYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZh
bHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTc2NywyMSArMTgyMCw0NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQor
Ym9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0
bykKIHsKICAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRz
KCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBBU1NF
UlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gdG8tPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAKICAgICBib29sIGNoYW5nZWQgPSBmYWxz
ZTsKICAgICAKLSAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZnJvbS0+
dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGFyZ3VtZW50KTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nr
cyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8t
PnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCkpOworICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAg
ICBjYXNlIFRocmVhZGVkQ1BTOiB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKyth
cmd1bWVudCkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCksIHRvLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1l
bnQpLCBmcm9tLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20t
PnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9j
YWwpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyhk
ZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBmb3IgKHNpemVf
dCBsb2NhbCA9IDA7IGxvY2FsIDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCk7ICsrbG9jYWwpIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+
dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxv
Y2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICAKKyAgICBjYXNlIFNTQTogeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gZnJvbS0+dmFyaWFibGVzQXRUYWlsLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gdG8tPnZhcmlhYmxlc0F0SGVhZFtpXS5tZXJnZShmcm9tLT52YXJp
YWJsZXNBdFRhaWxbaV0pOworICAgICAgICAKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJh
dG9yIGl0ZXIgPSB0by0+c3NhLT5saXZlQXRIZWFkLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+OjppdGVyYXRvciBlbmQgPSB0by0+c3NhLT5saXZlQXRIZWFkLmVuZCgpOworICAgICAg
ICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9
ICppdGVyOworICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+c3NhLT52YWx1ZXNBdEhlYWQuZmlu
ZChub2RlKS0+dmFsdWUubWVyZ2UoCisgICAgICAgICAgICAgICAgZnJvbS0+c3NhLT52YWx1ZXNB
dFRhaWwuZmluZChub2RlKS0+dmFsdWUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCF0by0+Y2ZhSGFzVmlz
aXRlZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
amFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksMTUgQEAgcHVibGljOgog
ICAgIAogICAgIEVkZ2UgY2hpbGQxVW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV93b3Jkc1sw
XTsgfQogICAgIAorICAgIEVkZ2UganVzdE9uZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghIWNoaWxkMSgpICYmICFjaGlsZDIoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjaGls
ZDMoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEVkZ2UoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXplKEVkZ2UgY2hp
bGQxLCBFZGdlIGNoaWxkMiwgRWRnZSBjaGlsZDMpCiAgICAgewogICAgICAgICBjaGlsZCgwKSA9
IGNoaWxkMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25l
ZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2Fs
cykKKyAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKKyAgICAsIGluZGV4KE5vQmxv
Y2spCisgICAgLCBpc09TUlRhcmdldChmYWxzZSkKKyAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2Up
CisgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQorICAgICwgY2ZhRm91bmRDb25zdGFudHMo
ZmFsc2UpCisgICAgLCBjZmFEaWRGaW5pc2godHJ1ZSkKKyAgICAsIGNmYUJyYW5jaERpcmVjdGlv
bihJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAsIGlz
TGlua2VkKGZhbHNlKQorI2VuZGlmCisgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKKyAgICAsIHZh
cmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhcmlhYmxlc0F0
VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1
bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscykKK3sKK30KKworQmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKSB7IH0KKwordm9pZCBCYXNp
Y0Jsb2NrOjplbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQoreworICAgIHZhcmlh
Ymxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2YXJpYWJsZXNBdFRh
aWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxv
Y2FscyhuZXdOdW1Mb2NhbHMpOworICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVt
TG9jYWxzKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjppc0luUGhpcyhOb2RlKiBub2RlKSBjb25z
dAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAocGhpc1tpXSA9PSBub2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjppc0luQmxvY2soTm9k
ZSogbXlOb2RlKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9kZXMo
KTsgKytpKSB7CisgICAgICAgIGlmIChub2RlKGkpID09IG15Tm9kZSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQmFzaWNCbG9j
azo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiIyIsIGlu
ZGV4KTsKK30KKworQmFzaWNCbG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICA6IGZsdXNoRm9ybWF0QXRIZWFkKE9wZXJhbmRzTGluZSwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZCkKK3sKK30KKworQmFzaWNCbG9jazo6U1NBRGF0YTo6flNTQURhdGEoKSB7IH0KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNp
bmNsdWRlICJERkdWYXJpYWRpY0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDQsNDIgKzQ2
LDE2IEBAIGNsYXNzIEluc2VydGlvblNldDsKIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAy
PiBQcmVkZWNlc3Nvckxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNp
Y0Jsb2NrPiB7Ci0gICAgQmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25l
ZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscykKLSAgICAgICAgOiBieXRlY29kZUJl
Z2luKGJ5dGVjb2RlQmVnaW4pCi0gICAgICAgICwgaW5kZXgoTm9CbG9jaykKLSAgICAgICAgLCBp
c09TUlRhcmdldChmYWxzZSkKLSAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQotICAgICAg
ICAsIGNmYVNob3VsZFJldmlzaXQoZmFsc2UpCi0gICAgICAgICwgY2ZhRm91bmRDb25zdGFudHMo
ZmFsc2UpCi0gICAgICAgICwgY2ZhRGlkRmluaXNoKHRydWUpCi0gICAgICAgICwgY2ZhQnJhbmNo
RGlyZWN0aW9uKEludmFsaWRCcmFuY2hEaXJlY3Rpb24pCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgICAgICAsIGlzTGlua2VkKGZhbHNlKQotI2VuZGlmCi0gICAgICAgICwgaXNSZWFjaGFibGUo
ZmFsc2UpCi0gICAgICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
KQotICAgICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAg
ICAgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgICAgICwg
dmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgIHsKLSAgICB9CisgICAg
QmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMs
IHVuc2lnbmVkIG51bUxvY2Fscyk7CisgICAgfkJhc2ljQmxvY2soKTsKICAgICAKLSAgICB+QmFz
aWNCbG9jaygpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNp
Z25lZCBuZXdOdW1Mb2NhbHMpCi0gICAgewotICAgICAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJl
TG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVMb2Nh
bHMobmV3TnVtTG9jYWxzKTsKLSAgICAgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdO
dW1Mb2NhbHMpOwotICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fs
cyk7Ci0gICAgfQorICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2Fscyk7
CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsg
fQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KICAgICBOb2Rl
KiYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAgICBOb2RlKiBhdChzaXpl
X3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5vZGUqJiBvcGVyYXRvcltd
KHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90
IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0
dXJuIGF0KHNpemUoKSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpIHsgbV9u
b2Rlcy5yZXNpemUoc2l6ZSk7IH0KQEAgLTk2LDIzICs3Miw4IEBAIHN0cnVjdCBCYXNpY0Jsb2Nr
IDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICB9CiAgICAgYm9vbCBpc1BoaUluZGV4KHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiBpIDwgcGhpcy5zaXplKCk7IH0KICAgICAKLSAgICBib29sIGlz
SW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChwaGlzW2ldID09IG5v
ZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUp
IGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU5vZGVzKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
CisgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBjb25zdDsKKyAgICBib29sIGlzSW5CbG9j
ayhOb2RlKiBteU5vZGUpIGNvbnN0OwogICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMo
KSB7IHJldHVybiBsYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQogICAgIApAQCAtMTMwLDEwICs5
MSwxMiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgREZH
X1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5k
ZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQogICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAotICAgIHsKLSAgICAgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOwotICAg
IH0KKyNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQ
b3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdz
KSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5k
Tm9uVGVybWluYWwoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVl
UGFyYW1zKTsKKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9B
UFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCisgICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAogICAgIC8vIFRoaXMgdmFsdWUg
aXMgdXNlZCBpbnRlcm5hbGx5IGZvciBibG9jayBsaW5raW5nIGFuZCBPU1IgZW50cnkuIEl0IGlz
IG1vc3RseSBtZWFuaW5nbGVzcwogICAgIC8vIGZvciBvdGhlciBwdXJwb3NlcyBkdWUgdG8gaW5s
aW5pbmcuCkBAIC0xNjAsNiArMTIzLDE5IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRl
ZDxCYXNpY0Jsb2MKICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhl
YWQ7CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworICAgIAorICAg
IHN0cnVjdCBTU0FEYXRhIHsKKyAgICAgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGZsdXNoRm9y
bWF0QXRIZWFkOworICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZmx1c2hGb3JtYXRBdFRh
aWw7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdEhlYWQ7CisgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+IGxpdmVBdFRhaWw7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+
IHZhbHVlc0F0SGVhZDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFs
dWVzQXRUYWlsOworICAgICAgICAKKyAgICAgICAgU1NBRGF0YShCYXNpY0Jsb2NrKik7CisgICAg
ICAgIH5TU0FEYXRhKCk7CisgICAgfTsKKyAgICBPd25QdHI8U1NBRGF0YT4gc3NhOwogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNTI0
MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDE3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9B
UFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAKKyNkZWZpbmUgREZH
X0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1z
LCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxh
dGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFw
cGVuZE5vblRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgeyBcCisgICAgICAgIE5vZGUqIHJlc3VsdCA9
IGdyYXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKKyAgICAg
ICAgYXBwZW5kKGxhc3QoKSk7IFwKKyAgICAgICAgYXQoc2l6ZSgpIC0gMikgPSByZXN1bHQ7IFwK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKyAgICBERkdfVkFSSUFESUNfVEVNUExB
VEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQ
UEVORF9OT0RFCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2Vy
dGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
bG9ja0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChHcmFwaCYgZ3JhcGgpCisgICAg
OiBtX2dyYXBoKGdyYXBoKQoreworfQorCitCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0
aW9uU2V0KCkgeyB9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChjb25zdCBCbG9j
a0luc2VydGlvbiYgaW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoaW5zZXJ0
aW9uKTsKK30KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwg
UGFzc1JlZlB0cjxCYXNpY0Jsb2NrPiBibG9jaykKK3sKKyAgICBpbnNlcnQoQmxvY2tJbnNlcnRp
b24oaW5kZXgsIGJsb2NrKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnQoc2l6ZV90IGluZGV4KQoreworICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBibG9jayA9IGFk
b3B0UmVmKG5ldyBCYXNpY0Jsb2NrKAorICAgICAgICBVSU5UX01BWCwKKyAgICAgICAgbV9ncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAg
IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKSk7Cisg
ICAgaW5zZXJ0KGluZGV4LCBibG9jayk7CisgICAgcmV0dXJuIGJsb2NrLmdldCgpOworfQorCitC
YXNpY0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJl
Zm9yZSkKK3sKKyAgICByZXR1cm4gaW5zZXJ0KGJsb2NrLT5pbmRleCk7Cit9CisKK2Jvb2wgQmxv
Y2tJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoKQoreworICAgIGlmIChtX2luc2VydGlvbnMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxsb3cgaW5zZXJ0
aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVkIHRvCisgICAg
Ly8gc29ydCB0aGVtIGJlZm9yZSBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuCisgICAg
c3RkOjpzb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworCisg
ICAgZXhlY3V0ZUluc2VydGlvbnMobV9ncmFwaC5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKKyAg
ICAKKyAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBu
ZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3Qg
ZnJvbSBncm93aW5nLgorICAgIHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKKyAgICBmb3IgKHVu
c2lnbmVkIHNvdXJjZUluZGV4ID0gMDsgc291cmNlSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTspIHsKKyAgICAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tzb3VyY2VJbmRleCsrXTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEluZGV4KytdID0gYmxvY2s7
CisgICAgfQorICAgIG1fZ3JhcGgubV9ibG9ja3MucmVzaXplKHRhcmdldEluZGV4KTsKKyAgICAK
KyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMu
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyAr
K2kpCisgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbaV0tPmluZGV4ID0gaTsKKyAgICAKKyAgICAv
LyBBbmQgZmluYWxseSwgaW52YWxpZGF0ZSBhbGwgYW5hbHlzZXMgdGhhdCByZWx5IG9uIHRoZSBD
RkcuCisgICAgbV9ncmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9u
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0lu
c2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdC
bG9ja0luc2VydGlvblNldF9oCisjZGVmaW5lIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdHcmFwaC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBX
VEY6Okluc2VydGlvbjxSZWZQdHI8QmFzaWNCbG9jaz4gPiBCbG9ja0luc2VydGlvbjsKKworY2xh
c3MgQmxvY2tJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0KEdy
YXBoJiBncmFwaCk7CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgdm9pZCBp
bnNlcnQoY29uc3QgQmxvY2tJbnNlcnRpb24mIGluc2VydGlvbik7CisgICAgdm9pZCBpbnNlcnQo
c2l6ZV90IGluZGV4LCBQYXNzUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrKTsKKyAgICBCYXNpY0Js
b2NrKiBpbnNlcnQoc2l6ZV90IGluZGV4KTsKKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUo
QmFzaWNCbG9jayogYmVmb3JlKTsKKyAgICAKKyAgICBib29sIGV4ZWN1dGUoKTsKKworcHJpdmF0
ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1f
aW5zZXJ0aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tJbnNlcnRpb25TZXRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE1MjQzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxMiw3ICsyMTIsMTAgQEAgZW51bSBHcmFwaEZvcm0gewogICAgIC8vCiAgICAgLy8gVGhy
ZWFkZWRDUFMgZm9ybSBpcyBzdWl0YWJsZSBmb3IgZGF0YSBmbG93IGFuYWx5c2lzIChDRkEsIHBy
ZWRpY3Rpb24KICAgICAvLyBwcm9wYWdhdGlvbiksIHJlZ2lzdGVyIGFsbG9jYXRpb24sIGFuZCBj
b2RlIGdlbmVyYXRpb24uCi0gICAgVGhyZWFkZWRDUFMKKyAgICBUaHJlYWRlZENQUywKKyAgICAK
KyAgICAvLyBTU0EgZm9ybS4gU2VlIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIGZvciBhIGRlc2Ny
aXB0aW9uLgorICAgIFNTQQogfTsKIAogLy8gRGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiB0aGUgVW5p
b25GaW5kIHN0cnVjdHVyZSBvZiBWYXJpYWJsZUFjY2Vzc0RhdGEncy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2lu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NyaXRpY2FsRWRnZUJyZWFraW5n
UGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVi
bGljOgorICAgIENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAg
ICA6IFBoYXNlKGdyYXBoLCAiY3JpdGljYWwgZWRnZSBicmVha2luZyIpCisgICAgICAgICwgbV9p
bnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisg
ICAgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIEFuIGVkZ2UgQS0+QiBpcyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0aXBsZSBzdWNj
ZXNzb3IgYW5kIEIgaGFzIG11bHRpcGxlCisgICAgICAgICAgICAvLyBwcmVkZWNlc3NvcnMuIFRo
dXMgd2UgZmFpbCBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIG11bHRpcGxlIHN1Y2Nlc3NvcnMuCisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChibG9jay0+bnVtU3VjY2Vzc29ycygpIDw9IDEp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiogc3VjY2Vzc29yID0gJmJsb2NrLT5zdWNjZXNzb3IoaSk7Cisg
ICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLnNpemUoKSA8PSAxKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBicmVha0NyaXRpY2FsRWRnZShibG9jaywgc3VjY2Vzc29yKTsgCisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5l
eGVjdXRlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgYnJlYWtDcml0aWNhbEVkZ2Uo
CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCwgQmFz
aWNCbG9jayoqIHN1Y2Nlc3NvcikKKyAgICB7CisgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsK
KyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHBhZCA9IG1fcGFkcy5nZXQoKnN1Y2Nlc3Nv
cik7CisgICAgICAgIGlmICghcGFkKSB7CisgICAgICAgICAgICBwYWQgPSBtX2luc2VydGlvblNl
dC5pbnNlcnRCZWZvcmUoKnN1Y2Nlc3Nvcik7CisgICAgICAgICAgICBwYWQtPmFwcGVuZE5vZGUo
bV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIE9wSW5mbygqc3VjY2Vzc29yKSk7CisgICAgICAgICAg
ICBtX3BhZHMuYWRkKCpzdWNjZXNzb3IsIHBhZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgICpzdWNjZXNzb3IgPSBwYWQ7CisgICAgfQorICAgIAorICAgIEJsb2NrSW5zZXJ0aW9uU2V0
IG1faW5zZXJ0aW9uU2V0OworICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIEJhc2ljQmxvY2sqPiBt
X3BhZHM7Cit9OworCitib29sIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhHcmFwaCYgZ3Jh
cGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDcml0aWNhbCBF
ZGdlIEJyZWFraW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPENyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFr
aW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZV9oCisjZGVmaW5lIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAor
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gSW5zZXJ0
cyBkdW1teSBiYXNpYyBibG9ja3MgdG8gYnJlYWsgY3JpdGljYWwgZWRnZXMuIEFuIGVkZ2UgQS0+
QiBpcworLy8gY3JpdGljYWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29ycyBhbmQgQiBoYXMg
bXVsdGlwbGUgcHJlZGVzc29ycy4KKworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmco
R3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9u
IDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1
bigpCiAgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMg
fHwgbV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCiAgICAgICAgIC8vIEZpcnN0IHJl
c2V0IHRoZSBjb3VudHMgdG8gMCBmb3IgYWxsIG5vZGVzLgogICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Js
b2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKQEAgLTc1LDEwICs3NywyOSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKLSAgICAgICAgICAgIG1fd29ya2xp
c3QucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYn
ZWQuCi0gICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBj
b3VudEVkZ2UpOworICAgICAgICAgICAgd2hpbGUgKCFtX3dvcmtsaXN0LmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAg
ICAgICAgICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7IC8vIEl0IHNob3VsZCBub3QgYmUgb24gdGhlIHdvcmts
aXN0IHVubGVzcyBpdCdzIHJlZidlZC4KKyAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19D
SElMRFJFTihtX2dyYXBoLCBub2RlLCBjb3VudEVkZ2UpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAg
ICAgICAgICAgLy8gRmluZCBQaGktPlVwc2lsb24gZWRnZXMsIHdoaWNoIGFyZSByZXByZXNlbnRl
ZCBhcyBtZXRhLWRhdGEgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8gVXBzaWxvbi4KKyAgICAg
ICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4
LS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5v
ZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNp
bG9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPnBoaSgpLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvdW50Tm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CkBAIC05NSw3ICsxMTYsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkuaXNQcm92ZWQoKSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gVW50eXBlZFVzZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkud2lsbE5vdEhhdmVDaGVjaygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25z
aWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBVSW50MzJUb051bWJlciBpcyBkZWFkIGJ1dCBpdHMK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkIGlzbid0OyBpZiBzbyB0aGVuIHdlIHNo
b3VsZCBNb3ZIaW50IHRoZSBjaGlsZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCktPnNob3VsZEdlbmVyYXRlKCkKQEAgLTEyNiw3ICsxNDcsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+
Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNo
aWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdl
IGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdOwogCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlIHx8IGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVz
ZUtpbmQoKSA9PSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
ZWRnZSB8fCBlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5j
b2RlT3JpZ2luLCBlZGdlKTsKQEAgLTE1OCwyMSArMTc5LDI1IEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhbiAidW5wcm92ZWQiIHVudHlwZWQgdXNlIGZvciBjb2Rl
IHRoYXQgaXMgdW5yZWFjaGFibGUuIFRoZSBDRkEKICAgICAgICAgLy8gd2lsbCBqdXN0IG5vdCBo
YXZlIGdvdHRlbiBhcm91bmQgdG8gaXQuCi0gICAgICAgIGlmIChlZGdlLmlzUHJvdmVkKCkgfHwg
ZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgaWYgKGVkZ2Uud2lsbE5vdEhh
dmVDaGVjaygpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIWVkZ2UtPnBvc3Rm
aXhSZWYoKSkKICAgICAgICAgICAgIG1fd29ya2xpc3QuYXBwZW5kKGVkZ2Uubm9kZSgpKTsKICAg
ICB9CiAgICAgCisgICAgdm9pZCBjb3VudE5vZGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IGlmIChub2RlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1f
d29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvdW50RWRnZShO
b2RlKiwgRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgLy8gRG9uJ3QgY291bnQgZWRnZXMgdGhh
dCBhcmUgYWxyZWFkeSBjb3VudGVkIGZvciB0aGVpciB0eXBlIGNoZWNrcy4KLSAgICAgICAgaWYg
KCEoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKGVkZ2UtPnBvc3RmaXhSZWYo
KSkKKyAgICAgICAgaWYgKGVkZ2Uud2lsbEhhdmVDaGVjaygpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChlZGdlLm5vZGUoKSk7CisgICAgICAgIGNvdW50
Tm9kZShlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZWxpbWluYXRlSXJyZWxl
dmFudFBoYW50b21DaGlsZHJlbihOb2RlKiBub2RlKQpAQCAtMTgxLDcgKzIwNiw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKICAg
ICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGlmIChlZGdlLmlzUHJvdmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkK
KyAgICAgICAgICAgIGlmIChlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGktLSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2
ICsxMjIsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcHJvb2ZTdGF0dXMoKSA9PSBOZWVk
c0NoZWNrOwogICAgIH0KICAgICAKKyAgICBib29sIHdpbGxOb3RIYXZlQ2hlY2soKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzUHJvdmVkKCkgfHwgdXNlS2luZCgpID09IFVudHlwZWRV
c2U7CisgICAgfQorICAgIGJvb2wgd2lsbEhhdmVDaGVjaygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIXdpbGxOb3RIYXZlQ2hlY2soKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBpc1Nl
dCgpIGNvbnN0IHsgcmV0dXJuICEhbm9kZSgpOyB9CiAgICAgCiAgICAgdHlwZWRlZiB2b2lkKiBF
ZGdlOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmx1c2hGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRmx1c2hGb3JtYXQuaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZH
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBGbHVzaEZvcm1hdCBmb3Jt
YXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAg
ICAgb3V0LnByaW50KCJEZWFkRmx1c2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1
c2hlZEludDMyOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRJbnQzMiIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNo
ZWREb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Cisg
ICAgICAgIG91dC5wcmludCgiRmx1c2hlZEpTVmFsdWUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdGbHVzaEZvcm1hdF9oCisjZGVmaW5lIERGR0ZsdXNoRm9ybWF0X2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitlbnVtIEZsdXNoRm9ybWF0IHsKKyAgICBEZWFkRmx1c2gsCisgICAgRmx1c2hlZEludDMyLAor
ICAgIEZsdXNoZWREb3VibGUsCisgICAgRmx1c2hlZEpTVmFsdWUKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEZsdXNoRm9ybWF0KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0ZsdXNoRm9ybWF0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRmx1c2hMaXZlbmVz
c0FuYWx5c2lzUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
QmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBGbHVz
aExpdmVuZXNzQW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3Jh
cGgsICJmbHVzaC1saXZlbmVzcyBhbmFseXNpcyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsK
KyAgICAgICAgCisgICAgICAgIC8vIExpdmVuZXNzIGlzIGEgYmFja3dhcmRzIGFuYWx5c2lzOyB0
aGUgcm9vdHMgYXJlIHRoZSBibG9ja3MgdGhhdAorICAgICAgICAvLyBlbmQgaW4gYSB0ZXJtaW5h
bCAoUmV0dXJuL1Rocm93L1Rocm93UmVmZXJlbmNlRXJyb3IpLiBGb3Igbm93LCB3ZQorICAgICAg
ICAvLyB1c2UgYSBmaXhwb2ludCBmb3JtdWxhdGlvbiBzaW5jZSBsaXZlbmVzcyBpcyBhIHJhcGlk
IGFuYWx5c2lzIHdpdGgKKyAgICAgICAgLy8gY29udmVyZ2VuY2UgZ3VhcmFudGVlZCBhZnRlciBP
KGNvbm5lY3Rpdml0eSkuCisgICAgICAgIAorICAgICAgICAvLyBTdGFydCBieSBhc3N1bWluZyB0
aGF0IGV2ZXJ5dGhpbmcgaXMgZGVhZC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYmxv
Y2stPmZsdXNoRm9ybWF0QXRIZWFkLmZpbGwoRGVhZEZsdXNoKTsKKyAgICAgICAgICAgIGJsb2Nr
LT5mbHVzaEZvcm1hdEF0VGFpbC5maWxsKERlYWRGbHVzaCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9j
a0luZGV4LS07KQorICAgICAgICAgICAgICAgIHByb2Nlc3MoYmxvY2tJbmRleCk7CisgICAgICAg
IH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzKEJsb2NrSW5kZXggYmxvY2tJbmRleCkK
KyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIG1fbGl2ZSA9IGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRUYWlsOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2Rl
SW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAg
ICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgbV9saXZlLm9wZXJhbmQo
bm9kZS0+bG9jYWwoKSkgPSBEZWFkRmx1c2g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZv
cm1hdDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBGSVhNRTogY29tcHV0ZSB0
aGUgZm9ybWF0LgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fbGl2ZS5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID0gZm9ybWF0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKG1fbGl2ZSA9PSBibG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgIGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkID0gbV9saXZlOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgLy8gRklYTUU6IEhvdyBkbyB3ZSByZWNvbmNpbGU/CisgICAgICAgICAgICBibG9jay0+
c3NhLT5mbHVzaEZvcm1hdEF0VGFpbCA9IG1fbGl2ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIGFkZENoaWxkVXNlKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBt
X2xpdmUuYWRkKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7
CisgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IG1fbGl2ZTsKK307CisKK2Jvb2wgcGVyZm9ybURD
RShHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRG
RyBGbHVzaC1MaXZlbmVzcyBBbmFseXNpcyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxG
bHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1
c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorI2RlZmluZSBERkdGbHVzaExpdmVuZXNz
QW5hbHlzaXNQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6
OnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQKKworYm9vbCBwZXJmb3JtRmx1c2hMaXZlbmVzc0FuYWx5
c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2Vf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3OCw2ICs0NzgsMzAgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExv
Y2FsKEJhc2ljQmxvYwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQorCit2b2lkIEdyYXBo
OjphZGRGb3JEZXB0aEZpcnN0U29ydChWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQsIFZlY3Rv
cjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgSGFzaFNldDxCYXNpY0Jsb2NrKj4mIHNlZW4s
IEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGlmIChzZWVuLmNvbnRhaW5zKGJsb2NrKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOworICAgIHdvcmts
aXN0LmFwcGVuZChibG9jayk7CisgICAgc2Vlbi5hZGQoYmxvY2spOworfQorCitWZWN0b3I8QmFz
aWNCbG9jayo+IEdyYXBoOjpkZXB0aEZpcnN0U29ydCgpCit7CisgICAgVmVjdG9yPEJhc2ljQmxv
Y2sqPiByZXN1bHQ7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gd29ya2xpc3Q7CisgICAg
SGFzaFNldDxCYXNpY0Jsb2NrKj4gc2VlbjsKKyAgICBhZGRGb3JEZXB0aEZpcnN0U29ydChyZXN1
bHQsIHdvcmtsaXN0LCBzZWVuLCBibG9jaygwKSk7CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07
KQorICAgICAgICAgICAgYWRkRm9yRGVwdGhGaXJzdFNvcnQocmVzdWx0LCB3b3JrbGlzdCwgc2Vl
biwgYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CiAg
ICAgCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjUxLDYgKzY1MSw4IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIGludmFsaWRhdGVDRkcoKTsKICAgICAKKyAgICBWZWN0b3I8QmFz
aWNCbG9jayo+IGRlcHRoRmlyc3RTb3J0KCk7CisgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0
aW9uKiBjb21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsgfQog
ICAgIAogICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMoKSB7IHJldHVybiBtX3Bs
YW4uaWRlbnRpZmllcnM7IH0KQEAgLTY4OSw2ICs2OTEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3
b3JrbGlzdCwgQmFzaWNCbG9jayosIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcik7CisgICAgdm9pZCBh
ZGRGb3JEZXB0aEZpcnN0U29ydChWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQsIFZlY3RvcjxC
YXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgSGFzaFNldDxCYXNpY0Jsb2NrKj4mIHNlZW4sIEJh
c2ljQmxvY2sqKTsKICAgICAKICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkSW1tZWRpYXRlU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVjdWxh
dGVJbnRlZ2VyLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwyNiArMzEsMTIgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1jbGFzcyBJbnNlcnRpb24g
ewotcHVibGljOgotICAgIEluc2VydGlvbigpIHsgfQotICAgIAotICAgIEluc2VydGlvbihzaXpl
X3QgaW5kZXgsIE5vZGUqIGVsZW1lbnQpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAg
ICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHNpemVfdCBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KLSAgICBOb2RlKiBlbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9lbGVtZW50OyB9Ci1wcml2YXRlOgotICAgIHNpemVfdCBtX2luZGV4Owot
ICAgIE5vZGUqIG1fZWxlbWVudDsKLX07Cit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPE5vZGUqPiBJ
bnNlcnRpb247CiAKIGNsYXNzIEluc2VydGlvblNldCB7CiBwdWJsaWM6CkBAIC04MSwyMCArNjcs
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQog
ICAgIHsKLSAgICAgICAgaWYgKCFtX2luc2VydGlvbnMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBibG9jay0+Z3JvdyhibG9jay0+c2l6ZSgpICsgbV9pbnNlcnRpb25zLnNp
emUoKSk7Ci0gICAgICAgIHNpemVfdCBsYXN0SW5kZXggPSBibG9jay0+c2l6ZSgpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9ucyA9IG1faW5zZXJ0aW9ucy5zaXplKCk7IGlu
ZGV4SW5JbnNlcnRpb25zLS07KSB7Ci0gICAgICAgICAgICBJbnNlcnRpb24mIGluc2VydGlvbiA9
IG1faW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc107Ci0gICAgICAgICAgICBzaXplX3QgZmly
c3RJbmRleCA9IGluc2VydGlvbi5pbmRleCgpICsgaW5kZXhJbkluc2VydGlvbnM7Ci0gICAgICAg
ICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJzdEluZGV4OykKLSAgICAg
ICAgICAgICAgICBibG9jay0+YXQoaSkgPSBibG9jay0+YXQoaSAtIGluZGV4T2Zmc2V0KTsKLSAg
ICAgICAgICAgIGJsb2NrLT5hdChmaXJzdEluZGV4KSA9IGluc2VydGlvbi5lbGVtZW50KCk7Ci0g
ICAgICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4OwotICAgICAgICB9Ci0gICAgICAgIG1f
aW5zZXJ0aW9ucy5yZXNpemUoMCk7CisgICAgICAgIGV4ZWN1dGVJbnNlcnRpb25zKCpibG9jaywg
bV9pbnNlcnRpb25zKTsKICAgICB9CiBwcml2YXRlOgogICAgIEdyYXBoJiBtX2dyYXBoOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgi
CisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNp
bmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBMaXZlbmVzc0FuYWx5c2lzUGhhc2UgOiBw
dWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIExpdmVuZXNzQW5hbHlzaXNQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJsaXZlbmVzcyBhbmFseXNpcyIpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9n
cmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIC8vIExpdmVuZXNzIGlzIGEg
YmFja3dhcmRzIGFuYWx5c2lzOyB0aGUgcm9vdHMgYXJlIHRoZSBibG9ja3MgdGhhdAorICAgICAg
ICAvLyBlbmQgaW4gYSB0ZXJtaW5hbCAoUmV0dXJuL1Rocm93L1Rocm93UmVmZXJlbmNlRXJyb3Ip
LiBGb3Igbm93LCB3ZQorICAgICAgICAvLyB1c2UgYSBmaXhwb2ludCBmb3JtdWxhdGlvbiBzaW5j
ZSBsaXZlbmVzcyBpcyBhIHJhcGlkIGFuYWx5c2lzIHdpdGgKKyAgICAgICAgLy8gY29udmVyZ2Vu
Y2UgZ3VhcmFudGVlZCBhZnRlciBPKGNvbm5lY3Rpdml0eSkuCisgICAgICAgIAorICAgICAgICAv
LyBTdGFydCBieSBhc3N1bWluZyB0aGF0IGV2ZXJ5dGhpbmcgaXMgZGVhZC4KKyAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgYmxvY2stPmxpdmVBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAg
IGJsb2NrLT5saXZlQXRUYWlsLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07
KQorICAgICAgICAgICAgICAgIHByb2Nlc3MoYmxvY2tJbmRleCk7CisgICAgICAgIH0gd2hpbGUg
KG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgdm9pZCBwcm9jZXNzKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IC8vIEZJWE1FOiBJdCdzIGxpa2VseSB0aGF0IHRoaXMgY2FuIGJlIGltcHJvdmVkLCBmb3Igc3Rh
dGljIGFuYWx5c2VzIHRoYXQgdXNlCisgICAgICAgIC8vIEhhc2hTZXRzLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDU1CisgICAgICAgIG1fbGl2ZSA9IGJsb2Nr
LT5zc2EtPmxpdmVBdFRhaWw7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBHaXZlbiBhbiBVcHNpbG9uOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIG46
IFVwc2lsb24oJHAsIEB4KQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdlIHNheSB0
aGF0IGl0IGRlZidzIEBwIGFuZCBAbiBhbmQgdXNlcyBAeC4KKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyBHaXZlbiBhIFBoaToKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAg
ICBwOiBQaGkoKQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdlIHNheSBub3RoaW5n
LiBJdCdzIG5laXRoZXIgYSB1c2Ugbm9yIGEgZGVmLgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIEdpdmVuIGEgbm9kZToKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICBu
OiBUaGluZ3koQGEsIEBiLCBAYykKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBXZSBz
YXkgdGhhdCBpdCBkZWYncyBAbiBhbmQgdXNlcyBAYSwgQGIsIEBjLgorICAgICAgICAgICAgCisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVXBzaWxv
bjogeworICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IG5vZGUtPnBoaSgpOworICAgICAgICAg
ICAgICAgIG1fbGl2ZS5yZW1vdmUocGhpKTsKKyAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3Zl
KG5vZGUpOworICAgICAgICAgICAgICAgIG1fbGl2ZS5hZGQobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICAgICAgREZHX05PREVf
RE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkQ2hpbGRVc2UpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAobV9saXZlID09IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICBibG9jay0+c3Nh
LT5saXZlQXRIZWFkID0gbV9saXZlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+
cHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVB
dFRhaWwuYWRkKG1fbGl2ZS5iZWdpbigpLCBtX2xpdmUuZW5kKCkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGFkZENoaWxkVXNlKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBtX2xp
dmUuYWRkKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7Cisg
ICAgSGFzaFNldDxOb2RlKj4gbV9saXZlOworfTsKKworYm9vbCBwZXJmb3JtRENFKEdyYXBoJiBn
cmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIExpdmVuZXNz
IEFuYWx5c2lzIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPExpdmVuZXNzQW5hbHlzaXNQ
aGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKyNkZWZpbmUg
REZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29tcHV0ZXMg
QmFzaWNCbG9jazo6c3NhLT5saXZlQXRIZWFkL2xpdmVBdFRhaWwuCisKK2Jvb2wgcGVyZm9ybUxp
dmVuZXNzQW5hbHlzaXMoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdMaXZlbmVzc0FuYWx5c2lz
UGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUzOCw2ICs1MzgsMTcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAg
IGJvb2wgaGFzUGhpKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IFVwc2lsb247Cisg
ICAgfQorICAgIAorICAgIE5vZGUqIHBoaSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzUGhp
KCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE5vZGUqPihtX29wSW5mbyk7CisgICAg
fQorICAgIAogICAgIGJvb2wgaGFzSWRlbnRpZmllcigpCiAgICAgewogICAgICAgICBzd2l0Y2gg
KG9wKCkpIHsKQEAgLTc3MywxNiArNzg0LDE2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9v
cEluZm8yID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYmxvY2spOwogICAgIH0KICAgICAKLSAg
ICBCYXNpY0Jsb2NrKiB0YWtlbkJsb2NrKCkKKyAgICBCYXNpY0Jsb2NrKiYgdGFrZW5CbG9jaygp
CiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7Ci0gICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJbmZvKTsKKyAgICAgICAgcmV0
dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcEluZm8pOwogICAgIH0KICAgICAK
LSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbkJsb2NrKCkKKyAgICBCYXNpY0Jsb2NrKiYgbm90VGFr
ZW5CbG9jaygpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7Ci0gICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJbmZvMik7CisgICAgICAgIHJldHVy
biAqYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZvMik7CiAgICAgfQogICAgIAog
ICAgIFN3aXRjaERhdGEqIHN3aXRjaERhdGEoKQpAQCAtODA1LDcgKzgxNiw3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3Io
dW5zaWduZWQgaW5kZXgpCisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRl
eCkKICAgICB7CiAgICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CiAgICAgICAgICAgICBpZiAoaW5k
ZXggPCBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oWm9tYmllSGludCwg
Tm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkg
XAogICAgIG1hY3JvKE5vcCwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oVXBzaWxvbiwg
Tm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwKICAgICBtYWNybyhQaGksIE5v
ZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCiAgICAgbWFjcm8oRmx1c2gsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9tTG9j
YWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcyLDE0ICs0NzIsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CiAg
ICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBz
dGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZp
eHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4KLSAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICAgICAg
Ly8gUGhpcyBzaG91bGQgbm90IGJlIHZpc2libGUgaGVyZSBzaW5jZSB3ZSdyZSBpdGVyYXRpbmcg
dGhlIGFsbC1idXQtUGhpJ3MKICAgICAgICAgICAgIC8vIHBhcnQgb2YgYmFzaWMgYmxvY2tzLgot
ICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVw
c2lsb246CisgICAgICAgICAgICAvLyBUaGVzZSBkb24ndCBnZXQgaW5zZXJ0ZWQgdW50aWwgd2Ug
Z28gaW50byBTU0EuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRTY29wZToKQEAgLTU0MSw3ICs1
NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBMYXN0Tm9kZVR5cGU6Ci0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UK
ICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25Q
aGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgor
I2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIFNTQUNvbnZlcnNpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAg
U1NBQ29udmVyc2lvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwg
IlNTQSBjb252ZXJzaW9uIikKKyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICAg
ICAgLCBtX25vblRyaXZpYWxQaGlzKE9wZXJhbmRzTGlrZSwgZ3JhcGguYmxvY2soMCktPnZhcmlh
Ymxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2NoYW5nZWQoZmFsc2UpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBo
Lm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0
IHdoaWNoIFNldExvY2FsJ3MgbmVlZCBmbHVzaGluZy4gTmVlZCB0byBkbyB0aGlzIHdoaWxlIHRo
ZQorICAgICAgICAvLyBQaGkgZ3JhcGggaXMgc3RpbGwgaW50YWN0LgorICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5v
ZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGbHVzaCkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYWRkRmx1c2hlZExvY2Fs
T3Aobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKCFtX2Zs
dXNoZWRMb2NhbE9wV29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBBU1NF
UlQobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpOworICAgICAgICAgICAgREZHX05P
REVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkRmx1c2hlZExvY2FsRWRnZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEVsaW1pbmF0ZSBhbGwgZHVwbGljYXRlIG9y
IHNlbGYtcG9pbnRpbmcgUGhpIGVkZ2VzLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgLy8gd2Ug
dHJhbnNmb3JtOgorICAgICAgICAvLworICAgICAgICAvLyBwOiBQaGkoQG4xLCBAbjIsIEBuMykK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gaW50bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gcDog
UGhpKEB4KQorICAgICAgICAvLworICAgICAgICAvLyBpZiBlYWNoIEBuaSBpbiB7QG4xLCBAbjIs
IEBuM30gaXMgZWl0aGVyIGVxdWFsIHRvIEBwIHRvIGlzIGVxdWFsCisgICAgICAgIC8vIHRvIEB4
LCBmb3IgZXhhY3RseSBvbmUgb3RoZXIgQHguIEFkZGl0aW9uYWxseSwgdHJpdmlhbCBQaGlzIChp
LmUuCisgICAgICAgIC8vIHA6IFBoaShAeCkpIGFyZSBmb3J3YXJkZWQsIHNvIHRoYXQgaWYgaGF2
ZSBhbiBlZGdlIHRvIHN1Y2ggQHAsIHdlCisgICAgICAgIC8vIHJlcGxhY2UgaXQgd2l0aCBAeC4g
VGhpcyBsb29wIGRvZXMgdGhpcyBmb3IgUGhpcyBvbmx5OyBsYXRlciB3ZSBkbworICAgICAgICAv
LyBzdWNoIGZvcndhcmRpbmcgZm9yIFBoaSByZWZlcmVuY2VzIGZvdW5kIGluIG90aGVyIG5vZGVz
LgorICAgICAgICAvLworICAgICAgICAvLyBTZWUgQXljb2NrIGFuZCBIb3JzcG9vbCBpbiBDQycw
MCBmb3IgYSBiZXR0ZXIgZGVzY3JpcHRpb24gb2Ygd2hhdAorICAgICAgICAvLyB3ZSdyZSBkb2lu
ZyBoZXJlLgorICAgICAgICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yd2FyZFBoaUNoaWxkcmVuKHBoaSk7CisgICAgICAgICAgICAgICAgICAgIGRlZHVwbGljYXRl
Q2hpbGRyZW4ocGhpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBGb3IgZWFjaCBiYXNp
YyBibG9jaywgZm9yIGVhY2ggbG9jYWwgbGl2ZSBhdCB0aGUgaGVhZCBvZiB0aGF0IGJsb2NrLAor
ICAgICAgICAvLyBmaWd1cmUgb3V0IHdoYXQgbm9kZSB3ZSBzaG91bGQgYmUgcmVmZXJyaW5nIHRv
IGluc3RlYWQgb2YgdGhhdCBsb2NhbC4KKyAgICAgICAgLy8gSWYgaXQgdHVybnMgb3V0IHRvIGJl
IGEgbm9uLXRyaXZpYWwgUGhpLCBtYWtlIHN1cmUgdGhhdCB0byBjcmVhdGUgYW4KKyAgICAgICAg
Ly8gU1NBIFBoaSBhbmQgVXBzaWxvbnMgaW4gcHJlZGVjZXNzb3IgYmxvY2tzLiBXZSByZXVzZQor
ICAgICAgICAvLyBCYXNpY0Jsb2NrOjp2YXJpYWJsZXNBdEhlYWQgZm9yIHRyYWNraW5nIHdoaWNo
IG5vZGVzIHRvIHJlZmVyIHRvLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhl
YWRbaV07CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gUG9pc29uIHRoaXMgZW50cnkgaW4gdmFyaWFibGVzQXRIZWFkIGJlY2F1c2Ugd2UgZG9uJ3QK
KyAgICAgICAgICAgICAgICAgICAgLy8gd2FudCBhbnlvbmUgdG8gdHJ5IHRvIHJlZmVyIHRvIGl0
LCBpZiB0aGUgdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gY2FwdHVyZWQuCisg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSAwOworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAg
ICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgorICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGkgfHwgbm9kZS0+
b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9
IG5vZGUtPmNoaWxkcmVuLmp1c3RPbmVDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
ZWRnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlZGdlLm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGEg
bm9uLXRyaXZpYWwgUGhpLgorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydCgwLCBTcGVjTm9uZSwgUGhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRl
Y2Vzc29ycy5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbal07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogdXBzaWxvbiA9IHByZWRlY2Vzc29yLT5hcHBlbmROb25U
ZXJtaW5hbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05v
bmUsIFVwc2lsb24sIE9wSW5mbyhub2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJlZGVjZXNzb3ItPnZhcmlhYmxlc0F0VGFpbFtpXSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBT
cGVjTm9uZSwgTW92SGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXSA9IG5vZGU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBDb252ZXJ0IG9wZXJhdGlvbnMgb3ZlciBsb2NhbHMgaW50byBvcGVy
YXRpb25zIG92ZXIgU1NBIG5vZGVzLgorICAgICAgICAvLyAtIEdldExvY2FsIG92ZXIgY2FwdHVy
ZWQgdmFyaWFibGVzIGxvc2UgdGhlaXIgcGhpcy4KKyAgICAgICAgLy8gLSBHZXRMb2NhbCBvdmVy
IHVuY2FwdHVyZWQgdmFyaWFibGVzIGRpZSBhbmQgZ2V0IHJlcGxhY2VkIHdpdGggcmVmZXJlbmNl
cworICAgICAgICAvLyAgIHRvIHRoZSBub2RlIHNwZWNpZmllZCBieSB2YXJpYWJsZXNBdEhlYWQu
CisgICAgICAgIC8vIC0gU2V0TG9jYWwgZ2V0cyBOb2RlTXVzdEdlbmVyYXRlIGlmIGl0J3MgZmx1
c2hlZC4KKyAgICAgICAgLy8gLSBGbHVzaCBsb3NlcyBpdHMgY2hpbGRyZW4gYnV0IHJlbWFpbnMs
IGJlY2F1c2Ugd2Ugd2FudCB0byBrbm93IHdoZW4gYQorICAgICAgICAvLyAgIGZsdXNoZWQgU2V0
TG9jYWwncyB2YWx1ZSBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGlzIGFsc28gbWFrZXMgaXQgc2lt
cGxlcgorICAgICAgICAvLyAgIHRvIHJlYXNvbiBhYm91dCB0aGUgZm9ybWF0IG9mIGEgbG9jYWws
IHNpbmNlIHdlIGNhbiBqdXN0IGZvbGQgaXQgaW50byB0aGUKKyAgICAgICAgLy8gICBiYWNrd2Fy
ZHMgYW5hbHlzaXMgdGhhdCBMaXZlbmVzc0FuYWx5c2lzUGhhc2UgZG9lcy4gQXMgcGFydCBvZiB0
aGUKKyAgICAgICAgLy8gICBiYWNrd2FyZHMgYW5hbHlzaXMsIHdlIHNheSB0aGF0IHRoZSB0eXBl
IG9mIGEgbG9jYWwgY2FuIGJlIGVpdGhlcgorICAgICAgICAvLyAgIGludDMyLCBkb3VibGUsIHZh
bHVlLCBvciBkZWFkLgorICAgICAgICAvLyAtIFBoYW50b21Mb2NhbCBiZWNvbWVzIFBoYW50b20s
IGFuZCBpdHMgY2hpbGQgaXMgd2hhdGV2ZXIgaXMgc3BlY2lmaWVkCisgICAgICAgIC8vICAgYnkg
dmFyaWFibGVzQXRIZWFkLgorICAgICAgICAvLyAtIFNldEFyZ3VtZW50IHR1cm5zIGludG8gR2V0
TG9jYWwuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAg
ICAgICAgICAgYmxvY2stPmF0KG5vZGVJbmRleCktPnJlcGxhY2VtZW50ID0gMDsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IG1fZmx1c2hlZExvY2FsT3BzLmNvbnRh
aW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2Rl
TXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2Fs
OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1
cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5y
ZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDogeworICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCku
c2V0Tm9kZShibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TG9jYWwpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZyZWUgYWxsIHBoaXMg
YW5kIHJlc2V0IHZhcmlhYmxlcyB2ZWN0b3JzLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAg
ICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0t
OykKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNb
cGhpSW5kZXhdKTsKKyAgICAgICAgICAgIGJsb2NrLT5waGlzLmNsZWFyKCk7CisgICAgICAgICAg
ICBibG9jay0+dmFyaWFibGVzQXRIZWFkLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFy
aWFibGVzQXRUYWlsLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmNs
ZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmNsZWFyKCk7CisgICAgICAg
ICAgICBibG9jay0+c3NhID0gYWRvcHRQdHIobmV3IEJhc2ljQmxvY2s6OlNTQURhdGEoYmxvY2sp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBTU0E7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZm9yd2FyZFBoaUNoaWxkcmVuKE5vZGUqIG5vZGUp
CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6
U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlJiBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hp
bGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gZm9yd2FyZFBoaUVkZ2UoZWRnZSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgTm9kZSogZm9yd2FyZFBoaShOb2RlKiBub2RlKQorICAgIHsK
KyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Cisg
ICAgICAgICAgICBjYXNlIFBoaTogeworICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUt
Pmp1c3RPbmVDaGlsZCgpOworICAgICAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVkZ2Uubm9kZSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAg
IGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwor
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgZm9yd2FyZFBoaUVkZ2UoRWRnZSYgZWRn
ZSkKKyAgICB7CisgICAgICAgIE5vZGUqIG5ld05vZGUgPSBmb3J3YXJkKGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgaWYgKG5ld05vZGUgPT0gZWRnZS5ub2RlKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGVkZ2Uuc2V0Tm9kZShuZXdOb2RlKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVkdXBsaWNhdGVDaGlsZHJlbihOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6
OlNpemU7ICsraSkgeworICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hp
bGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBpZiAoZWRnZSA9PSBub2RlKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGRyZW4ucmVtb3ZlRWRnZShpLS0pOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraikgewor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZHJlbi5jaGlsZChqKSA9PSBlZGdlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2Uoai0tKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBmb3J3YXJkTm9kZUNo
aWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJF
TihtX2dyYXBoLCBub2RlLCBmb3J3YXJkTm9kZUVkZ2UpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGZvcndhcmROb2RlRWRnZShOb2RlKiwgRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIGlmIChl
ZGdlLT5vcCgpIAorICAgICAgICBzd2l0Y2ggKGVkZ2UtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBH
ZXRMb2NhbDoKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2Nh
bE9wKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29u
dGFpbnMobm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fZmx1c2hlZExvY2Fs
T3BzLmFkZChub2RlKTsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmFwcGVuZChu
b2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbEVkZ2UoTm9kZSosIEVkZ2Ug
ZWRnZSkKKyAgICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKGVkZ2Uubm9kZSgpKTsKKyAg
ICB9CisKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAgSGFzaFNldDxOb2Rl
Kj4gbV9mbHVzaGVkTG9jYWxPcHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9w
V29ya2xpc3Q7CisgICAgYm9vbCBtX2NoYW5nZWQ7Cit9OworCitib29sIHBlcmZvcm1TU0FDb252
ZXJzaW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lv
bigiREZHIFNTQSBDb252ZXJzaW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFNTQUNv
bnZlcnNpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisjZGVmaW5lIERG
R1NTQUNvbnZlcnNpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIEdyYXBoOworCisvLyBDb252ZXJ0IFRocmVhZGVkQ1BTIGZvcm0gaW50byBTU0EgZm9ybS4g
VGhpcyByZXN1bHRzIGluIGEgZm9ybSB0aGF0IGhhczoKKy8vCisvLyAtIFJvdWdobHkgbWluaW1h
bCBQaGkncy4gV2UgdXNlIHRoZSBBeWNvY2sgJiBIb3JzcG9vbCBmaXhwb2ludCBmb3IKKy8vICAg
Y29udmVydGluZyB0aGUgQ1BTIG1heGltYWwgUGhpcyBpbnRvIFNTQSBtaW5pbWFsIFBoaXMsIHdp
dGggdGhlIGNhdmVhdAorLy8gICB0aGF0IGlycmVkdWNpYmxlIGNvbnRyb2wgZmxvdyBtYXkgcmVz
dWx0IGluIHNvbWUgbWlzc2VkIG9wcG9ydHVuaXRpZXMKKy8vICAgZm9yIFBoaSByZWR1Y3Rpb24u
CisvLworLy8gLSBObyB1c2VzIG9mIEdldExvY2FsL1NldExvY2FsIGV4Y2VwdCBmb3IgY2FwdHVy
ZWQgdmFyaWFibGVzIGFuZCBmbHVzaGVzLgorLy8gICBBZnRlciB0aGlzLCBhbnkgcmVtYWluaW5n
IFNldExvY2FsIG1lYW5zIEZsdXNoLiBGbHVzaCBub2RlcyBhcmUKKy8vICAgZWxpbWluYXRlZC4g
UGhhbnRvbUxvY2FscyBiZWNvbWUgUGhhbnRvbXMuIE5vZGVzIG1heSBtYXkgaGF2ZSBjaGlsZHJl
bgorLy8gICB0aGF0IGFyZSBpbiBhbm90aGVyIGJhc2ljIGJsb2NrLgorLy8KKy8vIC0gTW92SGlu
dHMgYXJlIHVzZWQgZm9yIE9TUiBpbmZvcm1hdGlvbiwgYW5kIGFyZSB0aGVtc2VsdmVzIG1pbmlt
YWwuCisvLyAgIEEgTW92SGludCB3aWxsIG9jY3VyIGF0IHNvbWUgcG9pbnQgYWZ0ZXIgdGhlIGFz
c2lnbmluZywgYW5kIGF0IFBoaQorLy8gICBwb2ludHMuCisvLworLy8gLSBVbmxpa2UgY29udmVu
dGlvbmFsIFNTQSBpbiB3aGljaCBQaGkgZnVuY3Rpb25zIHJlZmVyIHRvIHByZWRlY2Vzc29ycwor
Ly8gICBhbmQgdmFsdWVzLCBvdXIgU1NBIHVzZXMgVXBzaWxvbiBmdW5jdGlvbnMgdG8gaW5kaWNh
dGUgdmFsdWVzIGluCisvLyAgIHByZWRlY2Vzc29ycy4gQSBtZXJnZSB3aWxsIGxvb2sgbGlrZToK
Ky8vCisvLyAgIGxhYmVsQToKKy8vICAgICAgIGE6IFRoaW5neSguLi4pCisvLyAgICAgICBiOiBV
cHNpbG9uKCRlLCBAYSkKKy8vICAgICAgIEp1bXAobGFiZWxDKQorLy8KKy8vICAgbGFiZWxCOgor
Ly8gICAgICAgYzogT3RoZXJUaGluZ3koLi4uKQorLy8gICAgICAgZDogVXBzaWxvbigkZSwgQGMp
CisvLyAgICAgICBKdW1wKGxhYmVsQykKKy8vCisvLyAgIGxhYmVsQzoKKy8vICAgICAgIGU6IFBo
aSgpCisvLworLy8gICBOb3RlIHRoYXQgdGhlIFBoaSBoYXMgbm8gY2hpbGRyZW4sIGJ1dCB0aGUg
cHJlZGVjZXNzb3JzIGhhdmUgVXBzaWxvbnMKKy8vICAgdGhhdCBoYXZlIGEgd2VhayByZWZlcmVu
Y2UgdG8gdGhlIFBoaSAoJGUgaW5zdGVhZCBvZiBAZTsgd2Ugc3RvcmUgaXQKKy8vICAgaW4gdGhl
IE9wSW5mbyByYXRoZXIgdGhhbiB0aGUgQWRqYWNlbmN5TGlzdCkuIFRoaW5rIG9mIHRoZSBVcHNp
bG9uCisvLyAgIGFzICJhc3NpZ25pbmciIHRvIHRoZSAidmFyaWFibGUiIGFzc29jaWF0ZWQgd2l0
aCB0aGUgUGhpLCBhbmQgdGhhdAorLy8gICB0aGlzIGlzIHRoZSBvbmUgcGxhY2UgaW4gU1NBIGZv
cm0gd2hlcmUgeW91IGNhbiBoYXZlIG11bHRpcGxlCisvLyAgIGFzc2lnbm1lbnRzLgorLy8KKy8v
ICAgVGhpcyBpbXBsaWVzIHNvbWUgb3RoZXIgbG9vc2VuaW5ncyBvZiBTU0EuIEZvciBleGFtcGxl
LCBhbiBVcHNpbG9uCisvLyAgIG1heSBwcmVjZWRlIGEgUGhpIGluIHRoZSBzYW1lIGJhc2ljIGJs
b2NrOyB0aGlzIG1heSBhcmlzZSBhZnRlciBDRkcKKy8vICAgc2ltcGxpZmljYXRpb24uIEFsdGhv
dWdoIGl0J3MgcHJvZml0YWJsZSBmb3IgQ0ZHIHNpbXBsaWZpY2F0aW9uIChvcgorLy8gICBzb21l
IG90aGVyIHBoYXNlKSB0byByZW1vdmUgdGhlc2UsIGl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2Fy
eS4gQXMKKy8vICAgd2VsbCwgdGhpcyBmb3JtIGFsbG93cyB0aGUgVXBzaWxvbiB0byBiZSBpbiBh
bnkgYmxvY2sgdGhhdCBkb21pbmF0ZXMKKy8vICAgdGhlIHByZWRlY2Vzc29yIGJsb2NrIG9mIHRo
ZSBQaGksIHdoaWNoIGFsbG93cyBmb3IgYmxvY2sgc3BsaXR0aW5nIHRvCisvLyAgIGlnbm9yZSB0
aGUgcG9zc2liaWxpdHkgb2YgaW50cm9kdWNpbmcgYW4gZXh0cmEgZWRnZSBiZXR3ZWVuIHRoZSBQ
aGkKKy8vICAgYW5kIHRoZSBwcmVkZWNlc3NvciAodGhvdWdoIG5vcm1hbCBTU0Egd291bGQgYWxs
b3cgdGhpcywgYWxzbywgd2l0aAorLy8gICB0aGUgY2F2ZWF0IHRoYXQgdGhlIFBoaSBwcmVkZWNl
c3NvciBibG9jayBsaXN0cyB3b3VsZCBoYXZlIHRvIGJlCisvLyAgIHVwZGF0ZWQpLgorLy8KKy8v
ICAgVGhlIGVhc2llc3Qgd2F5IHRvIGNvbnZlcnQgZnJvbSB0aGlzIFNTQSBmb3JtIGludG8gYSBk
aWZmZXJlbnQgU1NBCisvLyAgIGZvcm0gaXMgdG8gcmVkbyBTU0EgY29udmVyc2lvbiBmb3IgUGhp
IGZ1bmN0aW9ucy4gVGhhdCBpcywgdHJlYXQgZWFjaAorLy8gICBQaGkgaW4gb3VyIElSIGFzIGEg
bm9uLVNTQSB2YXJpYWJsZSBpbiB0aGUgZm9yZWlnbiBJUiAoc28sIGFzIGFuCisvLyAgIGFsbG9j
YSBpbiBMTFZNIElSLCBmb3IgZXhhbXBsZSk7IHRoZSBVcHNpbG9ucyB0aGF0IHJlZmVyIHRvIHRo
ZSBQaGkKKy8vICAgYmVjb21lIHN0b3JlcyBhbmQgdGhlIFBoaXMgdGhlbXNlbHZlcyBiZWNvbWUg
bG9hZHMuCisvLworLy8gICBGdW4gZmFjdDogVXBzaWxvbiBpcyBzbyBuYW1lZCBiZWNhdXNlIGl0
IGNvbWVzIGJlZm9yZSBQaGkgaW4gdGhlCisvLyAgIGFscGhhYmV0LiBJdCBjYW4gYmUgd3JpdHRl
biBhcyAiWSIuCisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNpb24oR3JhcGgmKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTUyNDMyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNCwxMSArMTA0LDggQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFtX2hp
Z2hCbG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fYmxvY2tz
LmFkZChtX2hpZ2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9jayAiLCAqbV9oaWdo
QmxvY2spKSk7Ci0gICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygpOwotICAgICAg
ICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9hcmd1bWVudENoZWNrcywgbG93QmxvY2sobV9n
cmFwaC5ibG9jaygwKSkpOwogCiAgICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKTsK
QEAgLTEyOSw0MCArMTI2LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIAotICAgIHZvaWQg
YWRkRmx1c2hlZExvY2FsT3BSb290cygpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IG1faGlnaEJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewotICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgIT0gRmx1c2gpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChub2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICB2b2lkIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygpCi0gICAgewotICAgICAgICB3aGls
ZSAoIW1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QubGFzdCgpOwotICAgICAgICAgICAg
bV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgQVNTRVJUKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9k
ZSwgYWRkRmx1c2hlZExvY2FsRWRnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBhZGRGbHVzaGVkTG9jYWxPcChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKG1fZmx1
c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX2ZsdXNoZWRMb2NhbE9wcy5hZGQobm9kZSk7Ci0gICAgICAgIG1fZmx1c2hlZExvY2FsT3BX
b3JrbGlzdC5hcHBlbmQobm9kZSk7Ci0gICAgfQotICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsRWRn
ZShOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgYWRkRmx1c2hlZExvY2FsT3AoZWRn
ZS5ub2RlKCkpOwotICAgIH0KLSAgICAKICAgICB2b2lkIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVu
dHMoKQogICAgIHsKICAgICAgICAgLy8gV2hpbGUgY2hlY2tpbmcgYXJndW1lbnRzLCBldmVyeXRo
aW5nIGlzIGluIHRoZSBzdGFjay4KQEAgLTI4ODgsOSArMjg1MSw2IEBAIHByaXZhdGU6CiAgICAg
TFZhbHVlIG1fdGFnVHlwZU51bWJlcjsKICAgICBMVmFsdWUgbV90YWdNYXNrOwogICAgIAotICAg
IEhhc2hTZXQ8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BzOwotICAgIFZlY3RvcjxOb2RlKj4gbV9m
bHVzaGVkTG9jYWxPcFdvcmtsaXN0OwotICAgIAogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4g
bV9pbnQzMlZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fanNWYWx1ZVZhbHVl
czsKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKSW5kZXg6IFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUyNDMyKQor
KysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsNyBAQAogCQkwRkQ4MUFDNTE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJp
dFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwRkREQkZBNzE2NjZERkEzMDBDNTVGRUYgLyog
U3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFt
LmNwcCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3Ry
ZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRE
QkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLzsgfTsKKwkJMEZF
NTA1NTcxNzg3QTgwNjAwQjM1RjhDIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIElu
c2VydGlvbi5oICovOyB9OwogCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjEx
RDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi87IH07CiAJCTE0M0Y2MTIwMTU2NUYw
RjkwMERCNTE0QSAvKiBSQU1TaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTE0Njk0MTkyMTZFQUFGNkQwMDI0
RTE0NiAvKiBSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0Njk0MTkwMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUyLDYg
KzM1Myw3IEBACiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmlu
Z1ByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
cmluZ1ByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJG
QTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zZXJ0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFEMTU2
NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJBTVNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNG
NjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSQU1TaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODUs
NiArNzg3LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaFRyYWl0cy5o
ICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1iZXIuaCAqLywKIAkJ
CQlBOEE0NzJCQzE1MUE4MjVBMDA0MTIzRkYgLyogSW5saW5lQVNNLmggKi8sCisJCQkJMEZFNTA1
NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovLAogCQkJCUE4QTQ3MkJFMTUxQTgy
NUEwMDQxMjNGRiAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQThBNDcyQkYxNTFBODI1QTAwNDEy
M0ZGIC8qIEludDMyQXJyYXkuaCAqLywKIAkJCQlBOEE0NzJCRDE1MUE4MjVBMDA0MTIzRkYgLyog
SW50OEFycmF5LmggKi8sCkBAIC0xMTgxLDYgKzExODQsNyBAQAogCQkJCUE4QTQ3M0U4MTUxQTgy
NUIwMDQxMjNGRiAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFQTE1
MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDU0OTdBRDE1ODU3
RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1NzE3
ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjFEMTE1
NDE1RkYxMUJFMDAyNkU5MDggLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0RkQ4NTU0NzE2MTMzRTBFMDBDNUI3MDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9u
QXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlGM0ZCQzcxRTE2MUFGN0JGMDBC
QjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCBpbiBIZWFkZXJz
ICovLApJbmRleDogU291cmNlL1dURi93dGYvSGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL1dURi93dGYv
SGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMiArODYsMTkgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhl
IHRlbXBsYXRlIGFyZ3VtZW50cyBzbyB0aGF0IGNhbGxlcnMKICAgICAgICAgLy8gY2FuIGp1c3Qg
cGFzcyB0aGUgdHJhbnNsYXRvciBhbmQgbGV0IHRoZSBjb21waWxlciBkZWR1Y2UgVC4KICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IEFkZFJlc3Vs
dCBhZGQoY29uc3QgVCYpOworICAgICAgICAKKyAgICAgICAgLy8gQXR0ZW1wdHMgdG8gYWRkIGEg
bGlzdCBvZiB0aGluZ3MgdG8gdGhlIHNldC4gUmV0dXJucyB0cnVlIGlmIGFueSBvZgorICAgICAg
ICAvLyB0aGVtIGFyZSBuZXcgdG8gdGhlIHNldC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgc2V0IGlz
IHVuY2hhbmdlZC4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgorICAg
ICAgICBib29sIGFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpOwogCiAg
ICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYpOwogICAgICAgICB2b2lkIHJlbW92
ZShpdGVyYXRvcik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAgICAgICBzdGF0aWMgYm9v
bCBpc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJik7CisgICAgICAgIAorICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgSGFzaFNldCYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgZnJpZW5kIHZvaWQgZGVsZXRlQWxsVmFsdWVzPD4oY29uc3QgSGFzaFNldCYpOwpAQCAtMTkx
LDYgKzE5OCwxNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yVHlwZT4KKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0
b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRl
ciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gYWRkKCppdGVyKS5pc05l
d0VudHJ5OworICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogICAgIGlubGluZSB2b2lkIEhhc2hT
ZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICB7CiAgICAgICAgIGlmIChpdC5t
X2ltcGwgPT0gbV9pbXBsLmVuZCgpKQpAQCAtMjU2LDYgKzI3MywxOCBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgICAgIHZlY3RvcltpXSA9ICppdDsKICAgICB9ICAKIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGJvb2wgSGFz
aFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBIYXNoU2V0JiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIGlmIChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9
IGVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmICghb3RoZXIuY29udGFpbnMoKml0ZXIp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Okhhc2hT
ZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL1dURi93
dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNzAsNiArMTE3MCw4IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgIHsKICAgICAgICAgLy8gQ29weSB0aGUgaGFzaCB0YWJsZSB0aGUgZHVt
YiB3YXksIGJ5IGFkZGluZyBlYWNoIGVsZW1lbnQgdG8gdGhlIG5ldyB0YWJsZS4KICAgICAgICAg
Ly8gSXQgbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgdG8gY29weSB0aGUgdGFibGUgc2xvdHMsIGJ1
dCBpdCdzIG5vdCBjbGVhciB0aGF0IGVmZmljaWVuY3kgaXMgbmVlZGVkLgorICAgICAgICAvLyBG
SVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBh
bmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQogICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQg
PSBvdGhlci5lbmQoKTsKICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9IG90aGVyLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGFkZCgqaXQpOwpAQCAtMTIwOSw2
ICsxMjExLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4mIEhh
c2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5
VHJhaXRzPjo6b3BlcmF0b3I9KGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpCiAgICAgeworICAgICAg
ICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0
YXRpYyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQogICAgICAgICBIYXNoVGFibGUgdG1w
KG90aGVyKTsKICAgICAgICAgc3dhcCh0bXApOwogICAgICAgICByZXR1cm4gKnRoaXM7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9JbnNlcnRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbnNlcnRpb25faAorI2RlZmluZSBJbnNl
cnRpb25faAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNz
IEluc2VydGlvbiB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uKCkgeyB9CisgICAgCisgICAgSW5z
ZXJ0aW9uKHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgp
CisgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBz
aXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgVCBlbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29u
c3QgSW5zZXJ0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZGV4
IDwgb3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHNpemVfdCBtX2lu
ZGV4OworICAgIFQgbV9lbGVtZW50OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0VmVj
dG9yVHlwZSwgdHlwZW5hbWUgSW5zZXJ0aW9uVmVjdG9yVHlwZT4KK3ZvaWQgZXhlY3V0ZUluc2Vy
dGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYgdGFyZ2V0LCBJbnNlcnRpb25WZWN0b3JUeXBlJiBpbnNl
cnRpb25zKQoreworICAgIGlmICghaW5zZXJ0aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybjsK
KyAgICB0YXJnZXQuZ3Jvdyh0YXJnZXQuc2l6ZSgpICsgaW5zZXJ0aW9ucy5zaXplKCkpOworICAg
IHNpemVfdCBsYXN0SW5kZXggPSB0YXJnZXQuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGluZGV4
SW5JbnNlcnRpb25zID0gaW5zZXJ0aW9ucy5zaXplKCk7IGluZGV4SW5JbnNlcnRpb25zLS07KSB7
CisgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9u
c10uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOworICAgICAgICBzaXplX3QgaW5kZXhPZmZz
ZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0
SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQorICAgICAgICAgICAgdGFyZ2V0W2ldID0gdGFyZ2V0
W2kgLSBpbmRleE9mZnNldF07CisgICAgICAgIHRhcmdldFtmaXJzdEluZGV4XSA9IGluc2VydGlv
bnNbaW5kZXhJbkluc2VydGlvbnNdLmVsZW1lbnQoKTsKKyAgICAgICAgbGFzdEluZGV4ID0gZmly
c3RJbmRleDsKKyAgICB9CisgICAgaW5zZXJ0aW9ucy5yZXNpemUoMCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCit1c2luZyBXVEY6Okluc2VydGlvbjsKK3VzaW5nIFdURjo6ZXhlY3V0ZUlu
c2VydGlvbnM7CisKKyNlbmRpZiAvLyBJbnNlcnRpb25faAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206338</attachid>
            <date>2013-07-09 10:21:58 -0700</date>
            <delta_ts>2013-07-10 12:30:08 -0700</delta_ts>
            <desc>getting there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>113120</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9j
YWxGaXJzdFRpbWUob3BlcmFuZCwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFy
KCkKKyAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IHZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgp
OworICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBmaWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2IEBAIHZvaWQgQWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2kKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3Ry
YWN0VmFsdWU+OjppdGVyYXRvciBpdGVyID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQu
YmVnaW4oKTsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9y
IGVuZCA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmVuZCgpOworICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgZm9yTm9kZShpdGVyLT5rZXkp
ID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUuaGFzQ2xvYmJlcmFi
bGVTdGF0ZSgpKQorICAgICAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorICAgIAogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBm
YWxzZTsKICAgICBiYXNpY0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsKICAgICBtX2Jsb2Nr
ID0gYmFzaWNCbG9jazsKQEAgLTgzLDYgKzkzLDE2IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKEJhc2kKICAgICBtX2N1cnJlbnROb2RlID0gMDsKIH0KIAorc3RhdGljIHZv
aWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBI
YXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3sKKyAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICAKKyAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGxpdmUuYmVnaW4oKTsKKyAgICBIYXNoU2V0
PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbGl2ZS5lbmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBl
bmQ7ICsraXRlcikKKyAgICAgICAgdmFsdWVzLmFkZCgqaXRlciwgQWJzdHJhY3RWYWx1ZSgpKTsK
K30KKwogdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKIHsKICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxvY2soMCk7CkBAIC0xNTEsNiArMTcxLDEwIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICNlbmRpZgogICAgICAg
ICB9CiAgICAgICAgIGJsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9j
ay0+c3NhLT52YWx1ZXNBdEhlYWQsIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpOworICAgICAgICAg
ICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwsIGJsb2NrLT5zc2EtPmxp
dmVBdFRhaWwpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNzIsMjAgKzE5NiwzOSBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNCiAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIUFTU0VS
VF9ESVNBQkxFRCkgewotICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50
KSB7CisgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBUaHJl
YWRlZENQUzogeworICAgICAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVu
dCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGFyZ3VtZW50ICV6dS5cbiIs
IGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0
YXRlIGZvciBhcmd1bWVudCAlenUuXG4iLCBhcmd1bWVudCk7CiAjZW5kaWYKLSAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVz
dGluYXRpb24sIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24s
IG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBz
dGF0ZSBmb3IgbG9jYWwgJXp1LlxuIiwgbG9jYWwpOworICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKICNlbmRp
ZgotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVz
QXRUYWlsLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0
VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFi
bGVzLmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFNTQTogeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0g
YmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5iZWdpbigpOworICAgICAgICAgICAgSGFzaFNldDxOb2Rl
Kj46Oml0ZXJhdG9yIGVuZCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRBaWwuZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKCppdGVyKS0+dmFsdWUubWVyZ2UoZm9y
Tm9kZShub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTU4Niw2ICsxNjI5LDE2IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFBoaToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5t
X2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3VsZCBo
YXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBVcHNpbG9uOgorICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGZv
ck5vZGUobm9kZS0+cGhpKCkpID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAg
ICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQnJlYWtwb2lu
dDoKQEAgLTE2NzksNyArMTczMiw3IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJTdHJ1Y3QKICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQorYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZh
bHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTc2NywyMSArMTgyMCw0NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQor
Ym9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0
bykKIHsKICAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRz
KCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBBU1NF
UlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gdG8tPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAKICAgICBib29sIGNoYW5nZWQgPSBmYWxz
ZTsKICAgICAKLSAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZnJvbS0+
dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGFyZ3VtZW50KTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nr
cyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8t
PnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCkpOworICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAg
ICBjYXNlIFRocmVhZGVkQ1BTOiB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKyth
cmd1bWVudCkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCksIHRvLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1l
bnQpLCBmcm9tLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20t
PnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9j
YWwpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyhk
ZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBmb3IgKHNpemVf
dCBsb2NhbCA9IDA7IGxvY2FsIDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCk7ICsrbG9jYWwpIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+
dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxv
Y2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICAKKyAgICBjYXNlIFNTQTogeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gZnJvbS0+dmFyaWFibGVzQXRUYWlsLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gdG8tPnZhcmlhYmxlc0F0SGVhZFtpXS5tZXJnZShmcm9tLT52YXJp
YWJsZXNBdFRhaWxbaV0pOworICAgICAgICAKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJh
dG9yIGl0ZXIgPSB0by0+c3NhLT5saXZlQXRIZWFkLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+OjppdGVyYXRvciBlbmQgPSB0by0+c3NhLT5saXZlQXRIZWFkLmVuZCgpOworICAgICAg
ICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9
ICppdGVyOworICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+c3NhLT52YWx1ZXNBdEhlYWQuZmlu
ZChub2RlKS0+dmFsdWUubWVyZ2UoCisgICAgICAgICAgICAgICAgZnJvbS0+c3NhLT52YWx1ZXNB
dFRhaWwuZmluZChub2RlKS0+dmFsdWUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCF0by0+Y2ZhSGFzVmlz
aXRlZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
amFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksMTUgQEAgcHVibGljOgog
ICAgIAogICAgIEVkZ2UgY2hpbGQxVW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV93b3Jkc1sw
XTsgfQogICAgIAorICAgIEVkZ2UganVzdE9uZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghIWNoaWxkMSgpICYmICFjaGlsZDIoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjaGls
ZDMoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEVkZ2UoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXplKEVkZ2UgY2hp
bGQxLCBFZGdlIGNoaWxkMiwgRWRnZSBjaGlsZDMpCiAgICAgewogICAgICAgICBjaGlsZCgwKSA9
IGNoaWxkMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25l
ZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2Fs
cykKKyAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKKyAgICAsIGluZGV4KE5vQmxv
Y2spCisgICAgLCBpc09TUlRhcmdldChmYWxzZSkKKyAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2Up
CisgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQorICAgICwgY2ZhRm91bmRDb25zdGFudHMo
ZmFsc2UpCisgICAgLCBjZmFEaWRGaW5pc2godHJ1ZSkKKyAgICAsIGNmYUJyYW5jaERpcmVjdGlv
bihJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAsIGlz
TGlua2VkKGZhbHNlKQorI2VuZGlmCisgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKKyAgICAsIHZh
cmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhcmlhYmxlc0F0
VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1
bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscykKK3sKK30KKworQmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKSB7IH0KKwordm9pZCBCYXNp
Y0Jsb2NrOjplbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQoreworICAgIHZhcmlh
Ymxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2YXJpYWJsZXNBdFRh
aWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxv
Y2FscyhuZXdOdW1Mb2NhbHMpOworICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVt
TG9jYWxzKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjppc0luUGhpcyhOb2RlKiBub2RlKSBjb25z
dAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAocGhpc1tpXSA9PSBub2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjppc0luQmxvY2soTm9k
ZSogbXlOb2RlKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9kZXMo
KTsgKytpKSB7CisgICAgICAgIGlmIChub2RlKGkpID09IG15Tm9kZSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQmFzaWNCbG9j
azo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiIyIsIGlu
ZGV4KTsKK30KKworQmFzaWNCbG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICA6IGZsdXNoRm9ybWF0QXRIZWFkKE9wZXJhbmRzTGluZSwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZCkKK3sKK30KKworQmFzaWNCbG9jazo6U1NBRGF0YTo6flNTQURhdGEoKSB7IH0KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNp
bmNsdWRlICJERkdWYXJpYWRpY0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDQsNDIgKzQ2
LDE2IEBAIGNsYXNzIEluc2VydGlvblNldDsKIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAy
PiBQcmVkZWNlc3Nvckxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNp
Y0Jsb2NrPiB7Ci0gICAgQmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25l
ZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscykKLSAgICAgICAgOiBieXRlY29kZUJl
Z2luKGJ5dGVjb2RlQmVnaW4pCi0gICAgICAgICwgaW5kZXgoTm9CbG9jaykKLSAgICAgICAgLCBp
c09TUlRhcmdldChmYWxzZSkKLSAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQotICAgICAg
ICAsIGNmYVNob3VsZFJldmlzaXQoZmFsc2UpCi0gICAgICAgICwgY2ZhRm91bmRDb25zdGFudHMo
ZmFsc2UpCi0gICAgICAgICwgY2ZhRGlkRmluaXNoKHRydWUpCi0gICAgICAgICwgY2ZhQnJhbmNo
RGlyZWN0aW9uKEludmFsaWRCcmFuY2hEaXJlY3Rpb24pCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgICAgICAsIGlzTGlua2VkKGZhbHNlKQotI2VuZGlmCi0gICAgICAgICwgaXNSZWFjaGFibGUo
ZmFsc2UpCi0gICAgICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
KQotICAgICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAg
ICAgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgICAgICwg
dmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgIHsKLSAgICB9CisgICAg
QmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMs
IHVuc2lnbmVkIG51bUxvY2Fscyk7CisgICAgfkJhc2ljQmxvY2soKTsKICAgICAKLSAgICB+QmFz
aWNCbG9jaygpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNp
Z25lZCBuZXdOdW1Mb2NhbHMpCi0gICAgewotICAgICAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJl
TG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVMb2Nh
bHMobmV3TnVtTG9jYWxzKTsKLSAgICAgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdO
dW1Mb2NhbHMpOwotICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fs
cyk7Ci0gICAgfQorICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2Fscyk7
CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsg
fQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KICAgICBOb2Rl
KiYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAgICBOb2RlKiBhdChzaXpl
X3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5vZGUqJiBvcGVyYXRvcltd
KHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90
IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0
dXJuIGF0KHNpemUoKSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpIHsgbV9u
b2Rlcy5yZXNpemUoc2l6ZSk7IH0KQEAgLTk2LDIzICs3Miw4IEBAIHN0cnVjdCBCYXNpY0Jsb2Nr
IDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICB9CiAgICAgYm9vbCBpc1BoaUluZGV4KHNpemVf
dCBpKSBjb25zdCB7IHJldHVybiBpIDwgcGhpcy5zaXplKCk7IH0KICAgICAKLSAgICBib29sIGlz
SW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChwaGlzW2ldID09IG5v
ZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUp
IGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU5vZGVzKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
CisgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBjb25zdDsKKyAgICBib29sIGlzSW5CbG9j
ayhOb2RlKiBteU5vZGUpIGNvbnN0OwogICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMo
KSB7IHJldHVybiBsYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQogICAgIApAQCAtMTMwLDEwICs5
MSwxMiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgREZH
X1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5k
ZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQogICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAotICAgIHsKLSAgICAgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOwotICAg
IH0KKyNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQ
b3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdz
KSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5k
Tm9uVGVybWluYWwoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVl
UGFyYW1zKTsKKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9B
UFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCisgICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAogICAgIC8vIFRoaXMgdmFsdWUg
aXMgdXNlZCBpbnRlcm5hbGx5IGZvciBibG9jayBsaW5raW5nIGFuZCBPU1IgZW50cnkuIEl0IGlz
IG1vc3RseSBtZWFuaW5nbGVzcwogICAgIC8vIGZvciBvdGhlciBwdXJwb3NlcyBkdWUgdG8gaW5s
aW5pbmcuCkBAIC0xNjAsNiArMTIzLDIxIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRl
ZDxCYXNpY0Jsb2MKICAgICAKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhl
YWQ7CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworICAgIAorICAg
IHN0cnVjdCBTU0FEYXRhIHsKKyAgICAgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGZsdXNoRm9y
bWF0QXRIZWFkOworICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZmx1c2hGb3JtYXRBdFRh
aWw7CisgICAgICAgIE9wZXJhbmRzPE5vZGVJbkJsb2NrPiBhdmFpbGFiaWxpdHlBdEhlYWQ7Cisg
ICAgICAgIE9wZXJhbmRzPE5vZGVJbkJsb2NrPiBhdmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAg
IEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdEhlYWQ7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVB
dFRhaWw7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVh
ZDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOwor
ICAgICAgICAKKyAgICAgICAgU1NBRGF0YShCYXNpY0Jsb2NrKik7CisgICAgICAgIH5TU0FEYXRh
KCk7CisgICAgfTsKKyAgICBPd25QdHI8U1NBRGF0YT4gc3NhOwogCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDYgKzQzLDE3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkK
ICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAKKyNkZWZpbmUgREZHX0RFRklORV9BUFBF
TkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFt
c0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBh
cmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5vblRlcm1p
bmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZh
bHVlUGFyYW1zKSBcCisgICAgeyBcCisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5v
ZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKKyAgICAgICAgYXBwZW5kKGxh
c3QoKSk7IFwKKyAgICAgICAgYXQoc2l6ZSgpIC0gMikgPSByZXN1bHQ7IFwKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsgXAorICAgIH0KKyAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04o
REZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlv
blNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Jsb2NrSW5zZXJ0
aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChHcmFwaCYgZ3JhcGgpCisgICAgOiBtX2dyYXBoKGdy
YXBoKQoreworfQorCitCbG9ja0luc2VydGlvblNldDo6fkJsb2NrSW5zZXJ0aW9uU2V0KCkgeyB9
CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChjb25zdCBCbG9ja0luc2VydGlvbiYg
aW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoaW5zZXJ0aW9uKTsKK30KKwor
dm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgUGFzc1JlZlB0cjxC
YXNpY0Jsb2NrPiBibG9jaykKK3sKKyAgICBpbnNlcnQoQmxvY2tJbnNlcnRpb24oaW5kZXgsIGJs
b2NrKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90
IGluZGV4KQoreworICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKG5ldyBC
YXNpY0Jsb2NrKAorICAgICAgICBVSU5UX01BWCwKKyAgICAgICAgbV9ncmFwaC5ibG9jaygwKS0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgIG1fZ3JhcGguYmxv
Y2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKSk7CisgICAgaW5zZXJ0KGlu
ZGV4LCBibG9jayk7CisgICAgcmV0dXJuIGJsb2NrLmdldCgpOworfQorCitCYXNpY0Jsb2NrKiBC
bG9ja0luc2VydGlvblNldDo6aW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSkKK3sKKyAg
ICByZXR1cm4gaW5zZXJ0KGJsb2NrLT5pbmRleCk7Cit9CisKK2Jvb2wgQmxvY2tJbnNlcnRpb25T
ZXQ6OmV4ZWN1dGUoKQoreworICAgIGlmIChtX2luc2VydGlvbnMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBn
aXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVkIHRvCisgICAgLy8gc29ydCB0aGVt
IGJlZm9yZSBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuCisgICAgc3RkOjpzb3J0KG1f
aW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworCisgICAgZXhlY3V0ZUlu
c2VydGlvbnMobV9ncmFwaC5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKKyAgICAKKyAgICAvLyBQ
cnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0
IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5n
LgorICAgIHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIHNvdXJj
ZUluZGV4ID0gMDsgc291cmNlSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTspIHsKKyAg
ICAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tzb3VyY2VJ
bmRleCsrXTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEluZGV4KytdID0gYmxvY2s7CisgICAgfQorICAg
IG1fZ3JhcGgubV9ibG9ja3MucmVzaXplKHRhcmdldEluZGV4KTsKKyAgICAKKyAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAg
IG1fZ3JhcGgubV9ibG9ja3NbaV0tPmluZGV4ID0gaTsKKyAgICAKKyAgICAvLyBBbmQgZmluYWxs
eSwgaW52YWxpZGF0ZSBhbGwgYW5hbHlzZXMgdGhhdCByZWx5IG9uIHRoZSBDRkcuCisgICAgbV9n
cmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2Vy
dGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja0luc2VydGlv
blNldF9oCisjZGVmaW5lIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBXVEY6Okluc2VydGlv
bjxSZWZQdHI8QmFzaWNCbG9jaz4gPiBCbG9ja0luc2VydGlvbjsKKworY2xhc3MgQmxvY2tJbnNl
cnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0KEdyYXBoJiBncmFwaCk7
CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgdm9pZCBpbnNlcnQoY29uc3Qg
QmxvY2tJbnNlcnRpb24mIGluc2VydGlvbik7CisgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4
LCBQYXNzUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrKTsKKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQo
c2l6ZV90IGluZGV4KTsKKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayog
YmVmb3JlKTsKKyAgICAKKyAgICBib29sIGV4ZWN1dGUoKTsKKworcHJpdmF0ZToKKyAgICBHcmFw
aCYgbV9ncmFwaDsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsy
MTIsMTAgQEAgZW51bSBHcmFwaEZvcm0gewogICAgIC8vCiAgICAgLy8gVGhyZWFkZWRDUFMgZm9y
bSBpcyBzdWl0YWJsZSBmb3IgZGF0YSBmbG93IGFuYWx5c2lzIChDRkEsIHByZWRpY3Rpb24KICAg
ICAvLyBwcm9wYWdhdGlvbiksIHJlZ2lzdGVyIGFsbG9jYXRpb24sIGFuZCBjb2RlIGdlbmVyYXRp
b24uCi0gICAgVGhyZWFkZWRDUFMKKyAgICBUaHJlYWRlZENQUywKKyAgICAKKyAgICAvLyBTU0Eg
Zm9ybS4gU2VlIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIGZvciBhIGRlc2NyaXB0aW9uLgorICAg
IFNTQQogfTsKIAogLy8gRGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiB0aGUgVW5pb25GaW5kIHN0cnVj
dHVyZSBvZiBWYXJpYWJsZUFjY2Vzc0RhdGEncy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCIKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1
ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIENy
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIENy
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdy
YXBoLCAiY3JpdGljYWwgZWRnZSBicmVha2luZyIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQo
Z3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEFu
IGVkZ2UgQS0+QiBpcyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0aXBsZSBzdWNjZXNzb3IgYW5kIEIg
aGFzIG11bHRpcGxlCisgICAgICAgICAgICAvLyBwcmVkZWNlc3NvcnMuIFRodXMgd2UgZmFpbCBl
YXJseSBpZiB3ZSBkb24ndCBoYXZlIG11bHRpcGxlIHN1Y2Nlc3NvcnMuCisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChibG9jay0+bnVtU3VjY2Vzc29ycygpIDw9IDEpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiogc3VjY2Vzc29yID0gJmJsb2NrLT5zdWNjZXNzb3IoaSk7CisgICAgICAgICAgICAg
ICAgaWYgKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLnNpemUoKSA8PSAxKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBicmVh
a0NyaXRpY2FsRWRnZShibG9jaywgc3VjY2Vzc29yKTsgCisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5leGVjdXRlKCk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgYnJlYWtDcml0aWNhbEVkZ2UoCisgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCwgQmFzaWNCbG9jayoqIHN1
Y2Nlc3NvcikKKyAgICB7CisgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKKyAgICAgICAgCisg
ICAgICAgIEJhc2ljQmxvY2sqIHBhZCA9IG1fcGFkcy5nZXQoKnN1Y2Nlc3Nvcik7CisgICAgICAg
IGlmICghcGFkKSB7CisgICAgICAgICAgICBwYWQgPSBtX2luc2VydGlvblNldC5pbnNlcnRCZWZv
cmUoKnN1Y2Nlc3Nvcik7CisgICAgICAgICAgICBwYWQtPmFwcGVuZE5vZGUobV9ncmFwaCwgU3Bl
Y05vbmUsIEp1bXAsIE9wSW5mbygqc3VjY2Vzc29yKSk7CisgICAgICAgICAgICBtX3BhZHMuYWRk
KCpzdWNjZXNzb3IsIHBhZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICpzdWNjZXNz
b3IgPSBwYWQ7CisgICAgfQorICAgIAorICAgIEJsb2NrSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9u
U2V0OworICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIEJhc2ljQmxvY2sqPiBtX3BhZHM7Cit9Owor
Citib29sIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhHcmFwaCYgZ3JhcGgpCit7CisgICAg
U2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDcml0aWNhbCBFZGdlIEJyZWFraW5n
IFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2U+
KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFz
ZV9oCisjZGVmaW5lIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gSW5zZXJ0cyBkdW1teSBiYXNp
YyBibG9ja3MgdG8gYnJlYWsgY3JpdGljYWwgZWRnZXMuIEFuIGVkZ2UgQS0+QiBpcworLy8gY3Jp
dGljYWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29ycyBhbmQgQiBoYXMgbXVsdGlwbGUgcHJl
ZGVzc29ycy4KKworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoR3JhcGgmKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDE1MjQzMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAgewor
ICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMgfHwgbV9ncmFwaC5t
X2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCiAgICAgICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBjb3Vu
dHMgdG8gMCBmb3IgYWxsIG5vZGVzLgogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsK
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4
KTsKQEAgLTc1LDEwICs3NywyOSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKLSAgICAgICAgICAgIG1fd29ya2xpc3QucmVtb3ZlTGFz
dCgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBz
aG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCi0gICAgICAg
ICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBjb3VudEVkZ2UpOwor
ICAgICAgICAgICAgd2hpbGUgKCFtX3dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgICAgICAgICBtX3dv
cmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSk7IC8vIEl0IHNob3VsZCBub3QgYmUgb24gdGhlIHdvcmtsaXN0IHVubGVzcyBp
dCdzIHJlZidlZC4KKyAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dy
YXBoLCBub2RlLCBjb3VudEVkZ2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgICAgICAgICAgLy8g
RmluZCBQaGktPlVwc2lsb24gZWRnZXMsIHdoaWNoIGFyZSByZXByZXNlbnRlZCBhcyBtZXRhLWRh
dGEgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8gVXBzaWxvbi4KKyAgICAgICAgICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNpbG9uKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnBoaSgpLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50Tm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9j
a3MoKTsgKytibG9ja0luZGV4KSB7CkBAIC05NSw3ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkuaXNQcm92ZWQoKSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkud2lsbE5vdEhh
dmVDaGVjaygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9z
c2liaWxpdHkgdGhhdCBVSW50MzJUb051bWJlciBpcyBkZWFkIGJ1dCBpdHMKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoaWxkIGlzbid0OyBpZiBzbyB0aGVuIHdlIHNob3VsZCBNb3ZIaW50
IHRoZSBjaGlsZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkt
PnNob3VsZEdlbmVyYXRlKCkKQEAgLTEyNiw3ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNo
aWxkSWR4KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFlZGdlIHx8IGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSB8fCBlZGdl
LndpbGxOb3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBl
ZGdlKTsKQEAgLTE1OCwyMSArMTc5LDI1IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICAvLyBX
ZSBtYXkgaGF2ZSBhbiAidW5wcm92ZWQiIHVudHlwZWQgdXNlIGZvciBjb2RlIHRoYXQgaXMgdW5y
ZWFjaGFibGUuIFRoZSBDRkEKICAgICAgICAgLy8gd2lsbCBqdXN0IG5vdCBoYXZlIGdvdHRlbiBh
cm91bmQgdG8gaXQuCi0gICAgICAgIGlmIChlZGdlLmlzUHJvdmVkKCkgfHwgZWRnZS51c2VLaW5k
KCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgaWYgKGVkZ2Uud2lsbE5vdEhhdmVDaGVjaygpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIWVkZ2UtPnBvc3RmaXhSZWYoKSkKICAg
ICAgICAgICAgIG1fd29ya2xpc3QuYXBwZW5kKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBjb3VudE5vZGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLT5w
b3N0Zml4UmVmKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fd29ya2xpc3QuYXBw
ZW5kKG5vZGUpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvdW50RWRnZShOb2RlKiwgRWRnZSBl
ZGdlKQogICAgIHsKICAgICAgICAgLy8gRG9uJ3QgY291bnQgZWRnZXMgdGhhdCBhcmUgYWxyZWFk
eSBjb3VudGVkIGZvciB0aGVpciB0eXBlIGNoZWNrcy4KLSAgICAgICAgaWYgKCEoZWRnZS5pc1By
b3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKGVkZ2UtPnBvc3RmaXhSZWYoKSkKKyAgICAgICAg
aWYgKGVkZ2Uud2lsbEhhdmVDaGVjaygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBt
X3dvcmtsaXN0LmFwcGVuZChlZGdlLm5vZGUoKSk7CisgICAgICAgIGNvdW50Tm9kZShlZGdlLm5v
ZGUoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21D
aGlsZHJlbihOb2RlKiBub2RlKQpAQCAtMTgxLDcgKzIwNiw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKICAgICAgICAgICAgIGlm
ICghZWRnZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChlZGdl
LmlzUHJvdmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAg
IGlmIChlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZHJlbi5yZW1vdmVFZGdlKGktLSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsMTUgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gcHJvb2ZTdGF0dXMoKSA9PSBOZWVkc0NoZWNrOwogICAg
IH0KICAgICAKKyAgICBib29sIHdpbGxOb3RIYXZlQ2hlY2soKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzUHJvdmVkKCkgfHwgdXNlS2luZCgpID09IFVudHlwZWRVc2U7CisgICAgfQor
ICAgIGJvb2wgd2lsbEhhdmVDaGVjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIXdp
bGxOb3RIYXZlQ2hlY2soKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsg
cmV0dXJuICEhbm9kZSgpOyB9CiAgICAgCiAgICAgdHlwZWRlZiB2b2lkKiBFZGdlOjoqVW5zcGVj
aWZpZWRCb29sVHlwZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hG
b3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1
c2hGb3JtYXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbHVzaEZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHRmx1c2hGb3JtYXQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHCisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBGbHVzaEZvcm1hdCBmb3JtYXQpCit7CisgICAg
c3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgb3V0LnByaW50
KCJEZWFkRmx1c2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEludDMyOgor
ICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWREb3VibGUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIG91dC5wcmlu
dCgiRmx1c2hlZENlbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEJvb2xl
YW46CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZEJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZEpT
VmFsdWUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1h
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZv
cm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdGbHVzaEZvcm1hdF9oCisj
ZGVmaW5lIERGR0ZsdXNoRm9ybWF0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIEZsdXNoRm9ybWF0IHsKKyAgICBE
ZWFkRmx1c2gsCisgICAgRmx1c2hlZEludDMyLAorICAgIEZsdXNoZWREb3VibGUsCisgICAgRmx1
c2hlZENlbGwsCisgICAgRmx1c2hlZEJvb2xlYW4sCisgICAgRmx1c2hlZEpTVmFsdWUKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEZsdXNoRm9ybWF0KTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0ZsdXNoRm9y
bWF0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNz
QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
Rmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgor
I2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1Ymxp
YzoKKyAgICBGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAg
IDogUGhhc2UoZ3JhcGgsICJmbHVzaC1saXZlbmVzcyBhbmFseXNpcyIpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zv
cm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIC8vIExpdmVuZXNzIGlzIGEgYmFja3dhcmRz
IGFuYWx5c2lzOyB0aGUgcm9vdHMgYXJlIHRoZSBibG9ja3MgdGhhdAorICAgICAgICAvLyBlbmQg
aW4gYSB0ZXJtaW5hbCAoUmV0dXJuL1Rocm93L1Rocm93UmVmZXJlbmNlRXJyb3IpLiBGb3Igbm93
LCB3ZQorICAgICAgICAvLyB1c2UgYSBmaXhwb2ludCBmb3JtdWxhdGlvbiBzaW5jZSBsaXZlbmVz
cyBpcyBhIHJhcGlkIGFuYWx5c2lzIHdpdGgKKyAgICAgICAgLy8gY29udmVyZ2VuY2UgZ3VhcmFu
dGVlZCBhZnRlciBPKGNvbm5lY3Rpdml0eSkuCisgICAgICAgIAorICAgICAgICAvLyBTdGFydCBi
eSBhc3N1bWluZyB0aGF0IGV2ZXJ5dGhpbmcgaXMgZGVhZC4KKyAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgYmxvY2stPmZsdXNoRm9ybWF0QXRIZWFkLmZpbGwoRGVhZEZsdXNoKTsKKyAgICAg
ICAgICAgIGJsb2NrLT5mbHVzaEZvcm1hdEF0VGFpbC5maWxsKERlYWRGbHVzaCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNl
OworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJs
b2NrcygpOyBibG9ja0luZGV4LS07KQorICAgICAgICAgICAgICAgIHByb2Nlc3MoYmxvY2tJbmRl
eCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIG1fbGl2ZSA9IGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRU
YWlsOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+
c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwor
ICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgdmFyaWFibGUtPmxvY2FsKCksIHZhcmlh
YmxlLT5mbHVzaEZvcm1hdCgpLCBEZWFkRmx1c2gpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaDoK
KyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGUtPmZsdXNoRm9ybWF0KCk7Cisg
ICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCB2YXJpYWJsZS0+bG9jYWwoKSwgZm9ybWF0
LCBmb3JtYXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fbGl2ZSA9
PSBibG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgIGJsb2NrLT5zc2EtPmZs
dXNoRm9ybWF0QXRIZWFkID0gbV9saXZlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9j
ay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayog
cHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gbV9saXZlLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgIEZsdXNo
Rm9ybWF0JiBwcmVkZWNlc3NvckZvcm1hdCA9IHByZWRlY2Vzc29yLT5zc2EtPmZsdXNoRm9ybWF0
QXRUYWlsW2pdOworICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IG15Rm9ybWF0ID0gbXlMaXZl
W2pdOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRocmVlIHBvc3NpYmls
aXRpZXM6CisgICAgICAgICAgICAgICAgLy8gMSkgUHJlZGVjZXNzb3IgZm9ybWF0IGlzIERlYWQs
IGluIHdoaWNoIGNhc2UgaXQgYWNxdWlyZXMgb3VyIGZvcm1hdC4KKyAgICAgICAgICAgICAgICAv
LyAyKSBQcmVkZWNlc3NvciBmb3JtYXQgaXMgaWRlbnRpY2FsIHRvIG91ciBmb3JtYXQsIGluIHdo
aWNoIGNhc2Ugd2UKKyAgICAgICAgICAgICAgICAvLyAgICBkbyBub3RoaW5nLgorICAgICAgICAg
ICAgICAgIC8vIDMpIFByZWRlY2Vzc29yIGZvcm1hdCBpcyBkaWZmZXJlbnQgZnJvbSBvdXIgZm9y
bWF0IGFuZCBpdCdzIG5vdCBEZWFkLAorICAgICAgICAgICAgICAgIC8vICAgIGluIHdoaWNoIGNh
c2Ugd2UgaGF2ZSBhbiBlcnJvbmVvdXMgc2V0IG9mIEZsdXNoZXMgYW5kIFNldExvY2Fscy4KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JGb3JtYXQgPT0g
RGVhZEZsdXNoKSB7CisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yRm9ybWF0ID0gbXlG
b3JtYXQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JGb3JtYXQg
PT0gbXlGb3JtYXQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJCYWQg
Rmx1c2ggbWVyZ2UgYXQgZWRnZSAiLCAqcHJlZGVjZXNzb3IsICIgLT4gIiwgKmJsb2NrLAorICAg
ICAgICAgICAgICAgICAgICAiIGxvY2FsIHZhcmlhYmxlIHIiLCBteUxpdmUub3BlcmFuZEZvcklu
ZGV4KGopLCAiOiAiLCAqcHJlZGVjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICIgaGFzICIs
IHByZWRlY2Vzc29yRm9ybWF0LCAiIGFuZCAiLCAqYmxvY2ssICIgaGFzICIsIG15Rm9ybWF0LCAi
LlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSVIgYXQgdGltZSBvZiBlcnJvcjpcbiIp
OworICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRG
b3JOb2RlKE5vZGUqIG5vZGUsIGludCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBub2RlRm9ybWF0LCBG
bHVzaEZvcm1hdCBuZXdGb3JtYXQpCisgICAgeworICAgICAgICBGbHVzaEZvcm1hdCYgY3VycmVu
dEZvcm1hdCA9IG1fbGl2ZS5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgLy8g
RG8gc29tZSB1c2VmdWwgdmVyaWZpY2F0aW9uIGhlcmUuIEl0J3MgT0sgaWYgd2UgdGhpbmsgdGhh
dCB0aGUKKyAgICAgICAgLy8gZmx1c2ggZm9ybWF0IGlzIGRlYWQgYXQgdGhlIHRpbWUgdGhhdCB3
ZSBzZWUgdGhlIG5vZGUuIEJ1dCBpdCdzCisgICAgICAgIC8vIG5vdCBPSyBpZiBib3RoIHRoZSBu
b2RlIGFuZCBtX2xpdmUgc2VlIGEgRmx1c2hGb3JtYXQgYW5kIHRoZXkgZG8KKyAgICAgICAgLy8g
bm90IGFncmVlIG9uIGl0LgorICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnRGb3JtYXQgPT0g
RGVhZEZsdXNoIHx8IGN1cnJlbnRGb3JtYXQgPT0gbm9kZUZvcm1hdCkgeworICAgICAgICAgICAg
Y3VycmVudEZvcm1hdCA9IG5ld0Zvcm1hdDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJCYWQgRmx1c2ggbWVy
Z2UgYXQgbm9kZSAiLCBub2RlLCAiLCByIiwgb3BlcmFuZCwgIjogbm9kZSBjbGFpbXMgIiwgbm9k
ZUZvcm1hdCwKKyAgICAgICAgICAgICIgYnV0IGJhY2t3YXJkcyBmbG93IGNsYWltcyAiLCBjdXJy
ZW50Rm9ybWF0LCAiLlxuIik7CisgICAgICAgIGRhdGFMb2coIklSIGF0IHRpbWUgb2YgZXJyb3I6
XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQor
ICAgIAorICAgIEZsdXNoRm9ybWF0IGZsdXNoRm9ybWF0KE5vZGUqIG5vZGUpCisgICAgeworICAg
ICAgICByZXR1cm4gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7
CisgICAgICAgIG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICBib29s
IG1fY2hhbmdlZDsKKyAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gbV9saXZlOworfTsKKworYm9v
bCBwZXJmb3JtRENFKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIEZsdXNoLUxpdmVuZXNzIEFuYWx5c2lzIFBoYXNlIik7CisgICAgcmV0dXJu
IHJ1blBoYXNlPEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisjZGVmaW5lIERGR0Zs
dXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29tcHV0ZXMg
QmFzaWNCbG9jazo6c3NhLT5mbHVzaEZvcm1hdEF0SGVhZAorCitib29sIHBlcmZvcm1GbHVzaExp
dmVuZXNzQW5hbHlzaXMoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdGbHVzaExpdmVuZXNzQW5h
bHlzaXNQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDYgKzQ3OCwzMCBAQCB2b2lkIEdyYXBoOjpzdWJz
dGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiB9CisK
K3ZvaWQgR3JhcGg6OmFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJl
c3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBIYXNoU2V0PEJhc2ljQmxv
Y2sqPiYgc2VlbiwgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgaWYgKHNlZW4uY29udGFpbnMo
YmxvY2spKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcmVzdWx0LmFwcGVuZChibG9jayk7
CisgICAgd29ya2xpc3QuYXBwZW5kKGJsb2NrKTsKKyAgICBzZWVuLmFkZChibG9jayk7Cit9CisK
K1ZlY3RvcjxCYXNpY0Jsb2NrKj4gR3JhcGg6OmRlcHRoRmlyc3RTb3J0KCkKK3sKKyAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiB3b3Jr
bGlzdDsKKyAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBzZWVuOworICAgIGFkZEZvckRlcHRoRmly
c3RTb3J0KHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKKyAgICB3aGlsZSAoIXdv
cmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0
LnRha2VMYXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNz
b3JzKCk7IGktLTspCisgICAgICAgICAgICBhZGRGb3JEZXB0aEZpcnN0U29ydChyZXN1bHQsIHdv
cmtsaXN0LCBzZWVuLCBibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KICAgICAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNiArNjUx
LDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgaW52YWxpZGF0ZUNGRygpOwogICAgIAorICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdFNvcnQoKTsKKyAgICAKICAgICBQcm9maWxl
cjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9u
LmdldCgpOyB9CiAgICAgCiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsg
cmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQpAQCAtNjg5LDYgKzY5MSw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJhc2ljQmxv
Y2sqLCAxNj4mIHdvcmtsaXN0LCBCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayogc3VjY2Vzc29yKTsK
KyAgICB2b2lkIGFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3Vs
dCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBIYXNoU2V0PEJhc2ljQmxvY2sq
PiYgc2VlbiwgQmFzaWNCbG9jayopOwogICAgIAogICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJ
bW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNo
b3VsZFNwZWN1bGF0ZUludGVnZXIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE1MjQz
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDI2ICszMSwxMiBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5j
bHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWNsYXNz
IEluc2VydGlvbiB7Ci1wdWJsaWM6Ci0gICAgSW5zZXJ0aW9uKCkgeyB9Ci0gICAgCi0gICAgSW5z
ZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVudCkKLSAgICAgICAgOiBtX2luZGV4KGlu
ZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIE5vZGUqIGVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KLXByaXZhdGU6Ci0gICAgc2l6ZV90
IG1faW5kZXg7Ci0gICAgTm9kZSogbV9lbGVtZW50OwotfTsKK3R5cGVkZWYgV1RGOjpJbnNlcnRp
b248Tm9kZSo+IEluc2VydGlvbjsKIAogY2xhc3MgSW5zZXJ0aW9uU2V0IHsKIHB1YmxpYzoKQEAg
LTgxLDIwICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9j
ayogYmxvY2spCiAgICAgewotICAgICAgICBpZiAoIW1faW5zZXJ0aW9ucy5zaXplKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGJsb2NrLT5ncm93KGJsb2NrLT5zaXplKCkgKyBtX2lu
c2VydGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgc2l6ZV90IGxhc3RJbmRleCA9IGJsb2NrLT5zaXpl
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gbV9pbnNlcnRpb25z
LnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsKLSAgICAgICAgICAgIEluc2VydGlvbiYg
aW5zZXJ0aW9uID0gbV9pbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXTsKLSAgICAgICAgICAg
IHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9u
czsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9mZnNldCA9IGluZGV4SW5JbnNlcnRpb25zICsg
MTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5k
ZXg7KQotICAgICAgICAgICAgICAgIGJsb2NrLT5hdChpKSA9IGJsb2NrLT5hdChpIC0gaW5kZXhP
ZmZzZXQpOwotICAgICAgICAgICAgYmxvY2stPmF0KGZpcnN0SW5kZXgpID0gaW5zZXJ0aW9uLmVs
ZW1lbnQoKTsKLSAgICAgICAgICAgIGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9pbnNlcnRpb25zLnJlc2l6ZSgwKTsKKyAgICAgICAgZXhlY3V0ZUluc2VydGlv
bnMoKmJsb2NrLCBtX2luc2VydGlvbnMpOwogICAgIH0KIHByaXZhdGU6CiAgICAgR3JhcGgmIG1f
Z3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlz
aXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9j
a0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlv
blNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIExpdmVuZXNzQW5hbHlz
aXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImxpdmVuZXNzIGFuYWx5
c2lzIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgLy8gTGl2
ZW5lc3MgaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXM7IHRoZSByb290cyBhcmUgdGhlIGJsb2NrcyB0
aGF0CisgICAgICAgIC8vIGVuZCBpbiBhIHRlcm1pbmFsIChSZXR1cm4vVGhyb3cvVGhyb3dSZWZl
cmVuY2VFcnJvcikuIEZvciBub3csIHdlCisgICAgICAgIC8vIHVzZSBhIGZpeHBvaW50IGZvcm11
bGF0aW9uIHNpbmNlIGxpdmVuZXNzIGlzIGEgcmFwaWQgYW5hbHlzaXMgd2l0aAorICAgICAgICAv
LyBjb252ZXJnZW5jZSBndWFyYW50ZWVkIGFmdGVyIE8oY29ubmVjdGl2aXR5KS4KKyAgICAgICAg
CisgICAgICAgIC8vIFN0YXJ0IGJ5IGFzc3VtaW5nIHRoYXQgZXZlcnl0aGluZyBpcyBkZWFkLgor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7
IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBibG9jay0+bGl2ZUF0SGVhZC5jbGVhcigpOwor
ICAgICAgICAgICAgYmxvY2stPmxpdmVBdFRhaWwuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9ja0luZGV4KTsKKyAgICAg
ICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoQmxvY2tJbmRleCBibG9ja0luZGV4
KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92
ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAgICAgICAgLy8gSGFzaFNldHMuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKKyAgICAgICAgbV9s
aXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246CisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gICAgbjogVXBzaWxvbigkcCwgQHgpCisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFuZCB1c2VzIEB4LgorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhpOgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vICAgIHA6IFBoaSgpCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Ug
c2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVzZSBub3IgYSBkZWYuCisgICAgICAgICAgICAv
LworICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2RlOgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwgQGMuCisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
Y2FzZSBVcHNpbG9uOiB7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+cGhpKCk7
CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkpOworICAgICAgICAgICAgICAgIG1f
bGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICAgICAgbV9saXZlLmFkZChub2RlLT5jaGls
ZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAgICAgICAgICAg
ICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRDaGlsZFVzZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAg
IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgYmxvY2st
PnNzYS0+bGl2ZUF0VGFpbC5hZGQobV9saXZlLmJlZ2luKCksIG1fbGl2ZS5lbmQoKSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7Cisg
ICAgICAgIG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG1f
Y2hhbmdlZDsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7Cit9OworCitib29sIHBlcmZvcm1E
Q0UoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJE
RkcgTGl2ZW5lc3MgQW5hbHlzaXMgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8TGl2ZW5l
c3NBbmFseXNpc1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2Vf
aAorI2RlZmluZSBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisv
LyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmxpdmVBdEhlYWQvbGl2ZUF0VGFpbC4KKworYm9v
bCBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xpdmVu
ZXNzQW5hbHlzaXNQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDYgKzUzOCwxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1fb3BJbmZvKTsKICAgICB9
CiAgICAgCisgICAgYm9vbCBoYXNQaGkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0g
VXBzaWxvbjsKKyAgICB9CisgICAgCisgICAgTm9kZSogcGhpKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNQaGkoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KG1fb3BJ
bmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNJZGVudGlmaWVyKCkKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAob3AoKSkgewpAQCAtNzczLDE2ICs3ODQsMTYgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICBtX29wSW5mbzIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7CiAgICAg
fQogICAgIAotICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2soKQorICAgIEJhc2ljQmxvY2sqJiB0
YWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgp
KTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8pOwor
ICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbyk7CiAg
ICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuQmxvY2soKQorICAgIEJhc2ljQmxv
Y2sqJiBub3RUYWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8yKTsKKyAg
ICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcEluZm8yKTsKICAg
ICB9CiAgICAgCiAgICAgU3dpdGNoRGF0YSogc3dpdGNoRGF0YSgpCkBAIC04MDUsNyArODE2LDcg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVu
c2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKGlzU3dpdGNoKCkpIHsKICAgICAgICAg
ICAgIGlmIChpbmRleCA8IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlSW5CbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlSW5CbG9jay5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVJbkJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2RlSW5CbG9j
ay5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK3ZvaWQgTm9kZUluQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNCb3R0b20oKSkgCisgICAgICAgIG91dC5wcmludCgiQk9UVE9NIik7CisgICAgZWxz
ZSBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAg
ICAgIG91dC5wcmludChtX25vZGUsICIgaW4gIiwgKm1fYmxvY2spOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlSW5CbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUluQmxvY2suaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUluQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHTm9kZUluQmxvY2tfaAorI2RlZmluZSBERkdOb2RlSW5CbG9j
a19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CitzdHJ1Y3QgTm9kZTsKKworY2xhc3MgTm9k
ZUluQmxvY2sgeworICAgIE5vZGVJbkJsb2NrKCkKKyAgICAgICAgOiBtX25vZGUoMCkKKyAgICAg
ICAgLCBtX2Jsb2NrKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBOb2RlSW5CbG9jayhOb2Rl
KiBub2RlLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX25vZGUobm9kZSkKKyAgICAg
ICAgLCBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUpOworICAgICAg
ICBBU1NFUlQobm9kZSAhPSB0b3BNYXJrZXIoKSk7CisgICAgICAgIEFTU0VSVChibG9jayk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBOb2RlSW5CbG9jayB0b3AoKQorICAgIHsKKyAgICAgICAg
Tm9kZUluQmxvY2sgcmVzdWx0OworICAgICAgICByZXN1bHQubV9ub2RlID0gdG9wTWFya2VyKCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNCb3R0b20o
KSBjb25zdCB7IHJldHVybiAhbV9ub2RlOyB9CisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0
dXJuIG1fbm9kZSA9PSB0b3BNYXJrZXIoKTsgfQorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJl
dHVybiAhaXNCb3R0b20oKSAmJiAhaXNUb3AoKTsgfQorICAgIAorICAgIE5vZGUqIG5vZGUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1f
bm9kZTsKKyAgICB9CisgICAgQmFzaWNCbG9jayogYmxvY2soKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fYmxvY2s7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBOb2RlSW5CbG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9ub2RlID09IG90aGVyLm1fbm9kZSAmJiBtX2Jsb2NrID09IG90aGVyLm1fYmxvY2s7
CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBOb2RlKiB0b3BNYXJrZXIoKSB7IHJldHVy
biBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KHN0YXRpY19jYXN0PGludHB0cl90PigxKSk7IH0KKyAgICAK
KyAgICBOb2RlKiBtX25vZGU7CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHTm9kZUluQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFpvbWJpZUhpbnQsIE5vZGVEb2Vz
Tm90RXhpdCkgXAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhOb3AsIE5vZGVEb2VzTm90RXhpdCkgXAorICAgIG1hY3JvKFVwc2lsb24sIE5vZGVEb2Vz
Tm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCiAgICAgbWFjcm8oUGhpLCBOb2RlRG9lc05v
dEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikgXAogICAgIG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhhbnRvbUxvY2FsLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MiwxNCAr
NDcyLDE5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDogewogICAgICAgICAg
ICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2Yg
Y29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3
aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCi0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgICAgIC8vIFBoaXMg
c2hvdWxkIG5vdCBiZSB2aXNpYmxlIGhlcmUgc2luY2Ugd2UncmUgaXRlcmF0aW5nIHRoZSBhbGwt
YnV0LVBoaSdzCiAgICAgICAgICAgICAvLyBwYXJ0IG9mIGJhc2ljIGJsb2Nrcy4KLSAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVcHNpbG9uOgor
ICAgICAgICAgICAgLy8gVGhlc2UgZG9uJ3QgZ2V0IGluc2VydGVkIHVudGlsIHdlIGdvIGludG8g
U1NBLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0U2NvcGU6CkBAIC01NDEsNyArNTQ2LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
TGFzdE5vZGVUeXBlOgotICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAg
IGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBT
U0FDb252ZXJzaW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFNTQUNvbnZl
cnNpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJTU0EgY29u
dmVyc2lvbiIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgICAgICwgbV9u
b25Ucml2aWFsUGhpcyhPcGVyYW5kc0xpa2UsIGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQpCisgICAgICAgICwgbV9jaGFuZ2VkKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0g
PT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBT
ZXRMb2NhbCdzIG5lZWQgZmx1c2hpbmcuIE5lZWQgdG8gZG8gdGhpcyB3aGlsZSB0aGUKKyAgICAg
ICAgLy8gUGhpIGdyYXBoIGlzIHN0aWxsIGludGFjdC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Cisg
ICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgt
LTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gRmx1c2gpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKG5vZGUp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxlICghbV9mbHVzaGVkTG9j
YWxPcFdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZmx1
c2hlZExvY2FsT3BXb3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgQVNTRVJUKG1fZmx1
c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKTsKKyAgICAgICAgICAgIERGR19OT0RFX0RPX1RP
X0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZEZsdXNoZWRMb2NhbEVkZ2UpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBFbGltaW5hdGUgYWxsIGR1cGxpY2F0ZSBvciBzZWxmLXBv
aW50aW5nIFBoaSBlZGdlcy4gVGhpcyBtZWFucyB0aGF0CisgICAgICAgIC8vIHdlIHRyYW5zZm9y
bToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gcDogUGhpKEBuMSwgQG4yLCBAbjMpCisgICAgICAg
IC8vCisgICAgICAgIC8vIGludG86CisgICAgICAgIC8vCisgICAgICAgIC8vIHA6IFBoaShAeCkK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gaWYgZWFjaCBAbmkgaW4ge0BuMSwgQG4yLCBAbjN9IGlz
IGVpdGhlciBlcXVhbCB0byBAcCB0byBpcyBlcXVhbAorICAgICAgICAvLyB0byBAeCwgZm9yIGV4
YWN0bHkgb25lIG90aGVyIEB4LiBBZGRpdGlvbmFsbHksIHRyaXZpYWwgUGhpcyAoaS5lLgorICAg
ICAgICAvLyBwOiBQaGkoQHgpKSBhcmUgZm9yd2FyZGVkLCBzbyB0aGF0IGlmIGhhdmUgYW4gZWRn
ZSB0byBzdWNoIEBwLCB3ZQorICAgICAgICAvLyByZXBsYWNlIGl0IHdpdGggQHguIFRoaXMgbG9v
cCBkb2VzIHRoaXMgZm9yIFBoaXMgb25seTsgbGF0ZXIgd2UgZG8KKyAgICAgICAgLy8gc3VjaCBm
b3J3YXJkaW5nIGZvciBQaGkgcmVmZXJlbmNlcyBmb3VuZCBpbiBvdGhlciBub2Rlcy4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gU2VlIEF5Y29jayBhbmQgSG9yc3Bvb2wgaW4gQ0MnMDAgZm9yIGEg
YmV0dGVyIGRlc2NyaXB0aW9uIG9mIHdoYXQKKyAgICAgICAgLy8gd2UncmUgZG9pbmcgaGVyZS4K
KyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJ
bmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSogcGhpID0gYmxvY2stPnBoaXNbcGhpSW5kZXhdOworICAgICAgICAgICAgICAg
ICAgICBpZiAocGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGZvcndhcmRQ
aGlDaGlsZHJlbihwaGkpOworICAgICAgICAgICAgICAgICAgICBkZWR1cGxpY2F0ZUNoaWxkcmVu
KHBoaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxl
IChtX2NoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gRm9yIGVhY2ggYmFzaWMgYmxvY2ss
IGZvciBlYWNoIGxvY2FsIGxpdmUgYXQgdGhlIGhlYWQgb2YgdGhhdCBibG9jaywKKyAgICAgICAg
Ly8gZmlndXJlIG91dCB3aGF0IG5vZGUgd2Ugc2hvdWxkIGJlIHJlZmVycmluZyB0byBpbnN0ZWFk
IG9mIHRoYXQgbG9jYWwuCisgICAgICAgIC8vIElmIGl0IHR1cm5zIG91dCB0byBiZSBhIG5vbi10
cml2aWFsIFBoaSwgbWFrZSBzdXJlIHRoYXQgdG8gY3JlYXRlIGFuCisgICAgICAgIC8vIFNTQSBQ
aGkgYW5kIFVwc2lsb25zIGluIHByZWRlY2Vzc29yIGJsb2Nrcy4gV2UgcmV1c2UKKyAgICAgICAg
Ly8gQmFzaWNCbG9jazo6dmFyaWFibGVzQXRIZWFkIGZvciB0cmFja2luZyB3aGljaCBub2RlcyB0
byByZWZlciB0by4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2Nr
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwor
ICAgICAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFBvaXNv
biB0aGlzIGVudHJ5IGluIHZhcmlhYmxlc0F0SGVhZCBiZWNhdXNlIHdlIGRvbid0CisgICAgICAg
ICAgICAgICAgICAgIC8vIHdhbnQgYW55b25lIHRvIHRyeSB0byByZWZlciB0byBpdCwgaWYgdGhl
IHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIGNhcHR1cmVkLgorICAgICAgICAg
ICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
UGhpOgorICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAg
Y2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpIHx8IG5vZGUtPm9wKCkgPT0g
U2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5j
aGlsZHJlbi5qdXN0T25lQ2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWRnZS5ub2RlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBhIG5vbi10cml2
aWFsIFBoaS4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBtX2luc2VydGlvblNldC5p
bnNlcnQoMCwgU3BlY05vbmUsIFBoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMu
c2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
cHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2pdOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIHVwc2lsb24gPSBwcmVkZWNlc3Nvci0+YXBwZW5kTm9uVGVybWluYWwo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNp
bG9uLCBPcEluZm8obm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRl
Y2Vzc29yLT52YXJpYWJsZXNBdFRhaWxbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUs
IE1vdkhpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWRbaV0gPSBub2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gQ29udmVydCBvcGVyYXRpb25zIG92ZXIgbG9jYWxzIGludG8gb3BlcmF0aW9ucyBv
dmVyIFNTQSBub2Rlcy4KKyAgICAgICAgLy8gLSBHZXRMb2NhbCBvdmVyIGNhcHR1cmVkIHZhcmlh
YmxlcyBsb3NlIHRoZWlyIHBoaXMuCisgICAgICAgIC8vIC0gR2V0TG9jYWwgb3ZlciB1bmNhcHR1
cmVkIHZhcmlhYmxlcyBkaWUgYW5kIGdldCByZXBsYWNlZCB3aXRoIHJlZmVyZW5jZXMKKyAgICAg
ICAgLy8gICB0byB0aGUgbm9kZSBzcGVjaWZpZWQgYnkgdmFyaWFibGVzQXRIZWFkLgorICAgICAg
ICAvLyAtIFNldExvY2FsIGdldHMgTm9kZU11c3RHZW5lcmF0ZSBpZiBpdCdzIGZsdXNoZWQuCisg
ICAgICAgIC8vIC0gRmx1c2ggbG9zZXMgaXRzIGNoaWxkcmVuIGJ1dCByZW1haW5zLCBiZWNhdXNl
IHdlIHdhbnQgdG8ga25vdyB3aGVuIGEKKyAgICAgICAgLy8gICBmbHVzaGVkIFNldExvY2FsJ3Mg
dmFsdWUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBhbHNvIG1ha2VzIGl0IHNpbXBsZXIKKyAg
ICAgICAgLy8gICB0byByZWFzb24gYWJvdXQgdGhlIGZvcm1hdCBvZiBhIGxvY2FsLCBzaW5jZSB3
ZSBjYW4ganVzdCBmb2xkIGl0IGludG8gdGhlCisgICAgICAgIC8vICAgYmFja3dhcmRzIGFuYWx5
c2lzIHRoYXQgTGl2ZW5lc3NBbmFseXNpc1BoYXNlIGRvZXMuIEFzIHBhcnQgb2YgdGhlCisgICAg
ICAgIC8vICAgYmFja3dhcmRzIGFuYWx5c2lzLCB3ZSBzYXkgdGhhdCB0aGUgdHlwZSBvZiBhIGxv
Y2FsIGNhbiBiZSBlaXRoZXIKKyAgICAgICAgLy8gICBpbnQzMiwgZG91YmxlLCB2YWx1ZSwgb3Ig
ZGVhZC4KKyAgICAgICAgLy8gLSBQaGFudG9tTG9jYWwgYmVjb21lcyBQaGFudG9tLCBhbmQgaXRz
IGNoaWxkIGlzIHdoYXRldmVyIGlzIHNwZWNpZmllZAorICAgICAgICAvLyAgIGJ5IHZhcmlhYmxl
c0F0SGVhZC4KKyAgICAgICAgLy8gLSBTZXRBcmd1bWVudCB0dXJucyBpbnRvIEdldExvY2FsLgor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7
IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
bm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgICAg
IGJsb2NrLT5hdChub2RlSW5kZXgpLT5yZXBsYWNlbWVudCA9IDA7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2st
PnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9n
cmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2V0
TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCBtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2Rl
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU11c3RHZW5l
cmF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1l
bnQgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIFBoYW50b21Mb2NhbDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldE5vZGUo
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGcmVlIGFsbCBwaGlzIGFuZCByZXNl
dCB2YXJpYWJsZXMgdmVjdG9ycy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4
XSk7CisgICAgICAgICAgICBibG9jay0+cGhpcy5jbGVhcigpOworICAgICAgICAgICAgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOwor
ICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxv
Y2stPnNzYSA9IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrOjpTU0FEYXRhKGJsb2NrKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gU1NBOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICB2b2lkIGZvcndhcmRQaGlDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsr
aSkgeworICAgICAgICAgICAgRWRnZSYgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOwor
ICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgbV9jaGFuZ2VkIHw9IGZvcndhcmRQaGlFZGdlKGVkZ2UpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIE5vZGUqIGZvcndhcmRQaGkoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IGZvciAoOzspIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAg
ICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5qdXN0T25l
Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBub2RlOworICAgICAgICAgICAgICAgIHJldHVybiBlZGdlLm5vZGUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIFNl
dExvY2FsOgorICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBib29sIGZvcndhcmRQaGlFZGdlKEVkZ2UmIGVkZ2UpCisgICAg
eworICAgICAgICBOb2RlKiBuZXdOb2RlID0gZm9yd2FyZChlZGdlLm5vZGUoKSk7CisgICAgICAg
IGlmIChuZXdOb2RlID09IGVkZ2Uubm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBlZGdlLnNldE5vZGUobmV3Tm9kZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGRlZHVwbGljYXRlQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyAr
K2kpIHsKKyAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOwor
ICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgaWYgKGVkZ2UgPT0gbm9kZSkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJl
bW92ZUVkZ2UoaS0tKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gaSArIDE7IGogPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2opIHsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGRyZW4uY2hpbGQoaikgPT0gZWRnZSkgeworICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGotLSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZm9yd2FyZE5vZGVDaGlsZHJlbihO
b2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFw
aCwgbm9kZSwgZm9yd2FyZE5vZGVFZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmb3J3YXJk
Tm9kZUVkZ2UoTm9kZSosIEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBpZiAoZWRnZS0+b3Ao
KSAKKyAgICAgICAgc3dpdGNoIChlZGdlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxPcChOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5v
ZGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wcy5hZGQo
bm9kZSk7CisgICAgICAgIG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5hcHBlbmQobm9kZSk7Cisg
ICAgfQorCisgICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChlZGdlLm5vZGUoKSk7CisgICAgfQorCisg
ICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fZmx1
c2hlZExvY2FsT3BzOworICAgIFZlY3RvcjxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0
OworICAgIGJvb2wgbV9jaGFuZ2VkOworfTsKKworYm9vbCBwZXJmb3JtU1NBQ29udmVyc2lvbihH
cmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBT
U0EgQ29udmVyc2lvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxTU0FDb252ZXJzaW9u
UGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U1NBQ29udmVyc2lvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorI2RlZmluZSBERkdTU0FDb252
ZXJzaW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFw
aDsKKworLy8gQ29udmVydCBUaHJlYWRlZENQUyBmb3JtIGludG8gU1NBIGZvcm0uIFRoaXMgcmVz
dWx0cyBpbiBhIGZvcm0gdGhhdCBoYXM6CisvLworLy8gLSBSb3VnaGx5IG1pbmltYWwgUGhpJ3Mu
IFdlIHVzZSB0aGUgQXljb2NrICYgSG9yc3Bvb2wgZml4cG9pbnQgZm9yCisvLyAgIGNvbnZlcnRp
bmcgdGhlIENQUyBtYXhpbWFsIFBoaXMgaW50byBTU0EgbWluaW1hbCBQaGlzLCB3aXRoIHRoZSBj
YXZlYXQKKy8vICAgdGhhdCBpcnJlZHVjaWJsZSBjb250cm9sIGZsb3cgbWF5IHJlc3VsdCBpbiBz
b21lIG1pc3NlZCBvcHBvcnR1bml0aWVzCisvLyAgIGZvciBQaGkgcmVkdWN0aW9uLgorLy8KKy8v
IC0gTm8gdXNlcyBvZiBHZXRMb2NhbC9TZXRMb2NhbCBleGNlcHQgZm9yIGNhcHR1cmVkIHZhcmlh
YmxlcyBhbmQgZmx1c2hlcy4KKy8vICAgQWZ0ZXIgdGhpcywgYW55IHJlbWFpbmluZyBTZXRMb2Nh
bCBtZWFucyBGbHVzaC4gRmx1c2ggbm9kZXMgYXJlCisvLyAgIGVsaW1pbmF0ZWQuIFBoYW50b21M
b2NhbHMgYmVjb21lIFBoYW50b21zLiBOb2RlcyBtYXkgbWF5IGhhdmUgY2hpbGRyZW4KKy8vICAg
dGhhdCBhcmUgaW4gYW5vdGhlciBiYXNpYyBibG9jay4KKy8vCisvLyAtIE1vdkhpbnRzIGFyZSB1
c2VkIGZvciBPU1IgaW5mb3JtYXRpb24sIGFuZCBhcmUgdGhlbXNlbHZlcyBtaW5pbWFsLgorLy8g
ICBBIE1vdkhpbnQgd2lsbCBvY2N1ciBhdCBzb21lIHBvaW50IGFmdGVyIHRoZSBhc3NpZ25pbmcs
IGFuZCBhdCBQaGkKKy8vICAgcG9pbnRzLgorLy8KKy8vIC0gVW5saWtlIGNvbnZlbnRpb25hbCBT
U0EgaW4gd2hpY2ggUGhpIGZ1bmN0aW9ucyByZWZlciB0byBwcmVkZWNlc3NvcnMKKy8vICAgYW5k
IHZhbHVlcywgb3VyIFNTQSB1c2VzIFVwc2lsb24gZnVuY3Rpb25zIHRvIGluZGljYXRlIHZhbHVl
cyBpbgorLy8gICBwcmVkZWNlc3NvcnMuIEEgbWVyZ2Ugd2lsbCBsb29rIGxpa2U6CisvLworLy8g
ICBsYWJlbEE6CisvLyAgICAgICBhOiBUaGluZ3koLi4uKQorLy8gICAgICAgYjogVXBzaWxvbigk
ZSwgQGEpCisvLyAgICAgICBKdW1wKGxhYmVsQykKKy8vCisvLyAgIGxhYmVsQjoKKy8vICAgICAg
IGM6IE90aGVyVGhpbmd5KC4uLikKKy8vICAgICAgIGQ6IFVwc2lsb24oJGUsIEBjKQorLy8gICAg
ICAgSnVtcChsYWJlbEMpCisvLworLy8gICBsYWJlbEM6CisvLyAgICAgICBlOiBQaGkoKQorLy8K
Ky8vICAgTm90ZSB0aGF0IHRoZSBQaGkgaGFzIG5vIGNoaWxkcmVuLCBidXQgdGhlIHByZWRlY2Vz
c29ycyBoYXZlIFVwc2lsb25zCisvLyAgIHRoYXQgaGF2ZSBhIHdlYWsgcmVmZXJlbmNlIHRvIHRo
ZSBQaGkgKCRlIGluc3RlYWQgb2YgQGU7IHdlIHN0b3JlIGl0CisvLyAgIGluIHRoZSBPcEluZm8g
cmF0aGVyIHRoYW4gdGhlIEFkamFjZW5jeUxpc3QpLiBUaGluayBvZiB0aGUgVXBzaWxvbgorLy8g
ICBhcyAiYXNzaWduaW5nIiB0byB0aGUgInZhcmlhYmxlIiBhc3NvY2lhdGVkIHdpdGggdGhlIFBo
aSwgYW5kIHRoYXQKKy8vICAgdGhpcyBpcyB0aGUgb25lIHBsYWNlIGluIFNTQSBmb3JtIHdoZXJl
IHlvdSBjYW4gaGF2ZSBtdWx0aXBsZQorLy8gICBhc3NpZ25tZW50cy4KKy8vCisvLyAgIFRoaXMg
aW1wbGllcyBzb21lIG90aGVyIGxvb3NlbmluZ3Mgb2YgU1NBLiBGb3IgZXhhbXBsZSwgYW4gVXBz
aWxvbgorLy8gICBtYXkgcHJlY2VkZSBhIFBoaSBpbiB0aGUgc2FtZSBiYXNpYyBibG9jazsgdGhp
cyBtYXkgYXJpc2UgYWZ0ZXIgQ0ZHCisvLyAgIHNpbXBsaWZpY2F0aW9uLiBBbHRob3VnaCBpdCdz
IHByb2ZpdGFibGUgZm9yIENGRyBzaW1wbGlmaWNhdGlvbiAob3IKKy8vICAgc29tZSBvdGhlciBw
aGFzZSkgdG8gcmVtb3ZlIHRoZXNlLCBpdCdzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuIEFzCisv
LyAgIHdlbGwsIHRoaXMgZm9ybSBhbGxvd3MgdGhlIFVwc2lsb24gdG8gYmUgaW4gYW55IGJsb2Nr
IHRoYXQgZG9taW5hdGVzCisvLyAgIHRoZSBwcmVkZWNlc3NvciBibG9jayBvZiB0aGUgUGhpLCB3
aGljaCBhbGxvd3MgZm9yIGJsb2NrIHNwbGl0dGluZyB0bworLy8gICBpZ25vcmUgdGhlIHBvc3Np
YmlsaXR5IG9mIGludHJvZHVjaW5nIGFuIGV4dHJhIGVkZ2UgYmV0d2VlbiB0aGUgUGhpCisvLyAg
IGFuZCB0aGUgcHJlZGVjZXNzb3IgKHRob3VnaCBub3JtYWwgU1NBIHdvdWxkIGFsbG93IHRoaXMs
IGFsc28sIHdpdGgKKy8vICAgdGhlIGNhdmVhdCB0aGF0IHRoZSBQaGkgcHJlZGVjZXNzb3IgYmxv
Y2sgbGlzdHMgd291bGQgaGF2ZSB0byBiZQorLy8gICB1cGRhdGVkKS4KKy8vCisvLyAgIFRoZSBl
YXNpZXN0IHdheSB0byBjb252ZXJ0IGZyb20gdGhpcyBTU0EgZm9ybSBpbnRvIGEgZGlmZmVyZW50
IFNTQQorLy8gICBmb3JtIGlzIHRvIHJlZG8gU1NBIGNvbnZlcnNpb24gZm9yIFBoaSBmdW5jdGlv
bnMuIFRoYXQgaXMsIHRyZWF0IGVhY2gKKy8vICAgUGhpIGluIG91ciBJUiBhcyBhIG5vbi1TU0Eg
dmFyaWFibGUgaW4gdGhlIGZvcmVpZ24gSVIgKHNvLCBhcyBhbgorLy8gICBhbGxvY2EgaW4gTExW
TSBJUiwgZm9yIGV4YW1wbGUpOyB0aGUgVXBzaWxvbnMgdGhhdCByZWZlciB0byB0aGUgUGhpCisv
LyAgIGJlY29tZSBzdG9yZXMgYW5kIHRoZSBQaGlzIHRoZW1zZWx2ZXMgYmVjb21lIGxvYWRzLgor
Ly8KKy8vICAgRnVuIGZhY3Q6IFVwc2lsb24gaXMgc28gbmFtZWQgYmVjYXVzZSBpdCBjb21lcyBi
ZWZvcmUgUGhpIGluIHRoZQorLy8gICBhbHBoYWJldC4gSXQgY2FuIGJlIHdyaXR0ZW4gYXMgIlki
LgorCitib29sIHBlcmZvcm1TU0FDb252ZXJzaW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
U1NBQ29udmVyc2lvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMTgsNiArMzE4LDI5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNoZWNrQW5k
U2V0KG1fZmxhZ3MsIG1fZmxhZ3MgfCBuZXdGbGFncyk7CiAgICAgfQogICAgIAorICAgIEZsdXNo
Rm9ybWF0IGZsdXNoRm9ybWF0KCkKKyAgICB7CisgICAgICAgIGlmICghc2hvdWxkVW5ib3hJZlBv
c3NpYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gRmx1c2hlZEpTVmFsdWU7CisgICAgICAgIAor
ICAgICAgICBpZiAoc2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCisgICAgICAgICAgICByZXR1cm4g
Rmx1c2hlZERvdWJsZTsKKyAgICAgICAgCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSBhcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRJbnQzMjsKKyAg
ICAgICAgCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0
aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRDZWxsOworICAgICAg
ICAKKyAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAg
ICAgICAgcmV0dXJuIEZsdXNoZWRCb29sZWFuOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gRmx1c2hlZEpTVmFsdWU7CisgICAgfQorICAgIAogcHJpdmF0ZToKICAgICAvLyBUaGlz
IGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlm
aWVkIHdpdGgKICAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhh
dmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTUyNDMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNCwxMSArMTA0LDggQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFtX2hpZ2hC
bG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fYmxvY2tzLmFk
ZChtX2hpZ2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9jayAiLCAqbV9oaWdoQmxv
Y2spKSk7Ci0gICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygpOwotICAgICAgICAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9hcmd1bWVudENoZWNrcywgbG93QmxvY2sobV9ncmFw
aC5ibG9jaygwKSkpOwogCiAgICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKTsKQEAg
LTEyOSw0MCArMTI2LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIAotICAgIHZvaWQgYWRk
Rmx1c2hlZExvY2FsT3BSb290cygpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IG1faGlnaEJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewotICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgIT0gRmx1c2gpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBhZGRGbHVzaGVkTG9jYWxPcChub2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygpCi0gICAgewotICAgICAgICB3aGlsZSAo
IW1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QubGFzdCgpOwotICAgICAgICAgICAgbV9m
bHVzaGVkTG9jYWxPcFdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgQVNTRVJUKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwg
YWRkRmx1c2hlZExvY2FsRWRnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBh
ZGRGbHVzaGVkTG9jYWxPcChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKG1fZmx1c2hl
ZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBt
X2ZsdXNoZWRMb2NhbE9wcy5hZGQobm9kZSk7Ci0gICAgICAgIG1fZmx1c2hlZExvY2FsT3BXb3Jr
bGlzdC5hcHBlbmQobm9kZSk7Ci0gICAgfQotICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsRWRnZShO
b2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgYWRkRmx1c2hlZExvY2FsT3AoZWRnZS5u
b2RlKCkpOwotICAgIH0KLSAgICAKICAgICB2b2lkIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMo
KQogICAgIHsKICAgICAgICAgLy8gV2hpbGUgY2hlY2tpbmcgYXJndW1lbnRzLCBldmVyeXRoaW5n
IGlzIGluIHRoZSBzdGFjay4KQEAgLTI4ODgsOSArMjg1MSw2IEBAIHByaXZhdGU6CiAgICAgTFZh
bHVlIG1fdGFnVHlwZU51bWJlcjsKICAgICBMVmFsdWUgbV90YWdNYXNrOwogICAgIAotICAgIEhh
c2hTZXQ8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BzOwotICAgIFZlY3RvcjxOb2RlKj4gbV9mbHVz
aGVkTG9jYWxPcFdvcmtsaXN0OwotICAgIAogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9p
bnQzMlZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fanNWYWx1ZVZhbHVlczsK
ICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKSW5kZXg6IFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUyNDMyKQorKysg
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzYsNiArMzYsNyBAQAogCQkwRkQ4MUFDNTE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZl
Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
ODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwRkREQkZBNzE2NjZERkEzMDBDNTVGRUYgLyogU3Ry
aW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNw
cCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFt
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZB
NjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLzsgfTsKKwkJMEZFNTA1
NTcxNzg3QTgwNjAwQjM1RjhDIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2Vy
dGlvbi5oICovOyB9OwogCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRDE1
NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi87IH07CiAJCTE0M0Y2MTIwMTU2NUYwRjkw
MERCNTE0QSAvKiBSQU1TaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0
NiAvKiBSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0Njk0MTkwMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUyLDYgKzM1
Myw3IEBACiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmlu
Z1ByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTYx
NjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5zZXJ0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUMz
RUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0
ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFEMTU2NUYw
RjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJBTVNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNGNjEx
RTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSQU1TaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODUsNiAr
Nzg3LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyogSGFzaFRyYWl0cy5oICov
LAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1iZXIuaCAqLywKIAkJCQlB
OEE0NzJCQzE1MUE4MjVBMDA0MTIzRkYgLyogSW5saW5lQVNNLmggKi8sCisJCQkJMEZFNTA1NTYx
Nzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovLAogCQkJCUE4QTQ3MkJFMTUxQTgyNUEw
MDQxMjNGRiAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQThBNDcyQkYxNTFBODI1QTAwNDEyM0ZG
IC8qIEludDMyQXJyYXkuaCAqLywKIAkJCQlBOEE0NzJCRDE1MUE4MjVBMDA0MTIzRkYgLyogSW50
OEFycmF5LmggKi8sCkBAIC0xMTgxLDYgKzExODQsNyBAQAogCQkJCUE4QTQ3M0U4MTUxQTgyNUIw
MDQxMjNGRiAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFQTE1MUE4
MjVCMDA0MTIzRkYgLyogTUQ1LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDU0OTdBRDE1ODU3RDAz
MDBCNUJDMzAgLyogTWVkaWFUaW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1NzE3ODdB
ODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjFEMTE1NDE1
RkYxMUJFMDAyNkU5MDggLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0RkQ4NTU0NzE2MTMzRTBFMDBDNUI3MDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uQXJy
YXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlGM0ZCQzcxRTE2MUFGN0JGMDBCQjRC
RDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICov
LApJbmRleDogU291cmNlL1dURi93dGYvSGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL1dURi93dGYvSGFz
aFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMiArODYsMTkgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHRl
bXBsYXRlIGFyZ3VtZW50cyBzbyB0aGF0IGNhbGxlcnMKICAgICAgICAgLy8gY2FuIGp1c3QgcGFz
cyB0aGUgdHJhbnNsYXRvciBhbmQgbGV0IHRoZSBjb21waWxlciBkZWR1Y2UgVC4KICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IEFkZFJlc3VsdCBh
ZGQoY29uc3QgVCYpOworICAgICAgICAKKyAgICAgICAgLy8gQXR0ZW1wdHMgdG8gYWRkIGEgbGlz
dCBvZiB0aGluZ3MgdG8gdGhlIHNldC4gUmV0dXJucyB0cnVlIGlmIGFueSBvZgorICAgICAgICAv
LyB0aGVtIGFyZSBuZXcgdG8gdGhlIHNldC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgc2V0IGlzIHVu
Y2hhbmdlZC4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgorICAgICAg
ICBib29sIGFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpOwogCiAgICAg
ICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYpOwogICAgICAgICB2b2lkIHJlbW92ZShp
dGVyYXRvcik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJik7CisgICAgICAgIAorICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgSGFzaFNldCYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIHZvaWQgZGVsZXRlQWxsVmFsdWVzPD4oY29uc3QgSGFzaFNldCYpOwpAQCAtMTkxLDYg
KzE5OCwxNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yVHlwZT4KKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JU
eXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAh
PSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gYWRkKCppdGVyKS5pc05ld0Vu
dHJ5OworICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogICAgIGlubGluZSB2b2lkIEhhc2hTZXQ8
VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICB7CiAgICAgICAgIGlmIChpdC5tX2lt
cGwgPT0gbV9pbXBsLmVuZCgpKQpAQCAtMjU2LDYgKzI3MywxOCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgICAgIHZlY3RvcltpXSA9ICppdDsKICAgICB9ICAKIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBIYXNoU2V0JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIGlmIChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVu
ZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmICghb3RoZXIuY29udGFpbnMoKml0ZXIpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Okhhc2hTZXQ7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL1dURi93dGYv
SGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNzAsNiArMTE3MCw4IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgIHsKICAgICAgICAgLy8gQ29weSB0aGUgaGFzaCB0YWJsZSB0aGUgZHVtYiB3
YXksIGJ5IGFkZGluZyBlYWNoIGVsZW1lbnQgdG8gdGhlIG5ldyB0YWJsZS4KICAgICAgICAgLy8g
SXQgbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgdG8gY29weSB0aGUgdGFibGUgc2xvdHMsIGJ1dCBp
dCdzIG5vdCBjbGVhciB0aGF0IGVmZmljaWVuY3kgaXMgbmVlZGVkLgorICAgICAgICAvLyBGSVhN
RTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFs
eXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQogICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBv
dGhlci5lbmQoKTsKICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9IG90aGVyLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGFkZCgqaXQpOwpAQCAtMTIwOSw2ICsx
MjExLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0
eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBIYXNoVGFibGU8S2V5LCBW
YWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4mIEhhc2hU
YWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJh
aXRzPjo6b3BlcmF0b3I9KGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpCiAgICAgeworICAgICAgICAv
LyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRp
YyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQogICAgICAgICBIYXNoVGFibGUgdG1wKG90
aGVyKTsKICAgICAgICAgc3dhcCh0bXApOwogICAgICAgICByZXR1cm4gKnRoaXM7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9J
bnNlcnRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbnNlcnRpb25faAorI2RlZmluZSBJbnNlcnRp
b25faAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIElu
c2VydGlvbiB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uKCkgeyB9CisgICAgCisgICAgSW5zZXJ0
aW9uKHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisg
ICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzaXpl
X3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgVCBlbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
SW5zZXJ0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZGV4IDwg
b3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHNpemVfdCBtX2luZGV4
OworICAgIFQgbV9lbGVtZW50OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0VmVjdG9y
VHlwZSwgdHlwZW5hbWUgSW5zZXJ0aW9uVmVjdG9yVHlwZT4KK3ZvaWQgZXhlY3V0ZUluc2VydGlv
bnMoVGFyZ2V0VmVjdG9yVHlwZSYgdGFyZ2V0LCBJbnNlcnRpb25WZWN0b3JUeXBlJiBpbnNlcnRp
b25zKQoreworICAgIGlmICghaW5zZXJ0aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICB0YXJnZXQuZ3Jvdyh0YXJnZXQuc2l6ZSgpICsgaW5zZXJ0aW9ucy5zaXplKCkpOworICAgIHNp
emVfdCBsYXN0SW5kZXggPSB0YXJnZXQuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGluZGV4SW5J
bnNlcnRpb25zID0gaW5zZXJ0aW9ucy5zaXplKCk7IGluZGV4SW5JbnNlcnRpb25zLS07KSB7Cisg
ICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc10u
aW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOworICAgICAgICBzaXplX3QgaW5kZXhPZmZzZXQg
PSBpbmRleEluSW5zZXJ0aW9ucyArIDE7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0SW5k
ZXg7IC0taSA+IGZpcnN0SW5kZXg7KQorICAgICAgICAgICAgdGFyZ2V0W2ldID0gdGFyZ2V0W2kg
LSBpbmRleE9mZnNldF07CisgICAgICAgIHRhcmdldFtmaXJzdEluZGV4XSA9IGluc2VydGlvbnNb
aW5kZXhJbkluc2VydGlvbnNdLmVsZW1lbnQoKTsKKyAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJ
bmRleDsKKyAgICB9CisgICAgaW5zZXJ0aW9ucy5yZXNpemUoMCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6Okluc2VydGlvbjsKK3VzaW5nIFdURjo6ZXhlY3V0ZUluc2Vy
dGlvbnM7CisKKyNlbmRpZiAvLyBJbnNlcnRpb25faAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206407</attachid>
            <date>2013-07-10 12:30:08 -0700</date>
            <delta_ts>2013-07-10 12:37:27 -0700</delta_ts>
            <desc>it&apos;s getting real</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>161911</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9j
YWxGaXJzdFRpbWUob3BlcmFuZCwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFy
KCkKKyAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IHZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgp
OworICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBmaWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2IEBAIHZvaWQgQWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2kKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3Ry
YWN0VmFsdWU+OjppdGVyYXRvciBpdGVyID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQu
YmVnaW4oKTsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9y
IGVuZCA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmVuZCgpOworICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgZm9yTm9kZShpdGVyLT5rZXkp
ID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUuaGFzQ2xvYmJlcmFi
bGVTdGF0ZSgpKQorICAgICAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorICAgIAogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBm
YWxzZTsKICAgICBiYXNpY0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsKICAgICBtX2Jsb2Nr
ID0gYmFzaWNCbG9jazsKQEAgLTgzLDYgKzkzLDE2IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKEJhc2kKICAgICBtX2N1cnJlbnROb2RlID0gMDsKIH0KIAorc3RhdGljIHZv
aWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBI
YXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3sKKyAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICAKKyAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGxpdmUuYmVnaW4oKTsKKyAgICBIYXNoU2V0
PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbGl2ZS5lbmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBl
bmQ7ICsraXRlcikKKyAgICAgICAgdmFsdWVzLmFkZCgqaXRlciwgQWJzdHJhY3RWYWx1ZSgpKTsK
K30KKwogdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKIHsKICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxvY2soMCk7CkBAIC0xNTEsNiArMTcxLDEwIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICNlbmRpZgogICAgICAg
ICB9CiAgICAgICAgIGJsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9j
ay0+c3NhLT52YWx1ZXNBdEhlYWQsIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpOworICAgICAgICAg
ICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwsIGJsb2NrLT5zc2EtPmxp
dmVBdFRhaWwpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNzIsMjAgKzE5NiwzOSBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNCiAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIUFTU0VS
VF9ESVNBQkxFRCkgewotICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50
KSB7CisgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBUaHJl
YWRlZENQUzogeworICAgICAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVu
dCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGFyZ3VtZW50ICV6dS5cbiIs
IGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0
YXRlIGZvciBhcmd1bWVudCAlenUuXG4iLCBhcmd1bWVudCk7CiAjZW5kaWYKLSAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVz
dGluYXRpb24sIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24s
IG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBz
dGF0ZSBmb3IgbG9jYWwgJXp1LlxuIiwgbG9jYWwpOworICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKICNlbmRp
ZgotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVz
QXRUYWlsLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0
VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFi
bGVzLmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFNTQTogeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0g
YmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5iZWdpbigpOworICAgICAgICAgICAgSGFzaFNldDxOb2Rl
Kj46Oml0ZXJhdG9yIGVuZCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRBaWwuZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKCppdGVyKS0+dmFsdWUubWVyZ2UoZm9y
Tm9kZShub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTU4Niw2ICsxNjI5LDE2IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFBoaToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5t
X2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3VsZCBo
YXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBVcHNpbG9uOgorICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGZv
ck5vZGUobm9kZS0+cGhpKCkpID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAg
ICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQnJlYWtwb2lu
dDoKQEAgLTE2NzksNyArMTczMiw3IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJTdHJ1Y3QKICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQorYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZh
bHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTc2NywyMSArMTgyMCw0NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQor
Ym9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0
bykKIHsKICAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRz
KCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBBU1NF
UlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gdG8tPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAKICAgICBib29sIGNoYW5nZWQgPSBmYWxz
ZTsKICAgICAKLSAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZnJvbS0+
dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGFyZ3VtZW50KTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nr
cyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8t
PnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCkpOworICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAg
ICBjYXNlIFRocmVhZGVkQ1BTOiB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKyth
cmd1bWVudCkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCksIHRvLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1l
bnQpLCBmcm9tLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20t
PnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9j
YWwpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyhk
ZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBmb3IgKHNpemVf
dCBsb2NhbCA9IDA7IGxvY2FsIDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCk7ICsrbG9jYWwpIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+
dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxv
Y2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICAKKyAgICBjYXNlIFNTQTogeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gZnJvbS0+dmFyaWFibGVzQXRUYWlsLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gdG8tPnZhcmlhYmxlc0F0SGVhZFtpXS5tZXJnZShmcm9tLT52YXJp
YWJsZXNBdFRhaWxbaV0pOworICAgICAgICAKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJh
dG9yIGl0ZXIgPSB0by0+c3NhLT5saXZlQXRIZWFkLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+OjppdGVyYXRvciBlbmQgPSB0by0+c3NhLT5saXZlQXRIZWFkLmVuZCgpOworICAgICAg
ICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9
ICppdGVyOworICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+c3NhLT52YWx1ZXNBdEhlYWQuZmlu
ZChub2RlKS0+dmFsdWUubWVyZ2UoCisgICAgICAgICAgICAgICAgZnJvbS0+c3NhLT52YWx1ZXNB
dFRhaWwuZmluZChub2RlKS0+dmFsdWUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCF0by0+Y2ZhSGFzVmlz
aXRlZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
amFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksMTUgQEAgcHVibGljOgog
ICAgIAogICAgIEVkZ2UgY2hpbGQxVW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV93b3Jkc1sw
XTsgfQogICAgIAorICAgIEVkZ2UganVzdE9uZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghIWNoaWxkMSgpICYmICFjaGlsZDIoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjaGls
ZDMoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEVkZ2UoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXplKEVkZ2UgY2hp
bGQxLCBFZGdlIGNoaWxkMiwgRWRnZSBjaGlsZDMpCiAgICAgewogICAgICAgICBjaGlsZCgwKSA9
IGNoaWxkMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25l
ZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2Fs
cykKKyAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKKyAgICAsIGluZGV4KE5vQmxv
Y2spCisgICAgLCBpc09TUlRhcmdldChmYWxzZSkKKyAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2Up
CisgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQorICAgICwgY2ZhRm91bmRDb25zdGFudHMo
ZmFsc2UpCisgICAgLCBjZmFEaWRGaW5pc2godHJ1ZSkKKyAgICAsIGNmYUJyYW5jaERpcmVjdGlv
bihJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAsIGlz
TGlua2VkKGZhbHNlKQorI2VuZGlmCisgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKKyAgICAsIHZh
cmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhcmlhYmxlc0F0
VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1
bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscykKK3sKK30KKworQmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKSB7IH0KKwordm9pZCBCYXNp
Y0Jsb2NrOjplbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQoreworICAgIHZhcmlh
Ymxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2YXJpYWJsZXNBdFRh
aWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxv
Y2FscyhuZXdOdW1Mb2NhbHMpOworICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVt
TG9jYWxzKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjppc0luUGhpcyhOb2RlKiBub2RlKSBjb25z
dAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAocGhpc1tpXSA9PSBub2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjppc0luQmxvY2soTm9k
ZSogbXlOb2RlKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9kZXMo
KTsgKytpKSB7CisgICAgICAgIGlmIChub2RlKGkpID09IG15Tm9kZSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQmFzaWNCbG9j
azo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiIyIsIGlu
ZGV4KTsKK30KKworQmFzaWNCbG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICA6IGZsdXNoRm9ybWF0QXRIZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZCkKKyAgICAsIGZsdXNoRm9ybWF0QXRUYWlsKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZCkKKyAgICAsIGF2YWlsYWJpbGl0eUF0SGVhZChPcGVyYW5kc0xpa2UsIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBhdmFpbGFiaWxpdHlBdFRhaWwoT3BlcmFuZHNM
aWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQoreworfQorCitCYXNpY0Jsb2NrOjpTU0FEYXRh
Ojp+U1NBRGF0YSgpIHsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAjaW5j
bHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJPcGVyYW5kcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCkBAIC00NCw0MiArNDYsMTYgQEAgY2xhc3MgSW5zZXJ0aW9uU2V0OwogdHlwZWRlZiBW
ZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKIAogc3RydWN0IEJhc2ljQmxv
Y2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKLSAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5
dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQot
ICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKLSAgICAgICAgLCBpbmRleChO
b0Jsb2NrKQotICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICAgICAsIGNmYUhhc1Zp
c2l0ZWQoZmFsc2UpCi0gICAgICAgICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxzZSkKLSAgICAgICAg
LCBjZmFGb3VuZENvbnN0YW50cyhmYWxzZSkKLSAgICAgICAgLCBjZmFEaWRGaW5pc2godHJ1ZSkK
LSAgICAgICAgLCBjZmFCcmFuY2hEaXJlY3Rpb24oSW52YWxpZEJyYW5jaERpcmVjdGlvbikKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICwgaXNMaW5rZWQoZmFsc2UpCi0jZW5kaWYKLSAg
ICAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVt
QXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzKQotICAgICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51
bUxvY2FscykKLSAgICAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMp
Ci0gICAgewotICAgIH0KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVu
c2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKTsKKyAgICB+QmFzaWNCbG9j
aygpOwogICAgIAotICAgIH5CYXNpY0Jsb2NrKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKLSAgICB7Ci0gICAgICAgIHZh
cmlhYmxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICAgICAgdmFyaWFi
bGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAgICAgICB2YWx1ZXNBdEhl
YWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgICAgIHZhbHVlc0F0VGFpbC5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICB9CisgICAgdm9pZCBlbnN1cmVMb2NhbHModW5z
aWduZWQgbmV3TnVtTG9jYWxzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
IXNpemUoKTsgfQogICAgIE5vZGUqJiBhdChzaXplX3QgaSkgeyByZXR1cm4gbV9ub2Rlc1tpXTsg
fQogICAgIE5vZGUqIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX25vZGVzW2ldOyB9Cisg
ICAgTm9kZSomIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9k
ZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KICAgICBOb2Rl
KiBsYXN0KCkgY29uc3QgeyByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KICAgICB2b2lkIHJlc2l6
ZShzaXplX3Qgc2l6ZSkgeyBtX25vZGVzLnJlc2l6ZShzaXplKTsgfQpAQCAtOTYsMjMgKzcyLDgg
QEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIH0KICAgICBi
b29sIGlzUGhpSW5kZXgoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGkgPCBwaGlzLnNpemUoKTsg
fQogICAgIAotICAgIGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKHBoaXNbaV0gPT0gbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNJ
bkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtTm9kZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZShpKSA9PSBt
eU5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0
OworICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCiAgICAgdW5z
aWduZWQgbnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9
CiAgICAgCkBAIC0xMzAsMTAgKzkxLDEyIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRl
ZDxCYXNpY0Jsb2MKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklO
RV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCi0gICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJp
bnQoIiMiLCBpbmRleCk7Ci0gICAgfQorI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRl
bXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZh
bHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBs
YXRlUG9zdCBOb2RlKiBhcHBlbmROb25UZXJtaW5hbChHcmFwaCYsIFNwZWN1bGF0ZWRUeXBlIHZh
bHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOworICAgIERGR19WQVJJQURJQ19URU1QTEFURV9G
VU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5E
X05PREUKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAg
CiAgICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJsb2NrIGxpbmtpbmcg
YW5kIE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5IG1lYW5pbmdsZXNzCiAgICAgLy8gZm9yIG90aGVy
IHB1cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4KQEAgLTE2MCw2ICsxMjMsMjEgQEAgc3RydWN0IEJh
c2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIAogICAgIE9wZXJhbmRzPEFic3Ry
YWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1
ZXNBdFRhaWw7CisgICAgCisgICAgc3RydWN0IFNTQURhdGEgeworICAgICAgICBPcGVyYW5kczxG
bHVzaEZvcm1hdD4gZmx1c2hGb3JtYXRBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9y
bWF0PiBmbHVzaEZvcm1hdEF0VGFpbDsKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJp
bGl0eUF0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0VGFpbDsK
KyAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKKyAgICAgICAgSGFzaFNldDxOb2Rl
Kj4gbGl2ZUF0VGFpbDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFs
dWVzQXRIZWFkOworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNB
dFRhaWw7CisgICAgICAgIAorICAgICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKKyAgICAgICAg
flNTQURhdGEoKTsKKyAgICB9OworICAgIE93blB0cjxTU0FEYXRhPiBzc2E7CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE1MjQzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVO
RF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKIAorI2RlZmluZSBERkdfREVG
SU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZh
bHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKKyAgICB0ZW1wbGF0ZVBy
ZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5k
Tm9uVGVybWluYWwoR3JhcGgmIGdyYXBoLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1z
Q29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3Jh
cGguYWRkTm9kZSh0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAorICAgICAgICBh
cHBlbmQobGFzdCgpKTsgXAorICAgICAgICBhdChzaXplKCkgLSAyKSA9IHJlc3VsdDsgXAorICAg
ICAgICByZXR1cm4gcmVzdWx0OyBcCisgICAgfQorICAgIERGR19WQVJJQURJQ19URU1QTEFURV9G
VU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5E
X05PREUKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9u
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmxv
Y2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KEdyYXBoJiBncmFwaCkKKyAgICA6IG1f
Z3JhcGgoZ3JhcGgpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25T
ZXQoKSB7IH0KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KGNvbnN0IEJsb2NrSW5z
ZXJ0aW9uJiBpbnNlcnRpb24pCit7CisgICAgbV9pbnNlcnRpb25zLmFwcGVuZChpbnNlcnRpb24p
OworfQorCit2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNz
UmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrKQoreworICAgIGluc2VydChCbG9ja0luc2VydGlvbihp
bmRleCwgYmxvY2spKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2Vy
dChzaXplX3QgaW5kZXgpCit7CisgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRS
ZWYobmV3IEJhc2ljQmxvY2soCisgICAgICAgIFVJTlRfTUFYLAorICAgICAgICBtX2dyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgbV9n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICBp
bnNlcnQoaW5kZXgsIGJsb2NrKTsKKyAgICByZXR1cm4gYmxvY2suZ2V0KCk7Cit9CisKK0Jhc2lj
QmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3Jl
KQoreworICAgIHJldHVybiBpbnNlcnQoYmxvY2stPmluZGV4KTsKK30KKworYm9vbCBCbG9ja0lu
c2VydGlvblNldDo6ZXhlY3V0ZSgpCit7CisgICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25z
IHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8KKyAgICAvLyBz
b3J0IHRoZW0gYmVmb3JlIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4KKyAgICBzdGQ6
OnNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CisKKyAgICBl
eGVjdXRlSW5zZXJ0aW9ucyhtX2dyYXBoLm1fYmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAor
ICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vz
c2FyeSBidXQgaXQncworICAgIC8vIGhlYWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9t
IGdyb3dpbmcuCisgICAgdW5zaWduZWQgdGFyZ2V0SW5kZXggPSAwOworICAgIGZvciAodW5zaWdu
ZWQgc291cmNlSW5kZXggPSAwOyBzb3VyY2VJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OykgeworICAgICAgICBSZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
W3NvdXJjZUluZGV4KytdOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbdGFyZ2V0SW5kZXgrK10gPSBibG9jazsKKyAg
ICB9CisgICAgbV9ncmFwaC5tX2Jsb2Nrcy5yZXNpemUodGFyZ2V0SW5kZXgpOworICAgIAorICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkK
KyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tpXS0+aW5kZXggPSBpOworICAgIAorICAgIC8vIEFu
ZCBmaW5hbGx5LCBpbnZhbGlkYXRlIGFsbCBhbmFseXNlcyB0aGF0IHJlbHkgb24gdGhlIENGRy4K
KyAgICBtX2dyYXBoLmludmFsaWRhdGVDRkcoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0
aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2Nr
SW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgREZHQmxvY2tJbnNlcnRpb25TZXRfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIFdURjo6
SW5zZXJ0aW9uPFJlZlB0cjxCYXNpY0Jsb2NrPiA+IEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBC
bG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoR3JhcGgm
IGdyYXBoKTsKKyAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGluc2Vy
dChjb25zdCBCbG9ja0luc2VydGlvbiYgaW5zZXJ0aW9uKTsKKyAgICB2b2lkIGluc2VydChzaXpl
X3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2spOworICAgIEJhc2ljQmxvY2sq
IGluc2VydChzaXplX3QgaW5kZXgpOworICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNp
Y0Jsb2NrKiBiZWZvcmUpOworICAgIAorICAgIGJvb2wgZXhlY3V0ZSgpOworCitwcml2YXRlOgor
ICAgIEdyYXBoJiBtX2dyYXBoOworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNl
cnRpb25zOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja0luc2VydGlvblNldF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTUyNDMyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjEyLDcgKzIxMiwxMCBAQCBlbnVtIEdyYXBoRm9ybSB7CiAgICAgLy8KICAgICAvLyBUaHJlYWRl
ZENQUyBmb3JtIGlzIHN1aXRhYmxlIGZvciBkYXRhIGZsb3cgYW5hbHlzaXMgKENGQSwgcHJlZGlj
dGlvbgogICAgIC8vIHByb3BhZ2F0aW9uKSwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgYW5kIGNvZGUg
Z2VuZXJhdGlvbi4KLSAgICBUaHJlYWRlZENQUworICAgIFRocmVhZGVkQ1BTLAorICAgIAorICAg
IC8vIFNTQSBmb3JtLiBTZWUgREZHU1NBQ29udmVyc2lvblBoYXNlLmggZm9yIGEgZGVzY3JpcHRp
b24uCisgICAgU1NBCiB9OwogCiAvLyBEZXNjcmliZXMgdGhlIHN0YXRlIG9mIHRoZSBVbmlvbkZp
bmQgc3RydWN0dXJlIG9mIFZhcmlhYmxlQWNjZXNzRGF0YSdzLgpAQCAtMjUwLDYgKzI1MywxOSBA
QCBpbmxpbmUgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXNGb3JJc1Byb3ZlCiAgICAgcmV0dXJuIGlz
UHJvdmVkID8gSXNQcm92ZWQgOiBOZWVkc0NoZWNrOwogfQogCitlbnVtIEtpbGxTdGF0dXMgeyBE
b2VzTm90S2lsbCwgRG9lc0tpbGwgfTsKKworaW5saW5lIGJvb2wgZG9lc0tpbGwoS2lsbFN0YXR1
cyBraWxsU3RhdHVzKQoreworICAgIEFTU0VSVChraWxsU3RhdHVzID09IERvZXNOb3RLaWxsIHx8
IGtpbGxTdGF0dXMgPT0gRG9lc0tpbGwpOworICAgIHJldHVybiBraWxsU3RhdHVzID09IERvZXNL
aWxsOworfQorCitpbmxpbmUgS2lsbFN0YXR1cyBraWxsU3RhdHVzRm9yRG9lc0tpbGwoYm9vbCBk
b2VzS2lsbCkKK3sKKyAgICByZXR1cm4gZG9lc0tpbGwgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxs
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogYm9vbCBjaGVja0FuZFNl
dChUJiBsZWZ0LCBVIHJpZ2h0KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2lu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZH
QmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJj
cml0aWNhbCBlZGdlIGJyZWFraW5nIikKKyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQW4gZWRnZSBB
LT5CIGlzIGNyaXRpY2FsIGlmIEEgaGFzIG11bHRpcGxlIHN1Y2Nlc3NvciBhbmQgQiBoYXMgbXVs
dGlwbGUKKyAgICAgICAgICAgIC8vIHByZWRlY2Vzc29ycy4gVGh1cyB3ZSBmYWlsIGVhcmx5IGlm
IHdlIGRvbid0IGhhdmUgbXVsdGlwbGUgc3VjY2Vzc29ycy4KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxv
Y2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
KiBzdWNjZXNzb3IgPSAmYmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgICAgICBpZiAo
c3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMuc2l6ZSgpIDw9IDEpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJyZWFrQ3JpdGlj
YWxFZGdlKGJsb2NrLCBzdWNjZXNzb3IpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBicmVha0NyaXRpY2FsRWRnZSgKKyAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2ssIHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4LCBCYXNpY0Jsb2NrKiogc3VjY2Vzc29y
KQorICAgIHsKKyAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOworICAgICAgICAKKyAgICAgICAg
QmFzaWNCbG9jayogcGFkID0gbV9wYWRzLmdldCgqc3VjY2Vzc29yKTsKKyAgICAgICAgaWYgKCFw
YWQpIHsKKyAgICAgICAgICAgIHBhZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZSgqc3Vj
Y2Vzc29yKTsKKyAgICAgICAgICAgIHBhZC0+YXBwZW5kTm9kZShtX2dyYXBoLCBTcGVjTm9uZSwg
SnVtcCwgT3BJbmZvKCpzdWNjZXNzb3IpKTsKKyAgICAgICAgICAgIG1fcGFkcy5hZGQoKnN1Y2Nl
c3NvciwgcGFkKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgKnN1Y2Nlc3NvciA9IHBh
ZDsKKyAgICB9CisgICAgCisgICAgQmxvY2tJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cisg
ICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayo+IG1fcGFkczsKK307CisKK2Jvb2wg
cGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENyaXRpY2FsIEVkZ2UgQnJlYWtpbmcgUGhhc2Ui
KTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZT4oZ3JhcGgp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRn
ZUJyZWFraW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKyNk
ZWZpbmUgREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBJbnNlcnRzIGR1bW15IGJhc2ljIGJsb2Nr
cyB0byBicmVhayBjcml0aWNhbCBlZGdlcy4gQW4gZWRnZSBBLT5CIGlzCisvLyBjcml0aWNhbCBp
ZiBBIGhhcyBtdWx0aXBsZSBzdWNjZXNzb3JzIGFuZCBCIGhhcyBtdWx0aXBsZSBwcmVkZXNzb3Jz
LgorCitib29sIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhHcmFwaCYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAg
IEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAogICAgICAg
ICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBAIC03NSwxMCArNzcsMjkgQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB3aGlsZSAoIW1fd29ya2xpc3QuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAg
ICAgICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5s
ZXNzIGl0J3MgcmVmJ2VkLgotICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9n
cmFwaCwgbm9kZSwgY291bnRFZGdlKTsKKyAgICAgICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0
KCk7CisgICAgICAgICAgICAgICAgbV93b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJl
IG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCisgICAgICAgICAgICAgICAgREZH
X05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291bnRFZGdlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNT
QSkgeworICAgICAgICAgICAgICAgIC8vIEZpbmQgUGhpLT5VcHNpbG9uIGVkZ2VzLCB3aGljaCBh
cmUgcmVwcmVzZW50ZWQgYXMgbWV0YS1kYXRhIGluIHRoZQorICAgICAgICAgICAgICAgIC8vIFVw
c2lsb24uCisgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXpl
KCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5waGkoKS0+c2hvdWxkR2VuZXJhdGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudE5vZGUobm9kZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewpAQCAtOTUsNyAr
MTE2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLmlzUHJvdmVkKCkgfHwgbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2soKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgVUludDMyVG9OdW1iZXIgaXMg
ZGVhZCBidXQgaXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZCBpc24ndDsgaWYg
c28gdGhlbiB3ZSBzaG91bGQgTW92SGludCB0aGUgY2hpbGQuCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpCkBAIC0xMjYsNyArMTQ3
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkg
KyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XTsK
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSB8fCBlZGdlLmlzUHJvdmVk
KCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWVkZ2UgfHwgZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhh
bnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgZWRnZSk7CkBAIC0xNTgsMjEgKzE3OSwyNSBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgYW4gInVucHJvdmVkIiB1bnR5cGVk
IHVzZSBmb3IgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlLiBUaGUgQ0ZBCiAgICAgICAgIC8vIHdp
bGwganVzdCBub3QgaGF2ZSBnb3R0ZW4gYXJvdW5kIHRvIGl0LgotICAgICAgICBpZiAoZWRnZS5p
c1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgIGlmIChl
ZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYg
KCFlZGdlLT5wb3N0Zml4UmVmKCkpCiAgICAgICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChlZGdl
Lm5vZGUoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY291bnROb2RlKE5vZGUqIG5vZGUpCisg
ICAgeworICAgICAgICBpZiAobm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICB9CisgICAgCiAgICAgdm9p
ZCBjb3VudEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIC8vIERvbid0IGNv
dW50IGVkZ2VzIHRoYXQgYXJlIGFscmVhZHkgY291bnRlZCBmb3IgdGhlaXIgdHlwZSBjaGVja3Mu
Ci0gICAgICAgIGlmICghKGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5
cGVkVXNlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmIChlZGdl
LT5wb3N0Zml4UmVmKCkpCisgICAgICAgIGlmIChlZGdlLndpbGxIYXZlQ2hlY2soKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbV93b3JrbGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkpOwor
ICAgICAgICBjb3VudE5vZGUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGVs
aW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTE4MSw3ICsy
MDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4u
Y2hpbGQoaSk7CiAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBpZiAoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09
IFVudHlwZWRVc2UpCisgICAgICAgICAgICBpZiAoZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCiAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0pOwogICAgICAgICB9
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShyZXZpc2lv
biAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBAIHZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogICAgICAgICAgICAgb3V0LnByaW50KCJDaGVjazoiKTsKICAgICAgICAgb3V0
LnByaW50KHVzZUtpbmQoKSwgIjoiKTsKICAgICB9CisgICAgaWYgKGRvZXNLaWxsKGtpbGxTdGF0
dXMoKSkpCisgICAgICAgIG91dC5wcmludCgiS2lsbDoiKTsKICAgICBvdXQucHJpbnQobm9kZSgp
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDE1
MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSwxMiArMzksMTIgQEAgY2xhc3MgQWRqYWNlbmN5TGlzdDsKIAogY2xhc3MgRWRn
ZSB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRWRnZShOb2RlKiBub2RlID0gMCwgVXNlS2luZCB1
c2VLaW5kID0gVW50eXBlZFVzZSwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMgPSBOZWVkc0NoZWNr
KQorICAgIGV4cGxpY2l0IEVkZ2UoTm9kZSogbm9kZSA9IDAsIFVzZUtpbmQgdXNlS2luZCA9IFVu
dHlwZWRVc2UsIFByb29mU3RhdHVzIHByb29mU3RhdHVzID0gTmVlZHNDaGVjaywgS2lsbFN0YXR1
cyBraWxsU3RhdHVzID0gRG9lc05vdEtpbGwpCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
OiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQsIHByb29mU3RhdHVzKSkKKyAg
ICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQsIHByb29mU3RhdHVz
LCBraWxsU3RhdHVzKSkKICNlbHNlCiAgICAgICAgIDogbV9ub2RlKG5vZGUpCi0gICAgICAgICwg
bV9lbmNvZGVkV29yZChtYWtlV29yZCh1c2VLaW5kLCBwcm9vZlN0YXR1cykpCisgICAgICAgICwg
bV9lbmNvZGVkV29yZChtYWtlV29yZCh1c2VLaW5kLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cykp
CiAjZW5kaWYKICAgICB7CiAgICAgfQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXROb2RlKE5vZGUqIG5vZGUpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCksIHByb29mU3RhdHVzKCkp
OworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSwgdXNlS2luZCgpLCBwcm9v
ZlN0YXR1cygpLCBraWxsU3RhdHVzKCkpOwogI2Vsc2UKICAgICAgICAgbV9ub2RlID0gbm9kZTsK
ICNlbmRpZgpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQo
bm9kZSgpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFr
ZVdvcmQobm9kZSgpLCB1c2VLaW5kLCBwcm9vZlN0YXR1cygpKTsKKyAgICAgICAgbV9lbmNvZGVk
V29yZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1
cygpKTsKICNlbHNlCiAgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZCh1c2VLaW5kLCBw
cm9vZlN0YXR1cygpKTsKICNlbmRpZgpAQCAtMTA4LDkgKzEwOCw5IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIEFTU0VSVChub2RlKCkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1f
ZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMpOwor
ICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kKCksIHByb29m
U3RhdHVzLCBraWxsU3RhdHVzKCkpOwogI2Vsc2UKLSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1h
a2VXb3JkKHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMpOworICAgICAgICBtX2VuY29kZWRXb3JkID0g
bWFrZVdvcmQodXNlS2luZCgpLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cygpKTsKICNlbmRpZgog
ICAgIH0KICAgICBib29sIGlzUHJvdmVkKCkgY29uc3QKQEAgLTEyMiw2ICsxMjIsMzYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gcHJvb2ZTdGF0dXMoKSA9PSBOZWVkc0NoZWNrOwogICAgIH0K
ICAgICAKKyAgICBib29sIHdpbGxOb3RIYXZlQ2hlY2soKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzUHJvdmVkKCkgfHwgdXNlS2luZCgpID09IFVudHlwZWRVc2U7CisgICAgfQorICAg
IGJvb2wgd2lsbEhhdmVDaGVjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIXdpbGxO
b3RIYXZlQ2hlY2soKTsKKyAgICB9CisgICAgCisgICAgS2lsbFN0YXR1cyBraWxsU3RhdHVzVW5j
aGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraWxsU3RhdHVzRm9yRG9lc0tp
bGwobV9lbmNvZGVkV29yZCAmIDIpOworICAgIH0KKyAgICBLaWxsU3RhdHVzIGtpbGxTdGF0dXMo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7CisgICAgICAgIHJldHVybiBr
aWxsU3RhdHVzVW5jaGVja2VkKCk7CisgICAgfQorICAgIHZvaWQgc2V0S2lsbFN0YXR1cyhLaWxs
U3RhdHVzIGtpbGxTdGF0dXMpCisgICAgeworICAgICAgICBBU1NFUlQobm9kZSgpKTsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1
c2VLaW5kKCksIHByb29mU3RhdHVzKCksIGtpbGxTdGF0dXMpOworI2Vsc2UKKyAgICAgICAgbV9l
bmNvZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1
cyk7CisjZW5kaWYKKyAgICB9CisgICAgYm9vbCBkb2VzS2lsbCgpIGNvbnN0IHsgcmV0dXJuIGRv
ZXNLaWxsKGtpbGxTdGF0dXMoKSk7IH0KKyAgICBib29sIGRvZXNOb3RLaWxsKCkgY29uc3QgeyBy
ZXR1cm4gIWRvZXNraWxsKCk7IH0KKyAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1
cm4gISFub2RlKCk7IH0KICAgICAKICAgICB0eXBlZGVmIHZvaWQqIEVkZ2U6OipVbnNwZWNpZmll
ZEJvb2xUeXBlOwpAQCAtMTUwLDIwICsxODAsMjAgQEAgcHJpdmF0ZToKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDY7IH0KICAgICAKLSAg
ICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKE5vZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCwg
UHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMpCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChO
b2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3RhdHVzLCBLaWxs
U3RhdHVzIGtpbGxTdGF0dXMpCiAgICAgewogICAgICAgICBBU1NFUlQoc2l6ZW9mKG5vZGUpID09
IDgpOwogICAgICAgICB1aW50cHRyX3Qgc2hpZnRlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4obm9kZSkgPDwgc2hpZnQoKTsKICAgICAgICAgQVNTRVJUKChzaGlmdGVkVmFsdWUgPj4g
c2hpZnQoKSkgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpOwogICAgICAgICBBU1NF
UlQodXNlS2luZCA+PSAwICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7Ci0gICAgICAgIEFTU0VS
VCgoc3RhdGljX2Nhc3Q8dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMSkgPD0gKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMSkgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gc2hpZnRlZFZh
bHVlIHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMSkgfCBERkc6OmlzUHJv
dmVkKHByb29mU3RhdHVzKTsKKyAgICAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KExhc3RVc2VLaW5kKSA8PCAyKSA8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigyKSA8PCBzaGlm
dCgpKSk7CisgICAgICAgIHJldHVybiBzaGlmdGVkVmFsdWUgfCAoc3RhdGljX2Nhc3Q8dWludHB0
cl90Pih1c2VLaW5kKSA8PCAyKSB8IChERkc6OmRvZXNLaWxsKGtpbGxTdGF0dXMpIDw8IDEpIHwg
REZHOjppc1Byb3ZlZChwcm9vZlN0YXR1cyk7CiAgICAgfQogICAgIAogI2Vsc2UKLSAgICBzdGF0
aWMgdWludHB0cl90IG1ha2VXb3JkKFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZT
dGF0dXMpCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChVc2VLaW5kIHVzZUtpbmQsIFBy
b29mU3RhdHVzIHByb29mU3RhdHVzLCBLaWxsU3RhdHVzIGtpbGxTdGF0dXMpCiAgICAgewotICAg
ICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMSkgfCBERkc6
OmlzUHJvdmVkKHByb29mU3RhdHVzKTsKKyAgICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1cykgPDwgMSkg
fCBERkc6OmlzUHJvdmVkKHByb29mU3RhdHVzKTsKICAgICB9CiAgICAgCiAgICAgTm9kZSogbV9u
b2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9y
bWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdGbHVzaEZvcm1hdC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkcKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIEZsdXNoRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZv
cm1hdCkgeworICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICBvdXQucHJpbnQoIkRlYWRGbHVz
aCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgIG91
dC5wcmludCgiRmx1c2hlZEludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZsdXNo
ZWREb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZERvdWJsZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgb3V0LnByaW50KCJGbHVzaGVk
Q2VsbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAg
ICAgb3V0LnByaW50KCJGbHVzaGVkQm9vbGVhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkSlNWYWx1ZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0ZsdXNoRm9ybWF0X2gKKyNkZWZpbmUgREZH
Rmx1c2hGb3JtYXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gRmx1c2hGb3JtYXQgeworICAgIERlYWRGbHVzaCwK
KyAgICBGbHVzaGVkSW50MzIsCisgICAgRmx1c2hlZERvdWJsZSwKKyAgICBGbHVzaGVkQ2VsbCwK
KyAgICBGbHVzaGVkQm9vbGVhbiwKKyAgICBGbHVzaGVkSlNWYWx1ZQorfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgRmx1c2hGb3JtYXQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRmx1c2hGb3JtYXRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAi
REZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgRmx1
c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIEZs
dXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShn
cmFwaCwgImZsdXNoLWxpdmVuZXNzIGFuYWx5c2lzIikKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
OworICAgICAgICAKKyAgICAgICAgLy8gTGl2ZW5lc3MgaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXM7
IHRoZSByb290cyBhcmUgdGhlIGJsb2NrcyB0aGF0CisgICAgICAgIC8vIGVuZCBpbiBhIHRlcm1p
bmFsIChSZXR1cm4vVGhyb3cvVGhyb3dSZWZlcmVuY2VFcnJvcikuIEZvciBub3csIHdlCisgICAg
ICAgIC8vIHVzZSBhIGZpeHBvaW50IGZvcm11bGF0aW9uIHNpbmNlIGxpdmVuZXNzIGlzIGEgcmFw
aWQgYW5hbHlzaXMgd2l0aAorICAgICAgICAvLyBjb252ZXJnZW5jZSBndWFyYW50ZWVkIGFmdGVy
IE8oY29ubmVjdGl2aXR5KS4KKyAgICAgICAgCisgICAgICAgIC8vIFN0YXJ0IGJ5IGFzc3VtaW5n
IHRoYXQgZXZlcnl0aGluZyBpcyBkZWFkLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBi
bG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZC5maWxsKERlYWRGbHVzaCk7CisgICAgICAgICAg
ICBibG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0VGFpbC5maWxsKERlYWRGbHVzaCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNl
OworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJs
b2NrcygpOyBibG9ja0luZGV4LS07KQorICAgICAgICAgICAgICAgIHByb2Nlc3MoYmxvY2tJbmRl
eCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIG1fbGl2ZSA9IGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRU
YWlsOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+
c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwor
ICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgdmFyaWFibGUtPmxvY2FsKCksIHZhcmlh
YmxlLT5mbHVzaEZvcm1hdCgpLCBEZWFkRmx1c2gpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaDoK
KyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGUtPmZsdXNoRm9ybWF0KCk7Cisg
ICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCB2YXJpYWJsZS0+bG9jYWwoKSwgZm9ybWF0
LCBmb3JtYXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fbGl2ZSA9
PSBibG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgIGJsb2NrLT5zc2EtPmZs
dXNoRm9ybWF0QXRIZWFkID0gbV9saXZlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9j
ay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayog
cHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gbV9saXZlLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgIEZsdXNo
Rm9ybWF0JiBwcmVkZWNlc3NvckZvcm1hdCA9IHByZWRlY2Vzc29yLT5zc2EtPmZsdXNoRm9ybWF0
QXRUYWlsW2pdOworICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IG15Rm9ybWF0ID0gbXlMaXZl
W2pdOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRocmVlIHBvc3NpYmls
aXRpZXM6CisgICAgICAgICAgICAgICAgLy8gMSkgUHJlZGVjZXNzb3IgZm9ybWF0IGlzIERlYWQs
IGluIHdoaWNoIGNhc2UgaXQgYWNxdWlyZXMgb3VyIGZvcm1hdC4KKyAgICAgICAgICAgICAgICAv
LyAyKSBQcmVkZWNlc3NvciBmb3JtYXQgaXMgaWRlbnRpY2FsIHRvIG91ciBmb3JtYXQsIGluIHdo
aWNoIGNhc2Ugd2UKKyAgICAgICAgICAgICAgICAvLyAgICBkbyBub3RoaW5nLgorICAgICAgICAg
ICAgICAgIC8vIDMpIFByZWRlY2Vzc29yIGZvcm1hdCBpcyBkaWZmZXJlbnQgZnJvbSBvdXIgZm9y
bWF0IGFuZCBpdCdzIG5vdCBEZWFkLAorICAgICAgICAgICAgICAgIC8vICAgIGluIHdoaWNoIGNh
c2Ugd2UgaGF2ZSBhbiBlcnJvbmVvdXMgc2V0IG9mIEZsdXNoZXMgYW5kIFNldExvY2Fscy4KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JGb3JtYXQgPT0g
RGVhZEZsdXNoKSB7CisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yRm9ybWF0ID0gbXlG
b3JtYXQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3JGb3JtYXQg
PT0gbXlGb3JtYXQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJCYWQg
Rmx1c2ggbWVyZ2UgYXQgZWRnZSAiLCAqcHJlZGVjZXNzb3IsICIgLT4gIiwgKmJsb2NrLAorICAg
ICAgICAgICAgICAgICAgICAiLCBsb2NhbCB2YXJpYWJsZSByIiwgbXlMaXZlLm9wZXJhbmRGb3JJ
bmRleChqKSwgIjogIiwgKnByZWRlY2Vzc29yLAorICAgICAgICAgICAgICAgICAgICAiIGhhcyAi
LCBwcmVkZWNlc3NvckZvcm1hdCwgIiBhbmQgIiwgKmJsb2NrLCAiIGhhcyAiLCBteUZvcm1hdCwg
Ii5cbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIklSIGF0IHRpbWUgb2YgZXJyb3I6XG4i
KTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
Rm9yTm9kZShOb2RlKiBub2RlLCBpbnQgb3BlcmFuZCwgRmx1c2hGb3JtYXQgbm9kZUZvcm1hdCwg
Rmx1c2hGb3JtYXQgbmV3Rm9ybWF0KQorICAgIHsKKyAgICAgICAgRmx1c2hGb3JtYXQmIGN1cnJl
bnRGb3JtYXQgPSBtX2xpdmUub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgCisgICAgICAgIC8v
IERvIHNvbWUgdXNlZnVsIHZlcmlmaWNhdGlvbiBoZXJlLiBJdCdzIE9LIGlmIHdlIHRoaW5rIHRo
YXQgdGhlCisgICAgICAgIC8vIGZsdXNoIGZvcm1hdCBpcyBkZWFkIGF0IHRoZSB0aW1lIHRoYXQg
d2Ugc2VlIHRoZSBub2RlLiBCdXQgaXQncworICAgICAgICAvLyBub3QgT0sgaWYgYm90aCB0aGUg
bm9kZSBhbmQgbV9saXZlIHNlZSBhIEZsdXNoRm9ybWF0IGFuZCB0aGV5IGRvCisgICAgICAgIC8v
IG5vdCBhZ3JlZSBvbiBpdC4KKyAgICAgICAgCisgICAgICAgIGlmIChjdXJyZW50Rm9ybWF0ID09
IERlYWRGbHVzaCB8fCBjdXJyZW50Rm9ybWF0ID09IG5vZGVGb3JtYXQpIHsKKyAgICAgICAgICAg
IGN1cnJlbnRGb3JtYXQgPSBuZXdGb3JtYXQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiQmFkIEZsdXNoIG1l
cmdlIGF0IG5vZGUgIiwgbm9kZSwgIiwgciIsIG9wZXJhbmQsICI6IG5vZGUgY2xhaW1zICIsIG5v
ZGVGb3JtYXQsCisgICAgICAgICAgICAiIGJ1dCBiYWNrd2FyZHMgZmxvdyBjbGFpbXMgIiwgY3Vy
cmVudEZvcm1hdCwgIi5cbiIpOworICAgICAgICBkYXRhTG9nKCJJUiBhdCB0aW1lIG9mIGVycm9y
OlxuIik7CisgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICBDUkFTSCgpOworICAgIH0K
KyAgICAKKyAgICBGbHVzaEZvcm1hdCBmbHVzaEZvcm1hdChOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZENoaWxkVXNlKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAg
eworICAgICAgICBtX2xpdmUuYWRkKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBtX2NoYW5nZWQ7CisgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IG1fbGl2ZTsKK307CisKK2Jv
b2wgcGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2Ft
cGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBGbHVzaC1MaXZlbmVzcyBBbmFseXNpcyBQ
aGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZT4o
Z3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhh
c2VfaAorI2RlZmluZSBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
Q29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3Jh
cGg7CisKKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQKKwor
Ym9vbCBwZXJmb3JtRmx1c2hMaXZlbmVzc0FuYWx5c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2ICsyMzUsOCBA
QCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgfQogICAgIGlm
IChub2RlLT5oYXNJbmRleGluZ1R5cGUoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBJbmRl
eGluZ1R5cGVEdW1wKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgaWYgKG5vZGUtPmhhc1Bo
aSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJeIiwgbm9kZS0+cGhpKCktPmluZGV4KCkp
OwogICAgIGlmIChub2RlLT5oYXNFeGVjdXRpb25Db3VudGVyKCkpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgUmF3UG9pbnRlcihub2RlLT5leGVjdXRpb25Db3VudGVyKCkpKTsKICAgICBpZiAo
b3AgPT0gSlNDb25zdGFudCkgewpAQCAtMzEzLDIxICszMTUsMjMgQEAgdm9pZCBHcmFwaDo6ZHVt
cEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgICAgICAgICAgb3V0LnByaW50KCJcbiIpOwog
ICAgICAgICB9CiAgICAgfQotICAgIG91dC5wcmludChwcmVmaXgsICIgIFBoaSBOb2RlczoiKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhpc1tpXTsKLSAgICAgICAgaWYgKCFwaGlO
b2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNP
bmx5KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlO
b2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7Ci0gICAgICAg
IGlmIChwaGlOb2RlLT5jaGlsZDEoKSkgewotICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhp
Tm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOwotICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxk
MigpKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDIo
KS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpKQotICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMygpLT5pbmRl
eCgpKTsKKyAgICBpZiAoIWJsb2NrLT5waGlzLmlzRW1wdHkoKSkgeworICAgICAgICBvdXQucHJp
bnQocHJlZml4LCAiICBQaGkgTm9kZXM6Iik7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUg
PSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG91dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRl
eCgpLCAiPCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7CisgICAgICAgICAgICBpZiAo
cGhpTm9kZS0+Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIkAiLCBwaGlO
b2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNo
aWxkMigpKSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBAIiwgcGhpTm9kZS0+
Y2hpbGQyKCktPmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hp
bGQzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUt
PmNoaWxkMygpLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBvdXQucHJpbnQoIikiLCBpICsgMSA8IGJsb2NrLT5waGlzLnNpemUoKSA/ICIs
IiA6ICIiKTsKICAgICAgICAgfQotICAgICAgICBvdXQucHJpbnQoIikiLCBpICsgMSA8IGJsb2Nr
LT5waGlzLnNpemUoKSA/ICIsIiA6ICIiKTsKICAgICB9CiAgICAgb3V0LnByaW50KCJcbiIpOwog
fQpAQCAtMzQ1LDcgKzM0OSw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkK
ICAgICAgICAgZHVtcEJsb2NrSGVhZGVyKG91dCwgIiIsIGJsb2NrLCBEdW1wQWxsUGhpcyk7CiAg
ICAgICAgIG91dC5wcmludCgiICB2YXJzIGJlZm9yZTogIik7CiAgICAgICAgIGlmIChibG9jay0+
Y2ZhSGFzVmlzaXRlZCkKLSAgICAgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRI
ZWFkLCBvdXQpOworICAgICAgICAgICAgb3V0LnByaW50KGJsb2NrLT52YWx1ZXNBdEhlYWQpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKICAgICAgICAg
b3V0LnByaW50KCJcbiIpOwpAQCAtMzU5LDcgKzM2Myw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkKICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnQoIiAgdmFycyBhZnRl
cjogIik7CiAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKLSAgICAgICAgICAgIGR1
bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRUYWlsLCBvdXQpOworICAgICAgICAgICAgb3V0LnBy
aW50KGJsb2NrLT52YWx1ZXNBdFRhaWwpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvdXQu
cHJpbnQoIjxlbXB0eT4iKTsKICAgICAgICAgb3V0LnByaW50KCJcbiIpOwpAQCAtNDc4LDYgKzQ4
MiwyOCBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jCiAgICAgICAg
ICAgICBicmVhazsKICAgICB9CiB9CisKK3ZvaWQgR3JhcGg6OmFkZEZvckRlcHRoRmlyc3RTb3J0
KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdv
cmtsaXN0LCBIYXNoU2V0PEJhc2ljQmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9jayogYmxvY2spCit7
CisgICAgaWYgKHNlZW4uY29udGFpbnMoYmxvY2spKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgcmVzdWx0LmFwcGVuZChibG9jayk7CisgICAgd29ya2xpc3QuYXBwZW5kKGJsb2NrKTsKKyAg
ICBzZWVuLmFkZChibG9jayk7Cit9CisKK3ZvaWQgR3JhcGg6OmRlcHRoRmlyc3RTb3J0KFZlY3Rv
cjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKK3sKKyAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiB3
b3JrbGlzdDsKKyAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBzZWVuOworICAgIGFkZEZvckRlcHRo
Rmlyc3RTb3J0KHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKKyAgICB3aGlsZSAo
IXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmts
aXN0LnRha2VMYXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNj
ZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICBhZGRGb3JEZXB0aEZpcnN0U29ydChyZXN1bHQs
IHdvcmtsaXN0LCBzZWVuLCBibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICB9Cit9CiAgICAgCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjUxLDYgKzY1MSw4IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGludmFsaWRhdGVDRkcoKTsKICAgICAKKyAgICB2b2lkIGdldEJsb2Nrc0lu
RGVwdGhGaXJzdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCk7CisgICAgCiAgICAg
UHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21w
aWxhdGlvbi5nZXQoKTsgfQogICAgIAogICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmll
cnMoKSB7IHJldHVybiBtX3BsYW4uaWRlbnRpZmllcnM7IH0KQEAgLTY4OSw2ICs2OTEsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxC
YXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNCbG9jayosIEJhc2ljQmxvY2sqIHN1Y2Nl
c3Nvcik7CisgICAgdm9pZCBhZGRGb3JEZXB0aEZpcnN0U29ydChWZWN0b3I8QmFzaWNCbG9jayo+
JiByZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgSGFzaFNldDxCYXNp
Y0Jsb2NrKj4mIHNlZW4sIEJhc2ljQmxvY2sqKTsKICAgICAKICAgICBBZGRTcGVjdWxhdGlvbk1v
ZGUgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQsIGJvb2wgdmFy
aWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZpc2lv
biAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyNiArMzEsMTIgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ci1jbGFzcyBJbnNlcnRpb24gewotcHVibGljOgotICAgIEluc2VydGlvbigpIHsgfQotICAgIAot
ICAgIEluc2VydGlvbihzaXplX3QgaW5kZXgsIE5vZGUqIGVsZW1lbnQpCi0gICAgICAgIDogbV9p
bmRleChpbmRleCkKLSAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KLSAgICBO
b2RlKiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9Ci1wcml2YXRlOgotICAg
IHNpemVfdCBtX2luZGV4OwotICAgIE5vZGUqIG1fZWxlbWVudDsKLX07Cit0eXBlZGVmIFdURjo6
SW5zZXJ0aW9uPE5vZGUqPiBJbnNlcnRpb247CiAKIGNsYXNzIEluc2VydGlvblNldCB7CiBwdWJs
aWM6CkBAIC04MSwyMCArNjcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBleGVjdXRlKEJh
c2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2luc2VydGlvbnMuc2l6ZSgp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBibG9jay0+Z3JvdyhibG9jay0+c2l6ZSgp
ICsgbV9pbnNlcnRpb25zLnNpemUoKSk7Ci0gICAgICAgIHNpemVfdCBsYXN0SW5kZXggPSBibG9j
ay0+c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9ucyA9IG1faW5z
ZXJ0aW9ucy5zaXplKCk7IGluZGV4SW5JbnNlcnRpb25zLS07KSB7Ci0gICAgICAgICAgICBJbnNl
cnRpb24mIGluc2VydGlvbiA9IG1faW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc107Ci0gICAg
ICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbi5pbmRleCgpICsgaW5kZXhJbklu
c2VydGlvbnM7Ci0gICAgICAgICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0
aW9ucyArIDE7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkgPiBm
aXJzdEluZGV4OykKLSAgICAgICAgICAgICAgICBibG9jay0+YXQoaSkgPSBibG9jay0+YXQoaSAt
IGluZGV4T2Zmc2V0KTsKLSAgICAgICAgICAgIGJsb2NrLT5hdChmaXJzdEluZGV4KSA9IGluc2Vy
dGlvbi5lbGVtZW50KCk7Ci0gICAgICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4OwotICAg
ICAgICB9Ci0gICAgICAgIG1faW5zZXJ0aW9ucy5yZXNpemUoMCk7CisgICAgICAgIGV4ZWN1dGVJ
bnNlcnRpb25zKCpibG9jaywgbV9pbnNlcnRpb25zKTsKICAgICB9CiBwcml2YXRlOgogICAgIEdy
YXBoJiBtX2dyYXBoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVz
c0FuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJ
bnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBMaXZlbmVz
c0FuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIExpdmVuZXNzQW5h
bHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJsaXZlbmVz
cyBhbmFseXNpcyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAg
IC8vIExpdmVuZXNzIGlzIGEgYmFja3dhcmRzIGFuYWx5c2lzOyB0aGUgcm9vdHMgYXJlIHRoZSBi
bG9ja3MgdGhhdAorICAgICAgICAvLyBlbmQgaW4gYSB0ZXJtaW5hbCAoUmV0dXJuL1Rocm93L1Ro
cm93UmVmZXJlbmNlRXJyb3IpLiBGb3Igbm93LCB3ZQorICAgICAgICAvLyB1c2UgYSBmaXhwb2lu
dCBmb3JtdWxhdGlvbiBzaW5jZSBsaXZlbmVzcyBpcyBhIHJhcGlkIGFuYWx5c2lzIHdpdGgKKyAg
ICAgICAgLy8gY29udmVyZ2VuY2UgZ3VhcmFudGVlZCBhZnRlciBPKGNvbm5lY3Rpdml0eSkuCisg
ICAgICAgIAorICAgICAgICAvLyBTdGFydCBieSBhc3N1bWluZyB0aGF0IGV2ZXJ5dGhpbmcgaXMg
ZGVhZC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJs
b2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYmxvY2stPmxpdmVBdEhlYWQuY2xl
YXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT5saXZlQXRUYWlsLmNsZWFyKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KQorICAgICAgICAgICAgICAgIHByb2Nlc3MoYmxvY2tJbmRleCk7
CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCkKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJdCdzIGxpa2VseSB0aGF0IHRoaXMgY2FuIGJl
IGltcHJvdmVkLCBmb3Igc3RhdGljIGFuYWx5c2VzIHRoYXQgdXNlCisgICAgICAgIC8vIEhhc2hT
ZXRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDU1CisgICAg
ICAgIG1fbGl2ZSA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWw7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBHaXZlbiBhbiBVcHNpbG9uOgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vICAgIG46IFVwc2lsb24oJHAsIEB4KQorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBwIGFuZCBAbiBhbmQgdXNlcyBAeC4KKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBHaXZlbiBhIFBoaToKKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAvLyAgICBwOiBQaGkoKQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIFdlIHNheSBub3RoaW5nLiBJdCdzIG5laXRoZXIgYSB1c2Ugbm9yIGEgZGVmLgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEgbm9kZToKKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAvLyAgICBuOiBUaGluZ3koQGEsIEBiLCBAYykKKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAbiBhbmQgdXNlcyBAYSwgQGIsIEBj
LgorICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgVXBzaWxvbjogeworICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IG5vZGUt
PnBoaSgpOworICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUocGhpKTsKKyAgICAgICAgICAg
ICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOworICAgICAgICAgICAgICAgIG1fbGl2ZS5hZGQobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAg
ICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkQ2hpbGRV
c2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAobV9saXZlID09IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICBibG9jay0+c3NhLT5saXZlQXRIZWFkID0gbV9saXZlOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAg
IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuYWRkKG1fbGl2ZS5iZWdpbigpLCBtX2xpdmUuZW5kKCkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZENoaWxkVXNlKE5vZGUqLCBFZGdlJiBlZGdlKQor
ICAgIHsKKyAgICAgICAgYWRkQ2hpbGRVc2UoZWRnZSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
YWRkQ2hpbGRVc2UoRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIGVkZ2Uuc2V0S2lsbFN0YXR1
cyhtX2xpdmUuYWRkKGVkZ2Uubm9kZSgpKS5pc05ld0VudHJ5ID8gRG9lc0tpbGwgOiBEb2VzTm90
S2lsbCk7CisgICAgfQorICAgIAorICAgIGJvb2wgbV9jaGFuZ2VkOworICAgIEhhc2hTZXQ8Tm9k
ZSo+IG1fbGl2ZTsKK307CisKK2Jvb2wgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmIGdy
YXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgTGl2ZW5lc3Mg
QW5hbHlzaXMgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8TGl2ZW5lc3NBbmFseXNpc1Bo
YXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorI2RlZmluZSBE
RkdMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb21wdXRlcyBC
YXNpY0Jsb2NrOjpzc2EtPmxpdmVBdEhlYWQvbGl2ZUF0VGFpbC4KKworYm9vbCBwZXJmb3JtTGl2
ZW5lc3NBbmFseXNpcyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xpdmVuZXNzQW5hbHlzaXNQ
aGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNp
b24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTAgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIE5vZAogICAgICAgICBvdXQucHJpbnQoIi0iKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKyAgICBpZiAobm9kZSA9PSBOb2RlOjp0b3AoKSkgeworICAgICAgICBvdXQucHJpbnQo
IlRPUCIpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIG91dC5wcmludCgiQCIsIG5vZGUt
PmluZGV4KCkpOwogICAgIG91dC5wcmludChBYmJyZXZpYXRlZFNwZWN1bGF0aW9uRHVtcChub2Rl
LT5wcmVkaWN0aW9uKCkpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDYgKzUzOCwxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1fb3BJbmZvKTsKICAgICB9
CiAgICAgCisgICAgYm9vbCBoYXNQaGkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0g
VXBzaWxvbjsKKyAgICB9CisgICAgCisgICAgTm9kZSogcGhpKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNQaGkoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KG1fb3BJ
bmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNJZGVudGlmaWVyKCkKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAob3AoKSkgewpAQCAtNzczLDE2ICs3ODQsMTYgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICBtX29wSW5mbzIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7CiAgICAg
fQogICAgIAotICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2soKQorICAgIEJhc2ljQmxvY2sqJiB0
YWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgp
KTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8pOwor
ICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbyk7CiAg
ICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuQmxvY2soKQorICAgIEJhc2ljQmxv
Y2sqJiBub3RUYWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8yKTsKKyAg
ICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcEluZm8yKTsKICAg
ICB9CiAgICAgCiAgICAgU3dpdGNoRGF0YSogc3dpdGNoRGF0YSgpCkBAIC04MDUsNyArODE2LDcg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVu
c2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKGlzU3dpdGNoKCkpIHsKICAgICAgICAg
ICAgIGlmIChpbmRleCA8IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlSW5CbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlSW5CbG9jay5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVJbkJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2RlSW5CbG9j
ay5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK3ZvaWQgTm9kZUluQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNCb3R0b20oKSkgCisgICAgICAgIG91dC5wcmludCgiQk9UVE9NIik7CisgICAgZWxz
ZSBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAg
ICAgIG91dC5wcmludChtX25vZGUsICIgaW4gIiwgKm1fYmxvY2spOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTUyNDMyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw2ICs2NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNy
byhab21iaWVIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9tLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBt
YWNybyhVcHNpbG9uLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikgXAogICAg
IG1hY3JvKFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwKICAgICBt
YWNybyhGbHVzaCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1h
Y3JvKFBoYW50b21Mb2NhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisj
aW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJs
aWM6CisgICAgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJPU1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzIikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBo
Lm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBk
ZXB0aEZpcnN0OworICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRl
cHRoRmlyc3QpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRl
cHRoRmlyc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
ZGVwdGhGaXJzdFtpXTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVh
ZC5maWxsKDApOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZp
bGwoMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGRlcHRoRmlyc3RbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIGVk
aXQgYXZhaWxhYmlsaXR5QXRUYWlsIGluLXBsYWNlLCBidXQgZmlyc3QgaW5pdGlhbGl6ZSBpdCB0
bworICAgICAgICAgICAgLy8gYXZhaWxhYmlsaXR5QXRIZWFkLgorICAgICAgICAgICAgT3BlcmFu
ZHM8Tm9kZSo+JiBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWw7
CisgICAgICAgICAgICBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
MDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAg
ICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50
QW5kQ2hlY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CisgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKGopOworICAgICAgICAgICAg
ICAgIE9wZXJhbmRzPE5vZGUqPiYgc3VjY2Vzc29yQXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+
YXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IGF2
YWlsYWJpbGl0eS5zaXplKCk7IGstLTspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbXlO
b2RlID0gYXZhaWxhYmlsaXR5W2tdOworICAgICAgICAgICAgICAgICAgICBpZiAoIW15Tm9kZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlbmVzc0F0SGVhZC5jb250
YWlucyhteU5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkg
b3ZlcndyaXRlIGF2YWlsYWJpbGl0eSB3aXRoIGEgYm9ndXMgbm9kZQorICAgICAgICAgICAgICAg
ICAgICAvLyBhdCBtZXJnZSBwb2ludHMuIFRoaXMgaXMgZmluZSwgc2luY2UgbWVyZ2UgcG9pbnRz
IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgLy8gTW92SGludChQaGkpJ3MgdG8gd29yayBhcm91
bmQgdGhpcy4gVGhlIG91dGNvbWUgb2YgdGhpcyBpcworICAgICAgICAgICAgICAgICAgICAvLyB5
b3UgbWlnaHQgaGF2ZSBhIHByb2dyYW0gaW4gd2hpY2ggYSBub2RlIGhhcHBlbnMgdG8gcmVtYWlu
CisgICAgICAgICAgICAgICAgICAgIC8vIGxpdmUgaW50byBzb21lIGJsb2NrIEIsIGFuZCBzZXBh
cmF0ZWx5IChkdWUgdG8gY29weQorICAgICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGlvbikg
anVzdCBvbmUgb2YgdGhlIHByZWRlY2Vzc29ycyBvZiBCIGlzc3VlZCBhCisgICAgICAgICAgICAg
ICAgICAgIC8vIE1vdkhpbnQgcHV0dGluZyB0aGF0IG5vZGUgaW50byBzb21lIGxvY2FsLiBUaGVu
IGluIEIgd2UgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpbmsgdGhhdCB0aGF0IG5v
ZGUgaXMgYSB2YWxpZCB2YWx1ZSBmb3IgdGhhdCBsb2NhbC4gT2YKKyAgICAgICAgICAgICAgICAg
ICAgLy8gY291cnNlIGlmIHRoYXQgbG9jYWwgd2FzIGFjdHVhbGx5IGxpdmUgaW4gQiwgQiB3b3Vs
ZCBoYXZlIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gUGhpIGZvciBpdC4gU28gZXNzZW50aWFs
bHkgd2UnbGwgaGF2ZSBPU1IgZXhpdCBkcm9wcGluZyB0aGlzCisgICAgICAgICAgICAgICAgICAg
IC8vIG5vZGUncyB2YWx1ZSBpbnRvIHRoZSBsb2NhbCB3aGVuIHdlIG90aGVyd2lzZSAoaW4gdGhl
IERGRykKKyAgICAgICAgICAgICAgICAgICAgLy8gd291bGQgaGF2ZSBkcm9wcGVkIHVuZGVmaW5l
ZCBpbnRvIHRoZSBsb2NhbC4gVGhpcyBzZWVtcworICAgICAgICAgICAgICAgICAgICAvLyBoYXJt
bGVzcy4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nv
ckF2YWlsYWJpbGl0eVtrXSA9IG15Tm9kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307
CisKK2Jvb2wgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKEdyYXBoJiBncmFwaCkKK3sK
KyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9TUiBBdmFpbGFiaWxpdHkg
QW5hbHlzaXMgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZV9oCisjZGVmaW5lIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2Et
PmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBUaGlzIHJlbGllcyBvbiBsaXZlbmVzcworLy8gYW5h
bHlzaXMgcGhhc2UgaGF2aW5nIGJlZW4gcnVuIGFuZCB0aGUgZ3JhcGggbm90IGhhdmluZyBiZWVu
IHRyYW5zZm9ybWVkCisvLyBhZnRlciB0aGF0LgorCitib29sIHBlcmZvcm1PU1JBdmFpbGFiaWxp
dHlBbmFseXNpcyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUyNDMy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MiwxNCArNDcyLDE5IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgWm9tYmllSGludDogewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3Vs
ZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAg
ICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhh
c2UuCi0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBjYXNlIFBoaToKICAgICAgICAgICAgIC8vIFBoaXMgc2hvdWxkIG5vdCBiZSB2aXNpYmxl
IGhlcmUgc2luY2Ugd2UncmUgaXRlcmF0aW5nIHRoZSBhbGwtYnV0LVBoaSdzCiAgICAgICAgICAg
ICAvLyBwYXJ0IG9mIGJhc2ljIGJsb2Nrcy4KLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVcHNpbG9uOgorICAgICAgICAgICAgLy8gVGhlc2Ug
ZG9uJ3QgZ2V0IGluc2VydGVkIHVudGlsIHdlIGdvIGludG8gU1NBLgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgR2V0U2NvcGU6CkBAIC01NDEsNyArNTQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTGFzdE5vZGVUeXBlOgotICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIK
KyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBTU0FDb252ZXJzaW9uUGhhc2UgOiBw
dWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFNTQUNvbnZlcnNpb25QaGFzZShHcmFwaCYgZ3Jh
cGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJTU0EgY29udmVyc2lvbiIpCisgICAgICAgICwg
bV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgICAgICwgbV9ub25Ucml2aWFsUGhpcyhPcGVyYW5k
c0xpa2UsIGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9jaGFu
Z2VkKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAg
ICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBTZXRMb2NhbCdzIG5lZWQgZmx1c2hp
bmcuIE5lZWQgdG8gZG8gdGhpcyB3aGlsZSB0aGUKKyAgICAgICAgLy8gUGhpIGdyYXBoIGlzIHN0
aWxsIGludGFjdC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2Nr
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgIT0gRmx1c2gpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKG5vZGUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHdoaWxlICghbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmlzRW1wdHko
KSkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC50
YWtlTGFzdCgpOworICAgICAgICAgICAgQVNTRVJUKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5z
KG5vZGUpKTsKKyAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5v
ZGUsIGFkZEZsdXNoZWRMb2NhbEVkZ2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBFbGltaW5hdGUgYWxsIGR1cGxpY2F0ZSBvciBzZWxmLXBvaW50aW5nIFBoaSBlZGdlcy4gVGhp
cyBtZWFucyB0aGF0CisgICAgICAgIC8vIHdlIHRyYW5zZm9ybToKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gcDogUGhpKEBuMSwgQG4yLCBAbjMpCisgICAgICAgIC8vCisgICAgICAgIC8vIGludG86
CisgICAgICAgIC8vCisgICAgICAgIC8vIHA6IFBoaShAeCkKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gaWYgZWFjaCBAbmkgaW4ge0BuMSwgQG4yLCBAbjN9IGlzIGVpdGhlciBlcXVhbCB0byBAcCB0
byBpcyBlcXVhbAorICAgICAgICAvLyB0byBAeCwgZm9yIGV4YWN0bHkgb25lIG90aGVyIEB4LiBB
ZGRpdGlvbmFsbHksIHRyaXZpYWwgUGhpcyAoaS5lLgorICAgICAgICAvLyBwOiBQaGkoQHgpKSBh
cmUgZm9yd2FyZGVkLCBzbyB0aGF0IGlmIGhhdmUgYW4gZWRnZSB0byBzdWNoIEBwLCB3ZQorICAg
ICAgICAvLyByZXBsYWNlIGl0IHdpdGggQHguIFRoaXMgbG9vcCBkb2VzIHRoaXMgZm9yIFBoaXMg
b25seTsgbGF0ZXIgd2UgZG8KKyAgICAgICAgLy8gc3VjaCBmb3J3YXJkaW5nIGZvciBQaGkgcmVm
ZXJlbmNlcyBmb3VuZCBpbiBvdGhlciBub2Rlcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2Vl
IEF5Y29jayBhbmQgSG9yc3Bvb2wgaW4gQ0MnMDAgZm9yIGEgYmV0dGVyIGRlc2NyaXB0aW9uIG9m
IHdoYXQKKyAgICAgICAgLy8gd2UncmUgZG9pbmcgaGVyZS4KKyAgICAgICAgZG8geworICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNp
emUoKTsgcGhpSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gYmxv
Y2stPnBoaXNbcGhpSW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAocGhpLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIGZvcndhcmRQaGlDaGlsZHJlbihwaGkpOworICAg
ICAgICAgICAgICAgICAgICBkZWR1cGxpY2F0ZUNoaWxkcmVuKHBoaSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgICAg
ICAKKyAgICAgICAgLy8gRm9yIGVhY2ggYmFzaWMgYmxvY2ssIGZvciBlYWNoIGxvY2FsIGxpdmUg
YXQgdGhlIGhlYWQgb2YgdGhhdCBibG9jaywKKyAgICAgICAgLy8gZmlndXJlIG91dCB3aGF0IG5v
ZGUgd2Ugc2hvdWxkIGJlIHJlZmVycmluZyB0byBpbnN0ZWFkIG9mIHRoYXQgbG9jYWwuCisgICAg
ICAgIC8vIElmIGl0IHR1cm5zIG91dCB0byBiZSBhIG5vbi10cml2aWFsIFBoaSwgbWFrZSBzdXJl
IHRoYXQgdG8gY3JlYXRlIGFuCisgICAgICAgIC8vIFNTQSBQaGkgYW5kIFVwc2lsb25zIGluIHBy
ZWRlY2Vzc29yIGJsb2Nrcy4gV2UgcmV1c2UKKyAgICAgICAgLy8gQmFzaWNCbG9jazo6dmFyaWFi
bGVzQXRIZWFkIGZvciB0cmFja2luZyB3aGljaCBub2RlcyB0byByZWZlciB0by4KKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOworICAgICAgICAgICAgICAgIGlmICgh
bm9kZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJl
ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFBvaXNvbiB0aGlzIGVudHJ5IGluIHZhcmlh
Ymxlc0F0SGVhZCBiZWNhdXNlIHdlIGRvbid0CisgICAgICAgICAgICAgICAgICAgIC8vIHdhbnQg
YW55b25lIHRvIHRyeSB0byByZWZlciB0byBpdCwgaWYgdGhlIHZhcmlhYmxlIGlzCisgICAgICAg
ICAgICAgICAgICAgIC8vIGNhcHR1cmVkLgorICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFy
aWFibGVzQXRIZWFkW2ldID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgICAg
IGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAg
ICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gUGhpIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFBoaSkgeworICAg
ICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5qdXN0T25lQ2hpbGQo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UpCisgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlID0gZWRnZS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSXQncyBhIG5vbi10cml2aWFsIFBoaS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSBtX2luc2VydGlvblNldC5pbnNlcnQoMCwgU3BlY05vbmUsIFBo
aSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS07KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+
cHJlZGVjZXNzb3JzW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHVwc2ls
b24gPSBwcmVkZWNlc3Nvci0+YXBwZW5kTm9uVGVybWluYWwoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBPcEluZm8obm9kZSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yLT52YXJpYWJsZXNBdFRh
aWxbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUsIE1vdkhpbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChv
cGVyYW5kKS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0g
PSBub2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ29udmVydCBvcGVy
YXRpb25zIG92ZXIgbG9jYWxzIGludG8gb3BlcmF0aW9ucyBvdmVyIFNTQSBub2Rlcy4KKyAgICAg
ICAgLy8gLSBHZXRMb2NhbCBvdmVyIGNhcHR1cmVkIHZhcmlhYmxlcyBsb3NlIHRoZWlyIHBoaXMu
CisgICAgICAgIC8vIC0gR2V0TG9jYWwgb3ZlciB1bmNhcHR1cmVkIHZhcmlhYmxlcyBkaWUgYW5k
IGdldCByZXBsYWNlZCB3aXRoIHJlZmVyZW5jZXMKKyAgICAgICAgLy8gICB0byB0aGUgbm9kZSBz
cGVjaWZpZWQgYnkgdmFyaWFibGVzQXRIZWFkLgorICAgICAgICAvLyAtIFNldExvY2FsIGdldHMg
Tm9kZU11c3RHZW5lcmF0ZSBpZiBpdCdzIGZsdXNoZWQuCisgICAgICAgIC8vIC0gRmx1c2ggbG9z
ZXMgaXRzIGNoaWxkcmVuIGJ1dCByZW1haW5zLCBiZWNhdXNlIHdlIHdhbnQgdG8ga25vdyB3aGVu
IGEKKyAgICAgICAgLy8gICBmbHVzaGVkIFNldExvY2FsJ3MgdmFsdWUgaXMgbm8gbG9uZ2VyIG5l
ZWRlZC4gVGhpcyBhbHNvIG1ha2VzIGl0IHNpbXBsZXIKKyAgICAgICAgLy8gICB0byByZWFzb24g
YWJvdXQgdGhlIGZvcm1hdCBvZiBhIGxvY2FsLCBzaW5jZSB3ZSBjYW4ganVzdCBmb2xkIGl0IGlu
dG8gdGhlCisgICAgICAgIC8vICAgYmFja3dhcmRzIGFuYWx5c2lzIHRoYXQgTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlIGRvZXMuIEFzIHBhcnQgb2YgdGhlCisgICAgICAgIC8vICAgYmFja3dhcmRzIGFu
YWx5c2lzLCB3ZSBzYXkgdGhhdCB0aGUgdHlwZSBvZiBhIGxvY2FsIGNhbiBiZSBlaXRoZXIKKyAg
ICAgICAgLy8gICBpbnQzMiwgZG91YmxlLCB2YWx1ZSwgb3IgZGVhZC4KKyAgICAgICAgLy8gLSBQ
aGFudG9tTG9jYWwgYmVjb21lcyBQaGFudG9tLCBhbmQgaXRzIGNoaWxkIGlzIHdoYXRldmVyIGlz
IHNwZWNpZmllZAorICAgICAgICAvLyAgIGJ5IHZhcmlhYmxlc0F0SGVhZC4KKyAgICAgICAgLy8g
LSBTZXRBcmd1bWVudCB0dXJucyBpbnRvIEdldExvY2FsLgorICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNp
emUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgICAgIGJsb2NrLT5hdChub2RlSW5kZXgp
LT5yZXBsYWNlbWVudCA9IDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0
aW9uKG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQo
KSB8fCBtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVz
QXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGNhc2UgRmx1c2g6IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
cmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDog
eworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldE5vZGUoYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFNl
dEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKEdldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBGcmVlIGFsbCBwaGlzIGFuZCByZXNldCB2YXJpYWJsZXMgdmVjdG9ycy4K
KyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nrcygp
OyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJs
b2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgICAgICBibG9j
ay0+cGhpcy5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5jbGVh
cigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5jbGVhcigpOworICAgICAg
ICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZh
bHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnNzYSA9IGFkb3B0UHRyKG5l
dyBCYXNpY0Jsb2NrOjpTU0FEYXRhKGJsb2NrKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIG1fZ3JhcGgubV9mb3JtID0gU1NBOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGZv
cndhcmRQaGlDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAgICAgICAgICAgRWRn
ZSYgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOworICAgICAgICAgICAgaWYgKCFlZGdl
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IGZv
cndhcmRQaGlFZGdlKGVkZ2UpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGUqIGZv
cndhcmRQaGkoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAg
ICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5qdXN0T25lQ2hpbGQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAg
ICAgICAgICAgIHJldHVybiBlZGdlLm5vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAg
ICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBi
b29sIGZvcndhcmRQaGlFZGdlKEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBOb2RlKiBuZXdO
b2RlID0gZm9yd2FyZChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChuZXdOb2RlID09IGVkZ2Uu
bm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBlZGdlLnNldE5vZGUo
bmV3Tm9kZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRl
ZHVwbGljYXRlQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKKyAgICAgICAgICAgIEVk
Z2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOworICAgICAgICAgICAgaWYgKCFlZGdl
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGVkZ2UgPT0gbm9kZSkg
eworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2UoaS0tKTsKKyAgICAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBB
ZGphY2VuY3lMaXN0OjpTaXplOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGRyZW4uY2hpbGQoaikgPT0gZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZHJlbi5yZW1vdmVFZGdlKGotLSk7CisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHZvaWQgZm9yd2FyZE5vZGVDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgZm9yd2FyZE5vZGVF
ZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmb3J3YXJkTm9kZUVkZ2UoTm9kZSosIEVkZ2Um
IGVkZ2UpCisgICAgeworICAgICAgICBpZiAoZWRnZS0+b3AoKSAKKyAgICAgICAgc3dpdGNoIChl
ZGdlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxPcChOb2RlKiBub2RlKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wcy5hZGQobm9kZSk7CisgICAgICAgIG1fZmx1
c2hlZExvY2FsT3BXb3JrbGlzdC5hcHBlbmQobm9kZSk7CisgICAgfQorCisgICAgdm9pZCBhZGRG
bHVzaGVkTG9jYWxFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBhZGRGbHVz
aGVkTG9jYWxPcChlZGdlLm5vZGUoKSk7CisgICAgfQorCisgICAgSW5zZXJ0aW9uU2V0IG1faW5z
ZXJ0aW9uU2V0OworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BzOworICAgIFZl
Y3RvcjxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OworICAgIGJvb2wgbV9jaGFuZ2Vk
OworfTsKKworYm9vbCBwZXJmb3JtU1NBQ29udmVyc2lvbihHcmFwaCYgZ3JhcGgpCit7CisgICAg
U2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBTU0EgQ29udmVyc2lvbiBQaGFzZSIp
OworICAgIHJldHVybiBydW5QaGFzZTxTU0FDb252ZXJzaW9uUGhhc2U+KGdyYXBoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdTU0FD
b252ZXJzaW9uUGhhc2VfaAorI2RlZmluZSBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29udmVydCBUaHJl
YWRlZENQUyBmb3JtIGludG8gU1NBIGZvcm0uIFRoaXMgcmVzdWx0cyBpbiBhIGZvcm0gdGhhdCBo
YXM6CisvLworLy8gLSBSb3VnaGx5IG1pbmltYWwgUGhpJ3MuIFdlIHVzZSB0aGUgQXljb2NrICYg
SG9yc3Bvb2wgZml4cG9pbnQgZm9yCisvLyAgIGNvbnZlcnRpbmcgdGhlIENQUyBtYXhpbWFsIFBo
aXMgaW50byBTU0EgbWluaW1hbCBQaGlzLCB3aXRoIHRoZSBjYXZlYXQKKy8vICAgdGhhdCBpcnJl
ZHVjaWJsZSBjb250cm9sIGZsb3cgbWF5IHJlc3VsdCBpbiBzb21lIG1pc3NlZCBvcHBvcnR1bml0
aWVzCisvLyAgIGZvciBQaGkgcmVkdWN0aW9uLgorLy8KKy8vIC0gTm8gdXNlcyBvZiBHZXRMb2Nh
bC9TZXRMb2NhbCBleGNlcHQgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcyBhbmQgZmx1c2hlcy4KKy8v
ICAgQWZ0ZXIgdGhpcywgYW55IHJlbWFpbmluZyBTZXRMb2NhbCBtZWFucyBGbHVzaC4gRmx1c2gg
bm9kZXMgYXJlCisvLyAgIGVsaW1pbmF0ZWQuIFBoYW50b21Mb2NhbHMgYmVjb21lIFBoYW50b21z
LiBOb2RlcyBtYXkgbWF5IGhhdmUgY2hpbGRyZW4KKy8vICAgdGhhdCBhcmUgaW4gYW5vdGhlciBi
YXNpYyBibG9jay4KKy8vCisvLyAtIE1vdkhpbnRzIGFyZSB1c2VkIGZvciBPU1IgaW5mb3JtYXRp
b24sIGFuZCBhcmUgdGhlbXNlbHZlcyBtaW5pbWFsLgorLy8gICBBIE1vdkhpbnQgd2lsbCBvY2N1
ciBhdCBzb21lIHBvaW50IGFmdGVyIHRoZSBhc3NpZ25pbmcsIGFuZCBhdCBQaGkKKy8vICAgcG9p
bnRzLgorLy8KKy8vIC0gVW5saWtlIGNvbnZlbnRpb25hbCBTU0EgaW4gd2hpY2ggUGhpIGZ1bmN0
aW9ucyByZWZlciB0byBwcmVkZWNlc3NvcnMKKy8vICAgYW5kIHZhbHVlcywgb3VyIFNTQSB1c2Vz
IFVwc2lsb24gZnVuY3Rpb25zIHRvIGluZGljYXRlIHZhbHVlcyBpbgorLy8gICBwcmVkZWNlc3Nv
cnMuIEEgbWVyZ2Ugd2lsbCBsb29rIGxpa2U6CisvLworLy8gICBsYWJlbEE6CisvLyAgICAgICBh
OiBUaGluZ3koLi4uKQorLy8gICAgICAgYjogVXBzaWxvbiheZSwgQGEpCisvLyAgICAgICBKdW1w
KGxhYmVsQykKKy8vCisvLyAgIGxhYmVsQjoKKy8vICAgICAgIGM6IE90aGVyVGhpbmd5KC4uLikK
Ky8vICAgICAgIGQ6IFVwc2lsb24oXmUsIEBjKQorLy8gICAgICAgSnVtcChsYWJlbEMpCisvLwor
Ly8gICBsYWJlbEM6CisvLyAgICAgICBlOiBQaGkoKQorLy8KKy8vICAgTm90ZSB0aGF0IHRoZSBQ
aGkgaGFzIG5vIGNoaWxkcmVuLCBidXQgdGhlIHByZWRlY2Vzc29ycyBoYXZlIFVwc2lsb25zCisv
LyAgIHRoYXQgaGF2ZSBhIHdlYWsgcmVmZXJlbmNlIHRvIHRoZSBQaGkgKF5lIGluc3RlYWQgb2Yg
QGU7IHdlIHN0b3JlIGl0CisvLyAgIGluIHRoZSBPcEluZm8gcmF0aGVyIHRoYW4gdGhlIEFkamFj
ZW5jeUxpc3QpLiBUaGluayBvZiB0aGUgVXBzaWxvbgorLy8gICBhcyAiYXNzaWduaW5nIiB0byB0
aGUgInZhcmlhYmxlIiBhc3NvY2lhdGVkIHdpdGggdGhlIFBoaSwgYW5kIHRoYXQKKy8vICAgdGhp
cyBpcyB0aGUgb25lIHBsYWNlIGluIFNTQSBmb3JtIHdoZXJlIHlvdSBjYW4gaGF2ZSBtdWx0aXBs
ZQorLy8gICBhc3NpZ25tZW50cy4KKy8vCisvLyAgIFRoaXMgaW1wbGllcyBzb21lIG90aGVyIGxv
b3NlbmluZ3Mgb2YgU1NBLiBGb3IgZXhhbXBsZSwgYW4gVXBzaWxvbgorLy8gICBtYXkgcHJlY2Vk
ZSBhIFBoaSBpbiB0aGUgc2FtZSBiYXNpYyBibG9jazsgdGhpcyBtYXkgYXJpc2UgYWZ0ZXIgQ0ZH
CisvLyAgIHNpbXBsaWZpY2F0aW9uLiBBbHRob3VnaCBpdCdzIHByb2ZpdGFibGUgZm9yIENGRyBz
aW1wbGlmaWNhdGlvbiAob3IKKy8vICAgc29tZSBvdGhlciBwaGFzZSkgdG8gcmVtb3ZlIHRoZXNl
LCBpdCdzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuIEFzCisvLyAgIHdlbGwsIHRoaXMgZm9ybSBh
bGxvd3MgdGhlIFVwc2lsb24gdG8gYmUgaW4gYW55IGJsb2NrIHRoYXQgZG9taW5hdGVzCisvLyAg
IHRoZSBwcmVkZWNlc3NvciBibG9jayBvZiB0aGUgUGhpLCB3aGljaCBhbGxvd3MgZm9yIGJsb2Nr
IHNwbGl0dGluZyB0bworLy8gICBpZ25vcmUgdGhlIHBvc3NpYmlsaXR5IG9mIGludHJvZHVjaW5n
IGFuIGV4dHJhIGVkZ2UgYmV0d2VlbiB0aGUgUGhpCisvLyAgIGFuZCB0aGUgcHJlZGVjZXNzb3Ig
KHRob3VnaCBub3JtYWwgU1NBIHdvdWxkIGFsbG93IHRoaXMsIGFsc28sIHdpdGgKKy8vICAgdGhl
IGNhdmVhdCB0aGF0IHRoZSBQaGkgcHJlZGVjZXNzb3IgYmxvY2sgbGlzdHMgd291bGQgaGF2ZSB0
byBiZQorLy8gICB1cGRhdGVkKS4KKy8vCisvLyAgIFRoZSBlYXNpZXN0IHdheSB0byBjb252ZXJ0
IGZyb20gdGhpcyBTU0EgZm9ybSBpbnRvIGEgZGlmZmVyZW50IFNTQQorLy8gICBmb3JtIGlzIHRv
IHJlZG8gU1NBIGNvbnZlcnNpb24gZm9yIFBoaSBmdW5jdGlvbnMuIFRoYXQgaXMsIHRyZWF0IGVh
Y2gKKy8vICAgUGhpIGluIG91ciBJUiBhcyBhIG5vbi1TU0EgdmFyaWFibGUgaW4gdGhlIGZvcmVp
Z24gSVIgKHNvLCBhcyBhbgorLy8gICBhbGxvY2EgaW4gTExWTSBJUiwgZm9yIGV4YW1wbGUpOyB0
aGUgVXBzaWxvbnMgdGhhdCByZWZlciB0byB0aGUgUGhpCisvLyAgIGJlY29tZSBzdG9yZXMgYW5k
IHRoZSBQaGlzIHRoZW1zZWx2ZXMgYmVjb21lIGxvYWRzLgorLy8KKy8vICAgRnVuIGZhY3Q6IFVw
c2lsb24gaXMgc28gbmFtZWQgYmVjYXVzZSBpdCBjb21lcyBiZWZvcmUgUGhpIGluIHRoZQorLy8g
ICBhbHBoYWJldC4gSXQgY2FuIGJlIHdyaXR0ZW4gYXMgIlkiLgorCitib29sIHBlcmZvcm1TU0FD
b252ZXJzaW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHU1NBQ29udmVyc2lvblBoYXNlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNiArMzE4LDI3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNoZWNrQW5kU2V0KG1fZmxhZ3MsIG1fZmxhZ3Mg
fCBuZXdGbGFncyk7CiAgICAgfQogICAgIAorICAgIEZsdXNoRm9ybWF0IGZsdXNoRm9ybWF0KCkK
KyAgICB7CisgICAgICAgIGlmICghc2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpCisgICAgICAgICAg
ICByZXR1cm4gRmx1c2hlZEpTVmFsdWU7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpCisgICAgICAgICAgICByZXR1cm4gRmx1c2hlZERvdWJsZTsKKyAgICAg
ICAgCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhcmd1bWVudEF3YXJlUHJl
ZGljdGlvbigpOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQor
ICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRJbnQzMjsKKyAgICAgICAgCisgICAgICAgIGlmIChp
c0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVk
Q2VsbDsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0
aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkQm9vbGVhbjsKKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBGbHVzaGVkSlNWYWx1ZTsKKyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIC8v
IFRoaXMgaXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRoaW5nIHdlJ3Jl
IHVuaWZpZWQgd2l0aAogICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2FtZSBvcGVyYW5kIGFuZCBzaG91
bGQgaGF2ZSB0aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTI0MzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDE5ICsxMDQsMTggQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFt
X2hpZ2hCbG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fYmxv
Y2tzLmFkZChtX2hpZ2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9jayAiLCAqbV9o
aWdoQmxvY2spKSk7Ci0gICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygpOwotICAg
ICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9hcmd1bWVudENoZWNrcywgbG93QmxvY2so
bV9ncmFwaC5ibG9jaygwKSkpOwogCi0gICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMo
KTsKKyAgICAgICAgY2hlY2tBcmd1bWVudHMoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1
bXAobG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSkpOwogICAgICAgICAKLSAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3Mo
KTsgKytibG9ja0luZGV4KQotICAgICAgICAgICAgY29tcGlsZUJsb2NrKGJsb2NrSW5kZXgpOwor
ICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7CisgICAgICAgIG1fZ3JhcGgu
Z2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKQorICAgICAgICAgICAgY29t
cGlsZUJsb2NrKGRlcHRoRmlyc3RbaV0pOwogICAgICAgICAKICAgICAgICAgLy8gQW5kIG5vdyBj
b21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gYmxvY2suCiAgICAgICAgIGxpbmtPU1JFeGl0c0Fu
ZENvbXBsZXRlSW5pdGlhbGl6YXRpb25CbG9ja3MoKTsKQEAgLTEyOSw0MSArMTI4LDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIAotICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsT3BSb290cygp
Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IG1faGlnaEJsb2NrLT5z
aXplKCk7IG5vZGVJbmRleC0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJs
b2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gRmx1c2gp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxP
cChub2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNsb3NlT3ZlckZsdXNo
ZWRMb2NhbE9wcygpCi0gICAgewotICAgICAgICB3aGlsZSAoIW1fZmx1c2hlZExvY2FsT3BXb3Jr
bGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2ZsdXNoZWRMb2Nh
bE9wV29ya2xpc3QubGFzdCgpOwotICAgICAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0
LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fZmx1c2hl
ZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgREZH
X05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkRmx1c2hlZExvY2FsRWRnZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxPcChOb2Rl
KiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5v
ZGUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wcy5hZGQo
bm9kZSk7Ci0gICAgICAgIG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5hcHBlbmQobm9kZSk7Ci0g
ICAgfQotICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsRWRnZShOb2RlKiwgRWRnZSBlZGdlKQotICAg
IHsKLSAgICAgICAgYWRkRmx1c2hlZExvY2FsT3AoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKQorICAgIHZvaWQgY2hlY2tBcmd1
bWVudHMoKQogICAgIHsKICAgICAgICAgLy8gV2hpbGUgY2hlY2tpbmcgYXJndW1lbnRzLCBldmVy
eXRoaW5nIGlzIGluIHRoZSBzdGFjay4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YWx1
ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KQpAQCAtMTcyLDU2ICsxMzcsNDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbigwKTsKICAgICAgICAgbV9ub2RlID0gMDsK
ICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9ncmFwaC5tX2NvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dy
YXBoLm1fYXJndW1lbnRzW2ldOwotICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
bV9ncmFwaC5ibG9jaygwKS0+Zmx1c2hGb3JtYXRBdEhlYWQuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBtX2dyYXBoLmJsb2NrKDApLT5mbHVzaEZvcm1h
dEF0SGVhZFtpXTsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5ibG9jaygwKS0+
Zmx1c2hGb3JtYXRBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgICAgICAvLyBJZiBpdCdzIGNhcHR1cmVkIHRoZW4gd2UnbGwgYmUg
YWNjZXNzaW5nIGl0IHRocm91Z2ggbG9hZHMgYW5kIHN0b3JlcwotICAgICAgICAgICAgLy8gYW55
d2F5IC0gdGhlcmUncyBubyBwb2ludCBpbiB0cmFuc2ZlcmluZyBpdCBvdXQuCi0gICAgICAgICAg
ICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0g
RGVhZEZsdXNoIHx8IGZvcm1hdCA9PSBGbHVzaGVkSlNWYWx1ZSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291
dC5sb2FkNjQoYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZm9ybWF0ICE9IEZsdXNoZWREb3VibGUpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQo
KSk7CisgICAgICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9y
KHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAg
ICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVC
YWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIo
anNWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2
YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGNhc2UgRmx1
c2hlZENlbGw6IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBq
c1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1
ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBtX291
dC5zZXQodW5ib3hJbnQzMihqc1ZhbHVlKSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46IHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlz
Tm90Qm9vbGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0
aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJk
KEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUp
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1fbG9jYWxzNjQub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0
aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJk
KEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFs
dWUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHVuYm94Qm9vbGVhbihqc1ZhbHVl
KSwgbV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlQmxvY2soQmxv
Y2tJbmRleCBibG9ja0luZGV4KQorICAgIHZvaWQgY29tcGlsZUJsb2NrKEJhc2ljQmxvY2sqIGJs
b2NrKQogICAgIHsKLSAgICAgICAgbV9oaWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgICAgICBtX2hpZ2hCbG9jayA9IGJsb2NrOwogICAgICAgICBpZiAoIW1faGlnaEJs
b2NrKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sg
bG93QmxvY2sgPSBtX2Jsb2Nrcy5nZXQobV9oaWdoQmxvY2spOwogICAgICAgICAKICAgICAgICAg
bV9uZXh0SGlnaEJsb2NrID0gMDsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IG5leHRCbG9ja0lu
ZGV4ID0gYmxvY2tJbmRleCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3Mo
KTsgKytuZXh0QmxvY2tJbmRleCkgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2Nr
SW5kZXggPSBtX2hpZ2hCbG9jay0+aW5kZXggKyAxOyBuZXh0QmxvY2tJbmRleCA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIG1fbmV4dEhpZ2hC
bG9jayA9IG1fZ3JhcGguYmxvY2sobmV4dEJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKG1f
bmV4dEhpZ2hCbG9jaykKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0MSwxMSArMTk5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JC
bG9jaygpOwogICAgICAgICAKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5jbGVhcigpOwotICAgICAg
ICBtX2pzVmFsdWVWYWx1ZXMuY2xlYXIoKTsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmNsZWFy
KCk7Ci0gICAgICAgIG1fc3RvcmFnZVZhbHVlcy5jbGVhcigpOwotICAgICAgICBtX3RpbWVUb0xp
dmUuY2xlYXIoKTsKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKICAg
ICAgICAgCiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJh
c2ljQmxvY2sobV9oaWdoQmxvY2spOwpAQCAtNDQ1LDggKzM5OSw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmIChtX25vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBERkdfTk9ERV9E
T19UT19DSElMRFJFTihtX2dyYXBoLCBtX25vZGUsIHVzZSk7CiAgICAgICAgIAotICAgICAgICBp
ZiAobV9ub2RlLT5oYXNSZXN1bHQoKSkKLSAgICAgICAgICAgIG1fdGltZVRvTGl2ZS5hZGQobV9u
b2RlLCBtX25vZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7CisgICAgICAgIGlmIChtX25vZGUtPmFk
anVzdGVkUmVmQ291bnQoKSkKKyAgICAgICAgICAgIG1fbGl2ZS5hZGQobV9ub2RlKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKICAgICAgICAgICAgIG1fc3Rh
dGUuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKQEAgLTQ1OCwxNCArNDEyLDE0IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25z
dGFudChtX25vZGUpOwogICAgICAgICBpZiAodmFsdWUuaXNEb3VibGUoKSkKLSAgICAgICAgICAg
IG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmNvbnN0RG91YmxlKHZhbHVlLmFzRG91
YmxlKCkpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5jb25zdERvdWJsZSh2YWx1ZS5h
c0RvdWJsZSgpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5h
ZGQobV9ub2RlLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpKTsKKyAg
ICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUodmFs
dWUpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVdlYWtKU0NvbnN0YW50KCkKICAg
ICB7Ci0gICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCB3ZWFrUG9pbnRlcihtX25v
ZGUtPndlYWtDb25zdGFudCgpKSk7CisgICAgICAgIHNldEpTVmFsdWUod2Vha1BvaW50ZXIobV9u
b2RlLT53ZWFrQ29uc3RhbnQoKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRM
b2NhbCgpCkBAIC00OTIsMTUgKzQ0NiwxNSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAg
aWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKICAgICAgICAgICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb24odmFsdWUubV92YWx1ZSkpCi0gICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5h
ZGQobV9ub2RlLCBtX291dC5sb2FkMzIocGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsK
KyAgICAgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcih2YXJpYWJs
ZS0+bG9jYWwoKSkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2pzVmFs
dWVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQubG9hZDY0KGFkZHJlc3NGb3IodmFyaWFibGUtPmxv
Y2FsKCkpKSk7CisgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRkcmVz
c0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUo
KSkgewogICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkg
ewotICAgICAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmdldCht
X2xvY2Fsc0RvdWJsZS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOworICAgICAgICAgICAg
ICAgIHNldERvdWJsZShtX291dC5nZXQobV9sb2NhbHNEb3VibGUub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTUwOSwxOCArNDYzLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBz
cGVjdWxhdGVkIG9uIFNldExvY2FsIGFuZCB3aWxsIGFsd2F5cyBiZSBzdG9yZWQgaW50byBhbiBh
cHByb3ByaWF0ZWx5CiAgICAgICAgICAgICAvLyB0eXBlZCByZWZlcmVuY2UgTFZhbHVlLgogICAg
ICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAg
ICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZ2V0KG1fbG9jYWxzMzIub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihtX291
dC5nZXQobV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgIG1fYm9vbGVhblZhbHVl
cy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpKSk7CisgICAgICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5nZXQobV9sb2Nh
bHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gV2Ugc2tpcCB0aGUgQ2VsbCBj
YXNlIGhlcmUgYmVjYXVzZSB0aGF0IGdldHMgdHJlYXRlZCBpZGVudGljYWxseSB0bwogICAgICAg
ICAgICAgLy8gSlNWYWx1ZXMsIHNpbmNlIGNlbGxzIGFyZSBzdG9yZWQgdW50YWdnZWQuCiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291
dC5nZXQobV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOworICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LmdldChtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVNldExvY2FsKCkKQEAgLTYyMCwxMyAr
NTc0LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVDYW5U
cnVuY2F0ZUludGVnZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAg
ICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuYWRkKGxlZnQsIHJpZ2h0KSk7Cisg
ICAgICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuYWRkKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IExWYWx1ZSByZXN1bHQgPSBtX291dC5hZGRXaXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7CiAg
ICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFj
dFZhbHVlKHJlc3VsdCwgMSkpOwotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2Rl
LCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CisgICAgICAgICAgICBzZXRJbnQzMiht
X291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC02NTEsMTMgKzYwNSwxMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG1fbm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25v
ZGUsIG1fb3V0LnN1YihsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgICAgIHNldEludDMyKG1f
b3V0LnN1YihsZWZ0LCByaWdodCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuc3Vi
V2l0aE92ZXJmbG93MzIobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJm
bG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKLSAgICAg
ICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3Vs
dCwgMCkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwg
MCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNzAz
LDcgKzY1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNl
dEludDMyKHJlc3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC04MDAsNyArNzU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oZG9uZSwgbGFzdE5leHQpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVz
dWx0cykpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1
bHRzKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC04
OTEsNyArODQ1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oZG9uZSwgbGFzdE5leHQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2lu
dDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cykpOwor
ICAgICAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC05MTUsOCArODY5
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQo
Ci0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0SW50MzIoCiAgICAgICAg
ICAgICAgICAgbV9vdXQuc2VsZWN0KAogICAgICAgICAgICAgICAgICAgICBtX25vZGUtPm9wKCkg
PT0gQXJpdGhNaW4KICAgICAgICAgICAgICAgICAgICAgICAgID8gbV9vdXQubGVzc1RoYW4obGVm
dCwgcmlnaHQpCkBAIC05NTAsNyArOTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVl
cy5hZGQobV9ub2RlLCBtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgcmVzdWx0cykpOworICAg
ICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCByZXN1bHRzKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC05NzEsMTIg
KzkyNCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBzcGVjdWxhdGUo
T3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXF1YWwocmVzdWx0LCBtX291dC5jb25zdElu
dDMyKDEgPDwgMzEpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMu
YWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVt
YmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5k
b3VibGVBYnMobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICBzZXRE
b3VibGUobV9vdXQuZG91YmxlQWJzKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTAwMywxMiArOTU2
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuZXh0cmFjdFZh
bHVlKG92ZXJmbG93UmVzdWx0LCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAg
c2V0SW50MzIocmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFs
dWVzLmFkZChtX25vZGUsIG1fb3V0LmRvdWJsZU5lZyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSkpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5kb3VibGVOZWcobG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC0xMDIwLDQ3ICs5NzMsMzggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNv
bXBpbGVCaXRBbmQoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAg
ICAgICBtX25vZGUsIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQuYml0QW5k
KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVCaXRPcigpCiAgICAgewotICAgICAgICBt
X2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwgbV9vdXQuYml0T3IobG93SW50
MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAg
ICAgIHNldEludDMyKG1fb3V0LmJpdE9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVC
aXRYb3IoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICBt
X25vZGUsIG1fb3V0LmJpdFhvcihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIo
bV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQuYml0WG9yKGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVCaXRSU2hpZnQoKQogICAgIHsKLSAgICAgICAgbV9p
bnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsCi0gICAgICAgICAgICBtX291dC5h
U2hyKAotICAgICAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAg
ICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQu
Y29uc3RJbnQzMigzMSkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmFTaHIoCisgICAgICAg
ICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgIG1fb3V0LmJpdEFu
ZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdExTaGlmdCgpCiAgICAgewotICAgICAgICBt
X2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKLSAgICAgICAgICAgIG1fb3V0
LnNobCgKLSAgICAgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAg
ICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0
LmNvbnN0SW50MzIoMzEpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5zaGwoCisgICAgICAg
ICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgIG1fb3V0LmJpdEFu
ZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdFVSU2hpZnQoKQogICAgIHsKLSAgICAgICAg
bV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsCi0gICAgICAgICAgICBtX291
dC5sU2hyKAotICAgICAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAg
ICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9v
dXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmxTaHIoCisgICAg
ICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgIG1fb3V0LmJp
dEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVVJbnQzMlRvTnVtYmVyKCkKQEAgLTEwNjgs
MTQgKzEwMTIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIo
bV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgaWYgKCFub2RlQ2FuU3BlY3VsYXRlSW50ZWdl
cihtX25vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVl
cy5hZGQobV9ub2RlLCBtX291dC51bnNpZ25lZFRvRG91YmxlKHZhbHVlKSk7CisgICAgICAgICAg
ICBzZXREb3VibGUobV9vdXQudW5zaWduZWRUb0RvdWJsZSh2YWx1ZSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGVGb3J3YXJkKAog
ICAgICAgICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4odmFsdWUs
IG1fb3V0LmludDMyWmVybyksCiAgICAgICAgICAgICBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1h
dFVJbnQzMiwgdmFsdWUpKTsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCB2YWx1
ZSk7CisgICAgICAgIHNldEludDMyKHZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlSW50MzJUb0RvdWJsZSgpCkBAIC0xMDg3LDcgKzEwMzEsNyBAQCBwcml2YXRlOgogICAgICAg
ICAvLyBjb250ZW1wb3JhbmVvdXMgbG93LWxldmVsIHJlcHJlc2VudGF0aW9ucy4gU28sIHRoaXMg
Z2l2ZXMgY2hpbGQxIGEgZG91YmxlCiAgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGFuZCB0aGVu
IGZvcndhcmRzIHRoYXQgcmVwcmVzZW50YXRpb24gdG8gbV9ub2RlLgogICAgICAgICAKLSAgICAg
ICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkp
KTsKKyAgICAgICAgc2V0RG91YmxlKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKCkKQEAgLTEyMTUsOCArMTE1
OSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0QnV0dGVyZmx5KCkKICAg
ICB7Ci0gICAgICAgIG1fc3RvcmFnZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsIG1f
b3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU09iamVjdF9i
dXR0ZXJmbHkpKTsKKyAgICAgICAgc2V0U3RvcmFnZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZUdldEFycmF5TGVuZ3RoKCkKQEAgLTEyMjUsOCArMTE2OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5
OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAg
IG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwgbV9vdXQubG9hZDMy
KGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDIoKSksIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKGxvd1N0b3JhZ2UobV9u
b2RlLT5jaGlsZDIoKSksIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTI1Niw3ICsxMTk4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSwgbV9vdXQuemVyb0V4dChp
bmRleCwgbV9vdXQuaW50UHRyKSwKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5mb3JOb2Rl
KG1fbm9kZS0+Y2hpbGQyKCkpLm1fdmFsdWUpKTsKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
TG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIDAsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwotICAg
ICAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAg
ICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEyODgsNyArMTIzMCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgMCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQocmVz
dWx0LCByZXN1bHQpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9kb3Vi
bGVWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUo
cmVzdWx0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtMTQxMiw3ICsxMzU0LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBp
bGVHZXRHbG9iYWxWYXIoKQogICAgIHsKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25v
ZGUsIG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShtX25vZGUtPnJlZ2lzdGVyUG9pbnRlcigp
KSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShtX25v
ZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVQ
dXRHbG9iYWxWYXIoKQpAQCAtMTU3Nyw3ICsxNTE5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIGNvbXBpbGVMb2dpY2FsTm90KCkKICAgICB7Ci0gICAgICAgIG1fYm9vbGVhblZhbHVlcy5h
ZGQobV9ub2RlLCBtX291dC5iaXROb3QoYm9vbGlmeShtX25vZGUtPmNoaWxkMSgpKSkpOworICAg
ICAgICBzZXRCb29sZWFuKG1fb3V0LmJpdE5vdChib29saWZ5KG1fbm9kZS0+Y2hpbGQxKCkpKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUp1bXAoKQpAQCAtMTk5OSwxMCArMTk0MSwx
MyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2Ug
fHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25JbnQzMlVzZSkpOwogICAgICAgICAKLSAgICAgICAg
aWYgKExWYWx1ZSByZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSBib3hl
ZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgIExv
d2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Cisg
ICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1
ZSgpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFs
dWUgYm94ZWRSZXN1bHQgPSB2YWx1ZS52YWx1ZSgpOwogICAgICAgICAgICAgRlRMX1RZUEVfQ0hF
Q0soCiAgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkUmVzdWx0KSwgZWRnZSwgU3Bl
Y0ludDMyLCBpc05vdEludDMyKGJveGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gdW5ib3hJbnQzMihib3hlZFJlc3VsdCk7CkBAIC0yMDE5LDEwICsxOTY0LDExIEBAIHBy
aXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzQ2VsbChlZGdlLnVzZUtpbmQoKSkpOwogICAgICAgICAK
LSAgICAgICAgaWYgKExWYWx1ZSB1bmNoZWNrZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0
KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9qc1Zh
bHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkg
ewogICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAganNWYWx1ZVZh
bHVlKHVuY2hlY2tlZFJlc3VsdCksIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2Vk
UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gdW5jaGVja2VkUmVzdWx0OworICAgICAgICAg
ICAgICAgIGpzVmFsdWVWYWx1ZSh1bmNoZWNrZWRSZXN1bHQpLCBlZGdlLCBTcGVjQ2VsbCwgaXNO
b3RDZWxsKHZhbHVlLnZhbHVlKCkpKTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG1fc3RhdGUu
Zm9yTm9kZShlZGdlKS5tX3R5cGUgJiBTcGVjQ2VsbCkpOwpAQCAtMjA2MSwxMCArMjAwNywxMyBA
QCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBCb29sZWFuVXNlKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9ib29sZWFuVmFsdWVzLmdl
dChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAKLSAg
ICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdl
Lm5vZGUoKSkpIHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fYm9vbGVhblZh
bHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0LnZhbHVlKCk7CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9
IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2
YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gdmFsdWUudmFsdWUo
KTsKICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAogICAgICAgICAgICAgICAgIGpzVmFsdWVW
YWx1ZSh1bmJveGVkUmVzdWx0KSwgZWRnZSwgU3BlY0Jvb2xlYW4sIGlzTm90Qm9vbGVhbih1bmJv
eGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hCb29sZWFuKHVu
Ym94ZWRSZXN1bHQpOwpAQCAtMjA4MSwxNiArMjAzMCwyMSBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
biB8fCBpc0RvdWJsZShlZGdlLnVzZUtpbmQoKSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKExW
YWx1ZSByZXN1bHQgPSBtX2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQorICAgICAgICBM
b3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgaW50UmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5n
ZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuaW50
VG9Eb3VibGUoaW50UmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChl
ZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IG1fb3V0LmludFRvRG91YmxlKHZhbHVlLnZhbHVlKCkpOwogICAgICAg
ICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1
ZSBib3hlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAg
ICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlm
IChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIGJveGVkUmVzdWx0ID0gdmFs
dWUudmFsdWUoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRG91YmxlIHVuYm94aW5nIGludCBjYXNlIikpOwog
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgZG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiRG91YmxlIHVuYm94aW5nIGRvdWJsZSBjYXNlIikpOwogICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGUgdW5ib3hpbmcg
Y29udGludWF0aW9uIikpOwpAQCAtMjEyOCwyMyArMjA4MiwyNyBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKICAgICAgICAgCi0gICAgICAg
IGlmIChMVmFsdWUgcmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCisg
ICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQogICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1f
aW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGJveEludDMyKHVuYm94ZWRSZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1faW50MzJWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAg
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94SW50MzIodmFsdWUudmFsdWUoKSk7CiAgICAgICAg
ICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1
ZSB1bmJveGVkUmVzdWx0ID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAg
ICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hCb29sZWFuKHVuYm94ZWRSZXN1bHQpOworICAg
ICAgICB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBp
ZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hCb29s
ZWFuKHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChlZGdl
Lm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fZG91YmxlVmFs
dWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hE
b3VibGUodW5ib3hlZFJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9kb3VibGVWYWx1ZXMuZ2V0
KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gYm94RG91YmxlKHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAg
bV9qc1ZhbHVlVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTIxNTUsOCArMjExMyw5IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgTFZhbHVlIGxvd1N0b3JhZ2UoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgaWYg
KExWYWx1ZSByZXN1bHQgPSBtX3N0b3JhZ2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBt
X3N0b3JhZ2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CiAgICAgICAgIAogICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlKTsKICAgICAgICAgbV9zdG9yYWdlVmFsdWVz
LmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKQEAgLTI0MzAsMjIgKzIzODksMTUgQEAgcHJpdmF0
ZToKICAgICAKICAgICBib29sIGlzTGl2ZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgSGFz
aE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV90aW1lVG9MaXZlLmZpbmQo
bm9kZSk7Ci0gICAgICAgIEFTU0VSVChpdGVyICE9IG1fdGltZVRvTGl2ZS5lbmQoKSk7Ci0gICAg
ICAgIHJldHVybiAhIWl0ZXItPnZhbHVlOworICAgICAgICByZXR1cm4gbV9saXZlLmNvbnRhaW5z
KG5vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZShFZGdlIGVkZ2UpCiAgICAgewotICAg
ICAgICBpZiAoIWVkZ2UtPmhhc1Jlc3VsdCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWRnZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICBBU1NFUlQoZWRnZS0+aGFzUmVzdWx0
KCkpOworICAgICAgICBpZiAoIWVkZ2UuZG9lc0tpbGwoKSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+Ojpp
dGVyYXRvciBpdGVyID0gbV90aW1lVG9MaXZlLmZpbmQoZWRnZS5ub2RlKCkpOwotICAgICAgICBB
U1NFUlQoaXRlciAhPSBtX3RpbWVUb0xpdmUuZW5kKCkpOwotICAgICAgICBBU1NFUlQoaXRlci0+
dmFsdWUpOwotICAgICAgICBpdGVyLT52YWx1ZS0tOworICAgICAgICBtX2xpdmUucmVtb3ZlKGVk
Z2Uubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgLy8gV3JhcHBlciB1c2VkIG9ubHkgZm9yIERG
R19OT0RFX0RPX1RPX0NISUxEUkVOCkBAIC0yNDYyLDYzICsyNDE0LDM0IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBpbml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2soKQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV92YWx1ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV9oaWdoQmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKLSAgICAg
ICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0g
VmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlv
bigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQXJndW1lbnRz
QWxpYXMoKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2UoQXJndW1lbnRzU291cmNlKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShT
b3VyY2VJc0RlYWQpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMo
bm9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHZhbHVlIHdpbGwgaGF2ZSBiZWVuIGZs
dXNoZWQgdG8gdGhlIEpTU3RhY2sgaW4gc29tZSBmb3JtIG9yCi0gICAgICAgICAgICAgICAgLy8g
YW5vdGhlci4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUt
PnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0
aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNl
c1tpXSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBGbHVzaEZv
cm1hdCBmb3JtYXQgPSBtX2hpZ2hCbG9jay0+Zmx1c2hGb3JtYXRBdEhlYWRbaV07CisgICAgICAg
ICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBEZWFkRmx1c2g6IHsKKyAg
ICAgICAgICAgICAgICAvLyBNdXN0IGNvbnNpZGVyIGF2YWlsYWJsZSBub2RlcyBpbnN0ZWFkLgor
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9jay0+YXZhaWxhYmlsaXR5QXRI
ZWFkW2ldOworICAgICAgICAgICAgICAgIGlmICghbm9kZSkgeworICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5K
U1N0YWNrKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUt
PnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxl
LT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
U291cmNlc1tpXSA9IFZhbHVlU291cmNlKERvdWJsZUluTG9jYWxzKTsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluTG9j
YWxzKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzW2ldID0gVmFsdWVTb3VyY2UoQm9vbGVhbkluTG9jYWxzKTsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGbHVzaGVk
RG91YmxlOgorICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2Uo
RG91YmxlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgICAgICBjYXNlIEZsdXNo
ZWRCb29sZWFuOgorICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgICAg
ICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsKICAg
ICAgICAgfQogICAgIH0KICAgICAKQEAgLTI2MDIsMjcgKzI1MjUsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6CiAgICAgICAgICAgICAgICAgZXhpdC5tX3Zh
bHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmFsdWVJbkxvY2FsczoKLSAgICAgICAgICAgICAg
ICBhZGRFeGl0QXJndW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywg
aSwgVmFsdWVGb3JtYXRKU1ZhbHVlLCBtX291dC5nZXQobV9sb2NhbHM2NFtpXSkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJbnQzMkluTG9jYWxzOgotICAgICAg
ICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKLSAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJn
dW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEludDMyLCBtX291dC5nZXQobV9sb2NhbHMzMltpXSkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCb29sZWFuSW5Mb2NhbHM6
Ci0gICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAotICAgICAgICAgICAgICAgICAgICBl
eGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0Qm9vbGVhbiwgbV9vdXQuZ2V0KG1fbG9jYWxz
Qm9vbGVhbltpXSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBE
b3VibGVJbkxvY2FsczoKLSAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCi0gICAgICAg
ICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXREb3VibGUsIG1fb3V0
LmdldChtX2xvY2Fsc0RvdWJsZVtpXSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBBcmd1bWVudHNTb3VyY2U6Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IGlt
cGxlbWVudCBQaGFudG9tQXJndW1lbnRzLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM5ODYKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBTb3VyY2VJc0RlYWQ6CiAgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tp
XSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjY4Miwx
MiArMjU4NCwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIHVpbnQzMlRvTnVt
YmVyID0gMDsKICAgICAgICAgICAgICAgICBOb2RlKiBkb3VibGVBc0ludDMyID0gMDsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0
ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBIYXNo
TWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGVuZCA9IG1fdGltZVRvTGl2ZS5lbmQoKTsK
KyAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fbGl2ZS5i
ZWdpbigpOworICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBt
X2xpdmUuZW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUg
PSBpdGVyLT5rZXk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9ICppdGVy
OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZS0+Y2hpbGQxKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRp
ZGF0ZS0+Y2hpbGQxKCkgIT0gbm9kZSkKQEAgLTI3MzIsMjQgKzI2MzIsMjggQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQVNTRVJUKGlzTGl2ZShub2RlKSk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUp
KSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwg
VmFsdWVGb3JtYXRJbnQzMiwgcmVzdWx0KTsKKworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZh
bHVlID0gbV9pbnQzMlZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgs
IFZhbHVlRm9ybWF0SW50MzIsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fYm9vbGVh
blZhbHVlcy5nZXQobm9kZSkpIHsKLSAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBh
cmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEJvb2xlYW4sIHJlc3VsdCk7CisgICAgICAgIHZh
bHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFs
dWUpKSB7CisgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRl
eCwgVmFsdWVGb3JtYXRCb29sZWFuLCB2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2pz
VmFsdWVWYWx1ZXMuZ2V0KG5vZGUpKSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhp
dCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRKU1ZhbHVlLCByZXN1bHQpOworICAgICAg
ICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlk
KHZhbHVlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywg
aW5kZXgsIFZhbHVlRm9ybWF0SlNWYWx1ZSwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0g
bV9kb3VibGVWYWx1ZXMuZ2V0KG5vZGUpKSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQo
ZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXREb3VibGUsIHJlc3VsdCk7CisgICAg
ICAgIHZhbHVlID0gbV9kb3VibGVWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxp
ZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMs
IGluZGV4LCBWYWx1ZUZvcm1hdERvdWJsZSwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjgzNCw2ICsyNzM4LDM2IEBAIHByaXZhdGU6CiAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQob3BlcmFuZCkgPSBWYWx1ZVNvdXJjZShub2RlLT5j
aGlsZDEoKS5ub2RlKCkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNldEludDMyKExWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIG1faW50MzJWYWx1ZXMuc2V0KG1fbm9kZSwgTG93ZXJlZE5v
ZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9pZCBzZXRKU1ZhbHVl
KExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5zZXQobV9ub2Rl
LCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lk
IHNldEJvb2xlYW4oTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9ib29sZWFuVmFsdWVz
LnNldChtX25vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAg
fQorICAgIHZvaWQgc2V0U3RvcmFnZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX3N0
b3JhZ2VWYWx1ZXMuc2V0KG1fbm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxv
Y2spKTsKKyAgICB9CisgICAgdm9pZCBzZXREb3VibGUoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbV9kb3VibGVWYWx1ZXMuc2V0KG1fbm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwg
bV9oaWdoQmxvY2spKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKGNvbnN0IExvd2Vy
ZWROb2RlVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFtX2dyYXBoLmRvbWluYXRvcnMuZG9taW5h
dGVzKG1faGlnaEJsb2NrLCB2YWx1ZS5ibG9jaygpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRkV2Vha1Jl
ZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29k
ZS0+Y29tbW9uLndlYWtSZWZlcmVuY2VzLmFwcGVuZCgKQEAgLTI4ODgsMTUgKzI4MjIsMTIgQEAg
cHJpdmF0ZToKICAgICBMVmFsdWUgbV90YWdUeXBlTnVtYmVyOwogICAgIExWYWx1ZSBtX3RhZ01h
c2s7CiAgICAgCi0gICAgSGFzaFNldDxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7Ci0gICAgVmVj
dG9yPE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7Ci0gICAgCi0gICAgSGFzaE1hcDxO
b2RlKiwgTFZhbHVlPiBtX2ludDMyVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4g
bV9qc1ZhbHVlVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9ib29sZWFuVmFs
dWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9zdG9yYWdlVmFsdWVzOwotICAgIEhh
c2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwg
dW5zaWduZWQ+IG1fdGltZVRvTGl2ZTsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZh
bHVlPiBtX2ludDMyVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+
IG1fanNWYWx1ZVZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBt
X2Jvb2xlYW5WYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9z
dG9yYWdlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fZG91
YmxlVmFsdWVzOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fbGl2ZTsKICAgICAKICAgICBPcGVyYW5k
czxMVmFsdWU+IG1fbG9jYWxzQm9vbGVhbjsKICAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxz
MzI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyZWROb2RlVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyZWROb2Rl
VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJlZE5vZGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExMb3dlcmVk
Tm9kZVZhbHVlX2gKKyNkZWZpbmUgRlRMTG93ZXJlZE5vZGVWYWx1ZV9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHQmFz
aWNCbG9jay5oIgorI2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBSZXByZXNlbnRzIHRoZSBhY3Qgb2YgaGF2aW5n
IGxvd2VyZWQgYSBERkc6Ok5vZGUgdG8gYW4gTFZhbHVlLCBhbmQgcmVjb3JkcyB0aGUKKy8vIERG
Rzo6QmFzaWNCbG9jayB0aGF0IGRpZCB0aGUgbG93ZXJpbmcuIFRoZSBMVmFsdWUgaXMgd2hhdCB3
ZSB1c2UgbW9zdCBvZnRlbiwgYnV0CisvLyB3ZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIGlu
IGEgYmxvY2sgdGhhdCBpcyBkb21pbmF0ZWQgYnkgdGhlIG9uZSB0aGF0IGRpZAorLy8gdGhlIGxv
d2VyaW5nLiBXZSdyZSBndWFyYW50ZWVkIHRoYXQgZm9yIGVhY2ggREZHOjpOb2RlLCB0aGVyZSB3
aWxsIGJlIG9uZQorLy8gTG93ZXJlZE5vZGVWYWx1ZSB0aGF0IGFsd2F5cyBkb21pbmF0ZXMgYWxs
IHVzZXMgb2YgdGhlIERGRzo6Tm9kZTsgYnV0IHRoZXJlIG1heQorLy8gYmUgb3RoZXJzIHRoYXQg
ZG9uJ3QgZG9taW5hdGUgYW5kIHdlJ3JlIGVmZmVjdGl2ZWx5IGRvaW5nIG9wcG9ydHVuaXN0aWMg
R1ZOIG9uCisvLyB0aGUgbG93ZXJpbmcgY29kZS4KKworY2xhc3MgTG93ZXJlZE5vZGVWYWx1ZSB7
CitwdWJsaWM6CisgICAgTG93ZXJlZE5vZGVWYWx1ZSgpCisgICAgICAgIDogbV92YWx1ZSgwKQor
ICAgICAgICAsIG1fYmxvY2soMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIExvd2VyZWROb2Rl
VmFsdWUoTFZhbHVlIHZhbHVlLCBERkc6OkJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1f
dmFsdWUodmFsdWUpCisgICAgICAgICwgbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX3ZhbHVlKTsKKyAgICAgICAgQVNTRVJUKG1fYmxvY2spOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIExWYWx1ZSB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBERkc6OkJhc2ljQmxvY2sqIGJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIAorcHJpdmF0ZToKKyAgICBMVmFsdWUg
bV92YWx1ZTsKKyAgICBERkc6OkJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8v
IEZUTExvd2VyZWROb2RlVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFZhbHVlRnJvbUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExWYWx1ZUZyb21CbG9jay5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDYgKzM2LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgVmFs
dWVGcm9tQmxvY2sgewogcHVibGljOgorICAgIFZhbHVlRnJvbUJsb2NrKCkKKyAgICAgICAgOiBt
X3ZhbHVlKDApCisgICAgICAgICwgbV9ibG9jaygwKQorICAgIHsKKyAgICB9CisgICAgCiAgICAg
VmFsdWVGcm9tQmxvY2soTFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9jayBibG9jaykKICAgICAgICAg
OiBtX3ZhbHVlKHZhbHVlKQogICAgICAgICAsIG1fYmxvY2soYmxvY2spCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkocmV2aXNpb24gMTUyNDMy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDIxICs0NSw2IEBAIHZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkKICAgICBjYXNlIERvdWJsZUluSlNTdGFjazoKICAgICAgICAgb3V0LnByaW50
KCJEb3VibGVJbkpTU3RhY2siKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVmFsdWVJbkxv
Y2FsczoKLSAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluTG9jYWxzIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIEludDMySW5Mb2NhbHM6Ci0gICAgICAgIG91dC5wcmludCgiSW50MzJJbkxv
Y2FscyIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBCb29sZWFuSW5Mb2NhbHM6Ci0gICAg
ICAgIG91dC5wcmludCgiQm9vbGVhbkluTG9jYWxzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIERvdWJsZUluTG9jYWxzOgotICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUluTG9jYWxzIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEFyZ3VtZW50c1NvdXJjZToKLSAgICAgICAgb3V0
LnByaW50KCJBcmd1bWVudHNTb3VyY2UiKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU291
cmNlSXNEZWFkOgogICAgICAgICBvdXQucHJpbnQoIlNvdXJjZUlzRGVhZCIpOwogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5o
CShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVl
U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0MSw2IEBAIGVudW0gVmFsdWVTb3Vy
Y2VLaW5kIHsKICAgICBWYWx1ZUluSlNTdGFjaywKICAgICBJbnQzMkluSlNTdGFjaywKICAgICBE
b3VibGVJbkpTU3RhY2ssCi0gICAgVmFsdWVJbkxvY2FscywKLSAgICBJbnQzMkluTG9jYWxzLAot
ICAgIEJvb2xlYW5JbkxvY2FscywKLSAgICBEb3VibGVJbkxvY2FscywKLSAgICBBcmd1bWVudHNT
b3VyY2UsCiAgICAgU291cmNlSXNEZWFkLAogICAgIEhhdmVOb2RlCiB9OwpJbmRleDogU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAJCTBGRDgxQUM1MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVj
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4
MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTBGRERCRkE3MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJp
bmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3Bw
ICovOyB9OwogCQkwRkREQkZBODE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE2
MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovOyB9OworCQkwRkU1MDU1
NzE3ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0
aW9uLmggKi87IH07CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFEMTU2
NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsKIAkJMTQzRjYxMjAxNTY1RjBGOTAw
REI1MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMTQ2OTQxOTIxNkVBQUY2RDAwMjRFMTQ2
IC8qIFJ1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQ2OTQxOTAxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTIsNiArMzUz
LDcgQEAKIAkJMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJp
bnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5n
UHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZBNjE2
NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RyaW5nUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnNlcnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzNF
RTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRl
U3BpbkxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRjYxMUQxNTY1RjBG
OTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFF
MTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4NSw2ICs3
ODcsNyBAQAogCQkJCUE4QTQ3MkJBMTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoVHJhaXRzLmggKi8s
CiAJCQkJQThBNDcyQkIxNTFBODI1QTAwNDEyM0ZGIC8qIEhleE51bWJlci5oICovLAogCQkJCUE4
QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCAqLywKKwkJCQkwRkU1MDU1NjE3
ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi8sCiAJCQkJQThBNDcyQkUxNTFBODI1QTAw
NDEyM0ZGIC8qIEludDE2QXJyYXkuaCAqLywKIAkJCQlBOEE0NzJCRjE1MUE4MjVBMDA0MTIzRkYg
LyogSW50MzJBcnJheS5oICovLAogCQkJCUE4QTQ3MkJEMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQ4
QXJyYXkuaCAqLywKQEAgLTExODEsNiArMTE4NCw3IEBACiAJCQkJQThBNDczRTgxNTFBODI1QjAw
NDEyM0ZGIC8qIE1hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VBMTUxQTgy
NUIwMDQxMjNGRiAvKiBNRDUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNENTQ5N0FEMTU4NTdEMDMw
MEI1QkMzMCAvKiBNZWRpYVRpbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTU3MTc4N0E4
MDYwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRGMUQxMTU0MTVG
RjExQkUwMDI2RTkwOCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTRGRDg1NTQ3MTYxMzNFMEUwMEM1QjcwNCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25BcnJh
eUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzRkJDNzFFMTYxQUY3QkYwMEJCNEJE
NCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoQ291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvSGFzaFNldC5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNo
U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDEyICs4NiwxOSBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgdGVt
cGxhdGUgYXJndW1lbnRzIHNvIHRoYXQgY2FsbGVycwogICAgICAgICAvLyBjYW4ganVzdCBwYXNz
IHRoZSB0cmFuc2xhdG9yIGFuZCBsZXQgdGhlIGNvbXBpbGVyIGRlZHVjZSBULgogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4gQWRkUmVzdWx0IGFk
ZChjb25zdCBUJik7CisgICAgICAgIAorICAgICAgICAvLyBBdHRlbXB0cyB0byBhZGQgYSBsaXN0
IG9mIHRoaW5ncyB0byB0aGUgc2V0LiBSZXR1cm5zIHRydWUgaWYgYW55IG9mCisgICAgICAgIC8v
IHRoZW0gYXJlIG5ldyB0byB0aGUgc2V0LiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBzZXQgaXMgdW5j
aGFuZ2VkLgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+CisgICAgICAg
IGJvb2wgYWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCk7CiAKICAgICAg
ICAgdm9pZCByZW1vdmUoY29uc3QgVmFsdWVUeXBlJik7CiAgICAgICAgIHZvaWQgcmVtb3ZlKGl0
ZXJhdG9yKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlz
VmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBIYXNoU2V0JikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBm
cmllbmQgdm9pZCBkZWxldGVBbGxWYWx1ZXM8Pihjb25zdCBIYXNoU2V0Jik7CkBAIC0xOTEsNiAr
MTk4LDE2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0
b3JUeXBlPgorICAgIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5
cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCisgICAgeworICAgICAgICBib29sIGNoYW5nZWQg
PSBmYWxzZTsKKyAgICAgICAgZm9yIChJdGVyYXRvclR5cGUgaXRlciA9IGJlZ2luOyBpdGVyICE9
IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgY2hhbmdlZCB8PSBhZGQoKml0ZXIpLmlzTmV3RW50
cnk7CisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CiAgICAgaW5saW5lIHZvaWQgSGFzaFNldDxU
LCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAgIHsKICAgICAgICAgaWYgKGl0Lm1faW1w
bCA9PSBtX2ltcGwuZW5kKCkpCkBAIC0yNTYsNiArMjczLDE4IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICAgICAgdmVjdG9yW2ldID0gKml0OwogICAgIH0gIAogCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFY+OjpvcGVyYXRvcj09KGNvbnN0IEhhc2hTZXQmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgaWYgKHNpemUoKSAhPSBvdGhlci5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5k
KCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlucygqaXRlcikpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6SGFzaFNldDsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0hhc2hUYWJsZS5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvV1RGL3d0Zi9I
YXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3MCw2ICsxMTcwLDggQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgewogICAgICAgICAvLyBDb3B5IHRoZSBoYXNoIHRhYmxlIHRoZSBkdW1iIHdh
eSwgYnkgYWRkaW5nIGVhY2ggZWxlbWVudCB0byB0aGUgbmV3IHRhYmxlLgogICAgICAgICAvLyBJ
dCBtaWdodCBiZSBtb3JlIGVmZmljaWVudCB0byBjb3B5IHRoZSB0YWJsZSBzbG90cywgYnV0IGl0
J3Mgbm90IGNsZWFyIHRoYXQgZWZmaWNpZW5jeSBpcyBuZWVkZWQuCisgICAgICAgIC8vIEZJWE1F
OiBJdCdzIGxpa2VseSB0aGF0IHRoaXMgY2FuIGJlIGltcHJvdmVkLCBmb3Igc3RhdGljIGFuYWx5
c2VzIHRoYXQgdXNlCisgICAgICAgIC8vIEhhc2hTZXRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDU1CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IG90
aGVyLmVuZCgpOwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0gb3RoZXIuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgYWRkKCppdCk7CkBAIC0xMjA5LDYgKzEy
MTEsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiYgSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+OjpvcGVyYXRvcj0oY29uc3QgSGFzaFRhYmxlJiBvdGhlcikKICAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBJdCdzIGxpa2VseSB0aGF0IHRoaXMgY2FuIGJlIGltcHJvdmVkLCBmb3Igc3RhdGlj
IGFuYWx5c2VzIHRoYXQgdXNlCisgICAgICAgIC8vIEhhc2hTZXRzLiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDU1CiAgICAgICAgIEhhc2hUYWJsZSB0bXAob3Ro
ZXIpOwogICAgICAgICBzd2FwKHRtcCk7CiAgICAgICAgIHJldHVybiAqdGhpczsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0lu
c2VydGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluc2VydGlvbl9oCisjZGVmaW5lIEluc2VydGlv
bl9oCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5z
ZXJ0aW9uIHsKK3B1YmxpYzoKKyAgICBJbnNlcnRpb24oKSB7IH0KKyAgICAKKyAgICBJbnNlcnRp
b24oc2l6ZV90IGluZGV4LCBUIGVsZW1lbnQpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAg
ICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHNpemVf
dCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICBUIGVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBJ
bnNlcnRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXggPCBv
dGhlci5tX2luZGV4OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1faW5kZXg7
CisgICAgVCBtX2VsZW1lbnQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXRWZWN0b3JU
eXBlLCB0eXBlbmFtZSBJbnNlcnRpb25WZWN0b3JUeXBlPgordm9pZCBleGVjdXRlSW5zZXJ0aW9u
cyhUYXJnZXRWZWN0b3JUeXBlJiB0YXJnZXQsIEluc2VydGlvblZlY3RvclR5cGUmIGluc2VydGlv
bnMpCit7CisgICAgaWYgKCFpbnNlcnRpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHRhcmdldC5ncm93KHRhcmdldC5zaXplKCkgKyBpbnNlcnRpb25zLnNpemUoKSk7CisgICAgc2l6
ZV90IGxhc3RJbmRleCA9IHRhcmdldC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaW5kZXhJbklu
c2VydGlvbnMgPSBpbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsKKyAg
ICAgICAgc2l6ZV90IGZpcnN0SW5kZXggPSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5p
bmRleCgpICsgaW5kZXhJbkluc2VydGlvbnM7CisgICAgICAgIHNpemVfdCBpbmRleE9mZnNldCA9
IGluZGV4SW5JbnNlcnRpb25zICsgMTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxhc3RJbmRl
eDsgLS1pID4gZmlyc3RJbmRleDspCisgICAgICAgICAgICB0YXJnZXRbaV0gPSB0YXJnZXRbaSAt
IGluZGV4T2Zmc2V0XTsKKyAgICAgICAgdGFyZ2V0W2ZpcnN0SW5kZXhdID0gaW5zZXJ0aW9uc1tp
bmRleEluSW5zZXJ0aW9uc10uZWxlbWVudCgpOworICAgICAgICBsYXN0SW5kZXggPSBmaXJzdElu
ZGV4OworICAgIH0KKyAgICBpbnNlcnRpb25zLnJlc2l6ZSgwKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKK3VzaW5nIFdURjo6SW5zZXJ0aW9uOwordXNpbmcgV1RGOjpleGVjdXRlSW5zZXJ0
aW9uczsKKworI2VuZGlmIC8vIEluc2VydGlvbl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206408</attachid>
            <date>2013-07-10 12:37:27 -0700</date>
            <delta_ts>2013-07-11 14:10:58 -0700</delta_ts>
            <desc>forgot to delete a file</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>161727</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9j
YWxGaXJzdFRpbWUob3BlcmFuZCwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFy
KCkKKyAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IHZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgp
OworICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBmaWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2IEBAIHZvaWQgQWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2kKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3Ry
YWN0VmFsdWU+OjppdGVyYXRvciBpdGVyID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQu
YmVnaW4oKTsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9y
IGVuZCA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmVuZCgpOworICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgZm9yTm9kZShpdGVyLT5rZXkp
ID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUuaGFzQ2xvYmJlcmFi
bGVTdGF0ZSgpKQorICAgICAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorICAgIAogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBm
YWxzZTsKICAgICBiYXNpY0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsKICAgICBtX2Jsb2Nr
ID0gYmFzaWNCbG9jazsKQEAgLTgzLDYgKzkzLDE2IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKEJhc2kKICAgICBtX2N1cnJlbnROb2RlID0gMDsKIH0KIAorc3RhdGljIHZv
aWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBI
YXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3sKKyAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICAKKyAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGxpdmUuYmVnaW4oKTsKKyAgICBIYXNoU2V0
PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbGl2ZS5lbmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBl
bmQ7ICsraXRlcikKKyAgICAgICAgdmFsdWVzLmFkZCgqaXRlciwgQWJzdHJhY3RWYWx1ZSgpKTsK
K30KKwogdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKIHsKICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxvY2soMCk7CkBAIC0xNTEsNiArMTcxLDEwIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICNlbmRpZgogICAgICAg
ICB9CiAgICAgICAgIGJsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9j
ay0+c3NhLT52YWx1ZXNBdEhlYWQsIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpOworICAgICAgICAg
ICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwsIGJsb2NrLT5zc2EtPmxp
dmVBdFRhaWwpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNzIsMjAgKzE5NiwzOSBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNCiAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIUFTU0VS
VF9ESVNBQkxFRCkgewotICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50
KSB7CisgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBUaHJl
YWRlZENQUzogeworICAgICAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVu
dCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGFyZ3VtZW50ICV6dS5cbiIs
IGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0
YXRlIGZvciBhcmd1bWVudCAlenUuXG4iLCBhcmd1bWVudCk7CiAjZW5kaWYKLSAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVz
dGluYXRpb24sIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24s
IG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBz
dGF0ZSBmb3IgbG9jYWwgJXp1LlxuIiwgbG9jYWwpOworICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKICNlbmRp
ZgotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVz
QXRUYWlsLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0
VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFi
bGVzLmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFNTQTogeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0g
YmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5iZWdpbigpOworICAgICAgICAgICAgSGFzaFNldDxOb2Rl
Kj46Oml0ZXJhdG9yIGVuZCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRBaWwuZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKCppdGVyKS0+dmFsdWUubWVyZ2UoZm9y
Tm9kZShub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTU4Niw2ICsxNjI5LDE2IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFBoaToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5t
X2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3VsZCBo
YXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBVcHNpbG9uOgorICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGZv
ck5vZGUobm9kZS0+cGhpKCkpID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAg
ICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQnJlYWtwb2lu
dDoKQEAgLTE2NzksNyArMTczMiw3IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJTdHJ1Y3QKICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQorYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZh
bHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTc2NywyMSArMTgyMCw0NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQor
Ym9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0
bykKIHsKICAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRz
KCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBBU1NF
UlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gdG8tPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAKICAgICBib29sIGNoYW5nZWQgPSBmYWxz
ZTsKICAgICAKLSAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZnJvbS0+
dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGFyZ3VtZW50KTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nr
cyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8t
PnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCkpOworICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAg
ICBjYXNlIFRocmVhZGVkQ1BTOiB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKyth
cmd1bWVudCkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCksIHRvLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1l
bnQpLCBmcm9tLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20t
PnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9j
YWwpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyhk
ZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBmb3IgKHNpemVf
dCBsb2NhbCA9IDA7IGxvY2FsIDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCk7ICsrbG9jYWwpIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+
dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxv
Y2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICAKKyAgICBjYXNlIFNTQTogeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gZnJvbS0+dmFyaWFibGVzQXRUYWlsLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gdG8tPnZhcmlhYmxlc0F0SGVhZFtpXS5tZXJnZShmcm9tLT52YXJp
YWJsZXNBdFRhaWxbaV0pOworICAgICAgICAKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJh
dG9yIGl0ZXIgPSB0by0+c3NhLT5saXZlQXRIZWFkLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+OjppdGVyYXRvciBlbmQgPSB0by0+c3NhLT5saXZlQXRIZWFkLmVuZCgpOworICAgICAg
ICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9
ICppdGVyOworICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+c3NhLT52YWx1ZXNBdEhlYWQuZmlu
ZChub2RlKS0+dmFsdWUubWVyZ2UoCisgICAgICAgICAgICAgICAgZnJvbS0+c3NhLT52YWx1ZXNB
dFRhaWwuZmluZChub2RlKS0+dmFsdWUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCF0by0+Y2ZhSGFzVmlz
aXRlZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
amFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksMTUgQEAgcHVibGljOgog
ICAgIAogICAgIEVkZ2UgY2hpbGQxVW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV93b3Jkc1sw
XTsgfQogICAgIAorICAgIEVkZ2UganVzdE9uZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghIWNoaWxkMSgpICYmICFjaGlsZDIoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjaGls
ZDMoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEVkZ2UoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXplKEVkZ2UgY2hp
bGQxLCBFZGdlIGNoaWxkMiwgRWRnZSBjaGlsZDMpCiAgICAgewogICAgICAgICBjaGlsZCgwKSA9
IGNoaWxkMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25l
ZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2Fs
cykKKyAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKKyAgICAsIGluZGV4KE5vQmxv
Y2spCisgICAgLCBpc09TUlRhcmdldChmYWxzZSkKKyAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2Up
CisgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQorICAgICwgY2ZhRm91bmRDb25zdGFudHMo
ZmFsc2UpCisgICAgLCBjZmFEaWRGaW5pc2godHJ1ZSkKKyAgICAsIGNmYUJyYW5jaERpcmVjdGlv
bihJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAsIGlz
TGlua2VkKGZhbHNlKQorI2VuZGlmCisgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKKyAgICAsIHZh
cmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhcmlhYmxlc0F0
VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1
bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscykKK3sKK30KKworQmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKSB7IH0KKwordm9pZCBCYXNp
Y0Jsb2NrOjplbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQoreworICAgIHZhcmlh
Ymxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2YXJpYWJsZXNBdFRh
aWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxv
Y2FscyhuZXdOdW1Mb2NhbHMpOworICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVt
TG9jYWxzKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjppc0luUGhpcyhOb2RlKiBub2RlKSBjb25z
dAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAocGhpc1tpXSA9PSBub2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjppc0luQmxvY2soTm9k
ZSogbXlOb2RlKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9kZXMo
KTsgKytpKSB7CisgICAgICAgIGlmIChub2RlKGkpID09IG15Tm9kZSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQmFzaWNCbG9j
azo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiIyIsIGlu
ZGV4KTsKK30KKworQmFzaWNCbG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICA6IGZsdXNoRm9ybWF0QXRIZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZCkKKyAgICAsIGZsdXNoRm9ybWF0QXRUYWlsKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZCkKKyAgICAsIGF2YWlsYWJpbGl0eUF0SGVhZChPcGVyYW5kc0xpa2UsIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBhdmFpbGFiaWxpdHlBdFRhaWwoT3BlcmFuZHNM
aWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQoreworfQorCitCYXNpY0Jsb2NrOjpTU0FEYXRh
Ojp+U1NBRGF0YSgpIHsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAjaW5j
bHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJPcGVyYW5kcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCkBAIC00NCw0MiArNDYsMTYgQEAgY2xhc3MgSW5zZXJ0aW9uU2V0OwogdHlwZWRlZiBW
ZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKIAogc3RydWN0IEJhc2ljQmxv
Y2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKLSAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5
dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQot
ICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKLSAgICAgICAgLCBpbmRleChO
b0Jsb2NrKQotICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICAgICAsIGNmYUhhc1Zp
c2l0ZWQoZmFsc2UpCi0gICAgICAgICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxzZSkKLSAgICAgICAg
LCBjZmFGb3VuZENvbnN0YW50cyhmYWxzZSkKLSAgICAgICAgLCBjZmFEaWRGaW5pc2godHJ1ZSkK
LSAgICAgICAgLCBjZmFCcmFuY2hEaXJlY3Rpb24oSW52YWxpZEJyYW5jaERpcmVjdGlvbikKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICwgaXNMaW5rZWQoZmFsc2UpCi0jZW5kaWYKLSAg
ICAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVt
QXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzKQotICAgICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51
bUxvY2FscykKLSAgICAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMp
Ci0gICAgewotICAgIH0KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVu
c2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKTsKKyAgICB+QmFzaWNCbG9j
aygpOwogICAgIAotICAgIH5CYXNpY0Jsb2NrKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKLSAgICB7Ci0gICAgICAgIHZh
cmlhYmxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICAgICAgdmFyaWFi
bGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAgICAgICB2YWx1ZXNBdEhl
YWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgICAgIHZhbHVlc0F0VGFpbC5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICB9CisgICAgdm9pZCBlbnN1cmVMb2NhbHModW5z
aWduZWQgbmV3TnVtTG9jYWxzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
IXNpemUoKTsgfQogICAgIE5vZGUqJiBhdChzaXplX3QgaSkgeyByZXR1cm4gbV9ub2Rlc1tpXTsg
fQogICAgIE5vZGUqIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX25vZGVzW2ldOyB9Cisg
ICAgTm9kZSomIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9k
ZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KICAgICBOb2Rl
KiBsYXN0KCkgY29uc3QgeyByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KICAgICB2b2lkIHJlc2l6
ZShzaXplX3Qgc2l6ZSkgeyBtX25vZGVzLnJlc2l6ZShzaXplKTsgfQpAQCAtOTYsMjMgKzcyLDgg
QEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIH0KICAgICBi
b29sIGlzUGhpSW5kZXgoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGkgPCBwaGlzLnNpemUoKTsg
fQogICAgIAotICAgIGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKHBoaXNbaV0gPT0gbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNJ
bkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtTm9kZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZShpKSA9PSBt
eU5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0
OworICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCiAgICAgdW5z
aWduZWQgbnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9
CiAgICAgCkBAIC0xMzAsMTAgKzkxLDEyIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRl
ZDxCYXNpY0Jsb2MKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklO
RV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCi0gICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJp
bnQoIiMiLCBpbmRleCk7Ci0gICAgfQorI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRl
bXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZh
bHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBs
YXRlUG9zdCBOb2RlKiBhcHBlbmROb25UZXJtaW5hbChHcmFwaCYsIFNwZWN1bGF0ZWRUeXBlIHZh
bHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOworICAgIERGR19WQVJJQURJQ19URU1QTEFURV9G
VU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5E
X05PREUKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAg
CiAgICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJsb2NrIGxpbmtpbmcg
YW5kIE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5IG1lYW5pbmdsZXNzCiAgICAgLy8gZm9yIG90aGVy
IHB1cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4KQEAgLTE2MCw2ICsxMjMsMjEgQEAgc3RydWN0IEJh
c2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIAogICAgIE9wZXJhbmRzPEFic3Ry
YWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1
ZXNBdFRhaWw7CisgICAgCisgICAgc3RydWN0IFNTQURhdGEgeworICAgICAgICBPcGVyYW5kczxG
bHVzaEZvcm1hdD4gZmx1c2hGb3JtYXRBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9y
bWF0PiBmbHVzaEZvcm1hdEF0VGFpbDsKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJp
bGl0eUF0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0VGFpbDsK
KyAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKKyAgICAgICAgSGFzaFNldDxOb2Rl
Kj4gbGl2ZUF0VGFpbDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFs
dWVzQXRIZWFkOworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNB
dFRhaWw7CisgICAgICAgIAorICAgICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKKyAgICAgICAg
flNTQURhdGEoKTsKKyAgICB9OworICAgIE93blB0cjxTU0FEYXRhPiBzc2E7CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE1MjQzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVO
RF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKIAorI2RlZmluZSBERkdfREVG
SU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZh
bHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKKyAgICB0ZW1wbGF0ZVBy
ZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5k
Tm9uVGVybWluYWwoR3JhcGgmIGdyYXBoLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1z
Q29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3Jh
cGguYWRkTm9kZSh0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAorICAgICAgICBh
cHBlbmQobGFzdCgpKTsgXAorICAgICAgICBhdChzaXplKCkgLSAyKSA9IHJlc3VsdDsgXAorICAg
ICAgICByZXR1cm4gcmVzdWx0OyBcCisgICAgfQorICAgIERGR19WQVJJQURJQ19URU1QTEFURV9G
VU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5E
X05PREUKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9u
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmxv
Y2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KEdyYXBoJiBncmFwaCkKKyAgICA6IG1f
Z3JhcGgoZ3JhcGgpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25T
ZXQoKSB7IH0KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KGNvbnN0IEJsb2NrSW5z
ZXJ0aW9uJiBpbnNlcnRpb24pCit7CisgICAgbV9pbnNlcnRpb25zLmFwcGVuZChpbnNlcnRpb24p
OworfQorCit2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNz
UmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrKQoreworICAgIGluc2VydChCbG9ja0luc2VydGlvbihp
bmRleCwgYmxvY2spKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2Vy
dChzaXplX3QgaW5kZXgpCit7CisgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRS
ZWYobmV3IEJhc2ljQmxvY2soCisgICAgICAgIFVJTlRfTUFYLAorICAgICAgICBtX2dyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgbV9n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICBp
bnNlcnQoaW5kZXgsIGJsb2NrKTsKKyAgICByZXR1cm4gYmxvY2suZ2V0KCk7Cit9CisKK0Jhc2lj
QmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3Jl
KQoreworICAgIHJldHVybiBpbnNlcnQoYmxvY2stPmluZGV4KTsKK30KKworYm9vbCBCbG9ja0lu
c2VydGlvblNldDo6ZXhlY3V0ZSgpCit7CisgICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25z
IHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8KKyAgICAvLyBz
b3J0IHRoZW0gYmVmb3JlIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4KKyAgICBzdGQ6
OnNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CisKKyAgICBl
eGVjdXRlSW5zZXJ0aW9ucyhtX2dyYXBoLm1fYmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAor
ICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vz
c2FyeSBidXQgaXQncworICAgIC8vIGhlYWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9t
IGdyb3dpbmcuCisgICAgdW5zaWduZWQgdGFyZ2V0SW5kZXggPSAwOworICAgIGZvciAodW5zaWdu
ZWQgc291cmNlSW5kZXggPSAwOyBzb3VyY2VJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OykgeworICAgICAgICBSZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
W3NvdXJjZUluZGV4KytdOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbdGFyZ2V0SW5kZXgrK10gPSBibG9jazsKKyAg
ICB9CisgICAgbV9ncmFwaC5tX2Jsb2Nrcy5yZXNpemUodGFyZ2V0SW5kZXgpOworICAgIAorICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkK
KyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tpXS0+aW5kZXggPSBpOworICAgIAorICAgIC8vIEFu
ZCBmaW5hbGx5LCBpbnZhbGlkYXRlIGFsbCBhbmFseXNlcyB0aGF0IHJlbHkgb24gdGhlIENGRy4K
KyAgICBtX2dyYXBoLmludmFsaWRhdGVDRkcoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0
aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2Nr
SW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgREZHQmxvY2tJbnNlcnRpb25TZXRfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIFdURjo6
SW5zZXJ0aW9uPFJlZlB0cjxCYXNpY0Jsb2NrPiA+IEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBC
bG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoR3JhcGgm
IGdyYXBoKTsKKyAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGluc2Vy
dChjb25zdCBCbG9ja0luc2VydGlvbiYgaW5zZXJ0aW9uKTsKKyAgICB2b2lkIGluc2VydChzaXpl
X3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2spOworICAgIEJhc2ljQmxvY2sq
IGluc2VydChzaXplX3QgaW5kZXgpOworICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNp
Y0Jsb2NrKiBiZWZvcmUpOworICAgIAorICAgIGJvb2wgZXhlY3V0ZSgpOworCitwcml2YXRlOgor
ICAgIEdyYXBoJiBtX2dyYXBoOworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNl
cnRpb25zOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja0luc2VydGlvblNldF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTUyNDMyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjEyLDcgKzIxMiwxMCBAQCBlbnVtIEdyYXBoRm9ybSB7CiAgICAgLy8KICAgICAvLyBUaHJlYWRl
ZENQUyBmb3JtIGlzIHN1aXRhYmxlIGZvciBkYXRhIGZsb3cgYW5hbHlzaXMgKENGQSwgcHJlZGlj
dGlvbgogICAgIC8vIHByb3BhZ2F0aW9uKSwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgYW5kIGNvZGUg
Z2VuZXJhdGlvbi4KLSAgICBUaHJlYWRlZENQUworICAgIFRocmVhZGVkQ1BTLAorICAgIAorICAg
IC8vIFNTQSBmb3JtLiBTZWUgREZHU1NBQ29udmVyc2lvblBoYXNlLmggZm9yIGEgZGVzY3JpcHRp
b24uCisgICAgU1NBCiB9OwogCiAvLyBEZXNjcmliZXMgdGhlIHN0YXRlIG9mIHRoZSBVbmlvbkZp
bmQgc3RydWN0dXJlIG9mIFZhcmlhYmxlQWNjZXNzRGF0YSdzLgpAQCAtMjUwLDYgKzI1MywxOSBA
QCBpbmxpbmUgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXNGb3JJc1Byb3ZlCiAgICAgcmV0dXJuIGlz
UHJvdmVkID8gSXNQcm92ZWQgOiBOZWVkc0NoZWNrOwogfQogCitlbnVtIEtpbGxTdGF0dXMgeyBE
b2VzTm90S2lsbCwgRG9lc0tpbGwgfTsKKworaW5saW5lIGJvb2wgZG9lc0tpbGwoS2lsbFN0YXR1
cyBraWxsU3RhdHVzKQoreworICAgIEFTU0VSVChraWxsU3RhdHVzID09IERvZXNOb3RLaWxsIHx8
IGtpbGxTdGF0dXMgPT0gRG9lc0tpbGwpOworICAgIHJldHVybiBraWxsU3RhdHVzID09IERvZXNL
aWxsOworfQorCitpbmxpbmUgS2lsbFN0YXR1cyBraWxsU3RhdHVzRm9yRG9lc0tpbGwoYm9vbCBk
b2VzS2lsbCkKK3sKKyAgICByZXR1cm4gZG9lc0tpbGwgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxs
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogYm9vbCBjaGVja0FuZFNl
dChUJiBsZWZ0LCBVIHJpZ2h0KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2lu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZH
QmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJj
cml0aWNhbCBlZGdlIGJyZWFraW5nIikKKyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQW4gZWRnZSBB
LT5CIGlzIGNyaXRpY2FsIGlmIEEgaGFzIG11bHRpcGxlIHN1Y2Nlc3NvciBhbmQgQiBoYXMgbXVs
dGlwbGUKKyAgICAgICAgICAgIC8vIHByZWRlY2Vzc29ycy4gVGh1cyB3ZSBmYWlsIGVhcmx5IGlm
IHdlIGRvbid0IGhhdmUgbXVsdGlwbGUgc3VjY2Vzc29ycy4KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxv
Y2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
KiBzdWNjZXNzb3IgPSAmYmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgICAgICBpZiAo
c3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMuc2l6ZSgpIDw9IDEpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJyZWFrQ3JpdGlj
YWxFZGdlKGJsb2NrLCBzdWNjZXNzb3IpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBicmVha0NyaXRpY2FsRWRnZSgKKyAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2ssIHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4LCBCYXNpY0Jsb2NrKiogc3VjY2Vzc29y
KQorICAgIHsKKyAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOworICAgICAgICAKKyAgICAgICAg
QmFzaWNCbG9jayogcGFkID0gbV9wYWRzLmdldCgqc3VjY2Vzc29yKTsKKyAgICAgICAgaWYgKCFw
YWQpIHsKKyAgICAgICAgICAgIHBhZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZSgqc3Vj
Y2Vzc29yKTsKKyAgICAgICAgICAgIHBhZC0+YXBwZW5kTm9kZShtX2dyYXBoLCBTcGVjTm9uZSwg
SnVtcCwgT3BJbmZvKCpzdWNjZXNzb3IpKTsKKyAgICAgICAgICAgIG1fcGFkcy5hZGQoKnN1Y2Nl
c3NvciwgcGFkKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgKnN1Y2Nlc3NvciA9IHBh
ZDsKKyAgICB9CisgICAgCisgICAgQmxvY2tJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cisg
ICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayo+IG1fcGFkczsKK307CisKK2Jvb2wg
cGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENyaXRpY2FsIEVkZ2UgQnJlYWtpbmcgUGhhc2Ui
KTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZT4oZ3JhcGgp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRn
ZUJyZWFraW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKyNk
ZWZpbmUgREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBJbnNlcnRzIGR1bW15IGJhc2ljIGJsb2Nr
cyB0byBicmVhayBjcml0aWNhbCBlZGdlcy4gQW4gZWRnZSBBLT5CIGlzCisvLyBjcml0aWNhbCBp
ZiBBIGhhcyBtdWx0aXBsZSBzdWNjZXNzb3JzIGFuZCBCIGhhcyBtdWx0aXBsZSBwcmVkZXNzb3Jz
LgorCitib29sIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhHcmFwaCYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAg
IEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyB8fCBtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpOworICAgICAgICAKICAgICAgICAgLy8gRmlyc3QgcmVzZXQgdGhlIGNvdW50cyB0byAw
IGZvciBhbGwgbm9kZXMuCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpAQCAt
NzUsMTAgKzc3LDI5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgd2hp
bGUgKCFtX3dvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1f
d29ya2xpc3QubGFzdCgpOwotICAgICAgICAgICAgbV93b3JrbGlzdC5yZW1vdmVMYXN0KCk7Ci0g
ICAgICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7IC8vIEl0IHNob3VsZCBu
b3QgYmUgb24gdGhlIHdvcmtsaXN0IHVubGVzcyBpdCdzIHJlZidlZC4KLSAgICAgICAgICAgIERG
R19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGNvdW50RWRnZSk7CisgICAgICAg
ICAgICB3aGlsZSAoIW1fd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fd29ya2xpc3QubGFzdCgpOworICAgICAgICAgICAgICAgIG1fd29ya2xpc3Qu
cmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVm
J2VkLgorICAgICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5v
ZGUsIGNvdW50RWRnZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgICAgICAgICAvLyBGaW5kIFBo
aS0+VXBzaWxvbiBlZGdlcywgd2hpY2ggYXJlIHJlcHJlc2VudGVkIGFzIG1ldGEtZGF0YSBpbiB0
aGUKKyAgICAgICAgICAgICAgICAvLyBVcHNpbG9uLgorICAgICAgICAgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykg
eworICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFVwc2lsb24pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+cGhpKCktPnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnROb2RlKG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpIHsKQEAgLTk1LDcgKzExNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAg
ICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS5pc1Byb3ZlZCgpIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS53aWxsTm90SGF2ZUNoZWNr
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyIHRoZSBwb3NzaWJpbGl0
eSB0aGF0IFVJbnQzMlRvTnVtYmVyIGlzIGRlYWQgYnV0IGl0cwogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gY2hpbGQgaXNuJ3Q7IGlmIHNvIHRoZW4gd2Ugc2hvdWxkIE1vdkhpbnQgdGhlIGNo
aWxkLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxk
R2VuZXJhdGUoKQpAQCAtMTI2LDcgKzE0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxk
SWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgr
KykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWVkZ2UgfHwgZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRV
c2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlIHx8IGVkZ2Uud2lsbE5v
dEhhdmVDaGVjaygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIGVkZ2UpOwpA
QCAtMTU4LDIxICsxNzksMjUgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIC8vIFdlIG1heSBo
YXZlIGFuICJ1bnByb3ZlZCIgdW50eXBlZCB1c2UgZm9yIGNvZGUgdGhhdCBpcyB1bnJlYWNoYWJs
ZS4gVGhlIENGQQogICAgICAgICAvLyB3aWxsIGp1c3Qgbm90IGhhdmUgZ290dGVuIGFyb3VuZCB0
byBpdC4KLSAgICAgICAgaWYgKGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKQorICAgICAgICBpZiAoZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGlmICghZWRnZS0+cG9zdGZpeFJlZigpKQogICAgICAgICAg
ICAgbV93b3JrbGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKKyAgICB2b2lk
IGNvdW50Tm9kZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPnBvc3RmaXhS
ZWYoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV93b3JrbGlzdC5hcHBlbmQobm9k
ZSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY291bnRFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCiAg
ICAgewogICAgICAgICAvLyBEb24ndCBjb3VudCBlZGdlcyB0aGF0IGFyZSBhbHJlYWR5IGNvdW50
ZWQgZm9yIHRoZWlyIHR5cGUgY2hlY2tzLgotICAgICAgICBpZiAoIShlZGdlLmlzUHJvdmVkKCkg
fHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgICAgICBpZiAoZWRnZS0+cG9zdGZpeFJlZigpKQorICAgICAgICBpZiAoZWRn
ZS53aWxsSGF2ZUNoZWNrKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fd29ya2xp
c3QuYXBwZW5kKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgY291bnROb2RlKGVkZ2Uubm9kZSgpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVu
KE5vZGUqIG5vZGUpCkBAIC0xODEsNyArMjA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVk
Z2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOwogICAgICAgICAgICAgaWYgKCFlZGdl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGVkZ2UuaXNQcm92
ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgaWYgKGVk
Z2Uud2lsbE5vdEhhdmVDaGVjaygpKQogICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJl
bW92ZUVkZ2UoaS0tKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdFZGdlLmNwcAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQCB2b2lk
IEVkZ2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIG91dC5wcmlu
dCgiQ2hlY2s6Iik7CiAgICAgICAgIG91dC5wcmludCh1c2VLaW5kKCksICI6Iik7CiAgICAgfQor
ICAgIGlmIChkb2VzS2lsbChraWxsU3RhdHVzKCkpKQorICAgICAgICBvdXQucHJpbnQoIktpbGw6
Iik7CiAgICAgb3V0LnByaW50KG5vZGUoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRWRnZS5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEyIEBAIGNsYXNzIEFk
amFjZW5jeUxpc3Q7CiAKIGNsYXNzIEVkZ2UgewogcHVibGljOgotICAgIGV4cGxpY2l0IEVkZ2Uo
Tm9kZSogbm9kZSA9IDAsIFVzZUtpbmQgdXNlS2luZCA9IFVudHlwZWRVc2UsIFByb29mU3RhdHVz
IHByb29mU3RhdHVzID0gTmVlZHNDaGVjaykKKyAgICBleHBsaWNpdCBFZGdlKE5vZGUqIG5vZGUg
PSAwLCBVc2VLaW5kIHVzZUtpbmQgPSBVbnR5cGVkVXNlLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1
cyA9IE5lZWRzQ2hlY2ssIEtpbGxTdGF0dXMga2lsbFN0YXR1cyA9IERvZXNOb3RLaWxsKQogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlLCB1
c2VLaW5kLCBwcm9vZlN0YXR1cykpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChu
b2RlLCB1c2VLaW5kLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cykpCiAjZWxzZQogICAgICAgICA6
IG1fbm9kZShub2RlKQotICAgICAgICAsIG1fZW5jb2RlZFdvcmQobWFrZVdvcmQodXNlS2luZCwg
cHJvb2ZTdGF0dXMpKQorICAgICAgICAsIG1fZW5jb2RlZFdvcmQobWFrZVdvcmQodXNlS2luZCwg
cHJvb2ZTdGF0dXMsIGtpbGxTdGF0dXMpKQogI2VuZGlmCiAgICAgewogICAgIH0KQEAgLTYxLDcg
KzYxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKQogICAgIHsKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSwg
dXNlS2luZCgpLCBwcm9vZlN0YXR1cygpKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VX
b3JkKG5vZGUsIHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1cygpKTsKICNlbHNl
CiAgICAgICAgIG1fbm9kZSA9IG5vZGU7CiAjZW5kaWYKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUoKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCwgcHJvb2ZTdGF0
dXMoKSk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQs
IHByb29mU3RhdHVzKCksIGtpbGxTdGF0dXMoKSk7CiAjZWxzZQogICAgICAgICBtX2VuY29kZWRX
b3JkID0gbWFrZVdvcmQodXNlS2luZCwgcHJvb2ZTdGF0dXMoKSk7CiAjZW5kaWYKQEAgLTEwOCw5
ICsxMDgsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobm9kZSgpKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1
c2VLaW5kKCksIHByb29mU3RhdHVzKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3Jk
KG5vZGUoKSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cygpKTsKICNlbHNlCi0g
ICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZCh1c2VLaW5kKCksIHByb29mU3RhdHVzKTsK
KyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMs
IGtpbGxTdGF0dXMoKSk7CiAjZW5kaWYKICAgICB9CiAgICAgYm9vbCBpc1Byb3ZlZCgpIGNvbnN0
CkBAIC0xMjIsNiArMTIyLDM2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHByb29mU3RhdHVz
KCkgPT0gTmVlZHNDaGVjazsKICAgICB9CiAgICAgCisgICAgYm9vbCB3aWxsTm90SGF2ZUNoZWNr
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1Byb3ZlZCgpIHx8IHVzZUtpbmQoKSA9
PSBVbnR5cGVkVXNlOworICAgIH0KKyAgICBib29sIHdpbGxIYXZlQ2hlY2soKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICF3aWxsTm90SGF2ZUNoZWNrKCk7CisgICAgfQorICAgIAorICAg
IEtpbGxTdGF0dXMga2lsbFN0YXR1c1VuY2hlY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4ga2lsbFN0YXR1c0ZvckRvZXNLaWxsKG1fZW5jb2RlZFdvcmQgJiAyKTsKKyAgICB9Cisg
ICAgS2lsbFN0YXR1cyBraWxsU3RhdHVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChu
b2RlKCkpOworICAgICAgICByZXR1cm4ga2lsbFN0YXR1c1VuY2hlY2tlZCgpOworICAgIH0KKyAg
ICB2b2lkIHNldEtpbGxTdGF0dXMoS2lsbFN0YXR1cyBraWxsU3RhdHVzKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG5vZGUoKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9lbmNvZGVk
V29yZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cygpLCBraWxsU3Rh
dHVzKTsKKyNlbHNlCisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZCh1c2VLaW5kKCks
IHByb29mU3RhdHVzKCksIGtpbGxTdGF0dXMpOworI2VuZGlmCisgICAgfQorICAgIGJvb2wgZG9l
c0tpbGwoKSBjb25zdCB7IHJldHVybiBkb2VzS2lsbChraWxsU3RhdHVzKCkpOyB9CisgICAgYm9v
bCBkb2VzTm90S2lsbCgpIGNvbnN0IHsgcmV0dXJuICFkb2Vza2lsbCgpOyB9CisgICAgCiAgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbm9kZSgpOyB9CiAgICAgCiAgICAgdHlwZWRl
ZiB2b2lkKiBFZGdlOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKQEAgLTE1MCwyMCArMTgwLDIwIEBA
IHByaXZhdGU6CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQo
KSB7IHJldHVybiA2OyB9CiAgICAgCi0gICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChOb2Rl
KiBub2RlLCBVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3RhdHVzKQorICAgIHN0
YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kLCBQcm9v
ZlN0YXR1cyBwcm9vZlN0YXR1cywgS2lsbFN0YXR1cyBraWxsU3RhdHVzKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKHNpemVvZihub2RlKSA9PSA4KTsKICAgICAgICAgdWludHB0cl90IHNoaWZ0ZWRW
YWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpIDw8IHNoaWZ0KCk7CiAgICAgICAg
IEFTU0VSVCgoc2hpZnRlZFZhbHVlID4+IHNoaWZ0KCkpID09IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KG5vZGUpKTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0gMCAmJiB1c2VLaW5kIDwgTGFz
dFVzZUtpbmQpOwotICAgICAgICBBU1NFUlQoKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTGFzdFVz
ZUtpbmQpIDw8IDEpIDw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IHNoaWZ0KCkpKTsK
LSAgICAgICAgcmV0dXJuIHNoaWZ0ZWRWYWx1ZSB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVz
ZUtpbmQpIDw8IDEpIHwgREZHOjppc1Byb3ZlZChwcm9vZlN0YXR1cyk7CisgICAgICAgIEFTU0VS
VCgoc3RhdGljX2Nhc3Q8dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMikgPD0gKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMikgPDwgc2hpZnQoKSkpOworICAgICAgICByZXR1cm4gc2hpZnRlZFZh
bHVlIHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpkb2Vz
S2lsbChraWxsU3RhdHVzKSA8PCAxKSB8IERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpOwogICAg
IH0KICAgICAKICNlbHNlCi0gICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChVc2VLaW5kIHVz
ZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3RhdHVzKQorICAgIHN0YXRpYyB1aW50cHRyX3QgbWFr
ZVdvcmQoVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cywgS2lsbFN0YXR1
cyBraWxsU3RhdHVzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KHVzZUtpbmQpIDw8IDEpIHwgREZHOjppc1Byb3ZlZChwcm9vZlN0YXR1cyk7CisgICAgICAg
IHJldHVybiAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAyKSB8IChERkc6OmRv
ZXNLaWxsKGtpbGxTdGF0dXMpIDw8IDEpIHwgREZHOjppc1Byb3ZlZChwcm9vZlN0YXR1cyk7CiAg
ICAgfQogICAgIAogICAgIE5vZGUqIG1fbm9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRmx1c2hGb3JtYXQuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6
REZHCisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBGbHVzaEZvcm1hdCBm
b3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIERlYWRGbHVzaDoKKyAg
ICAgICAgb3V0LnByaW50KCJEZWFkRmx1c2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Rmx1c2hlZEludDMyOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRJbnQzMiIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkZs
dXNoZWREb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZENlbGw6Cisg
ICAgICAgIG91dC5wcmludCgiRmx1c2hlZENlbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZEJvb2xlYW4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIG91dC5w
cmludCgiRmx1c2hlZEpTVmFsdWUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGbHVzaEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdG
bHVzaEZvcm1hdF9oCisjZGVmaW5lIERGR0ZsdXNoRm9ybWF0X2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIEZsdXNo
Rm9ybWF0IHsKKyAgICBEZWFkRmx1c2gsCisgICAgRmx1c2hlZEludDMyLAorICAgIEZsdXNoZWRE
b3VibGUsCisgICAgRmx1c2hlZENlbGwsCisgICAgRmx1c2hlZEJvb2xlYW4sCisgICAgRmx1c2hl
ZEpTVmFsdWUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdU
RiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEZsdXNoRm9ybWF0KTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR0ZsdXNoRm9ybWF0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRl
ICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRG
R1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlIDogcHVibGlj
IFBoYXNlIHsKK3B1YmxpYzoKKyAgICBGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJmbHVzaC1saXZlbmVzcyBhbmFseXNpcyIp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NF
UlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIC8vIExpdmVuZXNz
IGlzIGEgYmFja3dhcmRzIGFuYWx5c2lzOyB0aGUgcm9vdHMgYXJlIHRoZSBibG9ja3MgdGhhdAor
ICAgICAgICAvLyBlbmQgaW4gYSB0ZXJtaW5hbCAoUmV0dXJuL1Rocm93L1Rocm93UmVmZXJlbmNl
RXJyb3IpLiBGb3Igbm93LCB3ZQorICAgICAgICAvLyB1c2UgYSBmaXhwb2ludCBmb3JtdWxhdGlv
biBzaW5jZSBsaXZlbmVzcyBpcyBhIHJhcGlkIGFuYWx5c2lzIHdpdGgKKyAgICAgICAgLy8gY29u
dmVyZ2VuY2UgZ3VhcmFudGVlZCBhZnRlciBPKGNvbm5lY3Rpdml0eSkuCisgICAgICAgIAorICAg
ICAgICAvLyBTdGFydCBieSBhc3N1bWluZyB0aGF0IGV2ZXJ5dGhpbmcgaXMgZGVhZC4KKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9j
a0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQuZmls
bChEZWFkRmx1c2gpOworICAgICAgICAgICAgYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdFRhaWwu
ZmlsbChEZWFkRmx1c2gpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkbyB7CisgICAg
ICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykKKyAgICAgICAg
ICAgICAgICBwcm9jZXNzKGJsb2NrSW5kZXgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQp
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAg
IHZvaWQgcHJvY2VzcyhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2xpdmUgPSBi
bG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0VGFpbDsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDogeworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUs
IHZhcmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSwgRGVhZEZsdXNoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7Cisg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IHZh
cmlhYmxlLT5mbHVzaEZvcm1hdCgpOworICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwg
dmFyaWFibGUtPmxvY2FsKCksIGZvcm1hdCwgZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICBibG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZCA9IG1fbGl2ZTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29y
c1tpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IG1fbGl2ZS5zaXplKCk7IGotLTsp
IHsKKyAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCYgcHJlZGVjZXNzb3JGb3JtYXQgPSBwcmVk
ZWNlc3Nvci0+c3NhLT5mbHVzaEZvcm1hdEF0VGFpbFtqXTsKKyAgICAgICAgICAgICAgICBGbHVz
aEZvcm1hdCBteUZvcm1hdCA9IG15TGl2ZVtqXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyBUaHJlZSBwb3NzaWJpbGl0aWVzOgorICAgICAgICAgICAgICAgIC8vIDEpIFBy
ZWRlY2Vzc29yIGZvcm1hdCBpcyBEZWFkLCBpbiB3aGljaCBjYXNlIGl0IGFjcXVpcmVzIG91ciBm
b3JtYXQuCisgICAgICAgICAgICAgICAgLy8gMikgUHJlZGVjZXNzb3IgZm9ybWF0IGlzIGlkZW50
aWNhbCB0byBvdXIgZm9ybWF0LCBpbiB3aGljaCBjYXNlIHdlCisgICAgICAgICAgICAgICAgLy8g
ICAgZG8gbm90aGluZy4KKyAgICAgICAgICAgICAgICAvLyAzKSBQcmVkZWNlc3NvciBmb3JtYXQg
aXMgZGlmZmVyZW50IGZyb20gb3VyIGZvcm1hdCBhbmQgaXQncyBub3QgRGVhZCwKKyAgICAgICAg
ICAgICAgICAvLyAgICBpbiB3aGljaCBjYXNlIHdlIGhhdmUgYW4gZXJyb25lb3VzIHNldCBvZiBG
bHVzaGVzIGFuZCBTZXRMb2NhbHMuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKHByZWRlY2Vzc29yRm9ybWF0ID09IERlYWRGbHVzaCkgeworICAgICAgICAgICAgICAgICAg
ICBwcmVkZWNlc3NvckZvcm1hdCA9IG15Rm9ybWF0OworICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKHByZWRlY2Vzc29yRm9ybWF0ID09IG15Rm9ybWF0KQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAor
ICAgICAgICAgICAgICAgICAgICAiQmFkIEZsdXNoIG1lcmdlIGF0IGVkZ2UgIiwgKnByZWRlY2Vz
c29yLCAiIC0+ICIsICpibG9jaywKKyAgICAgICAgICAgICAgICAgICAgIiwgbG9jYWwgdmFyaWFi
bGUgciIsIG15TGl2ZS5vcGVyYW5kRm9ySW5kZXgoaiksICI6ICIsICpwcmVkZWNlc3NvciwKKyAg
ICAgICAgICAgICAgICAgICAgIiBoYXMgIiwgcHJlZGVjZXNzb3JGb3JtYXQsICIgYW5kICIsICpi
bG9jaywgIiBoYXMgIiwgbXlGb3JtYXQsICIuXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCJJUiBhdCB0aW1lIG9mIGVycm9yOlxuIik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1w
KCk7CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEZvck5vZGUoTm9kZSogbm9kZSwgaW50IG9wZXJhbmQs
IEZsdXNoRm9ybWF0IG5vZGVGb3JtYXQsIEZsdXNoRm9ybWF0IG5ld0Zvcm1hdCkKKyAgICB7Cisg
ICAgICAgIEZsdXNoRm9ybWF0JiBjdXJyZW50Rm9ybWF0ID0gbV9saXZlLm9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgIAorICAgICAgICAvLyBEbyBzb21lIHVzZWZ1bCB2ZXJpZmljYXRpb24gaGVy
ZS4gSXQncyBPSyBpZiB3ZSB0aGluayB0aGF0IHRoZQorICAgICAgICAvLyBmbHVzaCBmb3JtYXQg
aXMgZGVhZCBhdCB0aGUgdGltZSB0aGF0IHdlIHNlZSB0aGUgbm9kZS4gQnV0IGl0J3MKKyAgICAg
ICAgLy8gbm90IE9LIGlmIGJvdGggdGhlIG5vZGUgYW5kIG1fbGl2ZSBzZWUgYSBGbHVzaEZvcm1h
dCBhbmQgdGhleSBkbworICAgICAgICAvLyBub3QgYWdyZWUgb24gaXQuCisgICAgICAgIAorICAg
ICAgICBpZiAoY3VycmVudEZvcm1hdCA9PSBEZWFkRmx1c2ggfHwgY3VycmVudEZvcm1hdCA9PSBu
b2RlRm9ybWF0KSB7CisgICAgICAgICAgICBjdXJyZW50Rm9ybWF0ID0gbmV3Rm9ybWF0OworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkYXRhTG9nKAor
ICAgICAgICAgICAgIkJhZCBGbHVzaCBtZXJnZSBhdCBub2RlICIsIG5vZGUsICIsIHIiLCBvcGVy
YW5kLCAiOiBub2RlIGNsYWltcyAiLCBub2RlRm9ybWF0LAorICAgICAgICAgICAgIiBidXQgYmFj
a3dhcmRzIGZsb3cgY2xhaW1zICIsIGN1cnJlbnRGb3JtYXQsICIuXG4iKTsKKyAgICAgICAgZGF0
YUxvZygiSVIgYXQgdGltZSBvZiBlcnJvcjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAoKTsK
KyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgRmx1c2hGb3JtYXQgZmx1c2hGb3Jt
YXQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+Zmx1c2hGb3JtYXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRDaGlsZFVz
ZShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbV9saXZlLmFkZChlZGdlLm5vZGUo
KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbV9jaGFuZ2VkOworICAgIE9wZXJhbmRzPEZsdXNo
Rm9ybWF0PiBtX2xpdmU7Cit9OworCitib29sIHBlcmZvcm1GbHVzaExpdmVuZXNzQW5hbHlzaXMo
R3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcg
Rmx1c2gtTGl2ZW5lc3MgQW5hbHlzaXMgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Rmx1
c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKyNkZWZpbmUgREZHRmx1c2hMaXZlbmVzc0Fu
YWx5c2lzUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpz
c2EtPmZsdXNoRm9ybWF0QXRIZWFkCisKK2Jvb2wgcGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNp
cyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1
MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzUsNiArMjM1LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0LCBjb25zdAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzSW5kZXhpbmdUeXBlKCkpCiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgSW5kZXhpbmdUeXBlRHVtcChub2RlLT5pbmRleGluZ1R5cGUo
KSkpOworICAgIGlmIChub2RlLT5oYXNQaGkoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
XiIsIG5vZGUtPnBoaSgpLT5pbmRleCgpKTsKICAgICBpZiAobm9kZS0+aGFzRXhlY3V0aW9uQ291
bnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+ZXhlY3V0
aW9uQ291bnRlcigpKSk7CiAgICAgaWYgKG9wID09IEpTQ29uc3RhbnQpIHsKQEAgLTMxMywyMSAr
MzE1LDIzIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKICAgICAg
ICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICBvdXQucHJpbnQo
cHJlZml4LCAiICBQaGkgTm9kZXM6Iik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9j
ay0+cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBo
aXNbaV07Ci0gICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2Rl
RHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5yZWZD
b3VudCgpLCAiPi0+KCIpOwotICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKLSAgICAg
ICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKLSAgICAg
ICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQyKCktPmluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlm
IChwaGlOb2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAi
LCBwaGlOb2RlLT5jaGlsZDMoKS0+aW5kZXgoKSk7CisgICAgaWYgKCFibG9jay0+cGhpcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2RlID09IER1bXBM
aXZlUGhpc09ubHkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBvdXQu
cHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAi
Pi0+KCIpOworICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOworICAgICAg
ICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMigpLT5pbmRleCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpKQorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDMoKS0+aW5kZXgoKSk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCIpIiwgaSArIDEg
PCBibG9jay0+cGhpcy5zaXplKCkgPyAiLCIgOiAiIik7CiAgICAgICAgIH0KLSAgICAgICAgb3V0
LnByaW50KCIpIiwgaSArIDEgPCBibG9jay0+cGhpcy5zaXplKCkgPyAiLCIgOiAiIik7CiAgICAg
fQogICAgIG91dC5wcmludCgiXG4iKTsKIH0KQEAgLTM0NSw3ICszNDksNyBAQCB2b2lkIEdyYXBo
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgIGR1bXBCbG9ja0hlYWRlcihvdXQsICIi
LCBibG9jaywgRHVtcEFsbFBoaXMpOwogICAgICAgICBvdXQucHJpbnQoIiAgdmFycyBiZWZvcmU6
ICIpOwogICAgICAgICBpZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCi0gICAgICAgICAgICBkdW1w
T3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgb3V0KTsKKyAgICAgICAgICAgIG91dC5wcmlu
dChibG9jay0+dmFsdWVzQXRIZWFkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgb3V0LnBy
aW50KCI8ZW1wdHk+Iik7CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKQEAgLTM1OSw3ICszNjMs
NyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgIH0KICAgICAg
ICAgb3V0LnByaW50KCIgIHZhcnMgYWZ0ZXI6ICIpOwogICAgICAgICBpZiAoYmxvY2stPmNmYUhh
c1Zpc2l0ZWQpCi0gICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0VGFpbCwg
b3V0KTsKKyAgICAgICAgICAgIG91dC5wcmludChibG9jay0+dmFsdWVzQXRUYWlsKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAgICAgICAgIG91dC5w
cmludCgiXG4iKTsKQEAgLTQ3OCw2ICs0ODIsMjggQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdl
dExvY2FsKEJhc2ljQmxvYwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQorCit2b2lkIEdy
YXBoOjphZGRGb3JEZXB0aEZpcnN0U29ydChWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQsIFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgSGFzaFNldDxCYXNpY0Jsb2NrKj4mIHNl
ZW4sIEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGlmIChzZWVuLmNvbnRhaW5zKGJsb2NrKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOworICAgIHdv
cmtsaXN0LmFwcGVuZChibG9jayk7CisgICAgc2Vlbi5hZGQoYmxvY2spOworfQorCit2b2lkIEdy
YXBoOjpkZXB0aEZpcnN0U29ydChWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpCit7CisgICAg
VmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gd29ya2xpc3Q7CisgICAgSGFzaFNldDxCYXNpY0Jsb2Nr
Kj4gc2VlbjsKKyAgICBhZGRGb3JEZXB0aEZpcnN0U29ydChyZXN1bHQsIHdvcmtsaXN0LCBzZWVu
LCBibG9jaygwKSk7CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgYWRk
Rm9yRGVwdGhGaXJzdFNvcnQocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2stPnN1Y2Nlc3Nv
cihpKSk7CisgICAgfQorfQogICAgIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1
MSw2ICs2NTEsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBpbnZhbGlkYXRlQ0ZHKCk7CiAg
ICAgCisgICAgdm9pZCBnZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9j
ayo+JiByZXN1bHQpOworICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRp
b24oKSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAgICAKICAgICBEZXNp
cmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJz
OyB9CkBAIC02ODksNiArNjkxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEJhc2lj
QmxvY2sqLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IpOworICAgIHZvaWQgYWRkRm9yRGVwdGhGaXJz
dFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2
PiYgd29ya2xpc3QsIEhhc2hTZXQ8QmFzaWNCbG9jayo+JiBzZWVuLCBCYXNpY0Jsb2NrKik7CiAg
ICAgCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgTm9k
ZSogaW1tZWRpYXRlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjYgKzMxLDEy
IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1
ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotY2xhc3MgSW5zZXJ0aW9uIHsKLXB1YmxpYzoKLSAg
ICBJbnNlcnRpb24oKSB7IH0KLSAgICAKLSAgICBJbnNlcnRpb24oc2l6ZV90IGluZGV4LCBOb2Rl
KiBlbGVtZW50KQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9lbGVtZW50
KGVsZW1lbnQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4OyB9Ci0gICAgTm9kZSogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWxlbWVudDsgfQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9pbmRleDsKLSAgICBOb2RlKiBtX2Vs
ZW1lbnQ7Ci19OwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxOb2RlKj4gSW5zZXJ0aW9uOwogCiBj
bGFzcyBJbnNlcnRpb25TZXQgewogcHVibGljOgpAQCAtODEsMjAgKzY3LDcgQEAgcHVibGljOgog
ICAgIAogICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAg
IGlmICghbV9pbnNlcnRpb25zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
YmxvY2stPmdyb3coYmxvY2stPnNpemUoKSArIG1faW5zZXJ0aW9ucy5zaXplKCkpOwotICAgICAg
ICBzaXplX3QgbGFzdEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXhJbkluc2VydGlvbnMgPSBtX2luc2VydGlvbnMuc2l6ZSgpOyBpbmRleEluSW5zZXJ0aW9u
cy0tOykgewotICAgICAgICAgICAgSW5zZXJ0aW9uJiBpbnNlcnRpb24gPSBtX2luc2VydGlvbnNb
aW5kZXhJbkluc2VydGlvbnNdOwotICAgICAgICAgICAgc2l6ZV90IGZpcnN0SW5kZXggPSBpbnNl
cnRpb24uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOwotICAgICAgICAgICAgc2l6ZV90IGlu
ZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IGxhc3RJbmRleDsgLS1pID4gZmlyc3RJbmRleDspCi0gICAgICAgICAgICAgICAgYmxv
Y2stPmF0KGkpID0gYmxvY2stPmF0KGkgLSBpbmRleE9mZnNldCk7Ci0gICAgICAgICAgICBibG9j
ay0+YXQoZmlyc3RJbmRleCkgPSBpbnNlcnRpb24uZWxlbWVudCgpOwotICAgICAgICAgICAgbGFz
dEluZGV4ID0gZmlyc3RJbmRleDsKLSAgICAgICAgfQotICAgICAgICBtX2luc2VydGlvbnMucmVz
aXplKDApOworICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucygqYmxvY2ssIG1faW5zZXJ0aW9ucyk7
CiAgICAgfQogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5h
bHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhh
c2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgTGl2ZW5lc3NBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsK
K3B1YmxpYzoKKyAgICBMaXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAg
ICA6IFBoYXNlKGdyYXBoLCAibGl2ZW5lc3MgYW5hbHlzaXMiKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09
IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBMaXZlbmVzcyBpcyBhIGJhY2t3YXJkcyBhbmFs
eXNpczsgdGhlIHJvb3RzIGFyZSB0aGUgYmxvY2tzIHRoYXQKKyAgICAgICAgLy8gZW5kIGluIGEg
dGVybWluYWwgKFJldHVybi9UaHJvdy9UaHJvd1JlZmVyZW5jZUVycm9yKS4gRm9yIG5vdywgd2UK
KyAgICAgICAgLy8gdXNlIGEgZml4cG9pbnQgZm9ybXVsYXRpb24gc2luY2UgbGl2ZW5lc3MgaXMg
YSByYXBpZCBhbmFseXNpcyB3aXRoCisgICAgICAgIC8vIGNvbnZlcmdlbmNlIGd1YXJhbnRlZWQg
YWZ0ZXIgTyhjb25uZWN0aXZpdHkpLgorICAgICAgICAKKyAgICAgICAgLy8gU3RhcnQgYnkgYXNz
dW1pbmcgdGhhdCBldmVyeXRoaW5nIGlzIGRlYWQuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGJsb2NrLT5saXZlQXRIZWFkLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+bGl2ZUF0
VGFpbC5jbGVhcigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkbyB7CisgICAgICAg
ICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykKKyAgICAgICAgICAg
ICAgICBwcm9jZXNzKGJsb2NrSW5kZXgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZv
aWQgcHJvY2VzcyhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSXQn
cyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0
aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExODQ1NQorICAgICAgICBtX2xpdmUgPSBibG9jay0+c3NhLT5saXZlQXRU
YWlsOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+
c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gR2l2ZW4gYW4gVXBz
aWxvbjoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICBuOiBVcHNpbG9uKCRwLCBA
eCkKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBA
cCBhbmQgQG4gYW5kIHVzZXMgQHguCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gR2l2
ZW4gYSBQaGk6CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gICAgcDogUGhpKCkKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBXZSBzYXkgbm90aGluZy4gSXQncyBuZWl0aGVy
IGEgdXNlIG5vciBhIGRlZi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBHaXZlbiBh
IG5vZGU6CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gICAgbjogVGhpbmd5KEBhLCBA
YiwgQGMpCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVm
J3MgQG4gYW5kIHVzZXMgQGEsIEBiLCBAYy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIFVwc2lsb246IHsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBwaGkgPSBub2RlLT5waGkoKTsKKyAgICAgICAgICAgICAgICBtX2xpdmUu
cmVtb3ZlKHBoaSk7CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAg
ICAgICAgICAgICBtX2xpdmUuYWRkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIFBoaTogeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBtX2xp
dmUucmVtb3ZlKG5vZGUpOworICAgICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVO
KG1fZ3JhcGgsIG5vZGUsIGFkZENoaWxkVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fbGl2ZSA9PSBi
bG9jay0+c3NhLT5saXZlQXRIZWFkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCA9
IG1fbGl2ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnByZWRlY2Vzc29ycy5z
aXplKCk7IGktLTspCisgICAgICAgICAgICBibG9jay0+c3NhLT5saXZlQXRUYWlsLmFkZChtX2xp
dmUuYmVnaW4oKSwgbV9saXZlLmVuZCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRDaGls
ZFVzZShOb2RlKiwgRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZENoaWxkVXNlKGVkZ2Up
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZENoaWxkVXNlKEVkZ2UmIGVkZ2UpCisgICAgewor
ICAgICAgICBlZGdlLnNldEtpbGxTdGF0dXMobV9saXZlLmFkZChlZGdlLm5vZGUoKSkuaXNOZXdF
bnRyeSA/IERvZXNLaWxsIDogRG9lc05vdEtpbGwpOworICAgIH0KKyAgICAKKyAgICBib29sIG1f
Y2hhbmdlZDsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7Cit9OworCitib29sIHBlcmZvcm1M
aXZlbmVzc0FuYWx5c2lzKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIExpdmVuZXNzIEFuYWx5c2lzIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1
blBoYXNlPExpdmVuZXNzQW5hbHlzaXNQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0Fu
YWx5c2lzUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlX2gKKyNkZWZpbmUgREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBHcmFwaDsKKworLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5saXZlQXRIZWFkL2xpdmVB
dFRhaWwuCisKK2Jvb2wgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEwIEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBOb2QKICAgICAgICAgb3V0LnByaW50
KCItIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKG5vZGUgPT0gTm9kZTo6dG9w
KCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICBvdXQucHJpbnQoIkAiLCBub2RlLT5pbmRleCgpKTsKICAgICBvdXQucHJpbnQoQWJicmV2
aWF0ZWRTcGVjdWxhdGlvbkR1bXAobm9kZS0+cHJlZGljdGlvbigpKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzOCw2ICs1Mzgs
MTcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzUGhpKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBvcCgpID09IFVwc2lsb247CisgICAgfQorICAgIAorICAgIE5vZGUq
IHBoaSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzUGhpKCkpOworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PE5vZGUqPihtX29wSW5mbyk7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFz
SWRlbnRpZmllcigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKQEAgLTc3MywxNiAr
Nzg0LDE2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9vcEluZm8yID0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oYmxvY2spOwogICAgIH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbkJs
b2NrKCkKKyAgICBCYXNpY0Jsb2NrKiYgdGFrZW5CbG9jaygpCiAgICAgewogICAgICAgICBBU1NF
UlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
QmFzaWNCbG9jayo+KG1fb3BJbmZvKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFz
aWNCbG9jayoqPigmbV9vcEluZm8pOwogICAgIH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBub3RU
YWtlbkJsb2NrKCkKKyAgICBCYXNpY0Jsb2NrKiYgbm90VGFrZW5CbG9jaygpCiAgICAgewogICAg
ICAgICBBU1NFUlQoaXNCcmFuY2goKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QmFz
aWNCbG9jayo+KG1fb3BJbmZvMik7CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PEJhc2lj
QmxvY2sqKj4oJm1fb3BJbmZvMik7CiAgICAgfQogICAgIAogICAgIFN3aXRjaERhdGEqIHN3aXRj
aERhdGEoKQpAQCAtODA1LDcgKzgxNiw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCisgICAg
QmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIGlm
IChpc1N3aXRjaCgpKSB7CiAgICAgICAgICAgICBpZiAoaW5kZXggPCBzd2l0Y2hEYXRhKCktPmNh
c2VzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oWm9tYmllSGludCwgTm9kZURvZXNOb3RFeGl0KSBcCiAg
ICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5vcCwgTm9k
ZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oVXBzaWxvbiwgTm9kZURvZXNOb3RFeGl0IHwgTm9k
ZVJlbGV2YW50VG9PU1IpIFwKICAgICBtYWNybyhQaGksIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVS
ZWxldmFudFRvT1NSKSBcCiAgICAgbWFjcm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
RG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9tTG9jYWwsIE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlRG9lc05vdEV4aXQpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNp
bmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1
ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiT1NSIGF2YWlsYWJpbGl0
eSBhbmFseXNpcyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9j
a3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3RbaV07CisgICAgICAgICAgICBibG9jay0+
c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuZmlsbCgwKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2Et
PmF2YWlsYWJpbGl0eUF0VGFpbC5maWxsKDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBkZXB0aEZpcnN0W2ldOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBXZSBlZGl0IGF2YWlsYWJpbGl0eUF0VGFpbCBpbi1wbGFjZSwgYnV0
IGZpcnN0IGluaXRpYWxpemUgaXQgdG8KKyAgICAgICAgICAgIC8vIGF2YWlsYWJpbGl0eUF0SGVh
ZC4KKyAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiYgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNz
YS0+YXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5ID0gYmxvY2st
PnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9k
ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAg
ICAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7CisgICAgICAgICAgICAgICAgICAgIGF2
YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAg
ICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBqLS07
KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nl
c3NvcihqKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxOb2RlKj4mIHN1Y2Nlc3NvckF2YWls
YWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGsgPSBhdmFpbGFiaWxpdHkuc2l6ZSgpOyBrLS07KSB7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9IGF2YWlsYWJpbGl0eVtrXTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFteU5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnNz
YS0+bGl2ZW5lc3NBdEhlYWQuY29udGFpbnMobXlOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgbWF5IG92ZXJ3cml0ZSBhdmFpbGFiaWxpdHkgd2l0aCBhIGJvZ3Vz
IG5vZGUKKyAgICAgICAgICAgICAgICAgICAgLy8gYXQgbWVyZ2UgcG9pbnRzLiBUaGlzIGlzIGZp
bmUsIHNpbmNlIG1lcmdlIHBvaW50cyBoYXZlCisgICAgICAgICAgICAgICAgICAgIC8vIE1vdkhp
bnQoUGhpKSdzIHRvIHdvcmsgYXJvdW5kIHRoaXMuIFRoZSBvdXRjb21lIG9mIHRoaXMgaXMKKyAg
ICAgICAgICAgICAgICAgICAgLy8geW91IG1pZ2h0IGhhdmUgYSBwcm9ncmFtIGluIHdoaWNoIGEg
bm9kZSBoYXBwZW5zIHRvIHJlbWFpbgorICAgICAgICAgICAgICAgICAgICAvLyBsaXZlIGludG8g
c29tZSBibG9jayBCLCBhbmQgc2VwYXJhdGVseSAoZHVlIHRvIGNvcHkKKyAgICAgICAgICAgICAg
ICAgICAgLy8gcHJvcGFnYXRpb24pIGp1c3Qgb25lIG9mIHRoZSBwcmVkZWNlc3NvcnMgb2YgQiBp
c3N1ZWQgYQorICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50IHB1dHRpbmcgdGhhdCBub2Rl
IGludG8gc29tZSBsb2NhbC4gVGhlbiBpbiBCIHdlIG1pZ2h0CisgICAgICAgICAgICAgICAgICAg
IC8vIHRoaW5rIHRoYXQgdGhhdCBub2RlIGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQgbG9jYWwu
IE9mCisgICAgICAgICAgICAgICAgICAgIC8vIGNvdXJzZSBpZiB0aGF0IGxvY2FsIHdhcyBhY3R1
YWxseSBsaXZlIGluIEIsIEIgd291bGQgaGF2ZSBhCisgICAgICAgICAgICAgICAgICAgIC8vIFBo
aSBmb3IgaXQuIFNvIGVzc2VudGlhbGx5IHdlJ2xsIGhhdmUgT1NSIGV4aXQgZHJvcHBpbmcgdGhp
cworICAgICAgICAgICAgICAgICAgICAvLyBub2RlJ3MgdmFsdWUgaW50byB0aGUgbG9jYWwgd2hl
biB3ZSBvdGhlcndpc2UgKGluIHRoZSBERkcpCisgICAgICAgICAgICAgICAgICAgIC8vIHdvdWxk
IGhhdmUgZHJvcHBlZCB1bmRlZmluZWQgaW50byB0aGUgbG9jYWwuIFRoaXMgc2VlbXMKKyAgICAg
ICAgICAgICAgICAgICAgLy8gaGFybWxlc3MuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBzdWNjZXNzb3JBdmFpbGFiaWxpdHlba10gPSBteU5vZGU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFs
eXNpcyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBPU1IgQXZhaWxhYmlsaXR5IEFuYWx5c2lzIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBo
YXNlPE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VfaAorI2RlZmluZSBE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29t
cHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhpcyByZWxp
ZXMgb24gbGl2ZW5lc3MKKy8vIGFuYWx5c2lzIHBoYXNlIGhhdmluZyBiZWVuIHJ1biBhbmQgdGhl
IGdyYXBoIG5vdCBoYXZpbmcgYmVlbiB0cmFuc2Zvcm1lZAorLy8gYWZ0ZXIgdGhhdC4KKworYm9v
bCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsMjAgKzE4NCwyMCBA
QCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgcGVyZm9ybVN0
b3JlRWxpbWluYXRpb24oZGZnKTsKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAg
ICAKLSAgICAvLyBOb3RlIHRoYXQgRENFIGlzIG5lY2Vzc2FyeSBldmVuIGluIHRoZSBGVEwsIGJl
Y2F1c2Ugb25seSB3ZSBrbm93IHdoYXQgaXMKLSAgICAvLyBsaXZlLWluLWJ5dGVjb2RlLiBUaGUg
RlRMIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgd2hlbiBPU1IgZXhpdAotICAg
IC8vIHZhbHVlcyBzaG91bGQgYmUgd2lyZWQgdG8gTFZhbHVlcywgdmVyc3VzIGJlaW5nIHdpcmVk
IHRvIEV4aXRWYWx1ZTo6ZGVhZCgpLgotICAgIC8vIFRoaXMgaXMgZGlzdGluY3QgZnJvbSB3aGF0
IFpvbWJpZUhpbnQgZ2l2ZXMgdXM6IFpvbWJpZUhpbnQgc2F5cyB0aGF0IHRoZQotICAgIC8vIHZh
bHVlIGluIHRoZSBnaXZlbiBieXRlY29kZSBsb2NhbCBpcyBhbHdheXMgZGVhZDsgdGhlIHJlZmVy
ZW5jZSBjb3VudHMgdGhhdAotICAgIC8vIERDRSBwcm9kdWNlcyB0ZWxsIHVzIHRoYXQgdGhlIHZh
bHVlIGlzIGxpdmUgZm9yIGEgd2hpbGUgYnV0IGV2ZW50dWFsbHkKLSAgICAvLyBkaWVzLCBhbmQg
aXQgdGVsbHMgdXMgZXhhY3RseSB3aGVuIHRoZSBkZWF0aCBwb2ludCBpcy4KLSAgICBwZXJmb3Jt
RENFKGRmZyk7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBpZiAoT3B0aW9uczo6dXNlRXhw
ZXJpbWVudGFsRlRMKCkKICAgICAgICAgJiYgY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9u
CiAgICAgICAgICYmIEZUTDo6Y2FuQ29tcGlsZShkZmcpKSB7CiAgICAgICAgIAorICAgICAgICBw
ZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoZGZnKTsKKyAgICAgICAgcGVyZm9ybVNTQUNvbnZl
cnNpb24oZGZnKTsKKyAgICAgICAgcGVyZm9ybUNGQShkZmcpOworICAgICAgICBwZXJmb3JtRENF
KGRmZyk7IC8vIFdlIHJlbHkgb24gdGhpcyB0byBjb252ZXJ0IGRlYWQgU2V0TG9jYWxzIGludG8g
dGhlIGFwcHJvcHJpYXRlIGhpbnQsIGFuZCB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJl
IHJlY29nbml6ZWQgYXMgZGVhZCBieSBMTFZNLgorICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFs
eXNpcyhkZmcpOworICAgICAgICBwZXJmb3JtRmx1c2hMaXZlbmVzc0FuYWx5c2lzKGRmZyk7Cisg
ICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhkZmcpOworICAgICAgICAKICAg
ICAgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dl
cmluZzoiKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IE9TUiBlbnRyeS4K
QEAgLTIxNSw2ICsyMTUsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUlu
VGhyCiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogICAgIAorICAgIHBlcmZvcm1E
Q0UoZGZnKTsKICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwogICAg
IGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBhZnRlciBvcHRpbWl6YXRpb246Iik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcyLDE0ICs0NzIsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBa
b21iaWVIaW50OiB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZp
c2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8v
IGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4KLSAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNhc2UgUGhp
OgogICAgICAgICAgICAgLy8gUGhpcyBzaG91bGQgbm90IGJlIHZpc2libGUgaGVyZSBzaW5jZSB3
ZSdyZSBpdGVyYXRpbmcgdGhlIGFsbC1idXQtUGhpJ3MKICAgICAgICAgICAgIC8vIHBhcnQgb2Yg
YmFzaWMgYmxvY2tzLgotICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIFVwc2lsb246CisgICAgICAgICAgICAvLyBUaGVzZSBkb24ndCBnZXQgaW5z
ZXJ0ZWQgdW50aWwgd2UgZ28gaW50byBTU0EuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRTY29w
ZToKQEAgLTU0MSw3ICs1NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6Ci0gICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R1NTQUNvbnZlcnNpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRG
R1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIFNTQUNvbnZlcnNpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CitwdWJsaWM6CisgICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAg
OiBQaGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikKKyAgICAgICAgLCBtX2luc2VydGlvblNl
dChncmFwaCkKKyAgICAgICAgLCBtX25vblRyaXZpYWxQaGlzKE9wZXJhbmRzTGlrZSwgZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2NoYW5nZWQoZmFsc2UpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAorICAgICAg
ICAvLyBGaWd1cmUgb3V0IHdoaWNoIFNldExvY2FsJ3MgbmVlZCBmbHVzaGluZy4gTmVlZCB0byBk
byB0aGlzIHdoaWxlIHRoZQorICAgICAgICAvLyBQaGkgZ3JhcGggaXMgc3RpbGwgaW50YWN0Lgor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7
IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJs
b2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAh
PSBGbHVzaCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
YWRkRmx1c2hlZExvY2FsT3Aobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgd2hpbGUgKCFtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LnRha2VMYXN0KCk7Cisg
ICAgICAgICAgICBBU1NFUlQobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpOworICAg
ICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkRmx1c2hl
ZExvY2FsRWRnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEVsaW1pbmF0ZSBh
bGwgZHVwbGljYXRlIG9yIHNlbGYtcG9pbnRpbmcgUGhpIGVkZ2VzLiBUaGlzIG1lYW5zIHRoYXQK
KyAgICAgICAgLy8gd2UgdHJhbnNmb3JtOgorICAgICAgICAvLworICAgICAgICAvLyBwOiBQaGko
QG4xLCBAbjIsIEBuMykKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaW50bzoKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gcDogUGhpKEB4KQorICAgICAgICAvLworICAgICAgICAvLyBpZiBlYWNoIEBu
aSBpbiB7QG4xLCBAbjIsIEBuM30gaXMgZWl0aGVyIGVxdWFsIHRvIEBwIHRvIGlzIGVxdWFsCisg
ICAgICAgIC8vIHRvIEB4LCBmb3IgZXhhY3RseSBvbmUgb3RoZXIgQHguIEFkZGl0aW9uYWxseSwg
dHJpdmlhbCBQaGlzIChpLmUuCisgICAgICAgIC8vIHA6IFBoaShAeCkpIGFyZSBmb3J3YXJkZWQs
IHNvIHRoYXQgaWYgaGF2ZSBhbiBlZGdlIHRvIHN1Y2ggQHAsIHdlCisgICAgICAgIC8vIHJlcGxh
Y2UgaXQgd2l0aCBAeC4gVGhpcyBsb29wIGRvZXMgdGhpcyBmb3IgUGhpcyBvbmx5OyBsYXRlciB3
ZSBkbworICAgICAgICAvLyBzdWNoIGZvcndhcmRpbmcgZm9yIFBoaSByZWZlcmVuY2VzIGZvdW5k
IGluIG90aGVyIG5vZGVzLgorICAgICAgICAvLworICAgICAgICAvLyBTZWUgQXljb2NrIGFuZCBI
b3JzcG9vbCBpbiBDQycwMCBmb3IgYSBiZXR0ZXIgZGVzY3JpcHRpb24gb2Ygd2hhdAorICAgICAg
ICAvLyB3ZSdyZSBkb2luZyBoZXJlLgorICAgICAgICBkbyB7CisgICAgICAgICAgICBtX2NoYW5n
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9n
cmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRl
eC0tOykgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJ
bmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmIChwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yd2FyZFBoaUNoaWxkcmVuKHBoaSk7CisgICAgICAgICAgICAgICAg
ICAgIGRlZHVwbGljYXRlQ2hpbGRyZW4ocGhpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAv
LyBGb3IgZWFjaCBiYXNpYyBibG9jaywgZm9yIGVhY2ggbG9jYWwgbGl2ZSBhdCB0aGUgaGVhZCBv
ZiB0aGF0IGJsb2NrLAorICAgICAgICAvLyBmaWd1cmUgb3V0IHdoYXQgbm9kZSB3ZSBzaG91bGQg
YmUgcmVmZXJyaW5nIHRvIGluc3RlYWQgb2YgdGhhdCBsb2NhbC4KKyAgICAgICAgLy8gSWYgaXQg
dHVybnMgb3V0IHRvIGJlIGEgbm9uLXRyaXZpYWwgUGhpLCBtYWtlIHN1cmUgdGhhdCB0byBjcmVh
dGUgYW4KKyAgICAgICAgLy8gU1NBIFBoaSBhbmQgVXBzaWxvbnMgaW4gcHJlZGVjZXNzb3IgYmxv
Y2tzLiBXZSByZXVzZQorICAgICAgICAvLyBCYXNpY0Jsb2NrOjp2YXJpYWJsZXNBdEhlYWQgZm9y
IHRyYWNraW5nIHdoaWNoIG5vZGVzIHRvIHJlZmVyIHRvLgorICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWRbaV07CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gUG9pc29uIHRoaXMgZW50cnkgaW4gdmFyaWFibGVzQXRIZWFkIGJl
Y2F1c2Ugd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAgICAgLy8gd2FudCBhbnlvbmUgdG8gdHJ5
IHRvIHJlZmVyIHRvIGl0LCBpZiB0aGUgdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAg
Ly8gY2FwdHVyZWQuCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRb
aV0gPSAwOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CisgICAgICAgICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1
bWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBG
bHVzaDoKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIGNh
c2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9
PSBQaGkgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAg
ICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmp1c3RPbmVDaGlsZCgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoZWRnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlZGdl
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJdCdzIGEgbm9uLXRyaXZpYWwgUGhpLgorICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydCgwLCBTcGVjTm9uZSwgUGhpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNb
al07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdXBzaWxvbiA9IHByZWRlY2Vz
c29yLT5hcHBlbmROb25UZXJtaW5hbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwgU3BlY05vbmUsIFVwc2lsb24sIE9wSW5mbyhub2RlKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3ItPnZhcmlhYmxlc0F0VGFpbFtpXSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCBTcGVjTm9uZSwgTW92SGludCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8oYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXSA9IG5vZGU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDb252ZXJ0IG9wZXJhdGlvbnMgb3ZlciBs
b2NhbHMgaW50byBvcGVyYXRpb25zIG92ZXIgU1NBIG5vZGVzLgorICAgICAgICAvLyAtIEdldExv
Y2FsIG92ZXIgY2FwdHVyZWQgdmFyaWFibGVzIGxvc2UgdGhlaXIgcGhpcy4KKyAgICAgICAgLy8g
LSBHZXRMb2NhbCBvdmVyIHVuY2FwdHVyZWQgdmFyaWFibGVzIGRpZSBhbmQgZ2V0IHJlcGxhY2Vk
IHdpdGggcmVmZXJlbmNlcworICAgICAgICAvLyAgIHRvIHRoZSBub2RlIHNwZWNpZmllZCBieSB2
YXJpYWJsZXNBdEhlYWQuCisgICAgICAgIC8vIC0gU2V0TG9jYWwgZ2V0cyBOb2RlTXVzdEdlbmVy
YXRlIGlmIGl0J3MgZmx1c2hlZC4KKyAgICAgICAgLy8gLSBGbHVzaCBsb3NlcyBpdHMgY2hpbGRy
ZW4gYnV0IHJlbWFpbnMsIGJlY2F1c2Ugd2Ugd2FudCB0byBrbm93IHdoZW4gYQorICAgICAgICAv
LyAgIGZsdXNoZWQgU2V0TG9jYWwncyB2YWx1ZSBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGlzIGFs
c28gbWFrZXMgaXQgc2ltcGxlcgorICAgICAgICAvLyAgIHRvIHJlYXNvbiBhYm91dCB0aGUgZm9y
bWF0IG9mIGEgbG9jYWwsIHNpbmNlIHdlIGNhbiBqdXN0IGZvbGQgaXQgaW50byB0aGUKKyAgICAg
ICAgLy8gICBiYWNrd2FyZHMgYW5hbHlzaXMgdGhhdCBMaXZlbmVzc0FuYWx5c2lzUGhhc2UgZG9l
cy4gQXMgcGFydCBvZiB0aGUKKyAgICAgICAgLy8gICBiYWNrd2FyZHMgYW5hbHlzaXMsIHdlIHNh
eSB0aGF0IHRoZSB0eXBlIG9mIGEgbG9jYWwgY2FuIGJlIGVpdGhlcgorICAgICAgICAvLyAgIGlu
dDMyLCBkb3VibGUsIHZhbHVlLCBvciBkZWFkLgorICAgICAgICAvLyAtIFBoYW50b21Mb2NhbCBi
ZWNvbWVzIFBoYW50b20sIGFuZCBpdHMgY2hpbGQgaXMgd2hhdGV2ZXIgaXMgc3BlY2lmaWVkCisg
ICAgICAgIC8vICAgYnkgdmFyaWFibGVzQXRIZWFkLgorICAgICAgICAvLyAtIFNldEFyZ3VtZW50
IHR1cm5zIGludG8gR2V0TG9jYWwuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5k
ZXgtLTspCisgICAgICAgICAgICAgICAgYmxvY2stPmF0KG5vZGVJbmRleCktPnJlcGxhY2VtZW50
ID0gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IG1fZmx1c2hl
ZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
bWVyZ2VGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJl
c2V0KCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZh
cmlhYmxlLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAg
ICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBG
bHVzaDogeworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CisgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkuc2V0Tm9kZShibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhh
bnRvbSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TG9jYWwp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEZyZWUgYWxsIHBoaXMgYW5kIHJlc2V0IHZhcmlhYmxlcyB2ZWN0b3JzLgorICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgt
LTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6
ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZy
ZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgICAgIGJsb2NrLT5waGlzLmNsZWFy
KCk7CisgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLmNsZWFyKCk7CisgICAgICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+
dmFsdWVzQXRIZWFkLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmNs
ZWFyKCk7CisgICAgICAgICAgICBibG9jay0+c3NhID0gYWRvcHRQdHIobmV3IEJhc2ljQmxvY2s6
OlNTQURhdGEoYmxvY2spKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5t
X2Zvcm0gPSBTU0E7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZm9yd2FyZFBoaUNoaWxk
cmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
QWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlJiBlZGdlID0gbm9k
ZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gZm9yd2FyZFBoaUVkZ2Uo
ZWRnZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogZm9yd2FyZFBoaShOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIFBoaTogeworICAgICAgICAgICAgICAgIEVk
Z2UgZWRnZSA9IG5vZGUtPmp1c3RPbmVDaGlsZCgpOworICAgICAgICAgICAgICAgIGlmICghZWRn
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVkZ2Uubm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBub2RlOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgZm9yd2FyZFBo
aUVkZ2UoRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIE5vZGUqIG5ld05vZGUgPSBmb3J3YXJk
KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKG5ld05vZGUgPT0gZWRnZS5ub2RlKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVkZ2Uuc2V0Tm9kZShuZXdOb2RlKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVkdXBsaWNhdGVDaGls
ZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9k
ZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZWRnZSA9PSBub2RlKSB7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0pOworICAgICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IEFkamFjZW5jeUxpc3Q6
OlNpemU7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZHJlbi5jaGlsZChq
KSA9PSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVk
Z2Uoai0tKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBmb3J3YXJkTm9kZUNoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBERkdfTk9E
RV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBmb3J3YXJkTm9kZUVkZ2UpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGZvcndhcmROb2RlRWRnZShOb2RlKiwgRWRnZSYgZWRnZSkKKyAgICB7
CisgICAgICAgIGlmIChlZGdlLT5vcCgpIAorICAgICAgICBzd2l0Y2ggKGVkZ2UtPm9wKCkpIHsK
KyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lk
IGFkZEZsdXNoZWRMb2NhbE9wKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobV9mbHVz
aGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IG1fZmx1c2hlZExvY2FsT3BzLmFkZChub2RlKTsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdv
cmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbEVk
Z2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKGVk
Z2Uubm9kZSgpKTsKKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cisg
ICAgSGFzaFNldDxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7CisgICAgVmVjdG9yPE5vZGUqPiBt
X2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7CisgICAgYm9vbCBtX2NoYW5nZWQ7Cit9OworCitib29s
IHBlcmZvcm1TU0FDb252ZXJzaW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbigiREZHIFNTQSBDb252ZXJzaW9uIFBoYXNlIik7CisgICAgcmV0dXJu
IHJ1blBoYXNlPFNTQUNvbnZlcnNpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1NTQUNvbnZlcnNpb25QaGFz
ZV9oCisjZGVmaW5lIERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb252ZXJ0IFRocmVhZGVkQ1BTIGZvcm0g
aW50byBTU0EgZm9ybS4gVGhpcyByZXN1bHRzIGluIGEgZm9ybSB0aGF0IGhhczoKKy8vCisvLyAt
IFJvdWdobHkgbWluaW1hbCBQaGkncy4gV2UgdXNlIHRoZSBBeWNvY2sgJiBIb3JzcG9vbCBmaXhw
b2ludCBmb3IKKy8vICAgY29udmVydGluZyB0aGUgQ1BTIG1heGltYWwgUGhpcyBpbnRvIFNTQSBt
aW5pbWFsIFBoaXMsIHdpdGggdGhlIGNhdmVhdAorLy8gICB0aGF0IGlycmVkdWNpYmxlIGNvbnRy
b2wgZmxvdyBtYXkgcmVzdWx0IGluIHNvbWUgbWlzc2VkIG9wcG9ydHVuaXRpZXMKKy8vICAgZm9y
IFBoaSByZWR1Y3Rpb24uCisvLworLy8gLSBObyB1c2VzIG9mIEdldExvY2FsL1NldExvY2FsIGV4
Y2VwdCBmb3IgY2FwdHVyZWQgdmFyaWFibGVzIGFuZCBmbHVzaGVzLgorLy8gICBBZnRlciB0aGlz
LCBhbnkgcmVtYWluaW5nIFNldExvY2FsIG1lYW5zIEZsdXNoLiBGbHVzaCBub2RlcyBhcmUKKy8v
ICAgZWxpbWluYXRlZC4gUGhhbnRvbUxvY2FscyBiZWNvbWUgUGhhbnRvbXMuIE5vZGVzIG1heSBt
YXkgaGF2ZSBjaGlsZHJlbgorLy8gICB0aGF0IGFyZSBpbiBhbm90aGVyIGJhc2ljIGJsb2NrLgor
Ly8KKy8vIC0gTW92SGludHMgYXJlIHVzZWQgZm9yIE9TUiBpbmZvcm1hdGlvbiwgYW5kIGFyZSB0
aGVtc2VsdmVzIG1pbmltYWwuCisvLyAgIEEgTW92SGludCB3aWxsIG9jY3VyIGF0IHNvbWUgcG9p
bnQgYWZ0ZXIgdGhlIGFzc2lnbmluZywgYW5kIGF0IFBoaQorLy8gICBwb2ludHMuCisvLworLy8g
LSBVbmxpa2UgY29udmVudGlvbmFsIFNTQSBpbiB3aGljaCBQaGkgZnVuY3Rpb25zIHJlZmVyIHRv
IHByZWRlY2Vzc29ycworLy8gICBhbmQgdmFsdWVzLCBvdXIgU1NBIHVzZXMgVXBzaWxvbiBmdW5j
dGlvbnMgdG8gaW5kaWNhdGUgdmFsdWVzIGluCisvLyAgIHByZWRlY2Vzc29ycy4gQSBtZXJnZSB3
aWxsIGxvb2sgbGlrZToKKy8vCisvLyAgIGxhYmVsQToKKy8vICAgICAgIGE6IFRoaW5neSguLi4p
CisvLyAgICAgICBiOiBVcHNpbG9uKF5lLCBAYSkKKy8vICAgICAgIEp1bXAobGFiZWxDKQorLy8K
Ky8vICAgbGFiZWxCOgorLy8gICAgICAgYzogT3RoZXJUaGluZ3koLi4uKQorLy8gICAgICAgZDog
VXBzaWxvbiheZSwgQGMpCisvLyAgICAgICBKdW1wKGxhYmVsQykKKy8vCisvLyAgIGxhYmVsQzoK
Ky8vICAgICAgIGU6IFBoaSgpCisvLworLy8gICBOb3RlIHRoYXQgdGhlIFBoaSBoYXMgbm8gY2hp
bGRyZW4sIGJ1dCB0aGUgcHJlZGVjZXNzb3JzIGhhdmUgVXBzaWxvbnMKKy8vICAgdGhhdCBoYXZl
IGEgd2VhayByZWZlcmVuY2UgdG8gdGhlIFBoaSAoXmUgaW5zdGVhZCBvZiBAZTsgd2Ugc3RvcmUg
aXQKKy8vICAgaW4gdGhlIE9wSW5mbyByYXRoZXIgdGhhbiB0aGUgQWRqYWNlbmN5TGlzdCkuIFRo
aW5rIG9mIHRoZSBVcHNpbG9uCisvLyAgIGFzICJhc3NpZ25pbmciIHRvIHRoZSAidmFyaWFibGUi
IGFzc29jaWF0ZWQgd2l0aCB0aGUgUGhpLCBhbmQgdGhhdAorLy8gICB0aGlzIGlzIHRoZSBvbmUg
cGxhY2UgaW4gU1NBIGZvcm0gd2hlcmUgeW91IGNhbiBoYXZlIG11bHRpcGxlCisvLyAgIGFzc2ln
bm1lbnRzLgorLy8KKy8vICAgVGhpcyBpbXBsaWVzIHNvbWUgb3RoZXIgbG9vc2VuaW5ncyBvZiBT
U0EuIEZvciBleGFtcGxlLCBhbiBVcHNpbG9uCisvLyAgIG1heSBwcmVjZWRlIGEgUGhpIGluIHRo
ZSBzYW1lIGJhc2ljIGJsb2NrOyB0aGlzIG1heSBhcmlzZSBhZnRlciBDRkcKKy8vICAgc2ltcGxp
ZmljYXRpb24uIEFsdGhvdWdoIGl0J3MgcHJvZml0YWJsZSBmb3IgQ0ZHIHNpbXBsaWZpY2F0aW9u
IChvcgorLy8gICBzb21lIG90aGVyIHBoYXNlKSB0byByZW1vdmUgdGhlc2UsIGl0J3Mgbm90IHN0
cmljdGx5IG5lY2Vzc2FyeS4gQXMKKy8vICAgd2VsbCwgdGhpcyBmb3JtIGFsbG93cyB0aGUgVXBz
aWxvbiB0byBiZSBpbiBhbnkgYmxvY2sgdGhhdCBkb21pbmF0ZXMKKy8vICAgdGhlIHByZWRlY2Vz
c29yIGJsb2NrIG9mIHRoZSBQaGksIHdoaWNoIGFsbG93cyBmb3IgYmxvY2sgc3BsaXR0aW5nIHRv
CisvLyAgIGlnbm9yZSB0aGUgcG9zc2liaWxpdHkgb2YgaW50cm9kdWNpbmcgYW4gZXh0cmEgZWRn
ZSBiZXR3ZWVuIHRoZSBQaGkKKy8vICAgYW5kIHRoZSBwcmVkZWNlc3NvciAodGhvdWdoIG5vcm1h
bCBTU0Egd291bGQgYWxsb3cgdGhpcywgYWxzbywgd2l0aAorLy8gICB0aGUgY2F2ZWF0IHRoYXQg
dGhlIFBoaSBwcmVkZWNlc3NvciBibG9jayBsaXN0cyB3b3VsZCBoYXZlIHRvIGJlCisvLyAgIHVw
ZGF0ZWQpLgorLy8KKy8vICAgVGhlIGVhc2llc3Qgd2F5IHRvIGNvbnZlcnQgZnJvbSB0aGlzIFNT
QSBmb3JtIGludG8gYSBkaWZmZXJlbnQgU1NBCisvLyAgIGZvcm0gaXMgdG8gcmVkbyBTU0EgY29u
dmVyc2lvbiBmb3IgUGhpIGZ1bmN0aW9ucy4gVGhhdCBpcywgdHJlYXQgZWFjaAorLy8gICBQaGkg
aW4gb3VyIElSIGFzIGEgbm9uLVNTQSB2YXJpYWJsZSBpbiB0aGUgZm9yZWlnbiBJUiAoc28sIGFz
IGFuCisvLyAgIGFsbG9jYSBpbiBMTFZNIElSLCBmb3IgZXhhbXBsZSk7IHRoZSBVcHNpbG9ucyB0
aGF0IHJlZmVyIHRvIHRoZSBQaGkKKy8vICAgYmVjb21lIHN0b3JlcyBhbmQgdGhlIFBoaXMgdGhl
bXNlbHZlcyBiZWNvbWUgbG9hZHMuCisvLworLy8gICBGdW4gZmFjdDogVXBzaWxvbiBpcyBzbyBu
YW1lZCBiZWNhdXNlIGl0IGNvbWVzIGJlZm9yZSBQaGkgaW4gdGhlCisvLyAgIGFscGhhYmV0LiBJ
dCBjYW4gYmUgd3JpdHRlbiBhcyAiWSIuCisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNpb24oR3Jh
cGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJl
dmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxOCw2ICszMTgsMjcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gY2hlY2tBbmRTZXQobV9mbGFncywgbV9mbGFncyB8IG5ld0ZsYWdzKTsK
ICAgICB9CiAgICAgCisgICAgRmx1c2hGb3JtYXQgZmx1c2hGb3JtYXQoKQorICAgIHsKKyAgICAg
ICAgaWYgKCFzaG91bGRVbmJveElmUG9zc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVz
aGVkSlNWYWx1ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRVc2VEb3VibGVGb3JtYXQo
KSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkRG91YmxlOworICAgICAgICAKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7Cisg
ICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICBy
ZXR1cm4gRmx1c2hlZEludDMyOworICAgICAgICAKKyAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0
aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRDZWxsOworICAgICAg
ICAKKyAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAg
ICAgICAgcmV0dXJuIEZsdXNoZWRCb29sZWFuOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIEZs
dXNoZWRKU1ZhbHVlOworICAgIH0KKyAgICAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyBzbGln
aHRseSBzcGFjZS1pbmVmZmljaWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRo
CiAgICAgLy8gd2lsbCBoYXZlIHRoZSBzYW1lIG9wZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRoZSBz
YW1lIHByZWRpY3Rpb24uIEJ1dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQsMTkgKzEwNCwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIW1faGlnaEJsb2NrKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgbV9ibG9ja3MuYWRkKG1faGln
aEJsb2NrLCBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJsb2NrICIsICptX2hpZ2hCbG9jaykpKTsK
LSAgICAgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wUm9vdHMoKTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgY2xvc2VPdmVyRmx1c2hlZExvY2FsT3BzKCk7Ci0gICAgICAgIAogICAgICAg
ICBtX291dC5hcHBlbmRUbyhtX2FyZ3VtZW50Q2hlY2tzLCBsb3dCbG9jayhtX2dyYXBoLmJsb2Nr
KDApKSk7CiAKLSAgICAgICAgdHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50cygpOworICAgICAgICBj
aGVja0FyZ3VtZW50cygpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jayht
X2dyYXBoLmJsb2NrKDApKSk7CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5k
ZXgpCi0gICAgICAgICAgICBjb21waWxlQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRl
cHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjb21waWxlQmxvY2soZGVw
dGhGaXJzdFtpXSk7CiAgICAgICAgIAogICAgICAgICAvLyBBbmQgbm93IGNvbXBsZXRlIHRoZSBp
bml0aWFsaXphdGlvbiBibG9jay4KICAgICAgICAgbGlua09TUkV4aXRzQW5kQ29tcGxldGVJbml0
aWFsaXphdGlvbkJsb2NrcygpOwpAQCAtMTI5LDQxICsxMjgsNyBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgCi0gICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCkKLSAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gbV9oaWdoQmxvY2stPnNpemUoKTsgbm9kZUlu
ZGV4LS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9oaWdoQmxvY2stPmF0KG5vZGVJ
bmRleCk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGbHVzaCkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKG5vZGUpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xvc2VPdmVyRmx1c2hlZExvY2FsT3BzKCkK
LSAgICB7Ci0gICAgICAgIHdoaWxlICghbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmlzRW1wdHko
KSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5s
YXN0KCk7Ci0gICAgICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QucmVtb3ZlTGFzdCgp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9mbHVzaGVkTG9jYWxPcHMuY29u
dGFpbnMobm9kZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBERkdfTk9ERV9ET19UT19D
SElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbE9wKE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIG1fZmx1c2hlZExvY2FsT3BzLmFkZChub2RlKTsKLSAgICAg
ICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmFwcGVuZChub2RlKTsKLSAgICB9Ci0gICAgdm9p
ZCBhZGRGbHVzaGVkTG9jYWxFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBh
ZGRGbHVzaGVkTG9jYWxPcChlZGdlLm5vZGUoKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdHJh
bnNmZXJBbmRDaGVja0FyZ3VtZW50cygpCisgICAgdm9pZCBjaGVja0FyZ3VtZW50cygpCiAgICAg
ewogICAgICAgICAvLyBXaGlsZSBjaGVja2luZyBhcmd1bWVudHMsIGV2ZXJ5dGhpbmcgaXMgaW4g
dGhlIHN0YWNrLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhbHVlU291cmNlcy5zaXpl
KCk7IGktLTspCkBAIC0xNzIsNTYgKzEzNyw0OSBAQCBwcml2YXRlOgogICAgICAgICBtX2NvZGVP
cmlnaW4gPSBDb2RlT3JpZ2luKDApOwogICAgICAgICBtX25vZGUgPSAwOwogICAgICAgICAKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVu
dHNbaV07Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2dyYXBoLmJsb2Nr
KDApLT5mbHVzaEZvcm1hdEF0SGVhZC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIEZsdXNo
Rm9ybWF0IGZvcm1hdCA9IG1fZ3JhcGguYmxvY2soMCktPmZsdXNoRm9ybWF0QXRIZWFkW2ldOwor
ICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLmJsb2NrKDApLT5mbHVzaEZvcm1hdEF0
SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgICAgIC8vIElmIGl0J3MgY2FwdHVyZWQgdGhlbiB3ZSdsbCBiZSBhY2Nlc3NpbmcgaXQg
dGhyb3VnaCBsb2FkcyBhbmQgc3RvcmVzCi0gICAgICAgICAgICAvLyBhbnl3YXkgLSB0aGVyZSdz
IG5vIHBvaW50IGluIHRyYW5zZmVyaW5nIGl0IG91dC4KLSAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBEZWFkRmx1c2ggfHwg
Zm9ybWF0ID09IEZsdXNoZWRKU1ZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRy
ZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChm
b3JtYXQgIT0gRmx1c2hlZERvdWJsZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2
YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghdmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKTsKKyAgICAgICAg
ICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3IodmFyaWFibGUtPmxv
Y2FsKCkpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICBjYXNl
IEZsdXNoZWRJbnQzMjogeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5hcmd1
bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDogewor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShq
c1ZhbHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
aXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNO
b3RJbnQzMihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldCh1bmJveElu
dDMyKGpzVmFsdWUpLCBtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkQm9vbGVhbjogeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3
YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29sZWFuKGpz
VmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlv
bikpIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNW
YWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOwotICAgICAgICAg
ICAgICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlv
bikpIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNW
YWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwotICAgICAg
ICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hCb29sZWFuKGpzVmFsdWUpLCBtX2xvY2Fsc0Jv
b2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LnNl
dChqc1ZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVCbG9jayhCbG9ja0luZGV4IGJsb2Nr
SW5kZXgpCisgICAgdm9pZCBjb21waWxlQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewot
ICAgICAgICBtX2hpZ2hCbG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
IG1faGlnaEJsb2NrID0gYmxvY2s7CiAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayA9IG1f
YmxvY2tzLmdldChtX2hpZ2hCbG9jayk7CiAgICAgICAgIAogICAgICAgICBtX25leHRIaWdoQmxv
Y2sgPSAwOwotICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBibG9ja0lu
ZGV4ICsgMTsgbmV4dEJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK25leHRCbG9j
a0luZGV4KSB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBuZXh0QmxvY2tJbmRleCA9IG1faGln
aEJsb2NrLT5pbmRleCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsg
KytuZXh0QmxvY2tJbmRleCkgewogICAgICAgICAgICAgbV9uZXh0SGlnaEJsb2NrID0gbV9ncmFw
aC5ibG9jayhuZXh0QmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAobV9uZXh0SGlnaEJsb2Nr
KQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQxLDExICsxOTksNyBAQCBwcml2YXRlOgog
ICAgICAgICAKICAgICAgICAgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKCk7CiAgICAg
ICAgIAotICAgICAgICBtX2ludDMyVmFsdWVzLmNsZWFyKCk7Ci0gICAgICAgIG1fanNWYWx1ZVZh
bHVlcy5jbGVhcigpOwotICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuY2xlYXIoKTsKLSAgICAgICAg
bV9zdG9yYWdlVmFsdWVzLmNsZWFyKCk7Ci0gICAgICAgIG1fdGltZVRvTGl2ZS5jbGVhcigpOwor
ICAgICAgICBtX2xpdmUgPSBibG9jay0+c3NhLT5saXZlQXRIZWFkOwogICAgICAgICAKICAgICAg
ICAgbV9zdGF0ZS5yZXNldCgpOwogICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhtX2hp
Z2hCbG9jayk7CkBAIC00NDUsOCArMzk5LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG1fbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVO
KG1fZ3JhcGgsIG1fbm9kZSwgdXNlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmhh
c1Jlc3VsdCgpKQotICAgICAgICAgICAgbV90aW1lVG9MaXZlLmFkZChtX25vZGUsIG1fbm9kZS0+
YWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YWRqdXN0ZWRSZWZDb3Vu
dCgpKQorICAgICAgICAgICAgbV9saXZlLmFkZChtX25vZGUpOwogICAgICAgICAKICAgICAgICAg
aWYgKHNob3VsZEV4ZWN1dGVFZmZlY3RzKQogICAgICAgICAgICAgbV9zdGF0ZS5leGVjdXRlRWZm
ZWN0cyhub2RlSW5kZXgpOwpAQCAtNDU4LDE0ICs0MTIsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZSk7
CiAgICAgICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQotICAgICAgICAgICAgbV9kb3VibGVWYWx1
ZXMuYWRkKG1fbm9kZSwgbV9vdXQuY29uc3REb3VibGUodmFsdWUuYXNEb3VibGUoKSkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmNvbnN0RG91YmxlKHZhbHVlLmFzRG91YmxlKCkpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSkpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBjb21waWxlV2Vha0pTQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAg
bV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIHdlYWtQb2ludGVyKG1fbm9kZS0+d2Vha0NvbnN0
YW50KCkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh3ZWFrUG9pbnRlcihtX25vZGUtPndlYWtDb25z
dGFudCgpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldExvY2FsKCkKQEAgLTQ5
MiwxNSArNDQ2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAodmFyaWFibGUt
PmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1
ZS5tX3ZhbHVlKSkKLSAgICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1f
b3V0LmxvYWQzMihwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSkpOworICAgICAgICAgICAg
ICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSkp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQo
bV9ub2RlLCBtX291dC5sb2FkNjQoYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKKyAg
ICAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKHZhcmlhYmxl
LT5sb2NhbCgpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7CiAgICAgICAg
ICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAgICAgICAg
ICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZ2V0KG1fbG9jYWxzRG91Ymxl
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAgICAgICAgICAgICAgc2V0RG91Ymxl
KG1fb3V0LmdldChtX2xvY2Fsc0RvdWJsZS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
NTA5LDE4ICs0NjMsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIHNwZWN1bGF0ZWQgb24g
U2V0TG9jYWwgYW5kIHdpbGwgYWx3YXlzIGJlIHN0b3JlZCBpbnRvIGFuIGFwcHJvcHJpYXRlbHkK
ICAgICAgICAgICAgIC8vIHR5cGVkIHJlZmVyZW5jZSBMVmFsdWUuCiAgICAgICAgICAgICBpZiAo
aXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgbV9pbnQz
MlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSkpOworICAgICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmdldChtX2xvY2Fs
czMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChtX25vZGUs
IG1fb3V0LmdldChtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpKTsK
KyAgICAgICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmdldChtX2xvY2Fsc0Jvb2xlYW4ub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAvLyBXZSBza2lwIHRoZSBDZWxsIGNhc2UgaGVyZSBiZWNh
dXNlIHRoYXQgZ2V0cyB0cmVhdGVkIGlkZW50aWNhbGx5IHRvCiAgICAgICAgICAgICAvLyBKU1Zh
bHVlcywgc2luY2UgY2VsbHMgYXJlIHN0b3JlZCB1bnRhZ2dlZC4KICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmdldChtX2xvY2Fs
czY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9v
dXQuZ2V0KG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlU2V0TG9jYWwoKQpAQCAtNjIwLDEzICs1NzQsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQy
KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdl
cihtX25vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9pbnQzMlZh
bHVlcy5hZGQobV9ub2RlLCBtX291dC5hZGQobGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgICAg
ICBzZXRJbnQzMihtX291dC5hZGQobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IG1fb3V0LmFkZFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHNw
ZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0
LCAxKSk7Ci0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmV4dHJh
Y3RWYWx1ZShyZXN1bHQsIDApKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmV4dHJhY3RW
YWx1ZShyZXN1bHQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKQEAgLTY1MSwxMyArNjA1LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUg
cmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygp
KSkgewotICAgICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuc3Vi
KGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuc3ViKGxlZnQs
IHJpZ2h0KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5zdWJXaXRoT3ZlcmZsb3cz
MihsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUo
KSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOwotICAgICAgICAgICAgbV9pbnQz
MlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CisgICAg
ICAgICAgICBzZXRJbnQzMihtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC03MDMsNyArNjU3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9pbnQz
MlZhbHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTgwMCw3
ICs3NTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhkb25lLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJW
YWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7CisgICAg
ICAgICAgICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTg5MSw3ICs4NDUsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhkb25l
LCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRk
KG1fbm9kZSwgbV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7CisgICAgICAgICAgICBz
ZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTkxNSw4ICs4NjksNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAg
ICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRJbnQzMigKICAgICAgICAgICAgICAgICBtX291
dC5zZWxlY3QoCiAgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBBcml0aE1pbgog
ICAgICAgICAgICAgICAgICAgICAgICAgPyBtX291dC5sZXNzVGhhbihsZWZ0LCByaWdodCkKQEAg
LTk1MCw3ICs5MDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUs
IG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCByZXN1bHRzKSk7CisgICAgICAgICAgICBzZXRE
b3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIHJlc3VsdHMpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTk3MSwxMiArOTI0LDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9W
YWx1ZSgpLCAwLCBtX291dC5lcXVhbChyZXN1bHQsIG1fb3V0LmNvbnN0SW50MzIoMSA8PCAzMSkp
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBy
ZXN1bHQpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAg
ICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmRvdWJsZUFicyhsb3dE
b3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5k
b3VibGVBYnMobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMDAzLDEyICs5NTYsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dS
ZXN1bHQsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2lu
dDMyVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1
bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9k
ZSwgbV9vdXQuZG91YmxlTmVnKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAg
ICAgICAgc2V0RG91YmxlKG1fb3V0LmRvdWJsZU5lZyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEw
MjAsNDcgKzk3MywzOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdEFuZCgp
CiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwg
bV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQobG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZUJpdE9yKCkKICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMu
YWRkKAotICAgICAgICAgICAgbV9ub2RlLCBtX291dC5iaXRPcihsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgc2V0SW50MzIo
bV9vdXQuYml0T3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdFhvcigpCiAgICAg
ewotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwgbV9vdXQu
Yml0WG9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRYb3IobG93SW50MzIobV9ub2RlLT5j
aGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZUJpdFJTaGlmdCgpCiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVzLmFk
ZCgKLSAgICAgICAgICAgIG1fbm9kZSwKLSAgICAgICAgICAgIG1fb3V0LmFTaHIoCi0gICAgICAg
ICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAgbV9v
dXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMx
KSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQuYVNocigKKyAgICAgICAgICAgIGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlQml0TFNoaWZ0KCkKICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMu
YWRkKAotICAgICAgICAgICAgbV9ub2RlLAotICAgICAgICAgICAgbV9vdXQuc2hsKAotICAgICAg
ICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgIG1f
b3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigz
MSkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnNobCgKKyAgICAgICAgICAgIGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlQml0VVJTaGlmdCgpCiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVz
LmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKLSAgICAgICAgICAgIG1fb3V0LmxTaHIoCi0gICAg
ICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAg
bV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMy
KDMxKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQubFNocigKKyAgICAgICAgICAgIGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlVUludDMyVG9OdW1iZXIoKQpAQCAtMTA2OCwxNCArMTAxMiwxNCBA
QCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MSgpKTsKIAogICAgICAgICBpZiAoIW5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG1fbm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUs
IG1fb3V0LnVuc2lnbmVkVG9Eb3VibGUodmFsdWUpKTsKKyAgICAgICAgICAgIHNldERvdWJsZSht
X291dC51bnNpZ25lZFRvRG91YmxlKHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZUZvcndhcmQoCiAgICAgICAgICAgICBP
dmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbih2YWx1ZSwgbV9vdXQuaW50MzJa
ZXJvKSwKICAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0VUludDMyLCB2YWx1
ZSkpOwotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHZhbHVlKTsKKyAgICAgICAg
c2V0SW50MzIodmFsdWUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVJbnQzMlRvRG91
YmxlKCkKQEAgLTEwODcsNyArMTAzMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGNvbnRlbXBv
cmFuZW91cyBsb3ctbGV2ZWwgcmVwcmVzZW50YXRpb25zLiBTbywgdGhpcyBnaXZlcyBjaGlsZDEg
YSBkb3VibGUKICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gYW5kIHRoZW4gZm9yd2FyZHMgdGhh
dCByZXByZXNlbnRhdGlvbiB0byBtX25vZGUuCiAgICAgICAgIAotICAgICAgICBtX2RvdWJsZVZh
bHVlcy5hZGQobV9ub2RlLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpOworICAgICAgICBz
ZXREb3VibGUobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQpAQCAtMTIxNSw4ICsxMTU5LDcgQEAgcHJpdmF0
ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKQogICAgIHsKLSAgICAgICAg
bV9zdG9yYWdlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwgbV9vdXQubG9hZFB0cihs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOwor
ICAgICAgICBzZXRTdG9yYWdlKG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlR2V0QXJyYXlMZW5ndGgoKQpAQCAtMTIyNSw4ICsxMTY4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgbV9pbnQzMlZhbHVl
cy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLCBtX291dC5sb2FkMzIobG93U3RvcmFnZSht
X25vZGUtPmNoaWxkMigpKSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7CisgICAg
ICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIobG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigp
KSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMjU2LDcgKzExOTgsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLCBtX291dC56ZXJvRXh0KGluZGV4LCBtX291dC5p
bnRQdHIpLAogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmZvck5vZGUobV9ub2RlLT5jaGls
ZDIoKSkubV92YWx1ZSkpOwogICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShMb2FkRnJvbUhvbGUs
IG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAg
bV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgc2V0
SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIApAQCAtMTI4OCw3ICsxMjMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCAwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChyZXN1bHQsIHJlc3VsdCkp
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQo
bV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xNDEy
LDcgKzEzNTQsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEdsb2JhbFZh
cigpCiAgICAgewotICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQubG9h
ZDY0KG1fb3V0LmFic29sdXRlKG1fbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKSk7CisgICAgICAg
IHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKG1fbm9kZS0+cmVnaXN0ZXJQ
b2ludGVyKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVB1dEdsb2JhbFZhcigp
CkBAIC0xNTc3LDcgKzE1MTksNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUxv
Z2ljYWxOb3QoKQogICAgIHsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChtX25vZGUsIG1f
b3V0LmJpdE5vdChib29saWZ5KG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgIHNldEJvb2xl
YW4obV9vdXQuYml0Tm90KGJvb2xpZnkobV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlSnVtcCgpCkBAIC0xOTk5LDEwICsxOTQxLDEzIEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtp
bmQoKSA9PSBLbm93bkludDMyVXNlKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJl
c3VsdCA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIGJveGVkUmVzdWx0ID0gbV9q
c1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1
ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAg
IAorICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAg
ICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSBib3hlZFJlc3Vs
dCA9IHZhbHVlLnZhbHVlKCk7CiAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKICAgICAgICAg
ICAgICAgICBqc1ZhbHVlVmFsdWUoYm94ZWRSZXN1bHQpLCBlZGdlLCBTcGVjSW50MzIsIGlzTm90
SW50MzIoYm94ZWRSZXN1bHQpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveElu
dDMyKGJveGVkUmVzdWx0KTsKQEAgLTIwMTksMTAgKzE5NjQsMTEgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24gfHwgaXNDZWxsKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAo
TFZhbHVlIHVuY2hlY2tlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkp
KSB7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0
KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CiAgICAgICAgICAg
ICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodW5jaGVja2Vk
UmVzdWx0KSwgZWRnZSwgU3BlY0NlbGwsIGlzTm90Q2VsbCh1bmNoZWNrZWRSZXN1bHQpKTsKLSAg
ICAgICAgICAgIHJldHVybiB1bmNoZWNrZWRSZXN1bHQ7CisgICAgICAgICAgICAgICAganNWYWx1
ZVZhbHVlKHVuY2hlY2tlZFJlc3VsdCksIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwodmFsdWUu
dmFsdWUoKSkpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2Up
Lm1fdHlwZSAmIFNwZWNDZWxsKSk7CkBAIC0yMDYxLDEwICsyMDA3LDEzIEBAIHByaXZhdGU6CiAg
ICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEJvb2xlYW5Vc2UpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoTFZh
bHVlIHVuYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewor
ICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdl
Lm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQudmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFs
dWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAg
ICAgICAgICAgTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSB2YWx1ZS52YWx1ZSgpOwogICAgICAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHVuYm94ZWRS
ZXN1bHQpLCBlZGdlLCBTcGVjQm9vbGVhbiwgaXNOb3RCb29sZWFuKHVuYm94ZWRSZXN1bHQpKTsK
ICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEJvb2xlYW4odW5ib3hlZFJlc3VsdCk7
CkBAIC0yMDgxLDE2ICsyMDMwLDIxIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRf
VU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzRG91Ymxl
KGVkZ2UudXNlS2luZCgpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9
IG1fZG91YmxlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCisgICAgICAgIExvd2VyZWROb2RlVmFs
dWUgdmFsdWUgPSBtX2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAo
aXNWYWxpZCh2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAKLSAg
ICAgICAgaWYgKExWYWx1ZSBpbnRSZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUo
KSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5pbnRUb0RvdWJsZShpbnRS
ZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gbV9vdXQuaW50VG9Eb3VibGUodmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICBtX2RvdWJs
ZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIGJveGVkUmVzdWx0
ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgdmFsdWUgPSBt
X2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFs
dWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgYm94ZWRSZXN1bHQgPSB2YWx1ZS52YWx1ZSgpOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJEb3VibGUgdW5ib3hpbmcgaW50IGNhc2UiKSk7CiAgICAgICAgICAgICBM
QmFzaWNCbG9jayBkb3VibGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGUgdW5i
b3hpbmcgZG91YmxlIGNhc2UiKSk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJsZSB1bmJveGluZyBjb250aW51YXRpb24i
KSk7CkBAIC0yMTI4LDIzICsyMDgyLDI3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NF
UlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2Uu
dXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSBy
ZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgTG93ZXJl
ZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAg
ICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5n
ZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94SW50MzIo
dW5ib3hlZFJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5u
b2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBib3hJbnQzMih2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIG1fanNWYWx1
ZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1
bHQgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGJveEJvb2xlYW4odW5ib3hlZFJlc3VsdCk7CisgICAgICAgIHZhbHVlID0g
bV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEJvb2xlYW4odmFsdWUudmFs
dWUoKSk7CiAgICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1
bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveERvdWJsZSh1bmJveGVk
UmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkp
OworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1
bHQgPSBib3hEb3VibGUodmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICBtX2pzVmFsdWVWYWx1
ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfQpAQCAtMjE1NSw4ICsyMTEzLDkgQEAgcHJpdmF0ZToKICAgICAKICAgICBMVmFs
dWUgbG93U3RvcmFnZShFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBpZiAoTFZhbHVlIHJlc3Vs
dCA9IG1fc3RvcmFnZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fc3RvcmFnZVZhbHVl
cy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAg
ICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1
bHQgPSBsb3dDZWxsKGVkZ2UpOwogICAgICAgICBtX3N0b3JhZ2VWYWx1ZXMuYWRkKGVkZ2Uubm9k
ZSgpLCByZXN1bHQpOwpAQCAtMjQzMCwyMiArMjM4OSwxNSBAQCBwcml2YXRlOgogICAgIAogICAg
IGJvb2wgaXNMaXZlKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBIYXNoTWFwPE5vZGUqLCB1
bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuZmluZChub2RlKTsKLSAgICAg
ICAgQVNTRVJUKGl0ZXIgIT0gbV90aW1lVG9MaXZlLmVuZCgpKTsKLSAgICAgICAgcmV0dXJuICEh
aXRlci0+dmFsdWU7CisgICAgICAgIHJldHVybiBtX2xpdmUuY29udGFpbnMobm9kZSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgdXNlKEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGlmICghZWRn
ZS0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChlZGdlLT5oYXNWYXJpYWJsZUFj
Y2Vzc0RhdGEoKSk7CisgICAgICAgIEFTU0VSVChlZGdlLT5oYXNSZXN1bHQoKSk7CisgICAgICAg
IGlmICghZWRnZS5kb2VzS2lsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3RpbWVUb0xpdmUuZmluZChlZGdlLm5vZGUoKSk7Ci0gICAgICAgIEFTU0VSVChpdGVyICE9
IG1fdGltZVRvTGl2ZS5lbmQoKSk7Ci0gICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZSk7Ci0gICAg
ICAgIGl0ZXItPnZhbHVlLS07CisgICAgICAgIG1fbGl2ZS5yZW1vdmUoZWRnZS5ub2RlKCkpOwog
ICAgIH0KICAgICAKICAgICAvLyBXcmFwcGVyIHVzZWQgb25seSBmb3IgREZHX05PREVfRE9fVE9f
Q0hJTERSRU4KQEAgLTI0NjIsNjMgKzI0MTQsMzQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluaXRp
YWxpemVPU1JFeGl0U3RhdGVGb3JCbG9jaygpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX3ZhbHVlU291cmNlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2hpZ2hCbG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwotICAgICAgICAgICAgaWYgKCFu
b2RlKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShT
b3VyY2VJc0RlYWQpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNBcmd1bWVudHNBbGlhcygpKSB7Ci0g
ICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShBcmd1bWVudHNT
b3VyY2UpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAg
ICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkgewotICAg
ICAgICAgICAgICAgIC8vIFRoaXMgdmFsdWUgd2lsbCBoYXZlIGJlZW4gZmx1c2hlZCB0byB0aGUg
SlNTdGFjayBpbiBzb21lIGZvcm0gb3IKLSAgICAgICAgICAgICAgICAvLyBhbm90aGVyLgotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJ
ZlBvc3NpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRV
c2VEb3VibGVGb3JtYXQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlv
bikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVT
b3VyY2UoSW50MzJJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9
IG1faGlnaEJsb2NrLT5mbHVzaEZvcm1hdEF0SGVhZFtpXTsKKyAgICAgICAgICAgIHN3aXRjaCAo
Zm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERlYWRGbHVzaDogeworICAgICAgICAgICAgICAg
IC8vIE11c3QgY29uc2lkZXIgYXZhaWxhYmxlIG5vZGVzIGluc3RlYWQuCisgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV07CisgICAg
ICAgICAgICAgICAgaWYgKCFub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2Uobm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJ
ZlBvc3NpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURv
dWJsZUZvcm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0g
VmFsdWVTb3VyY2UoRG91YmxlSW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5Mb2NhbHMpOwotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZh
bHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJl
ZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1
ZVNvdXJjZShCb29sZWFuSW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAg
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3Rh
Y2spOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Cisg
ICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3ZhbHVl
U291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOwogICAgICAgICB9CiAgICAg
fQogICAgIApAQCAtMjYwMiwyNyArMjUyNSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNl
IERvdWJsZUluSlNTdGFjazoKICAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhp
dFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBWYWx1ZUluTG9jYWxzOgotICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1
bWVudCgKLSAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1h
dEpTVmFsdWUsIG1fb3V0LmdldChtX2xvY2FsczY0W2ldKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEludDMySW5Mb2NhbHM6Ci0gICAgICAgICAgICAgICAgYWRk
RXhpdEFyZ3VtZW50KAotICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZh
bHVlRm9ybWF0SW50MzIsIG1fb3V0LmdldChtX2xvY2FsczMyW2ldKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJvb2xlYW5JbkxvY2FsczoKLSAgICAgICAgICAg
ICAgICBhZGRFeGl0QXJndW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50
cywgaSwgVmFsdWVGb3JtYXRCb29sZWFuLCBtX291dC5nZXQobV9sb2NhbHNCb29sZWFuW2ldKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZUluTG9jYWxz
OgotICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKLSAgICAgICAgICAgICAgICAgICAg
ZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdERvdWJsZSwgbV9vdXQuZ2V0KG1fbG9jYWxz
RG91YmxlW2ldKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFy
Z3VtZW50c1NvdXJjZToKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IFBoYW50
b21Bcmd1bWVudHMuCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMzk4NgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNv
dXJjZUlzRGVhZDoKICAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVl
OjpkZWFkKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNjgyLDEyICsyNTg0LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSogdWludDMyVG9OdW1iZXIgPSAwOwogICAg
ICAgICAgICAgICAgIE5vZGUqIGRvdWJsZUFzSW50MzIgPSAwOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9
IG1fdGltZVRvTGl2ZS5iZWdpbigpOwotICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVu
c2lnbmVkPjo6aXRlcmF0b3IgZW5kID0gbV90aW1lVG9MaXZlLmVuZCgpOworICAgICAgICAgICAg
ICAgIEhhc2hNYXA8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbV9saXZlLmJlZ2luKCk7CisgICAg
ICAgICAgICAgICAgSGFzaE1hcDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fbGl2ZS5lbmQoKTsK
ICAgICAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IGl0ZXItPmtleTsK
KyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gKml0ZXI7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghY2FuZGlkYXRlLT5jaGlsZDEoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5jaGlsZDEo
KSAhPSBub2RlKQpAQCAtMjczMiwyNCArMjYzMiwyOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBBU1NFUlQoaXNMaXZlKG5vZGUpKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChMVmFsdWUgcmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5nZXQobm9kZSkpIHsKLSAgICAgICAg
ICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdElu
dDMyLCByZXN1bHQpOworCisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMy
VmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAg
ICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRJ
bnQzMiwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9ib29sZWFuVmFsdWVzLmdldChu
b2RlKSkgewotICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5k
ZXgsIFZhbHVlRm9ybWF0Qm9vbGVhbiwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2Jvb2xl
YW5WYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1h
dEJvb2xlYW4sIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5n
ZXQobm9kZSkpIHsKLSAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMs
IGluZGV4LCBWYWx1ZUZvcm1hdEpTVmFsdWUsIHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9q
c1ZhbHVlVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Cisg
ICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVG
b3JtYXRKU1ZhbHVlLCB2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2RvdWJsZVZhbHVl
cy5nZXQobm9kZSkpIHsKLSAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVu
dHMsIGluZGV4LCBWYWx1ZUZvcm1hdERvdWJsZSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBt
X2RvdWJsZVZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgewor
ICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVl
Rm9ybWF0RG91YmxlLCB2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkBAIC0yODM0LDYgKzI3MzgsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgbV92YWx1ZVNv
dXJjZXMub3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0SW50MzIoTFZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgbV9pbnQzMlZhbHVlcy5zZXQobV9ub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVl
LCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldEpTVmFsdWUoTFZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLnNldChtX25vZGUsIExvd2VyZWROb2Rl
VmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorICAgIHZvaWQgc2V0Qm9vbGVhbihM
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuc2V0KG1fbm9kZSwg
TG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9pZCBz
ZXRTdG9yYWdlKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fc3RvcmFnZVZhbHVlcy5z
ZXQobV9ub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0K
KyAgICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2RvdWJs
ZVZhbHVlcy5zZXQobV9ub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykp
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQoY29uc3QgTG93ZXJlZE5vZGVWYWx1ZSYg
dmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoIW1fZ3JhcGguZG9taW5hdG9ycy5kb21pbmF0ZXMobV9oaWdoQmxv
Y2ssIHZhbHVlLmJsb2NrKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlKEpTQ2Vs
bCogdGFyZ2V0KQogICAgIHsKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24ud2Vh
a1JlZmVyZW5jZXMuYXBwZW5kKApAQCAtMjg4OCwxNSArMjgyMiwxMiBAQCBwcml2YXRlOgogICAg
IExWYWx1ZSBtX3RhZ1R5cGVOdW1iZXI7CiAgICAgTFZhbHVlIG1fdGFnTWFzazsKICAgICAKLSAg
ICBIYXNoU2V0PE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wczsKLSAgICBWZWN0b3I8Tm9kZSo+IG1f
Zmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKLSAgICAKLSAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+
IG1faW50MzJWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2pzVmFsdWVWYWx1
ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2Jvb2xlYW5WYWx1ZXM7Ci0gICAgSGFz
aE1hcDxOb2RlKiwgTFZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwg
TFZhbHVlPiBtX2RvdWJsZVZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gbV90
aW1lVG9MaXZlOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1faW50MzJW
YWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVlVmFs
dWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZhbHVl
czsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7
CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7Cisg
ICAgSGFzaFNldDxOb2RlKj4gbV9saXZlOwogICAgIAogICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9s
b2NhbHNCb29sZWFuOwogICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHMzMjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJlZE5vZGVWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJlZE5vZGVWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlcmVkTm9kZVZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTExvd2VyZWROb2RlVmFsdWVfaAor
I2RlZmluZSBGVExMb3dlcmVkTm9kZVZhbHVlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisj
aW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CisKKy8vIFJlcHJlc2VudHMgdGhlIGFjdCBvZiBoYXZpbmcgbG93ZXJlZCBhIERG
Rzo6Tm9kZSB0byBhbiBMVmFsdWUsIGFuZCByZWNvcmRzIHRoZQorLy8gREZHOjpCYXNpY0Jsb2Nr
IHRoYXQgZGlkIHRoZSBsb3dlcmluZy4gVGhlIExWYWx1ZSBpcyB3aGF0IHdlIHVzZSBtb3N0IG9m
dGVuLCBidXQKKy8vIHdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UncmUgaW4gYSBibG9jayB0aGF0
IGlzIGRvbWluYXRlZCBieSB0aGUgb25lIHRoYXQgZGlkCisvLyB0aGUgbG93ZXJpbmcuIFdlJ3Jl
IGd1YXJhbnRlZWQgdGhhdCBmb3IgZWFjaCBERkc6Ok5vZGUsIHRoZXJlIHdpbGwgYmUgb25lCisv
LyBMb3dlcmVkTm9kZVZhbHVlIHRoYXQgYWx3YXlzIGRvbWluYXRlcyBhbGwgdXNlcyBvZiB0aGUg
REZHOjpOb2RlOyBidXQgdGhlcmUgbWF5CisvLyBiZSBvdGhlcnMgdGhhdCBkb24ndCBkb21pbmF0
ZSBhbmQgd2UncmUgZWZmZWN0aXZlbHkgZG9pbmcgb3Bwb3J0dW5pc3RpYyBHVk4gb24KKy8vIHRo
ZSBsb3dlcmluZyBjb2RlLgorCitjbGFzcyBMb3dlcmVkTm9kZVZhbHVlIHsKK3B1YmxpYzoKKyAg
ICBMb3dlcmVkTm9kZVZhbHVlKCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgICAgICwgbV9i
bG9jaygwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTG93ZXJlZE5vZGVWYWx1ZShMVmFsdWUg
dmFsdWUsIERGRzo6QmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkK
KyAgICAgICAgLCBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdmFsdWUp
OworICAgICAgICBBU1NFUlQobV9ibG9jayk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTZXQo
KSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAgCisgICAgTFZhbHVlIHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorICAgIERGRzo6QmFzaWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2NrOyB9CisgICAgCitwcml2YXRlOgorICAgIExWYWx1ZSBtX3ZhbHVlOworICAg
IERGRzo6QmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMTG93ZXJlZE5v
ZGVWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9t
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVl
RnJvbUJsb2NrLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVmFsdWVGcm9tQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBjbGFzcyBWYWx1ZUZyb21CbG9jayB7
CiBwdWJsaWM6CisgICAgVmFsdWVGcm9tQmxvY2soKQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAg
ICAgICAgLCBtX2Jsb2NrKDApCisgICAgeworICAgIH0KKyAgICAKICAgICBWYWx1ZUZyb21CbG9j
ayhMVmFsdWUgdmFsdWUsIExCYXNpY0Jsb2NrIGJsb2NrKQogICAgICAgICA6IG1fdmFsdWUodmFs
dWUpCiAgICAgICAgICwgbV9ibG9jayhibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsMjEgKzQ1LDYgQEAgdm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQog
ICAgIGNhc2UgRG91YmxlSW5KU1N0YWNrOgogICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUluSlNT
dGFjayIpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBWYWx1ZUluTG9jYWxzOgotICAgICAg
ICBvdXQucHJpbnQoIlZhbHVlSW5Mb2NhbHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
SW50MzJJbkxvY2FsczoKLSAgICAgICAgb3V0LnByaW50KCJJbnQzMkluTG9jYWxzIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEJvb2xlYW5JbkxvY2FsczoKLSAgICAgICAgb3V0LnByaW50
KCJCb29sZWFuSW5Mb2NhbHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRG91YmxlSW5M
b2NhbHM6Ci0gICAgICAgIG91dC5wcmludCgiRG91YmxlSW5Mb2NhbHMiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgQXJndW1lbnRzU291cmNlOgotICAgICAgICBvdXQucHJpbnQoIkFyZ3Vt
ZW50c1NvdXJjZSIpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTb3VyY2VJc0RlYWQ6CiAg
ICAgICAgIG91dC5wcmludCgiU291cmNlSXNEZWFkIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHJldmlzaW9uIDE1
MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDYgQEAgZW51bSBWYWx1ZVNvdXJjZUtpbmQgewogICAg
IFZhbHVlSW5KU1N0YWNrLAogICAgIEludDMySW5KU1N0YWNrLAogICAgIERvdWJsZUluSlNTdGFj
aywKLSAgICBWYWx1ZUluTG9jYWxzLAotICAgIEludDMySW5Mb2NhbHMsCi0gICAgQm9vbGVhbklu
TG9jYWxzLAotICAgIERvdWJsZUluTG9jYWxzLAotICAgIEFyZ3VtZW50c1NvdXJjZSwKICAgICBT
b3VyY2VJc0RlYWQsCiAgICAgSGF2ZU5vZGUKIH07CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcg
QEAKIAkJMEZEODFBQzUxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUM0MTU0RkIyMkUw
MDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
KTsgfTsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFt
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERC
RkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBG
RERCRkE4MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTYxNjY2REZBMzAwQzU1
RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi87IH07CisJCTBGRTUwNTU3MTc4N0E4MDYwMEIz
NUY4QyAvKiBJbnNlcnRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLzsgfTsK
IAkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRB
IC8qIFJBTVNpemUuY3BwICovOyB9OwogCQkxNDNGNjEyMDE1NjVGMEY5MDBEQjUxNEEgLyogUkFN
U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQz
RjYxMUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9ICgpOyB9OyB9OwogCQkxNDY5NDE5MjE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRp
bWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDY5
NDE5MDE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1Miw2ICszNTMsNyBAQAogCQkwRkQ4
MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkE2MTY2NkRGQTMwMEM1NUZF
RiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHJpbmdQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1
MDU1NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc2Vy
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDM0VFNDE3MUI4MzQ3MDBG
REFDOEQgLyogQnl0ZVNwaW5Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVTcGluTG9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyog
UkFNU2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSQU1TaXpl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRjYxMUUxNTY1RjBGOTAwREI1
MTRBIC8qIFJBTVNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUkFNU2l6
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzg1LDYgKzc4Nyw3IEBACiAJCQkJ
QThBNDcyQkExNTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzJC
QjE1MUE4MjVBMDA0MTIzRkYgLyogSGV4TnVtYmVyLmggKi8sCiAJCQkJQThBNDcyQkMxNTFBODI1
QTAwNDEyM0ZGIC8qIElubGluZUFTTS5oICovLAorCQkJCTBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4
QyAvKiBJbnNlcnRpb24uaCAqLywKIAkJCQlBOEE0NzJCRTE1MUE4MjVBMDA0MTIzRkYgLyogSW50
MTZBcnJheS5oICovLAogCQkJCUE4QTQ3MkJGMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQzMkFycmF5
LmggKi8sCiAJCQkJQThBNDcyQkQxNTFBODI1QTAwNDEyM0ZGIC8qIEludDhBcnJheS5oICovLApA
QCAtMTE4MSw2ICsxMTg0LDcgQEAKIAkJCQlBOEE0NzNFODE1MUE4MjVCMDA0MTIzRkYgLyogTWF0
aEV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRUExNTFBODI1QjAwNDEyM0ZGIC8q
IE1ENS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1NDk3QUQxNTg1N0QwMzAwQjVCQzMwIC8qIE1l
ZGlhVGltZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NTcxNzg3QTgwNjAwQjM1RjhDIC8q
IEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEYxRDExNTQxNUZGMTFCRTAwMjZFOTA4
IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEZEODU1NDcx
NjEzM0UwRTAwQzVCNzA0IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvbkFycmF5QnVmZmVyVmlldy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjNGQkM3MUUxNjFBRjdCRjAwQkI0QkQ0IC8qIE1lbW9yeUlu
c3RydW1lbnRhdGlvbkhhc2hDb3VudGVkU2V0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0hhc2hTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0
LmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsMTIgKzg2LDE5IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSB0ZW1wbGF0ZSBhcmd1bWVu
dHMgc28gdGhhdCBjYWxsZXJzCiAgICAgICAgIC8vIGNhbiBqdXN0IHBhc3MgdGhlIHRyYW5zbGF0
b3IgYW5kIGxldCB0aGUgY29tcGlsZXIgZGVkdWNlIFQuCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiBBZGRSZXN1bHQgYWRkKGNvbnN0IFQmKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEF0dGVtcHRzIHRvIGFkZCBhIGxpc3Qgb2YgdGhpbmdzIHRv
IHRoZSBzZXQuIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YKKyAgICAgICAgLy8gdGhlbSBhcmUgbmV3
IHRvIHRoZSBzZXQuIFJldHVybnMgZmFsc2UgaWYgdGhlIHNldCBpcyB1bmNoYW5nZWQuCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKyAgICAgICAgYm9vbCBhZGQoSXRl
cmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKTsKIAogICAgICAgICB2b2lkIHJlbW92
ZShjb25zdCBWYWx1ZVR5cGUmKTsKICAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IpOwogICAg
ICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFZhbHVlKGNv
bnN0IFZhbHVlVHlwZSYpOworICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEhhc2hTZXQmKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCB2b2lkIGRl
bGV0ZUFsbFZhbHVlczw+KGNvbnN0IEhhc2hTZXQmKTsKQEAgLTE5MSw2ICsxOTgsMTYgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgVj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+CisgICAg
aW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRl
cmF0b3JUeXBlIGVuZCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IGFkZCgqaXRlcikuaXNOZXdFbnRyeTsKKyAgICAgICAg
cmV0dXJuIGNoYW5nZWQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KICAgICBpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1v
dmUoaXRlcmF0b3IgaXQpCiAgICAgewogICAgICAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5l
bmQoKSkKQEAgLTI1Niw2ICsyNzMsMTggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICB2
ZWN0b3JbaV0gPSAqaXQ7CiAgICAgfSAgCiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9w
ZXJhdG9yPT0oY29uc3QgSGFzaFNldCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoc2l6ZSgp
ICE9IG90aGVyLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9y
IChjb25zdF9pdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKSB7
CisgICAgICAgICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKCppdGVyKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpIYXNoU2V0OwpJbmRleDogU291cmNl
L1dURi93dGYvSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRh
YmxlLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTcwLDYgKzExNzAsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB7
CiAgICAgICAgIC8vIENvcHkgdGhlIGhhc2ggdGFibGUgdGhlIGR1bWIgd2F5LCBieSBhZGRpbmcg
ZWFjaCBlbGVtZW50IHRvIHRoZSBuZXcgdGFibGUuCiAgICAgICAgIC8vIEl0IG1pZ2h0IGJlIG1v
cmUgZWZmaWNpZW50IHRvIGNvcHkgdGhlIHRhYmxlIHNsb3RzLCBidXQgaXQncyBub3QgY2xlYXIg
dGhhdCBlZmZpY2llbmN5IGlzIG5lZWRlZC4KKyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5
IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UK
KyAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTg0NTUKICAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kID0gb3RoZXIuZW5kKCk7CiAg
ICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBvdGhlci5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCiAgICAgICAgICAgICBhZGQoKml0KTsKQEAgLTEyMDksNiArMTIxMSw4IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
LCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+JiBIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46Om9wZXJhdG9y
PShjb25zdCBIYXNoVGFibGUmIG90aGVyKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEl0J3Mg
bGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhh
dCB1c2UKKyAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTg0NTUKICAgICAgICAgSGFzaFRhYmxlIHRtcChvdGhlcik7CiAgICAgICAg
IHN3YXAodG1wKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwpJbmRleDogU291cmNlL1dURi93dGYv
SW5zZXJ0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSW5zZXJ0aW9uX2gKKyNkZWZpbmUgSW5zZXJ0aW9uX2gKKworbmFtZXNw
YWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBJbnNlcnRpb24geworcHVi
bGljOgorICAgIEluc2VydGlvbigpIHsgfQorICAgIAorICAgIEluc2VydGlvbihzaXplX3QgaW5k
ZXgsIFQgZWxlbWVudCkKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fZWxl
bWVudChlbGVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIFQgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWxlbWVudDsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEluc2VydGlvbiYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleCA8IG90aGVyLm1faW5kZXg7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzaXplX3QgbV9pbmRleDsKKyAgICBUIG1fZWxl
bWVudDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRhcmdldFZlY3RvclR5cGUsIHR5cGVuYW1l
IEluc2VydGlvblZlY3RvclR5cGU+Cit2b2lkIGV4ZWN1dGVJbnNlcnRpb25zKFRhcmdldFZlY3Rv
clR5cGUmIHRhcmdldCwgSW5zZXJ0aW9uVmVjdG9yVHlwZSYgaW5zZXJ0aW9ucykKK3sKKyAgICBp
ZiAoIWluc2VydGlvbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgdGFyZ2V0Lmdyb3co
dGFyZ2V0LnNpemUoKSArIGluc2VydGlvbnMuc2l6ZSgpKTsKKyAgICBzaXplX3QgbGFzdEluZGV4
ID0gdGFyZ2V0LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9ucyA9IGlu
c2VydGlvbnMuc2l6ZSgpOyBpbmRleEluSW5zZXJ0aW9ucy0tOykgeworICAgICAgICBzaXplX3Qg
Zmlyc3RJbmRleCA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgKyBpbmRl
eEluSW5zZXJ0aW9uczsKKyAgICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2Vy
dGlvbnMgKyAxOworICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJz
dEluZGV4OykKKyAgICAgICAgICAgIHRhcmdldFtpXSA9IHRhcmdldFtpIC0gaW5kZXhPZmZzZXRd
OworICAgICAgICB0YXJnZXRbZmlyc3RJbmRleF0gPSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRp
b25zXS5lbGVtZW50KCk7CisgICAgICAgIGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7CisgICAgfQor
ICAgIGluc2VydGlvbnMucmVzaXplKDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNp
bmcgV1RGOjpJbnNlcnRpb247Cit1c2luZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zOworCisjZW5k
aWYgLy8gSW5zZXJ0aW9uX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206486</attachid>
            <date>2013-07-11 14:10:58 -0700</date>
            <delta_ts>2013-07-11 14:33:40 -0700</delta_ts>
            <desc>I might be done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>181849</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1Myw5IEBACiAJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyog
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBPcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKKwkJMEZFNTA1NTkx
Nzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMg
LyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTVEMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
Ki87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTE4NiwxMyArMTE4OSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyog
RlRMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0
Y2hDYXNlLmg7IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05h
dHVyYWxMb29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdO
YXR1cmFsTG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1
cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExv
b3BzLmg7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1
IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fu
YWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3Bw
OyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBk
ZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRF
MUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzODcsOSBAQAogCQkwRkREQkZCMzE2
NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGgg
PSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1
RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
YnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTY2LDYgKzI5NzIsNyBAQAogCQkJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovLAogCQkJCTBGRDI4MTI1MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGRDI4MTI2MTc3
OTNCRTMwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guaCAqLywKKwkJCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2
NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURC
NTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiAr
Mjk5Miw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJ
MEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZG
Qzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLApAQCAtMzQ0NCw2ICszNDUzLDcg
QEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhD
IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjAxLDcgQEAK
IAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09T
UkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVG
OEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MkZGRDY0
MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTQ0MDYsNiArNDQxNyw3IEBACiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtT
dGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3
ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkQyODEyNzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZG
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24g
MTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSwxMiArMjA5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9j
YWxGaXJzdFRpbWUob3BlcmFuZCwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFy
KCkKKyAgICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IHZhbHVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgp
OworICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBmaWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE2IEBAIHZvaWQgQWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2kKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3Ry
YWN0VmFsdWU+OjppdGVyYXRvciBpdGVyID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQu
YmVnaW4oKTsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9y
IGVuZCA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmVuZCgpOworICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgZm9yTm9kZShpdGVyLT5rZXkp
ID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUuaGFzQ2xvYmJlcmFi
bGVTdGF0ZSgpKQorICAgICAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorICAgIAogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBm
YWxzZTsKICAgICBiYXNpY0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsKICAgICBtX2Jsb2Nr
ID0gYmFzaWNCbG9jazsKQEAgLTgzLDYgKzkzLDE2IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKEJhc2kKICAgICBtX2N1cnJlbnROb2RlID0gMDsKIH0KIAorc3RhdGljIHZv
aWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBI
YXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3sKKyAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICAKKyAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGxpdmUuYmVnaW4oKTsKKyAgICBIYXNoU2V0
PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbGl2ZS5lbmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBl
bmQ7ICsraXRlcikKKyAgICAgICAgdmFsdWVzLmFkZCgqaXRlciwgQWJzdHJhY3RWYWx1ZSgpKTsK
K30KKwogdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKIHsKICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxvY2soMCk7CkBAIC0xNTEsNiArMTcxLDEwIEBA
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICNlbmRpZgogICAgICAg
ICB9CiAgICAgICAgIGJsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9j
ay0+c3NhLT52YWx1ZXNBdEhlYWQsIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpOworICAgICAgICAg
ICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwsIGJsb2NrLT5zc2EtPmxp
dmVBdFRhaWwpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNzIsMjAgKzE5NiwzOSBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNCiAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIUFTU0VS
VF9ESVNBQkxFRCkgewotICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50
KSB7CisgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBUaHJl
YWRlZENQUzogeworICAgICAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVu
dCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGFyZ3VtZW50ICV6dS5cbiIs
IGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0
YXRlIGZvciBhcmd1bWVudCAlenUuXG4iLCBhcmd1bWVudCk7CiAjZW5kaWYKLSAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVz
dGluYXRpb24sIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24s
IG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBz
dGF0ZSBmb3IgbG9jYWwgJXp1LlxuIiwgbG9jYWwpOworICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKICNlbmRp
ZgotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVz
QXRUYWlsLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0
VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFi
bGVzLmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFNTQTogeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0g
YmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5iZWdpbigpOworICAgICAgICAgICAgSGFzaFNldDxOb2Rl
Kj46Oml0ZXJhdG9yIGVuZCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRBaWwuZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKCppdGVyKS0+dmFsdWUubWVyZ2UoZm9y
Tm9kZShub2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTU4Niw2ICsxNjI5LDE2IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFBoaToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5t
X2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3VsZCBo
YXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBVcHNpbG9uOgorICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGZv
ck5vZGUobm9kZS0+cGhpKCkpID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAg
ICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQnJlYWtwb2lu
dDoKQEAgLTE2NzksNyArMTczMiw3IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2Ji
ZXJTdHJ1Y3QKICAgICBtX2RpZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQorYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZh
bHVlJiBpblZhcmlhYmxlLCBOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTc2NywyMSArMTgyMCw0NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQor
Ym9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0
bykKIHsKICAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRz
KCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBBU1NF
UlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gdG8tPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAKICAgICBib29sIGNoYW5nZWQgPSBmYWxz
ZTsKICAgICAKLSAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZnJvbS0+
dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGFyZ3VtZW50KTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nr
cyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8t
PnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCkpOworICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAg
ICBjYXNlIFRocmVhZGVkQ1BTOiB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKyth
cmd1bWVudCkgeworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCksIHRvLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1l
bnQpLCBmcm9tLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20t
PnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9j
YWwpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyhk
ZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBmb3IgKHNpemVf
dCBsb2NhbCA9IDA7IGxvY2FsIDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCk7ICsrbG9jYWwpIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+
dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxv
Y2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICAKKyAgICBjYXNlIFNTQTogeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gZnJvbS0+dmFyaWFibGVzQXRUYWlsLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gdG8tPnZhcmlhYmxlc0F0SGVhZFtpXS5tZXJnZShmcm9tLT52YXJp
YWJsZXNBdFRhaWxbaV0pOworICAgICAgICAKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJh
dG9yIGl0ZXIgPSB0by0+c3NhLT5saXZlQXRIZWFkLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+OjppdGVyYXRvciBlbmQgPSB0by0+c3NhLT5saXZlQXRIZWFkLmVuZCgpOworICAgICAg
ICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9
ICppdGVyOworICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+c3NhLT52YWx1ZXNBdEhlYWQuZmlu
ZChub2RlKS0+dmFsdWUubWVyZ2UoCisgICAgICAgICAgICAgICAgZnJvbS0+c3NhLT52YWx1ZXNB
dFRhaWwuZmluZChub2RlKS0+dmFsdWUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCF0by0+Y2ZhSGFzVmlz
aXRlZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
amFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksMTUgQEAgcHVibGljOgog
ICAgIAogICAgIEVkZ2UgY2hpbGQxVW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV93b3Jkc1sw
XTsgfQogICAgIAorICAgIEVkZ2UganVzdE9uZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghIWNoaWxkMSgpICYmICFjaGlsZDIoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjaGls
ZDMoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEVkZ2UoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXplKEVkZ2UgY2hp
bGQxLCBFZGdlIGNoaWxkMiwgRWRnZSBjaGlsZDMpCiAgICAgewogICAgICAgICBjaGlsZCgwKSA9
IGNoaWxkMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25l
ZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2Fs
cykKKyAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKKyAgICAsIGluZGV4KE5vQmxv
Y2spCisgICAgLCBpc09TUlRhcmdldChmYWxzZSkKKyAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2Up
CisgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQorICAgICwgY2ZhRm91bmRDb25zdGFudHMo
ZmFsc2UpCisgICAgLCBjZmFEaWRGaW5pc2godHJ1ZSkKKyAgICAsIGNmYUJyYW5jaERpcmVjdGlv
bihJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAsIGlz
TGlua2VkKGZhbHNlKQorI2VuZGlmCisgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKKyAgICAsIHZh
cmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhcmlhYmxlc0F0
VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1
bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscykKK3sKK30KKworQmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKSB7IH0KKwordm9pZCBCYXNp
Y0Jsb2NrOjplbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQoreworICAgIHZhcmlh
Ymxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2YXJpYWJsZXNBdFRh
aWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxv
Y2FscyhuZXdOdW1Mb2NhbHMpOworICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVt
TG9jYWxzKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjppc0luUGhpcyhOb2RlKiBub2RlKSBjb25z
dAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAocGhpc1tpXSA9PSBub2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjppc0luQmxvY2soTm9k
ZSogbXlOb2RlKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9kZXMo
KTsgKytpKSB7CisgICAgICAgIGlmIChub2RlKGkpID09IG15Tm9kZSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQmFzaWNCbG9j
azo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiIyIsIGlu
ZGV4KTsKK30KKworQmFzaWNCbG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICA6IGZsdXNoRm9ybWF0QXRIZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZCkKKyAgICAsIGZsdXNoRm9ybWF0QXRUYWlsKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZCkKKyAgICAsIGF2YWlsYWJpbGl0eUF0SGVhZChPcGVyYW5kc0xpa2UsIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBhdmFpbGFiaWxpdHlBdFRhaWwoT3BlcmFuZHNM
aWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQoreworfQorCitCYXNpY0Jsb2NrOjpTU0FEYXRh
Ojp+U1NBRGF0YSgpIHsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAjaW5j
bHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJPcGVyYW5kcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCkBAIC00NCw0MiArNDYsMTYgQEAgY2xhc3MgSW5zZXJ0aW9uU2V0OwogdHlwZWRlZiBW
ZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKIAogc3RydWN0IEJhc2ljQmxv
Y2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKLSAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5
dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQot
ICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKLSAgICAgICAgLCBpbmRleChO
b0Jsb2NrKQotICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICAgICAsIGNmYUhhc1Zp
c2l0ZWQoZmFsc2UpCi0gICAgICAgICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxzZSkKLSAgICAgICAg
LCBjZmFGb3VuZENvbnN0YW50cyhmYWxzZSkKLSAgICAgICAgLCBjZmFEaWRGaW5pc2godHJ1ZSkK
LSAgICAgICAgLCBjZmFCcmFuY2hEaXJlY3Rpb24oSW52YWxpZEJyYW5jaERpcmVjdGlvbikKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICwgaXNMaW5rZWQoZmFsc2UpCi0jZW5kaWYKLSAg
ICAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVt
QXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzKQotICAgICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51
bUxvY2FscykKLSAgICAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMp
Ci0gICAgewotICAgIH0KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVu
c2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKTsKKyAgICB+QmFzaWNCbG9j
aygpOwogICAgIAotICAgIH5CYXNpY0Jsb2NrKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKLSAgICB7Ci0gICAgICAgIHZh
cmlhYmxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICAgICAgdmFyaWFi
bGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAgICAgICB2YWx1ZXNBdEhl
YWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgICAgIHZhbHVlc0F0VGFpbC5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICB9CisgICAgdm9pZCBlbnN1cmVMb2NhbHModW5z
aWduZWQgbmV3TnVtTG9jYWxzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
IXNpemUoKTsgfQogICAgIE5vZGUqJiBhdChzaXplX3QgaSkgeyByZXR1cm4gbV9ub2Rlc1tpXTsg
fQogICAgIE5vZGUqIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX25vZGVzW2ldOyB9Cisg
ICAgTm9kZSomIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9k
ZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KICAgICBOb2Rl
KiBsYXN0KCkgY29uc3QgeyByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KICAgICB2b2lkIHJlc2l6
ZShzaXplX3Qgc2l6ZSkgeyBtX25vZGVzLnJlc2l6ZShzaXplKTsgfQpAQCAtOTYsMjMgKzcyLDgg
QEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIH0KICAgICBi
b29sIGlzUGhpSW5kZXgoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGkgPCBwaGlzLnNpemUoKTsg
fQogICAgIAotICAgIGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKHBoaXNbaV0gPT0gbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNJ
bkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtTm9kZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZShpKSA9PSBt
eU5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0
OworICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCiAgICAgdW5z
aWduZWQgbnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9
CiAgICAgCkBAIC0xMzAsMTAgKzkxLDEyIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRl
ZDxCYXNpY0Jsb2MKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklO
RV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCi0gICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJp
bnQoIiMiLCBpbmRleCk7Ci0gICAgfQorI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRl
bXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZh
bHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBs
YXRlUG9zdCBOb2RlKiBhcHBlbmROb25UZXJtaW5hbChHcmFwaCYsIFNwZWN1bGF0ZWRUeXBlIHZh
bHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOworICAgIERGR19WQVJJQURJQ19URU1QTEFURV9G
VU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5E
X05PREUKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAg
CiAgICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJsb2NrIGxpbmtpbmcg
YW5kIE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5IG1lYW5pbmdsZXNzCiAgICAgLy8gZm9yIG90aGVy
IHB1cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4KQEAgLTE2MCw2ICsxMjMsMjEgQEAgc3RydWN0IEJh
c2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIAogICAgIE9wZXJhbmRzPEFic3Ry
YWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1
ZXNBdFRhaWw7CisgICAgCisgICAgc3RydWN0IFNTQURhdGEgeworICAgICAgICBPcGVyYW5kczxG
bHVzaEZvcm1hdD4gZmx1c2hGb3JtYXRBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9y
bWF0PiBmbHVzaEZvcm1hdEF0VGFpbDsKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJp
bGl0eUF0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0VGFpbDsK
KyAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKKyAgICAgICAgSGFzaFNldDxOb2Rl
Kj4gbGl2ZUF0VGFpbDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFs
dWVzQXRIZWFkOworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNB
dFRhaWw7CisgICAgICAgIAorICAgICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKKyAgICAgICAg
flNTQURhdGEoKTsKKyAgICB9OworICAgIE93blB0cjxTU0FEYXRhPiBzc2E7CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE1MjQzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVO
RF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKIAorI2RlZmluZSBERkdfREVG
SU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZh
bHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKKyAgICB0ZW1wbGF0ZVBy
ZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5k
Tm9uVGVybWluYWwoR3JhcGgmIGdyYXBoLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1z
Q29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3Jh
cGguYWRkTm9kZSh0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAorICAgICAgICBh
cHBlbmQobGFzdCgpKTsgXAorICAgICAgICBhdChzaXplKCkgLSAyKSA9IHJlc3VsdDsgXAorICAg
ICAgICByZXR1cm4gcmVzdWx0OyBcCisgICAgfQorICAgIERGR19WQVJJQURJQ19URU1QTEFURV9G
VU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5E
X05PREUKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9u
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmxv
Y2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KEdyYXBoJiBncmFwaCkKKyAgICA6IG1f
Z3JhcGgoZ3JhcGgpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25T
ZXQoKSB7IH0KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KGNvbnN0IEJsb2NrSW5z
ZXJ0aW9uJiBpbnNlcnRpb24pCit7CisgICAgbV9pbnNlcnRpb25zLmFwcGVuZChpbnNlcnRpb24p
OworfQorCit2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNz
UmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrKQoreworICAgIGluc2VydChCbG9ja0luc2VydGlvbihp
bmRleCwgYmxvY2spKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2Vy
dChzaXplX3QgaW5kZXgpCit7CisgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRS
ZWYobmV3IEJhc2ljQmxvY2soCisgICAgICAgIFVJTlRfTUFYLAorICAgICAgICBtX2dyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgbV9n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICBp
bnNlcnQoaW5kZXgsIGJsb2NrKTsKKyAgICByZXR1cm4gYmxvY2suZ2V0KCk7Cit9CisKK0Jhc2lj
QmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3Jl
KQoreworICAgIHJldHVybiBpbnNlcnQoYmxvY2stPmluZGV4KTsKK30KKworYm9vbCBCbG9ja0lu
c2VydGlvblNldDo6ZXhlY3V0ZSgpCit7CisgICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25z
IHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8KKyAgICAvLyBz
b3J0IHRoZW0gYmVmb3JlIHJ1bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4KKyAgICBzdGQ6
OnNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CisKKyAgICBl
eGVjdXRlSW5zZXJ0aW9ucyhtX2dyYXBoLm1fYmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAor
ICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRyaWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vz
c2FyeSBidXQgaXQncworICAgIC8vIGhlYWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9t
IGdyb3dpbmcuCisgICAgdW5zaWduZWQgdGFyZ2V0SW5kZXggPSAwOworICAgIGZvciAodW5zaWdu
ZWQgc291cmNlSW5kZXggPSAwOyBzb3VyY2VJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OykgeworICAgICAgICBSZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
W3NvdXJjZUluZGV4KytdOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbdGFyZ2V0SW5kZXgrK10gPSBibG9jazsKKyAg
ICB9CisgICAgbV9ncmFwaC5tX2Jsb2Nrcy5yZXNpemUodGFyZ2V0SW5kZXgpOworICAgIAorICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkK
KyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tpXS0+aW5kZXggPSBpOworICAgIAorICAgIC8vIEFu
ZCBmaW5hbGx5LCBpbnZhbGlkYXRlIGFsbCBhbmFseXNlcyB0aGF0IHJlbHkgb24gdGhlIENGRy4K
KyAgICBtX2dyYXBoLmludmFsaWRhdGVDRkcoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0
aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2Nr
SW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgREZHQmxvY2tJbnNlcnRpb25TZXRfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIFdURjo6
SW5zZXJ0aW9uPFJlZlB0cjxCYXNpY0Jsb2NrPiA+IEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBC
bG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoR3JhcGgm
IGdyYXBoKTsKKyAgICB+QmxvY2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGluc2Vy
dChjb25zdCBCbG9ja0luc2VydGlvbiYgaW5zZXJ0aW9uKTsKKyAgICB2b2lkIGluc2VydChzaXpl
X3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2spOworICAgIEJhc2ljQmxvY2sq
IGluc2VydChzaXplX3QgaW5kZXgpOworICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNp
Y0Jsb2NrKiBiZWZvcmUpOworICAgIAorICAgIGJvb2wgZXhlY3V0ZSgpOworCitwcml2YXRlOgor
ICAgIEdyYXBoJiBtX2dyYXBoOworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNl
cnRpb25zOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja0luc2VydGlvblNldF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTUyNDMyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjEyLDcgKzIxMiwxMCBAQCBlbnVtIEdyYXBoRm9ybSB7CiAgICAgLy8KICAgICAvLyBUaHJlYWRl
ZENQUyBmb3JtIGlzIHN1aXRhYmxlIGZvciBkYXRhIGZsb3cgYW5hbHlzaXMgKENGQSwgcHJlZGlj
dGlvbgogICAgIC8vIHByb3BhZ2F0aW9uKSwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgYW5kIGNvZGUg
Z2VuZXJhdGlvbi4KLSAgICBUaHJlYWRlZENQUworICAgIFRocmVhZGVkQ1BTLAorICAgIAorICAg
IC8vIFNTQSBmb3JtLiBTZWUgREZHU1NBQ29udmVyc2lvblBoYXNlLmggZm9yIGEgZGVzY3JpcHRp
b24uCisgICAgU1NBCiB9OwogCiAvLyBEZXNjcmliZXMgdGhlIHN0YXRlIG9mIHRoZSBVbmlvbkZp
bmQgc3RydWN0dXJlIG9mIFZhcmlhYmxlQWNjZXNzRGF0YSdzLgpAQCAtMjUwLDYgKzI1MywxOSBA
QCBpbmxpbmUgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXNGb3JJc1Byb3ZlCiAgICAgcmV0dXJuIGlz
UHJvdmVkID8gSXNQcm92ZWQgOiBOZWVkc0NoZWNrOwogfQogCitlbnVtIEtpbGxTdGF0dXMgeyBE
b2VzTm90S2lsbCwgRG9lc0tpbGwgfTsKKworaW5saW5lIGJvb2wgZG9lc0tpbGwoS2lsbFN0YXR1
cyBraWxsU3RhdHVzKQoreworICAgIEFTU0VSVChraWxsU3RhdHVzID09IERvZXNOb3RLaWxsIHx8
IGtpbGxTdGF0dXMgPT0gRG9lc0tpbGwpOworICAgIHJldHVybiBraWxsU3RhdHVzID09IERvZXNL
aWxsOworfQorCitpbmxpbmUgS2lsbFN0YXR1cyBraWxsU3RhdHVzRm9yRG9lc0tpbGwoYm9vbCBk
b2VzS2lsbCkKK3sKKyAgICByZXR1cm4gZG9lc0tpbGwgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxs
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogYm9vbCBjaGVja0FuZFNl
dChUJiBsZWZ0LCBVIHJpZ2h0KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2lu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdC
bG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZH
UGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImNy
aXRpY2FsIGVkZ2UgYnJlYWtpbmciKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3Mo
KTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBBbiBlZGdlIEEt
PkIgaXMgY3JpdGljYWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29yIGFuZCBCIGhhcyBtdWx0
aXBsZQorICAgICAgICAgICAgLy8gcHJlZGVjZXNzb3JzLiBUaHVzIHdlIGZhaWwgZWFybHkgaWYg
d2UgZG9uJ3QgaGF2ZSBtdWx0aXBsZSBzdWNjZXNzb3JzLgorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA8PSAxKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9j
ay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayoq
IHN1Y2Nlc3NvciA9ICZibG9jay0+c3VjY2Vzc29yKGkpOworICAgICAgICAgICAgICAgIGlmIChz
dWNjZXNzb3ItPnByZWRlY2Vzc29ycy5zaXplKCkgPD0gMSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYnJlYWtDcml0aWNh
bEVkZ2UoYmxvY2ssIHN1Y2Nlc3Nvcik7IAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQuZXhlY3V0ZSgpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICB2b2lkIGJyZWFrQ3JpdGljYWxFZGdlKAorICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jaywgdW5zaWduZWQgc3VjY2Vzc29ySW5kZXgsIEJhc2ljQmxvY2sqKiBzdWNjZXNzb3Ip
CisgICAgeworICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgIAorICAgICAgICBC
YXNpY0Jsb2NrKiBwYWQgPSBtX2luc2VydGlvblNldC5pbnNlcnRCZWZvcmUoKnN1Y2Nlc3Nvcik7
CisgICAgICAgIHBhZC0+YXBwZW5kTm9kZShtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgT3BJbmZv
KCpzdWNjZXNzb3IpKTsKKyAgICAgICAgCisgICAgICAgICpzdWNjZXNzb3IgPSBwYWQ7CisgICAg
fQorICAgIAorICAgIEJsb2NrSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworfTsKKworYm9v
bCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBs
aW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ3JpdGljYWwgRWRnZSBCcmVha2luZyBQaGFz
ZSIpOworICAgIHJldHVybiBydW5QaGFzZTxDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlPihncmFw
aCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAor
I2RlZmluZSBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIEluc2VydHMgZHVtbXkgYmFzaWMgYmxv
Y2tzIHRvIGJyZWFrIGNyaXRpY2FsIGVkZ2VzLiBBbiBlZGdlIEEtPkIgaXMKKy8vIGNyaXRpY2Fs
IGlmIEEgaGFzIG11bHRpcGxlIHN1Y2Nlc3NvcnMgYW5kIEIgaGFzIG11bHRpcGxlIHByZWRlc3Nv
cnMuCisKK2Jvb2wgcGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKEdyYXBoJik7CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTIHx8IG1fZ3JhcGgubV9mb3Jt
ID09IFNTQSk7CisgICAgICAgIAogICAgICAgICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRv
IDAgZm9yIGFsbCBub2Rlcy4KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBA
IC03NSwxMCArNzcsMjkgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB3
aGlsZSAoIW1fd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0g
bV93b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgICAgICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxk
IG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgotICAgICAgICAgICAg
REZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291bnRFZGdlKTsKKyAgICAg
ICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0KCk7CisgICAgICAgICAgICAgICAgbV93b3JrbGlz
dC5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyBy
ZWYnZWQuCisgICAgICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwg
bm9kZSwgY291bnRFZGdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgICAgIC8vIEZpbmQg
UGhpLT5VcHNpbG9uIGVkZ2VzLCB3aGljaCBhcmUgcmVwcmVzZW50ZWQgYXMgbWV0YS1kYXRhIGlu
IHRoZQorICAgICAgICAgICAgICAgIC8vIFVwc2lsb24uCisgICAgICAgICAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07
KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5waGkoKS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb3VudE5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7
ICsrYmxvY2tJbmRleCkgewpAQCAtOTQsOCArMTE1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkuaXNQcm92ZWQoKSB8fCBub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVCgobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgPT0gKG1fZ3JhcGgubV9mb3Jt
ID09IFRocmVhZGVkQ1BTKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS53aWxsTm90SGF2ZUNoZWNrKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnNp
ZGVyIHRoZSBwb3NzaWJpbGl0eSB0aGF0IFVJbnQzMlRvTnVtYmVyIGlzIGRlYWQgYnV0IGl0cwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hpbGQgaXNuJ3Q7IGlmIHNvIHRoZW4gd2Ugc2hv
dWxkIE1vdkhpbnQgdGhlIGNoaWxkLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkR2VuZXJhdGUoKQpAQCAtMTE3LDggKzE0MCwxMCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAg
ICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewotICAgICAgICAgICAgICAgICAgICAv
LyBMZWF2ZSB0aGVtIGFzIG5vdCBzaG91bGRHZW5lcmF0ZS4KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRl
ZENQUykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGVhdmUgdGhlbSBhcyBub3Qgc2hv
dWxkR2VuZXJhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IHsKQEAgLTEyNiw3ICsxNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5v
ZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdl
IHx8IGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSB8fCBlZGdlLndpbGxOb3RIYXZlQ2hl
Y2soKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxv
Y2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBlZGdlKTsKQEAgLTE1OCwy
MSArMTgzLDI1IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhbiAi
dW5wcm92ZWQiIHVudHlwZWQgdXNlIGZvciBjb2RlIHRoYXQgaXMgdW5yZWFjaGFibGUuIFRoZSBD
RkEKICAgICAgICAgLy8gd2lsbCBqdXN0IG5vdCBoYXZlIGdvdHRlbiBhcm91bmQgdG8gaXQuCi0g
ICAgICAgIGlmIChlZGdlLmlzUHJvdmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVz
ZSkKKyAgICAgICAgaWYgKGVkZ2Uud2lsbE5vdEhhdmVDaGVjaygpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBpZiAoIWVkZ2UtPnBvc3RmaXhSZWYoKSkKICAgICAgICAgICAgIG1fd29y
a2xpc3QuYXBwZW5kKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb3VudE5v
ZGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLT5wb3N0Zml4UmVmKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fd29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAg
IH0KKyAgICAKICAgICB2b2lkIGNvdW50RWRnZShOb2RlKiwgRWRnZSBlZGdlKQogICAgIHsKICAg
ICAgICAgLy8gRG9uJ3QgY291bnQgZWRnZXMgdGhhdCBhcmUgYWxyZWFkeSBjb3VudGVkIGZvciB0
aGVpciB0eXBlIGNoZWNrcy4KLSAgICAgICAgaWYgKCEoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2Uu
dXNlS2luZCgpID09IFVudHlwZWRVc2UpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAK
LSAgICAgICAgaWYgKGVkZ2UtPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgaWYgKGVkZ2Uud2lsbEhh
dmVDaGVjaygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3dvcmtsaXN0LmFwcGVu
ZChlZGdlLm5vZGUoKSk7CisgICAgICAgIGNvdW50Tm9kZShlZGdlLm5vZGUoKSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihOb2RlKiBu
b2RlKQpAQCAtMTgxLDcgKzIxMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlIGVkZ2Ug
PSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChlZGdlLmlzUHJvdmVkKCkgfHwg
ZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgIGlmIChlZGdlLndpbGxO
b3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdl
KGktLSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0VkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RWRnZS5jcHAJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAgdm9pZCBFZGdlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBvdXQucHJpbnQoIkNoZWNr
OiIpOwogICAgICAgICBvdXQucHJpbnQodXNlS2luZCgpLCAiOiIpOwogICAgIH0KKyAgICBpZiAo
ZG9lc0tpbGwoa2lsbFN0YXR1cygpKSkKKyAgICAgICAgb3V0LnByaW50KCJLaWxsOiIpOwogICAg
IG91dC5wcmludChub2RlKCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0VkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vk
Z2UuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdF
ZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEyICszOSwxMiBAQCBjbGFzcyBBZGphY2VuY3lM
aXN0OwogCiBjbGFzcyBFZGdlIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFZGdlKE5vZGUqIG5v
ZGUgPSAwLCBVc2VLaW5kIHVzZUtpbmQgPSBVbnR5cGVkVXNlLCBQcm9vZlN0YXR1cyBwcm9vZlN0
YXR1cyA9IE5lZWRzQ2hlY2spCisgICAgZXhwbGljaXQgRWRnZShOb2RlKiBub2RlID0gMCwgVXNl
S2luZCB1c2VLaW5kID0gVW50eXBlZFVzZSwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMgPSBOZWVk
c0NoZWNrLCBLaWxsU3RhdHVzIGtpbGxTdGF0dXMgPSBEb2VzTm90S2lsbCkKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwgdXNlS2luZCwg
cHJvb2ZTdGF0dXMpKQorICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwgdXNl
S2luZCwgcHJvb2ZTdGF0dXMsIGtpbGxTdGF0dXMpKQogI2Vsc2UKICAgICAgICAgOiBtX25vZGUo
bm9kZSkKLSAgICAgICAgLCBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKHVzZUtpbmQsIHByb29mU3Rh
dHVzKSkKKyAgICAgICAgLCBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKHVzZUtpbmQsIHByb29mU3Rh
dHVzLCBraWxsU3RhdHVzKSkKICNlbmRpZgogICAgIHsKICAgICB9CkBAIC02MSw3ICs2MSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldE5vZGUoTm9kZSogbm9kZSkKICAgICB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQo
KSwgcHJvb2ZTdGF0dXMoKSk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2Rl
LCB1c2VLaW5kKCksIHByb29mU3RhdHVzKCksIGtpbGxTdGF0dXMoKSk7CiAjZWxzZQogICAgICAg
ICBtX25vZGUgPSBub2RlOwogI2VuZGlmCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIEFTU0VSVChub2RlKCkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1f
ZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQsIHByb29mU3RhdHVzKCkpOwor
ICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kLCBwcm9vZlN0
YXR1cygpLCBraWxsU3RhdHVzKCkpOwogI2Vsc2UKICAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1h
a2VXb3JkKHVzZUtpbmQsIHByb29mU3RhdHVzKCkpOwogI2VuZGlmCkBAIC0xMDgsOSArMTA4LDkg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUoKSk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCgp
LCBwcm9vZlN0YXR1cyk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCks
IHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMsIGtpbGxTdGF0dXMoKSk7CiAjZWxzZQotICAgICAgICBt
X2VuY29kZWRXb3JkID0gbWFrZVdvcmQodXNlS2luZCgpLCBwcm9vZlN0YXR1cyk7CisgICAgICAg
IG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZCh1c2VLaW5kKCksIHByb29mU3RhdHVzLCBraWxsU3Rh
dHVzKCkpOwogI2VuZGlmCiAgICAgfQogICAgIGJvb2wgaXNQcm92ZWQoKSBjb25zdApAQCAtMTIy
LDYgKzEyMiwzNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBwcm9vZlN0YXR1cygpID09IE5l
ZWRzQ2hlY2s7CiAgICAgfQogICAgIAorICAgIGJvb2wgd2lsbE5vdEhhdmVDaGVjaygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gaXNQcm92ZWQoKSB8fCB1c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZTsKKyAgICB9CisgICAgYm9vbCB3aWxsSGF2ZUNoZWNrKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhd2lsbE5vdEhhdmVDaGVjaygpOworICAgIH0KKyAgICAKKyAgICBLaWxsU3Rh
dHVzIGtpbGxTdGF0dXNVbmNoZWNrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bGxTdGF0dXNGb3JEb2VzS2lsbChtX2VuY29kZWRXb3JkICYgMik7CisgICAgfQorICAgIEtpbGxT
dGF0dXMga2lsbFN0YXR1cygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobm9kZSgpKTsK
KyAgICAgICAgcmV0dXJuIGtpbGxTdGF0dXNVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgdm9pZCBz
ZXRLaWxsU3RhdHVzKEtpbGxTdGF0dXMga2lsbFN0YXR1cykKKyAgICB7CisgICAgICAgIEFTU0VS
VChub2RlKCkpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBt
YWtlV29yZChub2RlKCksIHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1cyk7Cisj
ZWxzZQorICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQodXNlS2luZCgpLCBwcm9vZlN0
YXR1cygpLCBraWxsU3RhdHVzKTsKKyNlbmRpZgorICAgIH0KKyAgICBib29sIGRvZXNLaWxsKCkg
Y29uc3QgeyByZXR1cm4gZG9lc0tpbGwoa2lsbFN0YXR1cygpKTsgfQorICAgIGJvb2wgZG9lc05v
dEtpbGwoKSBjb25zdCB7IHJldHVybiAhZG9lc2tpbGwoKTsgfQorICAgIAogICAgIGJvb2wgaXNT
ZXQoKSBjb25zdCB7IHJldHVybiAhIW5vZGUoKTsgfQogICAgIAogICAgIHR5cGVkZWYgdm9pZCog
RWRnZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGU7CkBAIC0xNTAsMjAgKzE4MCwyMCBAQCBwcml2YXRl
OgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1
cm4gNjsgfQogICAgIAotICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwg
VXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKKyAgICBzdGF0aWMgdWlu
dHB0cl90IG1ha2VXb3JkKE5vZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMg
cHJvb2ZTdGF0dXMsIEtpbGxTdGF0dXMga2lsbFN0YXR1cykKICAgICB7CiAgICAgICAgIEFTU0VS
VChzaXplb2Yobm9kZSkgPT0gOCk7CiAgICAgICAgIHVpbnRwdHJfdCBzaGlmdGVkVmFsdWUgPSBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSA8PCBzaGlmdCgpOwogICAgICAgICBBU1NFUlQo
KHNoaWZ0ZWRWYWx1ZSA+PiBzaGlmdCgpKSA9PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2Rl
KSk7CiAgICAgICAgIEFTU0VSVCh1c2VLaW5kID49IDAgJiYgdXNlS2luZCA8IExhc3RVc2VLaW5k
KTsKLSAgICAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KExhc3RVc2VLaW5kKSA8
PCAxKSA8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBzaGlmdCgpKSk7Ci0gICAgICAg
IHJldHVybiBzaGlmdGVkVmFsdWUgfCAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8
PCAxKSB8IERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpOworICAgICAgICBBU1NFUlQoKHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oTGFzdFVzZUtpbmQpIDw8IDIpIDw9IChzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KDIpIDw8IHNoaWZ0KCkpKTsKKyAgICAgICAgcmV0dXJuIHNoaWZ0ZWRWYWx1ZSB8IChz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2ls
bFN0YXR1cykgPDwgMSkgfCBERkc6OmlzUHJvdmVkKHByb29mU3RhdHVzKTsKICAgICB9CiAgICAg
CiAjZWxzZQotICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoVXNlS2luZCB1c2VLaW5kLCBQ
cm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKKyAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKFVz
ZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMsIEtpbGxTdGF0dXMga2lsbFN0
YXR1cykKICAgICB7Ci0gICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VL
aW5kKSA8PCAxKSB8IERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpOworICAgICAgICByZXR1cm4g
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpkb2VzS2lsbChr
aWxsU3RhdHVzKSA8PCAxKSB8IERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpOwogICAgIH0KICAg
ICAKICAgICBOb2RlKiBtX25vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZsdXNoRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZsdXNoRm9ybWF0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0ZsdXNoRm9ybWF0LmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRmx1c2hGb3JtYXQgZm9ybWF0KQor
eworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgIG91
dC5wcmludCgiRGVhZEZsdXNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZsdXNoZWRJ
bnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkSW50MzIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkRG91
YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICBv
dXQucHJpbnQoIkZsdXNoZWRDZWxsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZsdXNo
ZWRCb29sZWFuOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRCb29sZWFuIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICBvdXQucHJpbnQoIkZs
dXNoZWRKU1ZhbHVlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVz
aEZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1
c2hGb3JtYXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rmx1c2hGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRmx1c2hGb3Jt
YXRfaAorI2RlZmluZSBERkdGbHVzaEZvcm1hdF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBGbHVzaEZvcm1hdCB7
CisgICAgRGVhZEZsdXNoLAorICAgIEZsdXNoZWRJbnQzMiwKKyAgICBGbHVzaGVkRG91YmxlLAor
ICAgIEZsdXNoZWRDZWxsLAorICAgIEZsdXNoZWRCb29sZWFuLAorICAgIEZsdXNoZWRKU1ZhbHVl
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBGbHVzaEZvcm1hdCk7CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdG
bHVzaEZvcm1hdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5o
IgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CitwdWJsaWM6CisgICAgRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQor
ICAgICAgICA6IFBoYXNlKGdyYXBoLCAiZmx1c2gtbGl2ZW5lc3MgYW5hbHlzaXMiKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBMaXZlbmVzcyBpcyBhIGJh
Y2t3YXJkcyBhbmFseXNpczsgdGhlIHJvb3RzIGFyZSB0aGUgYmxvY2tzIHRoYXQKKyAgICAgICAg
Ly8gZW5kIGluIGEgdGVybWluYWwgKFJldHVybi9UaHJvdy9UaHJvd1JlZmVyZW5jZUVycm9yKS4g
Rm9yIG5vdywgd2UKKyAgICAgICAgLy8gdXNlIGEgZml4cG9pbnQgZm9ybXVsYXRpb24gc2luY2Ug
bGl2ZW5lc3MgaXMgYSByYXBpZCBhbmFseXNpcyB3aXRoCisgICAgICAgIC8vIGNvbnZlcmdlbmNl
IGd1YXJhbnRlZWQgYWZ0ZXIgTyhjb25uZWN0aXZpdHkpLgorICAgICAgICAKKyAgICAgICAgLy8g
U3RhcnQgYnkgYXNzdW1pbmcgdGhhdCBldmVyeXRoaW5nIGlzIGRlYWQuCisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkLmZpbGwoRGVhZEZs
dXNoKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRUYWlsLmZpbGwoRGVh
ZEZsdXNoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAg
bV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAg
cHJvY2VzcyhibG9ja0luZGV4KTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHBy
b2Nlc3MoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNz
YS0+Zmx1c2hGb3JtYXRBdFRhaWw7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCB2YXJpYWJs
ZS0+bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCksIERlYWRGbHVzaCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+
Zmx1c2hGb3JtYXQoKTsKKyAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhcmlhYmxl
LT5sb2NhbCgpLCBmb3JtYXQsIGZvcm1hdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAobV9saXZlID09IGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbaV07Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2xpdmUuc2l6ZSgpOyBqLS07KSB7CisgICAg
ICAgICAgICAgICAgRmx1c2hGb3JtYXQmIHByZWRlY2Vzc29yRm9ybWF0ID0gcHJlZGVjZXNzb3It
PnNzYS0+Zmx1c2hGb3JtYXRBdFRhaWxbal07CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQg
bXlGb3JtYXQgPSBteUxpdmVbal07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Ly8gVGhyZWUgcG9zc2liaWxpdGllczoKKyAgICAgICAgICAgICAgICAvLyAxKSBQcmVkZWNlc3Nv
ciBmb3JtYXQgaXMgRGVhZCwgaW4gd2hpY2ggY2FzZSBpdCBhY3F1aXJlcyBvdXIgZm9ybWF0Lgor
ICAgICAgICAgICAgICAgIC8vIDIpIFByZWRlY2Vzc29yIGZvcm1hdCBpcyBpZGVudGljYWwgdG8g
b3VyIGZvcm1hdCwgaW4gd2hpY2ggY2FzZSB3ZQorICAgICAgICAgICAgICAgIC8vICAgIGRvIG5v
dGhpbmcuCisgICAgICAgICAgICAgICAgLy8gMykgUHJlZGVjZXNzb3IgZm9ybWF0IGlzIGRpZmZl
cmVudCBmcm9tIG91ciBmb3JtYXQgYW5kIGl0J3Mgbm90IERlYWQsCisgICAgICAgICAgICAgICAg
Ly8gICAgaW4gd2hpY2ggY2FzZSB3ZSBoYXZlIGFuIGVycm9uZW91cyBzZXQgb2YgRmx1c2hlcyBh
bmQgU2V0TG9jYWxzLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVk
ZWNlc3NvckZvcm1hdCA9PSBEZWFkRmx1c2gpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVj
ZXNzb3JGb3JtYXQgPSBteUZvcm1hdDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChw
cmVkZWNlc3NvckZvcm1hdCA9PSBteUZvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICAgICAgICAgIkJhZCBGbHVzaCBtZXJnZSBhdCBlZGdlICIsICpwcmVkZWNlc3NvciwgIiAt
PiAiLCAqYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICIsIGxvY2FsIHZhcmlhYmxlIHIiLCBt
eUxpdmUub3BlcmFuZEZvckluZGV4KGopLCAiOiAiLCAqcHJlZGVjZXNzb3IsCisgICAgICAgICAg
ICAgICAgICAgICIgaGFzICIsIHByZWRlY2Vzc29yRm9ybWF0LCAiIGFuZCAiLCAqYmxvY2ssICIg
aGFzICIsIG15Rm9ybWF0LCAiLlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSVIgYXQg
dGltZSBvZiBlcnJvcjpcbiIpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAg
ICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzZXRGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBvcGVyYW5kLCBGbHVzaEZv
cm1hdCBub2RlRm9ybWF0LCBGbHVzaEZvcm1hdCBuZXdGb3JtYXQpCisgICAgeworICAgICAgICBG
bHVzaEZvcm1hdCYgY3VycmVudEZvcm1hdCA9IG1fbGl2ZS5vcGVyYW5kKG9wZXJhbmQpOworICAg
ICAgICAKKyAgICAgICAgLy8gRG8gc29tZSB1c2VmdWwgdmVyaWZpY2F0aW9uIGhlcmUuIEl0J3Mg
T0sgaWYgd2UgdGhpbmsgdGhhdCB0aGUKKyAgICAgICAgLy8gZmx1c2ggZm9ybWF0IGlzIGRlYWQg
YXQgdGhlIHRpbWUgdGhhdCB3ZSBzZWUgdGhlIG5vZGUuIEJ1dCBpdCdzCisgICAgICAgIC8vIG5v
dCBPSyBpZiBib3RoIHRoZSBub2RlIGFuZCBtX2xpdmUgc2VlIGEgRmx1c2hGb3JtYXQgYW5kIHRo
ZXkgZG8KKyAgICAgICAgLy8gbm90IGFncmVlIG9uIGl0LgorICAgICAgICAKKyAgICAgICAgaWYg
KGN1cnJlbnRGb3JtYXQgPT0gRGVhZEZsdXNoIHx8IGN1cnJlbnRGb3JtYXQgPT0gbm9kZUZvcm1h
dCkgeworICAgICAgICAgICAgY3VycmVudEZvcm1hdCA9IG5ld0Zvcm1hdDsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICJCYWQgRmx1c2ggbWVyZ2UgYXQgbm9kZSAiLCBub2RlLCAiLCByIiwgb3BlcmFuZCwgIjog
bm9kZSBjbGFpbXMgIiwgbm9kZUZvcm1hdCwKKyAgICAgICAgICAgICIgYnV0IGJhY2t3YXJkcyBm
bG93IGNsYWltcyAiLCBjdXJyZW50Rm9ybWF0LCAiLlxuIik7CisgICAgICAgIGRhdGFMb2coIklS
IGF0IHRpbWUgb2YgZXJyb3I6XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAg
IENSQVNIKCk7CisgICAgfQorICAgIAorICAgIEZsdXNoRm9ybWF0IGZsdXNoRm9ybWF0KE5vZGUq
IG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PmZsdXNoRm9ybWF0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSos
IEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkpOworICAg
IH0KKyAgICAKKyAgICBib29sIG1fY2hhbmdlZDsKKyAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4g
bV9saXZlOworfTsKKworYm9vbCBwZXJmb3JtRmx1c2hMaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiBn
cmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEZsdXNoLUxp
dmVuZXNzIEFuYWx5c2lzIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPEZsdXNoTGl2ZW5l
c3NBbmFseXNpc1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZV9oCisjZGVmaW5lIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5mbHVz
aEZvcm1hdEF0SGVhZAorCitib29sIHBlcmZvcm1GbHVzaExpdmVuZXNzQW5hbHlzaXMoR3JhcGgm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTI0MzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjM1LDYgKzIzNSw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc0luZGV4aW5nVHlwZSgpKQogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIEluZGV4aW5nVHlwZUR1bXAobm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAg
ICBpZiAobm9kZS0+aGFzUGhpKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIl4iLCBub2Rl
LT5waGkoKS0+aW5kZXgoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkK
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPmV4ZWN1dGlvbkNvdW50
ZXIoKSkpOwogICAgIGlmIChvcCA9PSBKU0NvbnN0YW50KSB7CkBAIC0zMTMsMjEgKzMxNSwyMyBA
QCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgICAgICAgICBv
dXQucHJpbnQoIlxuIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgb3V0LnByaW50KHByZWZpeCwg
IiAgUGhpIE5vZGVzOiIpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW2ldOwot
ICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2Rl
ID09IER1bXBMaXZlUGhpc09ubHkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb3V0
LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+cmVmQ291bnQoKSwg
Ij4tPigiKTsKLSAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBv
dXQucHJpbnQoIkAiLCBwaGlOb2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBp
ZiAocGhpTm9kZS0+Y2hpbGQyKCkpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIs
IHBoaU5vZGUtPmNoaWxkMigpLT5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9k
ZS0+Y2hpbGQzKCkpCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBAIiwgcGhpTm9k
ZS0+Y2hpbGQzKCktPmluZGV4KCkpOworICAgIGlmICghYmxvY2stPnBoaXMuaXNFbXB0eSgpKSB7
CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFBoaSBOb2RlczoiKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW2ldOworICAgICAgICAgICAgaWYgKCFwaGlO
b2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNP
bmx5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgb3V0LnByaW50KCIg
QCIsIHBoaU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsK
KyAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSkgeworICAgICAgICAgICAgICAgIG91
dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50
KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDIoKS0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChwaGlOb2RlLT5jaGlsZDMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQzKCktPmluZGV4KCkpOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludCgiKSIsIGkgKyAxIDwgYmxvY2st
PnBoaXMuc2l6ZSgpID8gIiwiIDogIiIpOwogICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgi
KSIsIGkgKyAxIDwgYmxvY2stPnBoaXMuc2l6ZSgpID8gIiwiIDogIiIpOwogICAgIH0KICAgICBv
dXQucHJpbnQoIlxuIik7CiB9CkBAIC0zNDUsNyArMzQ5LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KQogICAgICAgICBkdW1wQmxvY2tIZWFkZXIob3V0LCAiIiwgYmxvY2ss
IER1bXBBbGxQaGlzKTsKICAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYmVmb3JlOiAiKTsKICAg
ICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQotICAgICAgICAgICAgZHVtcE9wZXJhbmRz
KGJsb2NrLT52YWx1ZXNBdEhlYWQsIG91dCk7CisgICAgICAgICAgICBvdXQucHJpbnQoYmxvY2st
PnZhbHVlc0F0SGVhZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG91dC5wcmludCgiPGVt
cHR5PiIpOwogICAgICAgICBvdXQucHJpbnQoIlxuIik7CkBAIC0zNTksNyArMzYzLDcgQEAgdm9p
ZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgICAgICB9CiAgICAgICAgIG91dC5w
cmludCgiICB2YXJzIGFmdGVyOiAiKTsKICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVk
KQotICAgICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdFRhaWwsIG91dCk7Cisg
ICAgICAgICAgICBvdXQucHJpbnQoYmxvY2stPnZhbHVlc0F0VGFpbCk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICBvdXQucHJpbnQoIlxu
Iik7CkBAIC00NzgsNiArNDgyLDI4IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChC
YXNpY0Jsb2MKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KKwordm9pZCBHcmFwaDo6YWRk
Rm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0b3I8QmFz
aWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEhhc2hTZXQ8QmFzaWNCbG9jayo+JiBzZWVuLCBCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICBpZiAoc2Vlbi5jb250YWlucyhibG9jaykpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKKyAgICB3b3JrbGlzdC5h
cHBlbmQoYmxvY2spOworICAgIHNlZW4uYWRkKGJsb2NrKTsKK30KKwordm9pZCBHcmFwaDo6ZGVw
dGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQoreworICAgIFZlY3RvcjxC
YXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0OworICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHNlZW47
CisgICAgYWRkRm9yRGVwdGhGaXJzdFNvcnQocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2so
MCkpOworICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgIGFkZEZvckRlcHRo
Rmlyc3RTb3J0KHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNzb3IoaSkpOwor
ICAgIH0KK30KICAgICAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNiArNjUx
LDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgaW52YWxpZGF0ZUNGRygpOwogICAgIAorICAg
IHZvaWQgZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVz
dWx0KTsKKyAgICAKICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyBy
ZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9uLmdldCgpOyB9CiAgICAgCiAgICAgRGVzaXJlZElkZW50
aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQpAQCAt
Njg5LDYgKzY5MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVT
dWNjZXNzb3IoVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCYXNpY0Jsb2NrKiwg
QmFzaWNCbG9jayogc3VjY2Vzc29yKTsKKyAgICB2b2lkIGFkZEZvckRlcHRoRmlyc3RTb3J0KFZl
Y3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmts
aXN0LCBIYXNoU2V0PEJhc2ljQmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9jayopOwogICAgIAogICAg
IEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5v
ZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludGVnZXIsIE5vZGUqIGltbWVk
aWF0ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0
aW9uU2V0LmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI2ICszMSwxMiBAQAogI2lm
IEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYv
SW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLWNsYXNzIEluc2VydGlvbiB7Ci1wdWJsaWM6Ci0gICAgSW5zZXJ0
aW9uKCkgeyB9Ci0gICAgCi0gICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVu
dCkKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleDsgfQotICAgIE5vZGUqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7
IH0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1faW5kZXg7Ci0gICAgTm9kZSogbV9lbGVtZW50Owot
fTsKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248Tm9kZSo+IEluc2VydGlvbjsKIAogY2xhc3MgSW5z
ZXJ0aW9uU2V0IHsKIHB1YmxpYzoKQEAgLTgxLDIwICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBpZiAoIW1f
aW5zZXJ0aW9ucy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJsb2NrLT5n
cm93KGJsb2NrLT5zaXplKCkgKyBtX2luc2VydGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgc2l6ZV90
IGxhc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5J
bnNlcnRpb25zID0gbV9pbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsK
LSAgICAgICAgICAgIEluc2VydGlvbiYgaW5zZXJ0aW9uID0gbV9pbnNlcnRpb25zW2luZGV4SW5J
bnNlcnRpb25zXTsKLSAgICAgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uLmlu
ZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9mZnNl
dCA9IGluZGV4SW5JbnNlcnRpb25zICsgMTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBs
YXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQotICAgICAgICAgICAgICAgIGJsb2NrLT5hdChp
KSA9IGJsb2NrLT5hdChpIC0gaW5kZXhPZmZzZXQpOwotICAgICAgICAgICAgYmxvY2stPmF0KGZp
cnN0SW5kZXgpID0gaW5zZXJ0aW9uLmVsZW1lbnQoKTsKLSAgICAgICAgICAgIGxhc3RJbmRleCA9
IGZpcnN0SW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgbV9pbnNlcnRpb25zLnJlc2l6ZSgwKTsK
KyAgICAgICAgZXhlY3V0ZUluc2VydGlvbnMoKmJsb2NrLCBtX2luc2VydGlvbnMpOwogICAgIH0K
IHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIExpdmVuZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6
CisgICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFz
ZShncmFwaCwgImxpdmVuZXNzIGFuYWx5c2lzIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJv
b2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwor
ICAgICAgICAKKyAgICAgICAgLy8gTGl2ZW5lc3MgaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXM7IHRo
ZSByb290cyBhcmUgdGhlIGJsb2NrcyB0aGF0CisgICAgICAgIC8vIGVuZCBpbiBhIHRlcm1pbmFs
IChSZXR1cm4vVGhyb3cvVGhyb3dSZWZlcmVuY2VFcnJvcikuIEZvciBub3csIHdlCisgICAgICAg
IC8vIHVzZSBhIGZpeHBvaW50IGZvcm11bGF0aW9uIHNpbmNlIGxpdmVuZXNzIGlzIGEgcmFwaWQg
YW5hbHlzaXMgd2l0aAorICAgICAgICAvLyBjb252ZXJnZW5jZSBndWFyYW50ZWVkIGFmdGVyIE8o
Y29ubmVjdGl2aXR5KS4KKyAgICAgICAgCisgICAgICAgIC8vIFN0YXJ0IGJ5IGFzc3VtaW5nIHRo
YXQgZXZlcnl0aGluZyBpcyBkZWFkLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBibG9j
ay0+bGl2ZUF0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPmxpdmVBdFRhaWwuY2xl
YXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9j
aGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJv
Y2VzcyhibG9ja0luZGV4KTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nl
c3MoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5
IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UK
KyAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTg0NTUKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsg
bm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246Cisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gICAgbjogVXBzaWxvbigkcCwgQHgpCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBu
IGFuZCB1c2VzIEB4LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhp
OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVzZSBu
b3IgYSBkZWYuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2RlOgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFu
ZCB1c2VzIEBhLCBAYiwgQGMuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBVcHNpbG9uOiB7CisgICAgICAgICAgICAgICAg
Tm9kZSogcGhpID0gbm9kZS0+cGhpKCk7CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShw
aGkpOworICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICAg
ICAgbV9saXZlLmFkZChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQ
aGk6IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92
ZShub2RlKTsKKyAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBo
LCBub2RlLCBhZGRDaGlsZFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNz
YS0+bGl2ZUF0SGVhZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmU7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBp
LS07KQorICAgICAgICAgICAgYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5hZGQobV9saXZlLmJlZ2lu
KCksIG1fbGl2ZS5lbmQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9k
ZSosIEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBhZGRDaGlsZFVzZShlZGdlKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhZGRDaGlsZFVzZShFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAg
ZWRnZS5zZXRLaWxsU3RhdHVzKG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkpLmlzTmV3RW50cnkgPyBE
b2VzS2lsbCA6IERvZXNOb3RLaWxsKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7
CisgICAgSGFzaFNldDxOb2RlKj4gbV9saXZlOworfTsKKworYm9vbCBwZXJmb3JtTGl2ZW5lc3NB
bmFseXNpcyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdp
b24oIkRGRyBMaXZlbmVzcyBBbmFseXNpcyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxM
aXZlbmVzc0FuYWx5c2lzUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0xpdmVuZXNzQW5hbHlzaXNQ
aGFzZV9oCisjZGVmaW5lIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29t
bW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7
CisKKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+bGl2ZUF0SGVhZC9saXZlQXRUYWlsLgor
Citib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
TGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuY3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMCBAQCB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTm9kCiAgICAgICAgIG91dC5wcmludCgiLSIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChub2RlID09IE5vZGU6OnRvcCgpKSB7Cisg
ICAgICAgIG91dC5wcmludCgiVE9QIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgb3V0
LnByaW50KCJAIiwgbm9kZS0+aW5kZXgoKSk7CiAgICAgb3V0LnByaW50KEFiYnJldmlhdGVkU3Bl
Y3VsYXRpb25EdW1wKG5vZGUtPnByZWRpY3Rpb24oKSkpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MzgsNiArNTM4LDE3IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
bV9vcEluZm8pOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc1BoaSgpCisgICAgeworICAgICAg
ICByZXR1cm4gb3AoKSA9PSBVcHNpbG9uOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBwaGkoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1BoaSgpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxOb2RlKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKICAgICBib29sIGhhc0lkZW50aWZp
ZXIoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CkBAIC03NzMsMTYgKzc4NCwxNiBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3BJbmZvMiA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9jayogdGFrZW5CbG9jaygpCisg
ICAgQmFzaWNCbG9jayomIHRha2VuQmxvY2soKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJh
bmNoKCkgfHwgaXNKdW1wKCkpOwotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEJhc2ljQmxv
Y2sqPihtX29wSW5mbyk7CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sq
Kj4oJm1fb3BJbmZvKTsKICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9jayogbm90VGFrZW5CbG9j
aygpCisgICAgQmFzaWNCbG9jayomIG5vdFRha2VuQmxvY2soKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGlzQnJhbmNoKCkpOwotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sq
PihtX29wSW5mbzIpOworICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+
KCZtX29wSW5mbzIpOwogICAgIH0KICAgICAKICAgICBTd2l0Y2hEYXRhKiBzd2l0Y2hEYXRhKCkK
QEAgLTgwNSw3ICs4MTYsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQorICAgIEJhc2ljQmxv
Y2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICBpZiAoaXNTd2l0
Y2goKSkgewogICAgICAgICAgICAgaWYgKGluZGV4IDwgc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXpl
KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lv
biAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIG1hY3JvKFpvbWJpZUhpbnQsIE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3Jv
KFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhOb3AsIE5vZGVEb2VzTm90
RXhpdCkgXAorICAgIG1hY3JvKFVwc2lsb24sIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFu
dFRvT1NSKSBcCiAgICAgbWFjcm8oUGhpLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRU
b09TUikgXAogICAgIG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RF
eGl0KSBcCiAgICAgbWFjcm8oUGhhbnRvbUxvY2FsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURv
ZXNOb3RFeGl0KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQ
aGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVibGlj
IFBoYXNlIHsKK3B1YmxpYzoKKyAgICBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKEdyYXBo
JiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIk9TUiBhdmFpbGFiaWxpdHkgYW5hbHlz
aXMiKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8
QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7CisgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0
aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBkZXB0aEZpcnN0W2ldOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZh
aWxhYmlsaXR5QXRIZWFkLmZpbGwoMCk7CisgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFi
aWxpdHlBdFRhaWwuZmlsbCgwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtpXTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gV2UgZWRpdCBhdmFpbGFiaWxpdHlBdFRhaWwgaW4tcGxhY2UsIGJ1dCBmaXJzdCBp
bml0aWFsaXplIGl0IHRvCisgICAgICAgICAgICAvLyBhdmFpbGFiaWxpdHlBdEhlYWQuCisgICAg
ICAgICAgICBPcGVyYW5kczxOb2RlKj4mIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWls
YWJpbGl0eUF0VGFpbDsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkg
eworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAg
ICBjYXNlIE1vdkhpbnRBbmRDaGVjazogeworICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxp
dHkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSAwOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgai0tOykgeworICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioaik7
CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBzdWNjZXNzb3JBdmFpbGFiaWxpdHkg
PSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBrID0gYXZhaWxhYmlsaXR5LnNpemUoKTsgay0tOykgeworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBteU5vZGUgPSBhdmFpbGFiaWxpdHlba107CisgICAgICAgICAgICAgICAgICAg
IGlmICghbXlOb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVu
ZXNzQXRIZWFkLmNvbnRhaW5zKG15Tm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCB0aGlzIG1heSBvdmVyd3JpdGUgYXZhaWxhYmlsaXR5IHdpdGggYSBib2d1cyBub2RlCisg
ICAgICAgICAgICAgICAgICAgIC8vIGF0IG1lcmdlIHBvaW50cy4gVGhpcyBpcyBmaW5lLCBzaW5j
ZSBtZXJnZSBwb2ludHMgaGF2ZQorICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50KFBoaSkn
cyB0byB3b3JrIGFyb3VuZCB0aGlzLiBUaGUgb3V0Y29tZSBvZiB0aGlzIGlzCisgICAgICAgICAg
ICAgICAgICAgIC8vIHlvdSBtaWdodCBoYXZlIGEgcHJvZ3JhbSBpbiB3aGljaCBhIG5vZGUgaGFw
cGVucyB0byByZW1haW4KKyAgICAgICAgICAgICAgICAgICAgLy8gbGl2ZSBpbnRvIHNvbWUgYmxv
Y2sgQiwgYW5kIHNlcGFyYXRlbHkgKGR1ZSB0byBjb3B5CisgICAgICAgICAgICAgICAgICAgIC8v
IHByb3BhZ2F0aW9uKSBqdXN0IG9uZSBvZiB0aGUgcHJlZGVjZXNzb3JzIG9mIEIgaXNzdWVkIGEK
KyAgICAgICAgICAgICAgICAgICAgLy8gTW92SGludCBwdXR0aW5nIHRoYXQgbm9kZSBpbnRvIHNv
bWUgbG9jYWwuIFRoZW4gaW4gQiB3ZSBtaWdodAorICAgICAgICAgICAgICAgICAgICAvLyB0aGlu
ayB0aGF0IHRoYXQgbm9kZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGxvY2FsLiBPZgorICAg
ICAgICAgICAgICAgICAgICAvLyBjb3Vyc2UgaWYgdGhhdCBsb2NhbCB3YXMgYWN0dWFsbHkgbGl2
ZSBpbiBCLCBCIHdvdWxkIGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAvLyBQaGkgZm9yIGl0
LiBTbyBlc3NlbnRpYWxseSB3ZSdsbCBoYXZlIE9TUiBleGl0IGRyb3BwaW5nIHRoaXMKKyAgICAg
ICAgICAgICAgICAgICAgLy8gbm9kZSdzIHZhbHVlIGludG8gdGhlIGxvY2FsIHdoZW4gd2Ugb3Ro
ZXJ3aXNlIChpbiB0aGUgREZHKQorICAgICAgICAgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIGRy
b3BwZWQgdW5kZWZpbmVkIGludG8gdGhlIGxvY2FsLiBUaGlzIHNlZW1zCisgICAgICAgICAgICAg
ICAgICAgIC8vIGhhcm1sZXNzLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgc3VjY2Vzc29yQXZhaWxhYmlsaXR5W2tdID0gbXlOb2RlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3Jh
cGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgT1NS
IEF2YWlsYWJpbGl0eSBBbmFseXNpcyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlX2gKKyNkZWZpbmUgREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbXB1dGVzIEJh
c2ljQmxvY2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgcmVsaWVzIG9uIGxp
dmVuZXNzCisvLyBhbmFseXNpcyBwaGFzZSBoYXZpbmcgYmVlbiBydW4gYW5kIHRoZSBncmFwaCBu
b3QgaGF2aW5nIGJlZW4gdHJhbnNmb3JtZWQKKy8vIGFmdGVyIHRoYXQuCisKK2Jvb2wgcGVyZm9y
bU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDIwICsxODQsMjAgQEAgUGxhbjo6
Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIHBlcmZvcm1TdG9yZUVsaW1p
bmF0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CiAgICAgCi0gICAg
Ly8gTm90ZSB0aGF0IERDRSBpcyBuZWNlc3NhcnkgZXZlbiBpbiB0aGUgRlRMLCBiZWNhdXNlIG9u
bHkgd2Uga25vdyB3aGF0IGlzCi0gICAgLy8gbGl2ZS1pbi1ieXRlY29kZS4gVGhlIEZUTCB1c2Vz
IHRoaXMgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHdoZW4gT1NSIGV4aXQKLSAgICAvLyB2YWx1
ZXMgc2hvdWxkIGJlIHdpcmVkIHRvIExWYWx1ZXMsIHZlcnN1cyBiZWluZyB3aXJlZCB0byBFeGl0
VmFsdWU6OmRlYWQoKS4KLSAgICAvLyBUaGlzIGlzIGRpc3RpbmN0IGZyb20gd2hhdCBab21iaWVI
aW50IGdpdmVzIHVzOiBab21iaWVIaW50IHNheXMgdGhhdCB0aGUKLSAgICAvLyB2YWx1ZSBpbiB0
aGUgZ2l2ZW4gYnl0ZWNvZGUgbG9jYWwgaXMgYWx3YXlzIGRlYWQ7IHRoZSByZWZlcmVuY2UgY291
bnRzIHRoYXQKLSAgICAvLyBEQ0UgcHJvZHVjZXMgdGVsbCB1cyB0aGF0IHRoZSB2YWx1ZSBpcyBs
aXZlIGZvciBhIHdoaWxlIGJ1dCBldmVudHVhbGx5Ci0gICAgLy8gZGllcywgYW5kIGl0IHRlbGxz
IHVzIGV4YWN0bHkgd2hlbiB0aGUgZGVhdGggcG9pbnQgaXMuCi0gICAgcGVyZm9ybURDRShkZmcp
OwogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUV4cGVyaW1lbnRh
bEZUTCgpCiAgICAgICAgICYmIGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgogICAgICAg
ICAmJiBGVEw6OmNhbkNvbXBpbGUoZGZnKSkgewogICAgICAgICAKKyAgICAgICAgcGVyZm9ybUNy
aXRpY2FsRWRnZUJyZWFraW5nKGRmZyk7CisgICAgICAgIHBlcmZvcm1TU0FDb252ZXJzaW9uKGRm
Zyk7CisgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKKyAgICAgICAgcGVyZm9ybURDRShkZmcpOyAv
LyBXZSByZWx5IG9uIHRoaXMgdG8gY29udmVydCBkZWFkIFNldExvY2FscyBpbnRvIHRoZSBhcHBy
b3ByaWF0ZSBoaW50LCBhbmQgdG8ga2lsbCBkZWFkIGNvZGUgdGhhdCB3b24ndCBiZSByZWNvZ25p
emVkIGFzIGRlYWQgYnkgTExWTS4KKyAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZn
KTsKKyAgICAgICAgcGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyhkZmcpOworICAgICAgICBw
ZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoZGZnKTsKKyAgICAgICAgCiAgICAgICAgIGR1
bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBqdXN0IGJlZm9yZSBGVEwgbG93ZXJpbmc6Iik7
CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBPU1IgZW50cnkuCkBAIC0yMTUs
NiArMjE1LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAg
IH0KICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKICAgICAKKyAgICBwZXJmb3JtRENFKGRmZyk7
CiAgICAgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKICAgICBkdW1wQW5k
VmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGggYWZ0ZXIgb3B0aW1pemF0aW9uOiIpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3MiwxNCArNDcyLDE5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgWm9tYmllSGlu
dDogewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0
IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRl
ZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCi0gICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjYXNlIFBoaToKICAgICAg
ICAgICAgIC8vIFBoaXMgc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGhlcmUgc2luY2Ugd2UncmUgaXRl
cmF0aW5nIHRoZSBhbGwtYnV0LVBoaSdzCiAgICAgICAgICAgICAvLyBwYXJ0IG9mIGJhc2ljIGJs
b2Nrcy4KLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBVcHNpbG9uOgorICAgICAgICAgICAgLy8gVGhlc2UgZG9uJ3QgZ2V0IGluc2VydGVkIHVu
dGlsIHdlIGdvIGludG8gU1NBLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0U2NvcGU6CkBAIC01
NDEsNyArNTQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgTGFzdE5vZGVUeXBlOgotICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsK
ICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTU0FDb252
ZXJzaW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5o
IgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBTU0FDb252ZXJzaW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGlj
OgorICAgIFNTQUNvbnZlcnNpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJTU0EgY29udmVyc2lvbiIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgp
CisgICAgICAgICwgbV9ub25Ucml2aWFsUGhpcyhPcGVyYW5kc0xpa2UsIGdyYXBoLmJsb2NrKDAp
LT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9jaGFuZ2VkKGZhbHNlKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKKyAgICAgICAgLy8gRmln
dXJlIG91dCB3aGljaCBTZXRMb2NhbCdzIG5lZWQgZmx1c2hpbmcuIE5lZWQgdG8gZG8gdGhpcyB3
aGlsZSB0aGUKKyAgICAgICAgLy8gUGhpIGdyYXBoIGlzIHN0aWxsIGludGFjdC4KKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6
ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gRmx1c2gp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGFkZEZsdXNo
ZWRMb2NhbE9wKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxl
ICghbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAg
ICAgQVNTRVJUKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKTsKKyAgICAgICAgICAg
IERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZEZsdXNoZWRMb2NhbEVk
Z2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBFbGltaW5hdGUgYWxsIGR1cGxp
Y2F0ZSBvciBzZWxmLXBvaW50aW5nIFBoaSBlZGdlcy4gVGhpcyBtZWFucyB0aGF0CisgICAgICAg
IC8vIHdlIHRyYW5zZm9ybToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gcDogUGhpKEBuMSwgQG4y
LCBAbjMpCisgICAgICAgIC8vCisgICAgICAgIC8vIGludG86CisgICAgICAgIC8vCisgICAgICAg
IC8vIHA6IFBoaShAeCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaWYgZWFjaCBAbmkgaW4ge0Bu
MSwgQG4yLCBAbjN9IGlzIGVpdGhlciBlcXVhbCB0byBAcCB0byBpcyBlcXVhbAorICAgICAgICAv
LyB0byBAeCwgZm9yIGV4YWN0bHkgb25lIG90aGVyIEB4LiBBZGRpdGlvbmFsbHksIHRyaXZpYWwg
UGhpcyAoaS5lLgorICAgICAgICAvLyBwOiBQaGkoQHgpKSBhcmUgZm9yd2FyZGVkLCBzbyB0aGF0
IGlmIGhhdmUgYW4gZWRnZSB0byBzdWNoIEBwLCB3ZQorICAgICAgICAvLyByZXBsYWNlIGl0IHdp
dGggQHguIFRoaXMgbG9vcCBkb2VzIHRoaXMgZm9yIFBoaXMgb25seTsgbGF0ZXIgd2UgZG8KKyAg
ICAgICAgLy8gc3VjaCBmb3J3YXJkaW5nIGZvciBQaGkgcmVmZXJlbmNlcyBmb3VuZCBpbiBvdGhl
ciBub2Rlcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2VlIEF5Y29jayBhbmQgSG9yc3Bvb2wg
aW4gQ0MnMDAgZm9yIGEgYmV0dGVyIGRlc2NyaXB0aW9uIG9mIHdoYXQKKyAgICAgICAgLy8gd2Un
cmUgZG9pbmcgaGVyZS4KKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFs
c2U7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVt
QmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsK
KyAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gYmxvY2stPnBoaXNbcGhpSW5kZXhdOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0
dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRQaGlDaGlsZHJlbihwaGkpOworICAgICAgICAgICAgICAgICAgICBkZWR1
cGxpY2F0ZUNoaWxkcmVuKHBoaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gRm9yIGVh
Y2ggYmFzaWMgYmxvY2ssIGZvciBlYWNoIGxvY2FsIGxpdmUgYXQgdGhlIGhlYWQgb2YgdGhhdCBi
bG9jaywKKyAgICAgICAgLy8gZmlndXJlIG91dCB3aGF0IG5vZGUgd2Ugc2hvdWxkIGJlIHJlZmVy
cmluZyB0byBpbnN0ZWFkIG9mIHRoYXQgbG9jYWwuCisgICAgICAgIC8vIElmIGl0IHR1cm5zIG91
dCB0byBiZSBhIG5vbi10cml2aWFsIFBoaSwgbWFrZSBzdXJlIHRoYXQgdG8gY3JlYXRlIGFuCisg
ICAgICAgIC8vIFNTQSBQaGkgYW5kIFVwc2lsb25zIGluIHByZWRlY2Vzc29yIGJsb2Nrcy4gV2Ug
cmV1c2UKKyAgICAgICAgLy8gQmFzaWNCbG9jazo6dmFyaWFibGVzQXRIZWFkIGZvciB0cmFja2lu
ZyB3aGljaCBub2RlcyB0byByZWZlciB0by4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFi
bGVzQXRIZWFkW2ldOworICAgICAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFBvaXNvbiB0aGlzIGVudHJ5IGluIHZhcmlhYmxlc0F0SGVhZCBiZWNhdXNlIHdl
IGRvbid0CisgICAgICAgICAgICAgICAgICAgIC8vIHdhbnQgYW55b25lIHRvIHRyeSB0byByZWZl
ciB0byBpdCwgaWYgdGhlIHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIGNhcHR1
cmVkLgorICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6Cisg
ICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50
b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpIHx8
IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICBFZGdl
IGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5qdXN0T25lQ2hpbGQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGVkZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWRnZS5ub2RlKCk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SXQncyBhIG5vbi10cml2aWFsIFBoaS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgc2V0IHRoZSBQaGkncyB0eXBlIChpLmUuIE5vZGVSZXN1bHRNYXNrKSB0bwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmbGVjdCB0aGUgVmFyaWFibGVBY2Nlc3NEYXRh
J3MgdW5ib3hpbmcuIFRoaXMgd2lsbCBtYWtlIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBlYXNpZXIgZm9yIHRoZSBiYWNrZW5kIHRvIGZpZ3VyZSBvdXQgd2hpY2ggdmFsdWUgdG8gdXNl
IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBzaWxvbnMsIGFuZCB3aGF0IHR5cGUg
dG8gdXNlIGZvciB0aGUgUGhpIGl0c2VsZi4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZUZsYWdzIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBOb2RlUmVzdWx0TnVt
YmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPmFy
Z3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBOb2RlUmVzdWx0SW50MzI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTm9kZVJl
c3VsdEJvb2xlYW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5vZGVSZXN1bHRKUzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBOb2RlUmVzdWx0SlM7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBt
X2luc2VydGlvblNldC5pbnNlcnQoMCwgU3BlY05vbmUsIFBoaSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5tZXJnZUZsYWdzKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoKG5vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgPT0gcmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNl
c3NvcnNbal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogdXBzaWxvbiA9IHBy
ZWRlY2Vzc29yLT5hcHBlbmROb25UZXJtaW5hbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFVwc2lsb24sIE9wSW5mbyhub2RlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3ItPnZhcmlhYmxlc0F0VGFpbFtpXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwgTW92SGludCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8oYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQp
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXSA9IG5vZGU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxv
Y2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDb252ZXJ0IG9wZXJhdGlvbnMg
b3ZlciBsb2NhbHMgaW50byBvcGVyYXRpb25zIG92ZXIgU1NBIG5vZGVzLgorICAgICAgICAvLyAt
IEdldExvY2FsIG92ZXIgY2FwdHVyZWQgdmFyaWFibGVzIGxvc2UgdGhlaXIgcGhpcy4KKyAgICAg
ICAgLy8gLSBHZXRMb2NhbCBvdmVyIHVuY2FwdHVyZWQgdmFyaWFibGVzIGRpZSBhbmQgZ2V0IHJl
cGxhY2VkIHdpdGggcmVmZXJlbmNlcworICAgICAgICAvLyAgIHRvIHRoZSBub2RlIHNwZWNpZmll
ZCBieSB2YXJpYWJsZXNBdEhlYWQuCisgICAgICAgIC8vIC0gU2V0TG9jYWwgZ2V0cyBOb2RlTXVz
dEdlbmVyYXRlIGlmIGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50byBhCisgICAgICAgIC8vICAg
TW92SGludCBvdGhlcndpc2UuCisgICAgICAgIC8vIC0gRmx1c2ggbG9zZXMgaXRzIGNoaWxkcmVu
IGJ1dCByZW1haW5zLCBiZWNhdXNlIHdlIHdhbnQgdG8ga25vdyB3aGVuIGEKKyAgICAgICAgLy8g
ICBmbHVzaGVkIFNldExvY2FsJ3MgdmFsdWUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBhbHNv
IG1ha2VzIGl0IHNpbXBsZXIKKyAgICAgICAgLy8gICB0byByZWFzb24gYWJvdXQgdGhlIGZvcm1h
dCBvZiBhIGxvY2FsLCBzaW5jZSB3ZSBjYW4ganVzdCBmb2xkIGl0IGludG8gdGhlCisgICAgICAg
IC8vICAgYmFja3dhcmRzIGFuYWx5c2lzIHRoYXQgTGl2ZW5lc3NBbmFseXNpc1BoYXNlIGRvZXMu
IEFzIHBhcnQgb2YgdGhlCisgICAgICAgIC8vICAgYmFja3dhcmRzIGFuYWx5c2lzLCB3ZSBzYXkg
dGhhdCB0aGUgdHlwZSBvZiBhIGxvY2FsIGNhbiBiZSBlaXRoZXIKKyAgICAgICAgLy8gICBpbnQz
MiwgZG91YmxlLCB2YWx1ZSwgb3IgZGVhZC4KKyAgICAgICAgLy8gLSBQaGFudG9tTG9jYWwgYmVj
b21lcyBQaGFudG9tLCBhbmQgaXRzIGNoaWxkIGlzIHdoYXRldmVyIGlzIHNwZWNpZmllZAorICAg
ICAgICAvLyAgIGJ5IHZhcmlhYmxlc0F0SGVhZC4KKyAgICAgICAgLy8gLSBTZXRBcmd1bWVudCB0
dXJucyBpbnRvIEdldExvY2FsLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4
LS07KQorICAgICAgICAgICAgICAgIGJsb2NrLT5hdChub2RlSW5kZXgpLT5yZXBsYWNlbWVudCA9
IDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
MDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCBtX2ZsdXNoZWRM
b2NhbE9wcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1l
cmdlRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhpbnQp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0g
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOiB7CisgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fz
ZSBQaGFudG9tTG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXROb2RlKGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRPcEFuZERlZmF1bHRGbGFncyhHZXRMb2NhbCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRnJlZSBhbGwgcGhpcyBhbmQgcmVzZXQgdmFy
aWFibGVzIHZlY3RvcnMuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9n
cmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOwor
ICAgICAgICAgICAgYmxvY2stPnBoaXMuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
Y2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKKyAgICAg
ICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT5z
c2EgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jazo6U1NBRGF0YShibG9jaykpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFNTQTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdm9pZCBmb3J3YXJkUGhpQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsK
KyAgICAgICAgICAgIEVkZ2UmIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAg
ICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IG1fY2hhbmdlZCB8PSBmb3J3YXJkUGhpRWRnZShlZGdlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBOb2RlKiBmb3J3YXJkUGhpKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3Ig
KDs7KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgUGhpOiB7CisgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+anVzdE9uZUNoaWxk
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWRnZS5ub2RlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgYm9vbCBmb3J3YXJkUGhpRWRnZShFZGdlJiBlZGdlKQorICAgIHsKKyAg
ICAgICAgTm9kZSogbmV3Tm9kZSA9IGZvcndhcmQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAo
bmV3Tm9kZSA9PSBlZGdlLm5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkZWR1cGxpY2F0ZUNoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7
CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAg
ICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlm
IChlZGdlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVF
ZGdlKGktLSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IGkgKyAxOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytqKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGopID09IGVkZ2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShqLS0pOworICAgICAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGZvcndhcmROb2RlQ2hpbGRyZW4oTm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5v
ZGUsIGZvcndhcmROb2RlRWRnZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm9yd2FyZE5vZGVF
ZGdlKE5vZGUqLCBFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgCisg
ICAgICAgIHN3aXRjaCAoZWRnZS0+b3AoKSkgeworICAgICAgICBjYXNlIEdldExvY2FsOgorICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsT3AoTm9kZSogbm9k
ZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcHMuYWRkKG5vZGUp
OworICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgIH0K
KworICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsRWRnZShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsK
KyAgICAgICAgYWRkRmx1c2hlZExvY2FsT3AoZWRnZS5ub2RlKCkpOworICAgIH0KKworICAgIElu
c2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2ZsdXNoZWRM
b2NhbE9wczsKKyAgICBWZWN0b3I8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKKyAg
ICBib29sIG1fY2hhbmdlZDsKK307CisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNpb24oR3JhcGgm
IGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgU1NBIENv
bnZlcnNpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U1NBQ29udmVyc2lvblBoYXNl
PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKyNkZWZpbmUgREZHU1NBQ29udmVyc2lv
blBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisK
Ky8vIENvbnZlcnQgVGhyZWFkZWRDUFMgZm9ybSBpbnRvIFNTQSBmb3JtLiBUaGlzIHJlc3VsdHMg
aW4gYSBmb3JtIHRoYXQgaGFzOgorLy8KKy8vIC0gUm91Z2hseSBtaW5pbWFsIFBoaSdzLiBXZSB1
c2UgdGhlIEF5Y29jayAmIEhvcnNwb29sIGZpeHBvaW50IGZvcgorLy8gICBjb252ZXJ0aW5nIHRo
ZSBDUFMgbWF4aW1hbCBQaGlzIGludG8gU1NBIG1pbmltYWwgUGhpcywgd2l0aCB0aGUgY2F2ZWF0
CisvLyAgIHRoYXQgaXJyZWR1Y2libGUgY29udHJvbCBmbG93IG1heSByZXN1bHQgaW4gc29tZSBt
aXNzZWQgb3Bwb3J0dW5pdGllcworLy8gICBmb3IgUGhpIHJlZHVjdGlvbi4KKy8vCisvLyAtIE5v
IHVzZXMgb2YgR2V0TG9jYWwvU2V0TG9jYWwgZXhjZXB0IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMg
YW5kIGZsdXNoZXMuCisvLyAgIEFmdGVyIHRoaXMsIGFueSByZW1haW5pbmcgU2V0TG9jYWwgbWVh
bnMgRmx1c2guIEZsdXNoIG5vZGVzIGFyZQorLy8gICBlbGltaW5hdGVkLiBQaGFudG9tTG9jYWxz
IGJlY29tZSBQaGFudG9tcy4gTm9kZXMgbWF5IG1heSBoYXZlIGNoaWxkcmVuCisvLyAgIHRoYXQg
YXJlIGluIGFub3RoZXIgYmFzaWMgYmxvY2suCisvLworLy8gLSBNb3ZIaW50cyBhcmUgdXNlZCBm
b3IgT1NSIGluZm9ybWF0aW9uLCBhbmQgYXJlIHRoZW1zZWx2ZXMgbWluaW1hbC4KKy8vICAgQSBN
b3ZIaW50IHdpbGwgb2NjdXIgYXQgc29tZSBwb2ludCBhZnRlciB0aGUgYXNzaWduaW5nLCBhbmQg
YXQgUGhpCisvLyAgIHBvaW50cy4KKy8vCisvLyAtIFVubGlrZSBjb252ZW50aW9uYWwgU1NBIGlu
IHdoaWNoIFBoaSBmdW5jdGlvbnMgcmVmZXIgdG8gcHJlZGVjZXNzb3JzCisvLyAgIGFuZCB2YWx1
ZXMsIG91ciBTU0EgdXNlcyBVcHNpbG9uIGZ1bmN0aW9ucyB0byBpbmRpY2F0ZSB2YWx1ZXMgaW4K
Ky8vICAgcHJlZGVjZXNzb3JzLiBBIG1lcmdlIHdpbGwgbG9vayBsaWtlOgorLy8KKy8vICAgbGFi
ZWxBOgorLy8gICAgICAgYTogVGhpbmd5KC4uLikKKy8vICAgICAgIGI6IFVwc2lsb24oXmUsIEBh
KQorLy8gICAgICAgSnVtcChsYWJlbEMpCisvLworLy8gICBsYWJlbEI6CisvLyAgICAgICBjOiBP
dGhlclRoaW5neSguLi4pCisvLyAgICAgICBkOiBVcHNpbG9uKF5lLCBAYykKKy8vICAgICAgIEp1
bXAobGFiZWxDKQorLy8KKy8vICAgbGFiZWxDOgorLy8gICAgICAgZTogUGhpKCkKKy8vCisvLyAg
IE5vdGUgdGhhdCB0aGUgUGhpIGhhcyBubyBjaGlsZHJlbiwgYnV0IHRoZSBwcmVkZWNlc3NvcnMg
aGF2ZSBVcHNpbG9ucworLy8gICB0aGF0IGhhdmUgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgUGhp
ICheZSBpbnN0ZWFkIG9mIEBlOyB3ZSBzdG9yZSBpdAorLy8gICBpbiB0aGUgT3BJbmZvIHJhdGhl
ciB0aGFuIHRoZSBBZGphY2VuY3lMaXN0KS4gVGhpbmsgb2YgdGhlIFVwc2lsb24KKy8vICAgYXMg
ImFzc2lnbmluZyIgdG8gdGhlICJ2YXJpYWJsZSIgYXNzb2NpYXRlZCB3aXRoIHRoZSBQaGksIGFu
ZCB0aGF0CisvLyAgIHRoaXMgaXMgdGhlIG9uZSBwbGFjZSBpbiBTU0EgZm9ybSB3aGVyZSB5b3Ug
Y2FuIGhhdmUgbXVsdGlwbGUKKy8vICAgYXNzaWdubWVudHMuCisvLworLy8gICBUaGlzIGltcGxp
ZXMgc29tZSBvdGhlciBsb29zZW5pbmdzIG9mIFNTQS4gRm9yIGV4YW1wbGUsIGFuIFVwc2lsb24K
Ky8vICAgbWF5IHByZWNlZGUgYSBQaGkgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2s7IHRoaXMgbWF5
IGFyaXNlIGFmdGVyIENGRworLy8gICBzaW1wbGlmaWNhdGlvbi4gQWx0aG91Z2ggaXQncyBwcm9m
aXRhYmxlIGZvciBDRkcgc2ltcGxpZmljYXRpb24gKG9yCisvLyAgIHNvbWUgb3RoZXIgcGhhc2Up
IHRvIHJlbW92ZSB0aGVzZSwgaXQncyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBBcworLy8gICB3
ZWxsLCB0aGlzIGZvcm0gYWxsb3dzIHRoZSBVcHNpbG9uIHRvIGJlIGluIGFueSBibG9jayB0aGF0
IGRvbWluYXRlcworLy8gICB0aGUgcHJlZGVjZXNzb3IgYmxvY2sgb2YgdGhlIFBoaSwgd2hpY2gg
YWxsb3dzIGZvciBibG9jayBzcGxpdHRpbmcgdG8KKy8vICAgaWdub3JlIHRoZSBwb3NzaWJpbGl0
eSBvZiBpbnRyb2R1Y2luZyBhbiBleHRyYSBlZGdlIGJldHdlZW4gdGhlIFBoaQorLy8gICBhbmQg
dGhlIHByZWRlY2Vzc29yICh0aG91Z2ggbm9ybWFsIFNTQSB3b3VsZCBhbGxvdyB0aGlzLCBhbHNv
LCB3aXRoCisvLyAgIHRoZSBjYXZlYXQgdGhhdCB0aGUgUGhpIHByZWRlY2Vzc29yIGJsb2NrIGxp
c3RzIHdvdWxkIGhhdmUgdG8gYmUKKy8vICAgdXBkYXRlZCkuCisvLworLy8gICBUaGUgZWFzaWVz
dCB3YXkgdG8gY29udmVydCBmcm9tIHRoaXMgU1NBIGZvcm0gaW50byBhIGRpZmZlcmVudCBTU0EK
Ky8vICAgZm9ybSBpcyB0byByZWRvIFNTQSBjb252ZXJzaW9uIGZvciBQaGkgZnVuY3Rpb25zLiBU
aGF0IGlzLCB0cmVhdCBlYWNoCisvLyAgIFBoaSBpbiBvdXIgSVIgYXMgYSBub24tU1NBIHZhcmlh
YmxlIGluIHRoZSBmb3JlaWduIElSIChzbywgYXMgYW4KKy8vICAgYWxsb2NhIGluIExMVk0gSVIs
IGZvciBleGFtcGxlKTsgdGhlIFVwc2lsb25zIHRoYXQgcmVmZXIgdG8gdGhlIFBoaQorLy8gICBi
ZWNvbWUgc3RvcmVzIGFuZCB0aGUgUGhpcyB0aGVtc2VsdmVzIGJlY29tZSBsb2Fkcy4KKy8vCisv
LyAgIEZ1biBmYWN0OiBVcHNpbG9uIGlzIHNvIG5hbWVkIGJlY2F1c2UgaXQgY29tZXMgYmVmb3Jl
IFBoaSBpbiB0aGUKKy8vICAgYWxwaGFiZXQuIEl0IGNhbiBiZSB3cml0dGVuIGFzICJZIi4KKwor
Ym9vbCBwZXJmb3JtU1NBQ29udmVyc2lvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1NTQUNv
bnZlcnNpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMzE4LDYgKzMxOCwyNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjaGVja0FuZFNldCht
X2ZsYWdzLCBtX2ZsYWdzIHwgbmV3RmxhZ3MpOwogICAgIH0KICAgICAKKyAgICBGbHVzaEZvcm1h
dCBmbHVzaEZvcm1hdCgpCisgICAgeworICAgICAgICBpZiAoIXNob3VsZFVuYm94SWZQb3NzaWJs
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRKU1ZhbHVlOworICAgICAgICAKKyAgICAg
ICAgaWYgKHNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNo
ZWREb3VibGU7CisgICAgICAgIAorICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0g
YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkSW50MzI7CisgICAgICAg
IAorICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAg
ICByZXR1cm4gRmx1c2hlZENlbGw7CisgICAgICAgIAorICAgICAgICBpZiAoaXNCb29sZWFuU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gRmx1c2hlZEJvb2xlYW47
CisgICAgICAgIAorICAgICAgICByZXR1cm4gRmx1c2hlZEpTVmFsdWU7CisgICAgfQorICAgIAog
cHJpdmF0ZToKICAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5j
ZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKICAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUg
b3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lv
biAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAgaW5saW5lIGJvb2wgY2FuQ29tcGls
ZShOb2RlKiBub2RlKQogICAgIGNhc2UgSnVtcDoKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAg
ICBjYXNlIEZvcndhcmRGb3JjZU9TUkV4aXQ6CisgICAgY2FzZSBQaGk6CisgICAgY2FzZSBVcHNp
bG9uOgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
R2V0QXJyYXlMZW5ndGg6CkBAIC0xNzQsNiArMTc2LDggQEAgaW5saW5lIGJvb2wgY2FuQ29tcGls
ZShOb2RlKiBub2RlKQogCiBib29sIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogeworICAgIFJF
TEVBU0VfQVNTRVJUKGdyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgIAogICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAg
ICAgaWYgKCFibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTAg
KzYxLDYgQEAgcHVibGljOgogICAgICAgICAsIG1fZnRsU3RhdGUoc3RhdGUpCiAgICAgICAgICwg
bV9oZWFwcyhzdGF0ZS5jb250ZXh0KQogICAgICAgICAsIG1fb3V0KHN0YXRlLmNvbnRleHQpCi0g
ICAgICAgICwgbV9sb2NhbHNCb29sZWFuKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2so
MCktPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAgLCBtX2xvY2FsczMyKE9wZXJhbmRzTGlrZSwg
c3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAgLCBtX2xvY2Fs
czY0KE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkK
LSAgICAgICAgLCBtX2xvY2Fsc0RvdWJsZShPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2Nr
KDApLT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAgICwgbV92YWx1ZVNvdXJjZXMoT3BlcmFuZHNM
aWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1f
bGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAgICAg
LCBtX2V4aXRUaHVua0dlbmVyYXRvcihzdGF0ZSkKQEAgLTg1LDEyICs4MSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgCiAgICAgICAgIG1fcHJvbG9ndWUgPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3Rh
dGUuY29udGV4dCwgbV9mdGxTdGF0ZS5mdW5jdGlvbik7CiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KG1fcHJvbG9ndWUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gbV9sb2NhbHNCb29s
ZWFuLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAgICAgIG1fbG9jYWxzQm9vbGVhbltpbmRl
eF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmJvb2xlYW4pOwotICAgICAg
ICAgICAgbV9sb2NhbHMzMltpbmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1f
b3V0LmludDMyKTsKLSAgICAgICAgICAgIG1fbG9jYWxzNjRbaW5kZXhdID0gYnVpbGRBbGxvY2Eo
bV9vdXQubV9idWlsZGVyLCBtX291dC5pbnQ2NCk7Ci0gICAgICAgICAgICBtX2xvY2Fsc0RvdWJs
ZVtpbmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmRvdWJsZVR5cGUp
OwotICAgICAgICB9CisgICAgICAgIGNyZWF0ZVBoaVZhcmlhYmxlcygpOwogICAgICAgICAKICAg
ICAgICAgbV9pbml0aWFsaXphdGlvbiA9IGFwcGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5jb250
ZXh0LCBtX2Z0bFN0YXRlLmZ1bmN0aW9uKTsKICAgICAgICAgbV9hcmd1bWVudENoZWNrcyA9IGFw
cGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5jb250ZXh0LCBtX2Z0bFN0YXRlLmZ1bmN0aW9uKTsK
QEAgLTEwNCwxOSArOTUsMTggQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFtX2hpZ2hCbG9j
aykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fYmxvY2tzLmFkZCht
X2hpZ2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9jayAiLCAqbV9oaWdoQmxvY2sp
KSk7Ci0gICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygpOwotICAgICAgICAKICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obV9hcmd1bWVudENoZWNrcywgbG93QmxvY2sobV9ncmFwaC5i
bG9jaygwKSkpOwogCi0gICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKTsKKyAgICAg
ICAgY2hlY2tBcmd1bWVudHMoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1bXAobG93Qmxv
Y2sobV9ncmFwaC5ibG9jaygwKSkpOwogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9j
a0luZGV4KQotICAgICAgICAgICAgY29tcGlsZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBW
ZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7CisgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tz
SW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKQorICAgICAgICAgICAgY29tcGlsZUJsb2Nr
KGRlcHRoRmlyc3RbaV0pOwogICAgICAgICAKICAgICAgICAgLy8gQW5kIG5vdyBjb21wbGV0ZSB0
aGUgaW5pdGlhbGl6YXRpb24gYmxvY2suCiAgICAgICAgIGxpbmtPU1JFeGl0c0FuZENvbXBsZXRl
SW5pdGlhbGl6YXRpb25CbG9ja3MoKTsKQEAgLTEyOSw0MSArMTE5LDQwIEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICAKLSAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbE9wUm9vdHMoKQorICAgIHZv
aWQgY3JlYXRlUGhpVmFyaWFibGVzKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gbV9oaWdoQmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7Ci0gICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9oaWdoQmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSAhPSBGbHVzaCkKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYWRk
Rmx1c2hlZExvY2FsT3Aobm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
bG9zZU92ZXJGbHVzaGVkTG9jYWxPcHMoKQotICAgIHsKLSAgICAgICAgd2hpbGUgKCFtX2ZsdXNo
ZWRMb2NhbE9wV29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0Lmxhc3QoKTsKLSAgICAgICAgICAgIG1fZmx1c2hlZExv
Y2FsT3BXb3JrbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFT
U0VSVChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZEZsdXNo
ZWRMb2NhbEVkZ2UpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9j
ay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0g
UGhpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBMVHlw
ZSB0eXBlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1
bHRNYXNrKSB7CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0TnVtYmVyOgorICAgICAg
ICAgICAgICAgICAgICB0eXBlID0gbV9vdXQuZG91YmxlVHlwZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50MzI6CisgICAgICAg
ICAgICAgICAgICAgIHR5cGUgPSBtX291dC5pbnQzMjsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKKyAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9IG1fb3V0LmJvb2xlYW47CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEpTOgorICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gbV9vdXQuaW50NjQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBtX3BoaXMuYWRkKG5vZGUsIGJ1aWxkQWxsb2NhKG1fb3V0Lm1f
YnVpbGRlciwgdHlwZSkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsT3AoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlm
IChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgbV9mbHVzaGVkTG9jYWxPcHMuYWRkKG5vZGUpOwotICAgICAgICBtX2ZsdXNoZWRM
b2NhbE9wV29ya2xpc3QuYXBwZW5kKG5vZGUpOwotICAgIH0KLSAgICB2b2lkIGFkZEZsdXNoZWRM
b2NhbEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIGFkZEZsdXNoZWRMb2Nh
bE9wKGVkZ2Uubm9kZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCB0cmFuc2ZlckFuZENoZWNr
QXJndW1lbnRzKCkKKyAgICB2b2lkIGNoZWNrQXJndW1lbnRzKCkKICAgICB7CiAgICAgICAgIC8v
IFdoaWxlIGNoZWNraW5nIGFyZ3VtZW50cywgZXZlcnl0aGluZyBpcyBpbiB0aGUgc3RhY2suCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNpemUoKTsgaS0tOykKQEAg
LTE3Miw1NiArMTYxLDQ5IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY29kZU9yaWdpbiA9IENvZGVP
cmlnaW4oMCk7CiAgICAgICAgIG1fbm9kZSA9IDA7CiAgICAgICAgIAotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKytpKSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c1tpXTsKLSAgICAg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPmZsdXNoRm9y
bWF0QXRIZWFkLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0
ID0gbV9ncmFwaC5ibG9jaygwKS0+Zmx1c2hGb3JtYXRBdEhlYWRbaV07CisgICAgICAgICAgICBp
bnQgb3BlcmFuZCA9IG1fZ3JhcGguYmxvY2soMCktPmZsdXNoRm9ybWF0QXRIZWFkLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgLy8g
SWYgaXQncyBjYXB0dXJlZCB0aGVuIHdlJ2xsIGJlIGFjY2Vzc2luZyBpdCB0aHJvdWdoIGxvYWRz
IGFuZCBzdG9yZXMKLSAgICAgICAgICAgIC8vIGFueXdheSAtIHRoZXJlJ3Mgbm8gcG9pbnQgaW4g
dHJhbnNmZXJpbmcgaXQgb3V0LgotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgICAgICBpZiAoZm9ybWF0ID09IERlYWRGbHVzaCB8fCBmb3JtYXQgPT0gRmx1
c2hlZEpTVmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3IodmFyaWFi
bGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZvcm1hdCAhPSBGbHVz
aGVkRG91YmxlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91
bGRVbmJveElmUG9zc2libGUoKSkgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2
YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpOworICAgICAgICAgICAgTFZhbHVlIGpz
VmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAg
ICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMy
OiB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZh
bHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVk
aWN0aW9uKCk7CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOiB7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2Rl
LCBpc05vdENlbGwoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dh
cmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEludDMyKGpzVmFs
dWUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHVuYm94SW50MzIoanNWYWx1ZSks
IG1fbG9jYWxzMzIub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEZsdXNo
ZWRCb29sZWFuOiB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNW
YWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
b3V0LnNldChqc1ZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNW
YWx1ZSksIG5vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG1fb3V0LnNldCh1bmJveEJvb2xlYW4oanNWYWx1ZSksIG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1f
bG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIHZvaWQgY29tcGlsZUJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2
b2lkIGNvbXBpbGVCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIG1faGln
aEJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgbV9oaWdoQmxvY2sg
PSBibG9jazsKICAgICAgICAgaWYgKCFtX2hpZ2hCbG9jaykKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrID0gbV9ibG9ja3MuZ2V0KG1f
aGlnaEJsb2NrKTsKICAgICAgICAgCiAgICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9IDA7Ci0gICAg
ICAgIGZvciAoQmxvY2tJbmRleCBuZXh0QmxvY2tJbmRleCA9IGJsb2NrSW5kZXggKyAxOyBuZXh0
QmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKKyAg
ICAgICAgZm9yIChCbG9ja0luZGV4IG5leHRCbG9ja0luZGV4ID0gbV9oaWdoQmxvY2stPmluZGV4
ICsgMTsgbmV4dEJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK25leHRCbG9ja0lu
ZGV4KSB7CiAgICAgICAgICAgICBtX25leHRIaWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKG5leHRC
bG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmIChtX25leHRIaWdoQmxvY2spCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0yNDEsMTEgKzIyMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICBpbml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2soKTsKICAgICAgICAgCi0gICAgICAg
IG1faW50MzJWYWx1ZXMuY2xlYXIoKTsKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmNsZWFyKCk7
Ci0gICAgICAgIG1fYm9vbGVhblZhbHVlcy5jbGVhcigpOwotICAgICAgICBtX3N0b3JhZ2VWYWx1
ZXMuY2xlYXIoKTsKLSAgICAgICAgbV90aW1lVG9MaXZlLmNsZWFyKCk7CisgICAgICAgIG1fbGl2
ZSA9IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQ7CiAgICAgICAgIAogICAgICAgICBtX3N0YXRlLnJl
c2V0KCk7CiAgICAgICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1faGlnaEJsb2NrKTsKQEAg
LTI3NCw2ICsyNTIsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgbV9kaXJlY3Rpb24gPSAobV9ub2Rl
LT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkgPyBGb3J3YXJkU3BlY3VsYXRpb24gOiBCYWNr
d2FyZFNwZWN1bGF0aW9uOwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkp
IHsKKyAgICAgICAgY2FzZSBVcHNpbG9uOgorICAgICAgICAgICAgY29tcGlsZVVwc2lsb24oKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgIGNvbXBp
bGVQaGkoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAg
ICAgICAgICAgICBjb21waWxlSlNDb25zdGFudCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00
NDUsOCArNDI5LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9k
ZSwgdXNlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmhhc1Jlc3VsdCgpKQotICAg
ICAgICAgICAgbV90aW1lVG9MaXZlLmFkZChtX25vZGUsIG1fbm9kZS0+YWRqdXN0ZWRSZWZDb3Vu
dCgpKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKQorICAgICAgICAg
ICAgbV9saXZlLmFkZChtX25vZGUpOwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEV4ZWN1
dGVFZmZlY3RzKQogICAgICAgICAgICAgbV9zdGF0ZS5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgp
OwpAQCAtNDU0LDczICs0MzgsODAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgY29tcGlsZVVwc2lsb24oKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIGRlc3RpbmF0aW9uID0gbV9waGlzLmdldChtX25vZGUtPnBoaSgpKTsKKyAgICAgICAgCisg
ICAgICAgIHN3aXRjaCAobV9ub2RlLT5waGkoKS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNrKSB7
CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdE51bWJlcjoKKyAgICAgICAgICAgIG1fb3V0LnNldChs
b3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQzMjoKKyAgICAgICAgICAgIG1fb3V0LnNl
dChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAgICBtX291
dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEpTOgorICAgICAgICAgICAgbV9v
dXQuc2V0KGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHZvaWQgY29tcGlsZVBoaSgpCisgICAgeworICAgICAgICBMVmFsdWUgc291cmNl
ID0gbV9waGlzLmdldChtX25vZGUpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX25vZGUt
PmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgeworICAgICAgICBjYXNlIE5vZGVSZXN1bHROdW1i
ZXI6CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZ2V0KHNvdXJjZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgc2V0
SW50MzIobV9vdXQuZ2V0KHNvdXJjZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmdldChz
b3VyY2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoK
KyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuZ2V0KHNvdXJjZSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAg
ICAgdm9pZCBjb21waWxlSlNDb25zdGFudCgpCiAgICAgewogICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX25vZGUpOwogICAgICAgICBpZiAodmFsdWUu
aXNEb3VibGUoKSkKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0
LmNvbnN0RG91YmxlKHZhbHVlLmFzRG91YmxlKCkpKTsKKyAgICAgICAgICAgIHNldERvdWJsZSht
X291dC5jb25zdERvdWJsZSh2YWx1ZS5hc0RvdWJsZSgpKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5jb25zdEludDY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSkpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuY29uc3RJ
bnQ2NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29t
cGlsZVdlYWtKU0NvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQo
bV9ub2RlLCB3ZWFrUG9pbnRlcihtX25vZGUtPndlYWtDb25zdGFudCgpKSk7CisgICAgICAgIHNl
dEpTVmFsdWUod2Vha1BvaW50ZXIobV9ub2RlLT53ZWFrQ29uc3RhbnQoKSkpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBpbGVHZXRMb2NhbCgpCiAgICAgewotICAgICAgICAvLyBHZXRMb2Nh
bCBpcyBvbmUgb2YgdGhlIGZldyBub2RlcyB0aGF0IG1heSBiZSBsZWZ0IGJlaGluZCwgd2l0aCAh
c2hvdWxkR2VuZXJhdGUoKS4KLSAgICAgICAgaWYgKCFtX25vZGUtPnNob3VsZEdlbmVyYXRlKCkp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIEdldExvY2FscyBhcmlzZSBvbmx5IGlu
IHR3byBjYXNlczogY2FwdHVyZWQgdmFyaWFibGVzIGFuZCBhcmd1bWVudHMuCiAgICAgICAgIAog
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxl
LT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1
ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAg
ICAgIAotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBTcGVjTm9uZSkgewotICAgICAgICAgICAg
dGVybWluYXRlKEluYWRlcXVhdGVDb3ZlcmFnZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHJhcCBpbnN0ZWFkLgotICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDM4MwotICAgICAgICAgICAg
dGVybWluYXRlKEluYWRlcXVhdGVDb3ZlcmFnZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVG
b3JtYXQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkg
ewotICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5tX3ZhbHVlKSkKLSAg
ICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmxvYWQzMihwYXls
b2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5sb2FkNjQoYWRkcmVzc0Zv
cih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkg
ewotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewot
ICAgICAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmdldChtX2xv
Y2Fsc0RvdWJsZS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTG9j
YWxzIHRoYXQgYXJlIG1hcmtlZCBzaG91bGRVbmJveElmUG9zc2libGUoKSB0aGF0IGFyZW4ndCBh
bHNvIGZvcmNlZCB0bwotICAgICAgICAgICAgLy8gdXNlIGRvdWJsZSBmb3JtYXQsIGFuZCB0aGF0
IGhhdmUgdGhlIHJpZ2h0IHByZWRpY3Rpb24sIHdpbGwgYWx3YXlzIGJlCi0gICAgICAgICAgICAv
LyBzcGVjdWxhdGVkIG9uIFNldExvY2FsIGFuZCB3aWxsIGFsd2F5cyBiZSBzdG9yZWQgaW50byBh
biBhcHByb3ByaWF0ZWx5Ci0gICAgICAgICAgICAvLyB0eXBlZCByZWZlcmVuY2UgTFZhbHVlLgot
ICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAg
ICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZ2V0KG1fbG9jYWxzMzIu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpIHsKLSAgICAgICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKG1fbm9kZSwgbV9v
dXQuZ2V0KG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFdlIHNr
aXAgdGhlIENlbGwgY2FzZSBoZXJlIGJlY2F1c2UgdGhhdCBnZXRzIHRyZWF0ZWQgaWRlbnRpY2Fs
bHkgdG8KLSAgICAgICAgICAgIC8vIEpTVmFsdWVzLCBzaW5jZSBjZWxscyBhcmUgc3RvcmVkIHVu
dGFnZ2VkLgotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRk
KG1fbm9kZSwgbV9vdXQuZ2V0KG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkp
KTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5tX3ZhbHVlKSkKKyAgICAg
ICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgp
KSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChh
ZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVTZXRMb2NhbCgpCkBAIC01MzQsNTkgKzUyNSwzNiBAQCBwcml2YXRlOgogICAgICAgICBp
ZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAo
dmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CiAgICAgICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAg
IG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHNEb3VibGUub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkxvY2Fscyk7CisgICAgICAg
ICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxv
Y2FsKCkpKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjayk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
aXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgTFZhbHVl
IHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgbV9v
dXQuc2V0KHZhbHVlLCBtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewotICAgICAgICAgICAgICAgICAgICBt
X291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9IFZhbHVlU291cmNlKEludDMySW5Mb2NhbHMpOworICAgICAgICAgICAgICAgIG1fb3V0
LnN0b3JlMzIodmFsdWUsIHBheWxvYWRGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVl
U291cmNlKEludDMySW5KU1N0YWNrKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsK
ICAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJp
YWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsK
KyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxl
LT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0Jv
b2xlYW4obV9ub2RlLT5jaGlsZDEoKSksIG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkp
LCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFs
dWVJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNl
KFZhbHVlSW5Mb2NhbHMpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4obV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAg
ICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pLAorICAgICAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgp
KSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBMVmFsdWUg
dmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBpZiAodmFyaWFi
bGUtPmlzQ2FwdHVyZWQoKSkgewotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRk
cmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0
LnNldCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAg
ICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVl
LCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291
cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0
YWNrKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOworICAgICAg
ICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Cisg
ICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVT
b3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVNb3ZI
aW50KCkKQEAgLTYyMCwxOSArNTg4LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUg
cmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygp
KSkgewotICAgICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuYWRk
KGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuYWRkKGxlZnQs
IHJpZ2h0KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5hZGRXaXRoT3ZlcmZsb3cz
MihsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUo
KSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOwotICAgICAgICAgICAgbV9pbnQz
MlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CisgICAg
ICAgICAgICBzZXRJbnQzMihtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVy
VXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAg
bV9ub2RlLAorICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAgICAgIG1fb3V0LmRv
dWJsZUFkZChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTY1MSwxOSArNjE4
LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgICAg
IG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSk7CisgICAg
ICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExW
YWx1ZSByZXN1bHQgPSBtX291dC5zdWJXaXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7CiAgICAg
ICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZh
bHVlKHJlc3VsdCwgMSkpOwotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBt
X291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291
dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBt
X2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAg
c2V0RG91YmxlKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZVN1Yihsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTcwMywxMyArNjY5LDEyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1f
bm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNl
OiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9u
b2RlLAorICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJs
ZU11bChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTgwMCwxMyArNzY1LDEy
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRv
bmUsIGxhc3ROZXh0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5h
ZGQobV9ub2RlLCBtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsKKyAgICAgICAgICAg
IHNldEludDMyKG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cykpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTog
ewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9k
ZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVE
aXYobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIo
KSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04OTEsMTMgKzg1NSwxMiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhkb25l
LCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRk
KG1fbm9kZSwgbV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7CisgICAgICAgICAgICBz
ZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsK
LSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUs
CisgICAgICAgICAgICBzZXREb3VibGUoCiAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlUmVt
KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtOTE1LDggKzg3OCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAg
ICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEludDMyKAogICAgICAgICAgICAgICAg
IG1fb3V0LnNlbGVjdCgKICAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5vcCgpID09IEFyaXRo
TWluCiAgICAgICAgICAgICAgICAgICAgICAgICA/IG1fb3V0Lmxlc3NUaGFuKGxlZnQsIHJpZ2h0
KQpAQCAtOTUwLDcgKzkxMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1f
bm9kZSwgbV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIHJlc3VsdHMpKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgcmVzdWx0cykpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtOTcxLDEyICs5MzMsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93
LCBub1ZhbHVlKCksIDAsIG1fb3V0LmVxdWFsKHJlc3VsdCwgbV9vdXQuY29uc3RJbnQzMigxIDw8
IDMxKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25v
ZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTog
ewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZG91YmxlQWJz
KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgc2V0RG91YmxlKG1f
b3V0LmRvdWJsZUFicyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEwMDMsMTIgKzk2NSwxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVy
Zmxvd1Jlc3VsdCwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldEludDMy
KHJlc3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQo
bV9ub2RlLCBtX291dC5kb3VibGVOZWcobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlTmVnKGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApA
QCAtMTAyMCw0NyArOTgyLDM4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0
QW5kKCkKICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9u
b2RlLCBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmJpdEFuZChsb3dJbnQz
MihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0T3IoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZh
bHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsIG1fb3V0LmJpdE9yKGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBzZXRJ
bnQzMihtX291dC5iaXRPcihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9u
b2RlLT5jaGlsZDIoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0WG9yKCkK
ICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLCBt
X291dC5iaXRYb3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmJpdFhvcihsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlQml0UlNoaWZ0KCkKICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1
ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLAotICAgICAgICAgICAgbV9vdXQuYVNocigKLSAg
ICAgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgICAg
ICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50
MzIoMzEpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5hU2hyKAorICAgICAgICAgICAgbG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50
MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBpbGVCaXRMU2hpZnQoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZh
bHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsCi0gICAgICAgICAgICBtX291dC5zaGwoCi0g
ICAgICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAg
ICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdElu
dDMyKDMxKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQuc2hsKAorICAgICAgICAgICAgbG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50
MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBpbGVCaXRVUlNoaWZ0KCkKICAgICB7Ci0gICAgICAgIG1faW50MzJW
YWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLAotICAgICAgICAgICAgbV9vdXQubFNocigK
LSAgICAgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAg
ICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0
SW50MzIoMzEpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5sU2hyKAorICAgICAgICAgICAg
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBtX291dC5iaXRBbmQobG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJlcigpCkBAIC0xMDY4LDE0ICsxMDIx
LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpOwogCiAgICAgICAgIGlmICghbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobV9ub2Rl
LT5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1f
bm9kZSwgbV9vdXQudW5zaWduZWRUb0RvdWJsZSh2YWx1ZSkpOworICAgICAgICAgICAgc2V0RG91
YmxlKG1fb3V0LnVuc2lnbmVkVG9Eb3VibGUodmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRlRm9yd2FyZCgKICAgICAgICAg
ICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFuKHZhbHVlLCBtX291dC5p
bnQzMlplcm8pLAogICAgICAgICAgICAgRm9ybWF0dGVkVmFsdWUoVmFsdWVGb3JtYXRVSW50MzIs
IHZhbHVlKSk7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgdmFsdWUpOworICAg
ICAgICBzZXRJbnQzMih2YWx1ZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUludDMy
VG9Eb3VibGUoKQpAQCAtMTA4Nyw3ICsxMDQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gY29u
dGVtcG9yYW5lb3VzIGxvdy1sZXZlbCByZXByZXNlbnRhdGlvbnMuIFNvLCB0aGlzIGdpdmVzIGNo
aWxkMSBhIGRvdWJsZQogICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBhbmQgdGhlbiBmb3J3YXJk
cyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIG1fbm9kZS4KICAgICAgICAgCi0gICAgICAgIG1fZG91
YmxlVmFsdWVzLmFkZChtX25vZGUsIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSk7CisgICAg
ICAgIHNldERvdWJsZShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpCkBAIC0xMjE1LDggKzExNjgsNyBAQCBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEJ1dHRlcmZseSgpCiAgICAgewotICAg
ICAgICBtX3N0b3JhZ2VWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLCBtX291dC5sb2Fk
UHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5
KSk7CisgICAgICAgIHNldFN0b3JhZ2UobV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOwogICAgIH0KICAgICAKICAgICB2
b2lkIGNvbXBpbGVHZXRBcnJheUxlbmd0aCgpCkBAIC0xMjI1LDggKzExNzcsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91Ymxl
OgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBtX2ludDMy
VmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsIG1fb3V0LmxvYWQzMihsb3dTdG9y
YWdlKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpKTsK
KyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihsb3dTdG9yYWdlKG1fbm9kZS0+Y2hp
bGQyKCkpLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEyNTYsNyArMTIwNyw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIG1f
b3V0LmludFB0ciksCiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZm9yTm9kZShtX25vZGUt
PmNoaWxkMigpKS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKExvYWRGcm9t
SG9sZSwgbm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm82NChyZXN1bHQpKTsKLSAgICAgICAgICAg
ICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC0xMjg4LDcgKzEyMzksNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHJlc3VsdCwgcmVz
dWx0KSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fZG91YmxlVmFsdWVz
LmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAg
LTEzODgsOCArMTMzOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBk
YXRhID0KICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVttX25vZGUtPnN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAgIAotICAgICAgICBtX2pzVmFsdWVWYWx1
ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICBzZXRKU1ZhbHVlKAogICAgICAg
ICAgICAgbV9vdXQubG9hZDY0KAogICAgICAgICAgICAgICAgIG1fb3V0LmFkZHJlc3MoCiAgICAg
ICAgICAgICAgICAgICAgIG1faGVhcHMucHJvcGVydGllc1tkYXRhLmlkZW50aWZpZXJOdW1iZXJd
LApAQCAtMTQxMiw3ICsxMzYyLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVH
ZXRHbG9iYWxWYXIoKQogICAgIHsKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUs
IG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShtX25vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSkp
OworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShtX25vZGUt
PnJlZ2lzdGVyUG9pbnRlcigpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVQdXRH
bG9iYWxWYXIoKQpAQCAtMTQzNywzMCArMTM4NywyNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9ub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpLmlzTnVsbCgpKTsKICAgICAgICAgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJ
ZklzU3RpbGxWYWxpZCgpOwotICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAg
ICAgbV9ub2RlLCBlcXVhbE51bGxPclVuZGVmaW5lZCgKKyAgICAgICAgc2V0Qm9vbGVhbigKKyAg
ICAgICAgICAgIGVxdWFsTnVsbE9yVW5kZWZpbmVkKAogICAgICAgICAgICAgICAgIG1fbm9kZS0+
Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsTnVsbE9yVW5kZWZpbmVkKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVTdHJpY3RFcSgpCiAgICAgewogICAgICAg
ICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBt
X2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAg
IHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwobG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5
VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAot
ICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAg
ICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBs
b3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpIHsKICAgICAgICAgICAg
IG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SWZJc1N0aWxsVmFsaWQoKTsKLSAgICAg
ICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAg
ICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5lcXVhbCgKICAgICAg
ICAgICAgICAgICAgICAgbG93Tm9uTnVsbE9iamVjdChtX25vZGUtPmNoaWxkMSgpKSwKICAgICAg
ICAgICAgICAgICAgICAgbG93Tm9uTnVsbE9iamVjdChtX25vZGUtPmNoaWxkMigpKSkpOwpAQCAt
MTQ3NywxOSArMTQyNCwxNiBAQCBwcml2YXRlOgogICAgICAgICBpZiAoY29uc3RhbnQuaXNVbmRl
ZmluZWRPck51bGwoKQogICAgICAgICAgICAgJiYgIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50SWZJc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAgaWYgKGNvbnN0YW50LmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAg
ICAgICAgICAgbV9ub2RlLCBlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBB
bGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGwpKTsKKyAgICAgICAgICAgICAgICBzZXRCb29sZWFu
KGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2Us
IEVxdWFsTnVsbCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNVbmRlZmluZWQoKSk7Ci0gICAg
ICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwgZXF1
YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1
YWxVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oZXF1YWxOdWxsT3JVbmRlZmlu
ZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxVbmRlZmluZWQpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9ib29s
ZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgc2V0Qm9vbGVhbigK
ICAgICAgICAgICAgIG1fb3V0LmVxdWFsKAogICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSksCiAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVl
OjplbmNvZGUoY29uc3RhbnQpKSkpOwpAQCAtMTQ5OCwxNSArMTQ0MiwxMyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY29tcGlsZUNvbXBhcmVMZXNzKCkKICAgICB7CiAgICAgICAgIGlmIChtX25vZGUt
PmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVl
cy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigK
ICAgICAgICAgICAgICAgICBtX291dC5sZXNzVGhhbihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgp
KSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51
bWJlclVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAg
ICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBt
X291dC5kb3VibGVMZXNzVGhhbihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJs
ZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBA
IC0xNTE3LDE1ICsxNDU5LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlQ29tcGFyZUxl
c3NFcSgpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJV
c2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAg
IG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQu
bGVzc1RoYW5PckVxdWFsKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewotICAg
ICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisg
ICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUxlc3NU
aGFuT3JFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQx
KCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTE1MzcsMTUgKzE0NzcsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVDb21wYXJl
R3JlYXRlcigpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50
MzJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAg
ICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9v
dXQuZ3JlYXRlclRoYW4obG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAg
ICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAg
ICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlR3JlYXRl
clRoYW4oCiAgICAgICAgICAgICAgICAgICAgIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwg
bG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0x
NTU3LDE2ICsxNDk1LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlQ29tcGFyZUdyZWF0
ZXJFcSgpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJV
c2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAg
IG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQu
Z3JlYXRlclRoYW5PckVxdWFsKAogICAgICAgICAgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKE51bWJlclVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0g
ICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAg
ICAgICAgICBtX291dC5kb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwoCiAgICAgICAgICAgICAgICAg
ICAgIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQy
KCkpKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTc3LDcgKzE1MTMsNyBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoKQogICAgIHsKLSAgICAgICAgbV9i
b29sZWFuVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmJpdE5vdChib29saWZ5KG1fbm9kZS0+Y2hp
bGQxKCkpKSk7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQuYml0Tm90KGJvb2xpZnkobV9ub2Rl
LT5jaGlsZDEoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlSnVtcCgpCkBAIC0x
OTk5LDE0ICsxOTM1LDE3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VE
KG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQo
KSA9PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKSk7CiAgICAg
ICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoTFZhbHVlIGJveGVkUmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkp
IHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVk
Z2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZh
bHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIExWYWx1ZSBib3hlZFJlc3VsdCA9IHZhbHVlLnZhbHVlKCk7CiAgICAgICAgICAg
ICBGVExfVFlQRV9DSEVDSygKICAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUoYm94ZWRSZXN1
bHQpLCBlZGdlLCBTcGVjSW50MzIsIGlzTm90SW50MzIoYm94ZWRSZXN1bHQpKTsKICAgICAgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEludDMyKGJveGVkUmVzdWx0KTsKLSAgICAgICAgICAg
IG1faW50MzJWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAgICAgICAgc2V0
SW50MzIoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9CiAKQEAgLTIwMTksMTAgKzE5NTgsMTEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24g
fHwgaXNDZWxsKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVl
IHVuY2hlY2tlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Cisg
ICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CiAgICAgICAgICAgICBGVExf
VFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodW5jaGVja2VkUmVzdWx0
KSwgZWRnZSwgU3BlY0NlbGwsIGlzTm90Q2VsbCh1bmNoZWNrZWRSZXN1bHQpKTsKLSAgICAgICAg
ICAgIHJldHVybiB1bmNoZWNrZWRSZXN1bHQ7CisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVl
KHVuY2hlY2tlZFJlc3VsdCksIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwodmFsdWUudmFsdWUo
KSkpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlw
ZSAmIFNwZWNDZWxsKSk7CkBAIC0yMDYxLDE0ICsyMDAxLDE3IEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEJvb2xlYW5Vc2UpOwogICAgICAgICAKLSAgICAgICAg
aWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHVu
Ym94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAg
ICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUo
KSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQudmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdl
dChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAg
ICAgTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSB2YWx1ZS52YWx1ZSgpOwogICAgICAgICAgICAgRlRM
X1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHVuYm94ZWRSZXN1bHQp
LCBlZGdlLCBTcGVjQm9vbGVhbiwgaXNOb3RCb29sZWFuKHVuYm94ZWRSZXN1bHQpKTsKICAgICAg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEJvb2xlYW4odW5ib3hlZFJlc3VsdCk7Ci0gICAg
ICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAg
ICAgICAgc2V0Qm9vbGVhbihlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMDgxLDE2ICsyMDI0LDIxIEBAIHBy
aXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzRG91YmxlKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgICAg
IAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fZG91YmxlVmFsdWVzLmdldChlZGdlLm5v
ZGUoKSkpCisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2RvdWJsZVZhbHVlcy5n
ZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCiAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSBpbnRSZXN1bHQg
PSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5pbnRUb0RvdWJsZShpbnRSZXN1bHQpOwotICAgICAgICAgICAgbV9kb3Vi
bGVWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1faW50
MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7
CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuaW50VG9Eb3VibGUodmFsdWUudmFs
dWUoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAo
TFZhbHVlIGJveGVkUmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsK
KyAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAg
ICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgYm94ZWRSZXN1bHQg
PSB2YWx1ZS52YWx1ZSgpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBp
bnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGUgdW5ib3hpbmcgaW50IGNhc2Ui
KSk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJEb3VibGUgdW5ib3hpbmcgZG91YmxlIGNhc2UiKSk7CiAgICAgICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJsZSB1bmJv
eGluZyBjb250aW51YXRpb24iKSk7CkBAIC0yMTE1LDcgKzIwNjMsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0LmRv
dWJsZVR5cGUsIGludFRvRG91YmxlLCB1bmJveGVkRG91YmxlKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAg
ICAgICAgc2V0RG91YmxlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIxMjgsMjQgKzIwNzYsMjggQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CiAgICAg
ICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRn
ZS5ub2RlKCkpKQorICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9qc1ZhbHVlVmFs
dWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHVuYm94
ZWRSZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAg
IExWYWx1ZSByZXN1bHQgPSBib3hJbnQzMih1bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1f
anNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0g
bV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1
ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hJbnQzMih2YWx1ZS52YWx1ZSgp
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoTFZh
bHVlIHVuYm94ZWRSZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewot
ICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEJvb2xlYW4odW5ib3hlZFJlc3VsdCk7Ci0g
ICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAg
ICAgICB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBp
ZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hCb29s
ZWFuKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShlZGdlLm5vZGUoKSwg
cmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fZG91YmxlVmFsdWVzLmdldChl
ZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hEb3VibGUodW5i
b3hlZFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgp
LCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1fZG91YmxlVmFsdWVzLmdldChlZGdlLm5vZGUo
KSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJl
c3VsdCA9IGJveERvdWJsZSh2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
ZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtMjE1NSwxMSArMjEwNywxMiBAQCBwcml2YXRlOgogICAgIAogICAg
IExWYWx1ZSBsb3dTdG9yYWdlKEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUg
cmVzdWx0ID0gbV9zdG9yYWdlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9zdG9yYWdl
VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOwogICAgICAgICAKICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGxvd0NlbGwoZWRnZSk7Ci0gICAgICAgIG1fc3RvcmFnZVZhbHVlcy5hZGQoZWRn
ZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2RlKCksIHJlc3Vs
dCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMjI0Miw2ICsyMTk1
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6CiAgICAgICAgICAgICBzcGVj
dWxhdGVOdW1iZXIoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCb29s
ZWFuVXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihlZGdlKTsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgfQpAQCAtMjM0Miw2ICsyMjk4LDExIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNSZWFsTnVtYmVyLAogICAg
ICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgdmFsdWUpKTsK
ICAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRnZSkKKyAgICB7
CisgICAgICAgIGxvd0Jvb2xlYW4oZWRnZSk7CisgICAgfQogCiAgICAgYm9vbCBtYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpCiAgICAgewpAQCAtMjQzMCwyMiAr
MjM5MSwxNSBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgaXNMaXZlKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X3RpbWVUb0xpdmUuZmluZChub2RlKTsKLSAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV90aW1lVG9M
aXZlLmVuZCgpKTsKLSAgICAgICAgcmV0dXJuICEhaXRlci0+dmFsdWU7CisgICAgICAgIHJldHVy
biBtX2xpdmUuY29udGFpbnMobm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNlKEVkZ2Ug
ZWRnZSkKICAgICB7Ci0gICAgICAgIGlmICghZWRnZS0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChlZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgIEFTU0VS
VChlZGdlLT5oYXNSZXN1bHQoKSk7CisgICAgICAgIGlmICghZWRnZS5kb2VzS2lsbCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBIYXNoTWFwPE5v
ZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuZmluZChlZGdlLm5v
ZGUoKSk7Ci0gICAgICAgIEFTU0VSVChpdGVyICE9IG1fdGltZVRvTGl2ZS5lbmQoKSk7Ci0gICAg
ICAgIEFTU0VSVChpdGVyLT52YWx1ZSk7Ci0gICAgICAgIGl0ZXItPnZhbHVlLS07CisgICAgICAg
IG1fbGl2ZS5yZW1vdmUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKICAgICAvLyBXcmFwcGVy
IHVzZWQgb25seSBmb3IgREZHX05PREVfRE9fVE9fQ0hJTERSRU4KQEAgLTI0NjIsNjMgKzI0MTYs
MzQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JCbG9jaygp
CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhbHVlU291cmNlcy5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9jay0+dmFyaWFibGVz
QXRIZWFkW2ldOwotICAgICAgICAgICAgaWYgKCFub2RlKSB7Ci0gICAgICAgICAgICAgICAgbV92
YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3Vt
ZW50QXdhcmVQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+aXNBcmd1bWVudHNBbGlhcygpKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbaV0gPSBWYWx1ZVNvdXJjZShBcmd1bWVudHNTb3VyY2UpOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tp
XSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX2ZsdXNoZWRM
b2NhbE9wcy5jb250YWlucyhub2RlKSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgdmFsdWUg
d2lsbCBoYXZlIGJlZW4gZmx1c2hlZCB0byB0aGUgSlNTdGFjayBpbiBzb21lIGZvcm0gb3IKLSAg
ICAgICAgICAgICAgICAvLyBhbm90aGVyLgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJ
bkpTU3RhY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlm
IChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IG1faGlnaEJsb2NrLT5mbHVzaEZvcm1hdEF0
SGVhZFtpXTsKKyAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICBjYXNl
IERlYWRGbHVzaDogeworICAgICAgICAgICAgICAgIC8vIE11c3QgY29uc2lkZXIgYXZhaWxhYmxl
IG5vZGVzIGluc3RlYWQuCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2Nr
LT5hdmFpbGFiaWxpdHlBdEhlYWRbaV07CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNl
SXNEZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFs
dWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2Uobm9kZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoRG91YmxlSW5Mb2NhbHMp
OwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVk
aWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVl
U291cmNlKEludDMySW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShCb29sZWFuSW5Mb2NhbHMpOwot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNb
aV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAg
ICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1Zh
bHVlOgorICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFs
dWVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZh
bHVlSW5Mb2NhbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMjYwMiwyNyArMjUyNyw2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIERvdWJsZUluSlNTdGFjazoKICAgICAgICAg
ICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZSgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWYWx1ZUluTG9jYWxz
OgotICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKLSAgICAgICAgICAgICAgICAgICAg
ZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEpTVmFsdWUsIG1fb3V0LmdldChtX2xvY2Fs
czY0W2ldKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEludDMy
SW5Mb2NhbHM6Ci0gICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAotICAgICAgICAgICAg
ICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SW50MzIsIG1fb3V0LmdldCht
X2xvY2FsczMyW2ldKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IEJvb2xlYW5JbkxvY2FsczoKLSAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCi0gICAg
ICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRCb29sZWFuLCBt
X291dC5nZXQobV9sb2NhbHNCb29sZWFuW2ldKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIERvdWJsZUluTG9jYWxzOgotICAgICAgICAgICAgICAgIGFkZEV4aXRB
cmd1bWVudCgKLSAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZv
cm1hdERvdWJsZSwgbV9vdXQuZ2V0KG1fbG9jYWxzRG91YmxlW2ldKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFyZ3VtZW50c1NvdXJjZToKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogaW1wbGVtZW50IFBoYW50b21Bcmd1bWVudHMuCi0gICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzk4NgotICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNvdXJjZUlzRGVhZDoKICAgICAgICAgICAgICAg
ICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0yNjgyLDEyICsyNTg2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Tm9kZSogdWludDMyVG9OdW1iZXIgPSAwOwogICAgICAgICAgICAgICAgIE5vZGUqIGRvdWJsZUFz
SW50MzIgPSAwOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9k
ZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fdGltZVRvTGl2ZS5iZWdpbigpOwotICAg
ICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgZW5kID0gbV90
aW1lVG9MaXZlLmVuZCgpOworICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSo+OjppdGVyYXRv
ciBpdGVyID0gbV9saXZlLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKj46
Oml0ZXJhdG9yIGVuZCA9IG1fbGl2ZS5lbmQoKTsKICAgICAgICAgICAgICAgICBmb3IgKDsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVl
KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IE5vZGUqIGNhbmRpZGF0ZSA9IGl0ZXItPmtleTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
Y2FuZGlkYXRlID0gKml0ZXI7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlLT5j
aGlsZDEoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoY2FuZGlkYXRlLT5jaGlsZDEoKSAhPSBub2RlKQpAQCAtMjczMiwyNCArMjYz
NCwyOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoaXNM
aXZlKG5vZGUpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9pbnQz
MlZhbHVlcy5nZXQobm9kZSkpIHsKLSAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBh
cmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEludDMyLCByZXN1bHQpOworCisgICAgICAgIExv
d2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAg
aWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwg
YXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRJbnQzMiwgdmFsdWUudmFsdWUoKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUg
cmVzdWx0ID0gbV9ib29sZWFuVmFsdWVzLmdldChub2RlKSkgewotICAgICAgICAgICAgYWRkRXhp
dEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0Qm9vbGVhbiwgcmVz
dWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KG5vZGUpOworICAgICAg
ICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0
LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEJvb2xlYW4sIHZhbHVlLnZhbHVlKCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoTFZh
bHVlIHJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobm9kZSkpIHsKLSAgICAgICAgICAgIGFk
ZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEpTVmFsdWUs
IHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChub2RlKTsKKyAg
ICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQo
ZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRKU1ZhbHVlLCB2YWx1ZS52YWx1ZSgp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KExWYWx1ZSByZXN1bHQgPSBtX2RvdWJsZVZhbHVlcy5nZXQobm9kZSkpIHsKLSAgICAgICAgICAg
IGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdERvdWJs
ZSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2RvdWJsZVZhbHVlcy5nZXQobm9kZSk7Cisg
ICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50
KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0RG91YmxlLCB2YWx1ZS52YWx1ZSgp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yODM0LDYgKzI3NDAsNTcg
QEAgcHJpdmF0ZToKICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChvcGVyYW5kKSA9IFZh
bHVlU291cmNlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQg
c2V0SW50MzIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9pbnQz
MlZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsK
KyAgICB9CisgICAgdm9pZCBzZXRKU1ZhbHVlKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2
YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9pZCBzZXRCb29sZWFuKE5vZGUqIG5v
ZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fYm9vbGVhblZhbHVlcy5zZXQobm9k
ZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9p
ZCBzZXRTdG9yYWdlKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1f
c3RvcmFnZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxv
Y2spKTsKKyAgICB9CisgICAgdm9pZCBzZXREb3VibGUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgbV9kb3VibGVWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFs
dWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRJbnQzMihMVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbnQzMihtX25vZGUsIHZhbHVlKTsKKyAgICB9
CisgICAgdm9pZCBzZXRKU1ZhbHVlKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEpT
VmFsdWUobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0Qm9vbGVhbihMVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBzZXRCb29sZWFuKG1fbm9kZSwgdmFsdWUpOworICAgIH0K
KyAgICB2b2lkIHNldFN0b3JhZ2UoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0U3Rv
cmFnZShtX25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXREb3VibGUoTFZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgc2V0RG91YmxlKG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzVmFsaWQoY29uc3QgTG93ZXJlZE5vZGVWYWx1ZSYgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoIW1fZ3JhcGguZG9taW5hdG9ycy5kb21pbmF0ZXMobV9oaWdoQmxvY2ssIHZhbHVlLmJs
b2NrKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlKEpTQ2VsbCogdGFyZ2V0KQog
ICAgIHsKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24ud2Vha1JlZmVyZW5jZXMu
YXBwZW5kKApAQCAtMjg4OCwyMCArMjg0NSwxNCBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBtX3Rh
Z1R5cGVOdW1iZXI7CiAgICAgTFZhbHVlIG1fdGFnTWFzazsKICAgICAKLSAgICBIYXNoU2V0PE5v
ZGUqPiBtX2ZsdXNoZWRMb2NhbE9wczsKLSAgICBWZWN0b3I8Tm9kZSo+IG1fZmx1c2hlZExvY2Fs
T3BXb3JrbGlzdDsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2ludDMy
VmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fanNWYWx1ZVZh
bHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2Jvb2xlYW5WYWx1
ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9zdG9yYWdlVmFsdWVz
OworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fZG91YmxlVmFsdWVzOwor
ICAgIEhhc2hTZXQ8Tm9kZSo+IG1fbGl2ZTsKICAgICAKLSAgICBIYXNoTWFwPE5vZGUqLCBMVmFs
dWU+IG1faW50MzJWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2pzVmFsdWVW
YWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2Jvb2xlYW5WYWx1ZXM7Ci0gICAg
SGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2Rl
KiwgTFZhbHVlPiBtX2RvdWJsZVZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4g
bV90aW1lVG9MaXZlOwotICAgIAotICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHNCb29sZWFu
OwotICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHMzMjsKLSAgICBPcGVyYW5kczxMVmFsdWU+
IG1fbG9jYWxzNjQ7Ci0gICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2Fsc0RvdWJsZTsKKyAgICBI
YXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fcGhpczsKICAgICAKICAgICBPcGVyYW5kczxWYWx1ZVNv
dXJjZT4gbV92YWx1ZVNvdXJjZXM7CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyZWROb2RlVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyZWROb2RlVmFsdWUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJlZE5vZGVWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExMb3dlcmVkTm9kZVZhbHVlX2gK
KyNkZWZpbmUgRlRMTG93ZXJlZE5vZGVWYWx1ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgor
I2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgeworCisvLyBSZXByZXNlbnRzIHRoZSBhY3Qgb2YgaGF2aW5nIGxvd2VyZWQgYSBE
Rkc6Ok5vZGUgdG8gYW4gTFZhbHVlLCBhbmQgcmVjb3JkcyB0aGUKKy8vIERGRzo6QmFzaWNCbG9j
ayB0aGF0IGRpZCB0aGUgbG93ZXJpbmcuIFRoZSBMVmFsdWUgaXMgd2hhdCB3ZSB1c2UgbW9zdCBv
ZnRlbiwgYnV0CisvLyB3ZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIGluIGEgYmxvY2sgdGhh
dCBpcyBkb21pbmF0ZWQgYnkgdGhlIG9uZSB0aGF0IGRpZAorLy8gdGhlIGxvd2VyaW5nLiBXZSdy
ZSBndWFyYW50ZWVkIHRoYXQgZm9yIGVhY2ggREZHOjpOb2RlLCB0aGVyZSB3aWxsIGJlIG9uZQor
Ly8gTG93ZXJlZE5vZGVWYWx1ZSB0aGF0IGFsd2F5cyBkb21pbmF0ZXMgYWxsIHVzZXMgb2YgdGhl
IERGRzo6Tm9kZTsgYnV0IHRoZXJlIG1heQorLy8gYmUgb3RoZXJzIHRoYXQgZG9uJ3QgZG9taW5h
dGUgYW5kIHdlJ3JlIGVmZmVjdGl2ZWx5IGRvaW5nIG9wcG9ydHVuaXN0aWMgR1ZOIG9uCisvLyB0
aGUgbG93ZXJpbmcgY29kZS4KKworY2xhc3MgTG93ZXJlZE5vZGVWYWx1ZSB7CitwdWJsaWM6Cisg
ICAgTG93ZXJlZE5vZGVWYWx1ZSgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgICAgICAsIG1f
YmxvY2soMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIExvd2VyZWROb2RlVmFsdWUoTFZhbHVl
IHZhbHVlLCBERkc6OkJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUp
CisgICAgICAgICwgbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZhbHVl
KTsKKyAgICAgICAgQVNTRVJUKG1fYmxvY2spOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0
KCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIExWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KKyAgICBERkc6OkJhc2ljQmxvY2sqIGJsb2NrKCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9jazsgfQorICAgIAorcHJpdmF0ZToKKyAgICBMVmFsdWUgbV92YWx1ZTsKKyAg
ICBERkc6OkJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTExvd2VyZWRO
b2RlVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRnJv
bUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1
ZUZyb21CbG9jay5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDEyIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgVmFsdWVGcm9tQmxvY2sg
ewogcHVibGljOgorICAgIFZhbHVlRnJvbUJsb2NrKCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisg
ICAgICAgICwgbV9ibG9jaygwKQorICAgIHsKKyAgICB9CisgICAgCiAgICAgVmFsdWVGcm9tQmxv
Y2soTFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9jayBibG9jaykKICAgICAgICAgOiBtX3ZhbHVlKHZh
bHVlKQogICAgICAgICAsIG1fYmxvY2soYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDIxICs0NSw2IEBAIHZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkK
ICAgICBjYXNlIERvdWJsZUluSlNTdGFjazoKICAgICAgICAgb3V0LnByaW50KCJEb3VibGVJbkpT
U3RhY2siKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVmFsdWVJbkxvY2FsczoKLSAgICAg
ICAgb3V0LnByaW50KCJWYWx1ZUluTG9jYWxzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IEludDMySW5Mb2NhbHM6Ci0gICAgICAgIG91dC5wcmludCgiSW50MzJJbkxvY2FscyIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBCb29sZWFuSW5Mb2NhbHM6Ci0gICAgICAgIG91dC5wcmlu
dCgiQm9vbGVhbkluTG9jYWxzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIERvdWJsZUlu
TG9jYWxzOgotICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUluTG9jYWxzIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEFyZ3VtZW50c1NvdXJjZToKLSAgICAgICAgb3V0LnByaW50KCJBcmd1
bWVudHNTb3VyY2UiKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU291cmNlSXNEZWFkOgog
ICAgICAgICBvdXQucHJpbnQoIlNvdXJjZUlzRGVhZCIpOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAx
NTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDExICs0MSw2IEBAIGVudW0gVmFsdWVTb3VyY2VLaW5kIHsKICAg
ICBWYWx1ZUluSlNTdGFjaywKICAgICBJbnQzMkluSlNTdGFjaywKICAgICBEb3VibGVJbkpTU3Rh
Y2ssCi0gICAgVmFsdWVJbkxvY2FscywKLSAgICBJbnQzMkluTG9jYWxzLAotICAgIEJvb2xlYW5J
bkxvY2FscywKLSAgICBEb3VibGVJbkxvY2FscywKLSAgICBBcmd1bWVudHNTb3VyY2UsCiAgICAg
U291cmNlSXNEZWFkLAogICAgIEhhdmVOb2RlCiB9OwpJbmRleDogU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3
IEBACiAJCTBGRDgxQUM1MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDNDE1NEZCMjJF
MDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KCk7IH07IH07CiAJCTBGRERCRkE3MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVh
bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRE
QkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkw
RkREQkZBODE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE2MTY2NkRGQTMwMEM1
NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovOyB9OworCQkwRkU1MDU1NzE3ODdBODA2MDBC
MzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkU1MDU1NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi87IH07
CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0
QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsKIAkJMTQzRjYxMjAxNTY1RjBGOTAwREI1MTRBIC8qIFJB
TVNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoKTsgfTsgfTsKIAkJMTQ2OTQxOTIxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BU
aW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2
OTQxOTAxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTIsNiArMzUzLDcgQEAKIAkJMEZE
ODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmFzdEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nUHJpbnRTdHJlYW0u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZBNjE2NjZERkEzMDBDNTVG
RUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RyaW5nUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
NTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNl
cnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzNFRTQxNzFCODM0NzAw
RkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlU3BpbkxvY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8q
IFJBTVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUkFNU2l6
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNp
emUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4NSw2ICs3ODcsNyBAQAogCQkJ
CUE4QTQ3MkJBMTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoVHJhaXRzLmggKi8sCiAJCQkJQThBNDcy
QkIxNTFBODI1QTAwNDEyM0ZGIC8qIEhleE51bWJlci5oICovLAogCQkJCUE4QTQ3MkJDMTUxQTgy
NUEwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCAqLywKKwkJCQkwRkU1MDU1NjE3ODdBODAyMDBCMzVG
OEMgLyogSW5zZXJ0aW9uLmggKi8sCiAJCQkJQThBNDcyQkUxNTFBODI1QTAwNDEyM0ZGIC8qIElu
dDE2QXJyYXkuaCAqLywKIAkJCQlBOEE0NzJCRjE1MUE4MjVBMDA0MTIzRkYgLyogSW50MzJBcnJh
eS5oICovLAogCQkJCUE4QTQ3MkJEMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQ4QXJyYXkuaCAqLywK
QEAgLTExODEsNiArMTE4NCw3IEBACiAJCQkJQThBNDczRTgxNTFBODI1QjAwNDEyM0ZGIC8qIE1h
dGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VBMTUxQTgyNUIwMDQxMjNGRiAv
KiBNRDUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNENTQ5N0FEMTU4NTdEMDMwMEI1QkMzMCAvKiBN
ZWRpYVRpbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTU3MTc4N0E4MDYwMEIzNUY4QyAv
KiBJbnNlcnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRGMUQxMTU0MTVGRjExQkUwMDI2RTkw
OCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRGRDg1NTQ3
MTYxMzNFMEUwMEM1QjcwNCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25BcnJheUJ1ZmZlclZpZXcu
aCBpbiBIZWFkZXJzICovLAogCQkJCUYzRkJDNzFFMTYxQUY3QkYwMEJCNEJENCAvKiBNZW1vcnlJ
bnN0cnVtZW50YXRpb25IYXNoQ291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFNl
dC5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTg2LDEyICs4NiwxOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgdGVtcGxhdGUgYXJndW1l
bnRzIHNvIHRoYXQgY2FsbGVycwogICAgICAgICAvLyBjYW4ganVzdCBwYXNzIHRoZSB0cmFuc2xh
dG9yIGFuZCBsZXQgdGhlIGNvbXBpbGVyIGRlZHVjZSBULgogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4gQWRkUmVzdWx0IGFkZChjb25zdCBUJik7
CisgICAgICAgIAorICAgICAgICAvLyBBdHRlbXB0cyB0byBhZGQgYSBsaXN0IG9mIHRoaW5ncyB0
byB0aGUgc2V0LiBSZXR1cm5zIHRydWUgaWYgYW55IG9mCisgICAgICAgIC8vIHRoZW0gYXJlIG5l
dyB0byB0aGUgc2V0LiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBzZXQgaXMgdW5jaGFuZ2VkLgorICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+CisgICAgICAgIGJvb2wgYWRkKEl0
ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCk7CiAKICAgICAgICAgdm9pZCByZW1v
dmUoY29uc3QgVmFsdWVUeXBlJik7CiAgICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKICAg
ICAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzVmFsaWRWYWx1ZShj
b25zdCBWYWx1ZVR5cGUmKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBIYXNoU2V0JikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgdm9pZCBk
ZWxldGVBbGxWYWx1ZXM8Pihjb25zdCBIYXNoU2V0Jik7CkBAIC0xOTEsNiArMTk4LDE2IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgorICAg
IGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0
ZXJhdG9yVHlwZSBlbmQpCisgICAgeworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgZm9yIChJdGVyYXRvclR5cGUgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVy
KQorICAgICAgICAgICAgY2hhbmdlZCB8PSBhZGQoKml0ZXIpLmlzTmV3RW50cnk7CisgICAgICAg
IHJldHVybiBjaGFuZ2VkOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFY+CiAgICAgaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6cmVt
b3ZlKGl0ZXJhdG9yIGl0KQogICAgIHsKICAgICAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2ltcGwu
ZW5kKCkpCkBAIC0yNTYsNiArMjczLDE4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAg
dmVjdG9yW2ldID0gKml0OwogICAgIH0gIAogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+Ojpv
cGVyYXRvcj09KGNvbnN0IEhhc2hTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHNpemUo
KSAhPSBvdGhlci5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZv
ciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikg
eworICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlucygqaXRlcikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6SGFzaFNldDsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hU
YWJsZS5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE3MCw2ICsxMTcwLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ewogICAgICAgICAvLyBDb3B5IHRoZSBoYXNoIHRhYmxlIHRoZSBkdW1iIHdheSwgYnkgYWRkaW5n
IGVhY2ggZWxlbWVudCB0byB0aGUgbmV3IHRhYmxlLgogICAgICAgICAvLyBJdCBtaWdodCBiZSBt
b3JlIGVmZmljaWVudCB0byBjb3B5IHRoZSB0YWJsZSBzbG90cywgYnV0IGl0J3Mgbm90IGNsZWFy
IHRoYXQgZWZmaWNpZW5jeSBpcyBuZWVkZWQuCisgICAgICAgIC8vIEZJWE1FOiBJdCdzIGxpa2Vs
eSB0aGF0IHRoaXMgY2FuIGJlIGltcHJvdmVkLCBmb3Igc3RhdGljIGFuYWx5c2VzIHRoYXQgdXNl
CisgICAgICAgIC8vIEhhc2hTZXRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE4NDU1CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IG90aGVyLmVuZCgpOwog
ICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0gb3RoZXIuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQogICAgICAgICAgICAgYWRkKCppdCk7CkBAIC0xMjA5LDYgKzEyMTEsOCBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0
cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiYgSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpvcGVyYXRv
cj0oY29uc3QgSGFzaFRhYmxlJiBvdGhlcikKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJdCdz
IGxpa2VseSB0aGF0IHRoaXMgY2FuIGJlIGltcHJvdmVkLCBmb3Igc3RhdGljIGFuYWx5c2VzIHRo
YXQgdXNlCisgICAgICAgIC8vIEhhc2hTZXRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE4NDU1CiAgICAgICAgIEhhc2hUYWJsZSB0bXAob3RoZXIpOwogICAgICAg
ICBzd2FwKHRtcCk7CiAgICAgICAgIHJldHVybiAqdGhpczsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0luc2VydGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEluc2VydGlvbl9oCisjZGVmaW5lIEluc2VydGlvbl9oCisKK25hbWVz
cGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5zZXJ0aW9uIHsKK3B1
YmxpYzoKKyAgICBJbnNlcnRpb24oKSB7IH0KKyAgICAKKyAgICBJbnNlcnRpb24oc2l6ZV90IGlu
ZGV4LCBUIGVsZW1lbnQpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2Vs
ZW1lbnQoZWxlbWVudCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICBUIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2VsZW1lbnQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBJbnNlcnRpb24mIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXggPCBvdGhlci5tX2luZGV4
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1faW5kZXg7CisgICAgVCBtX2Vs
ZW1lbnQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXRWZWN0b3JUeXBlLCB0eXBlbmFt
ZSBJbnNlcnRpb25WZWN0b3JUeXBlPgordm9pZCBleGVjdXRlSW5zZXJ0aW9ucyhUYXJnZXRWZWN0
b3JUeXBlJiB0YXJnZXQsIEluc2VydGlvblZlY3RvclR5cGUmIGluc2VydGlvbnMpCit7CisgICAg
aWYgKCFpbnNlcnRpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHRhcmdldC5ncm93
KHRhcmdldC5zaXplKCkgKyBpbnNlcnRpb25zLnNpemUoKSk7CisgICAgc2l6ZV90IGxhc3RJbmRl
eCA9IHRhcmdldC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaW5kZXhJbkluc2VydGlvbnMgPSBp
bnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsKKyAgICAgICAgc2l6ZV90
IGZpcnN0SW5kZXggPSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5pbmRleCgpICsgaW5k
ZXhJbkluc2VydGlvbnM7CisgICAgICAgIHNpemVfdCBpbmRleE9mZnNldCA9IGluZGV4SW5JbnNl
cnRpb25zICsgMTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxhc3RJbmRleDsgLS1pID4gZmly
c3RJbmRleDspCisgICAgICAgICAgICB0YXJnZXRbaV0gPSB0YXJnZXRbaSAtIGluZGV4T2Zmc2V0
XTsKKyAgICAgICAgdGFyZ2V0W2ZpcnN0SW5kZXhdID0gaW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0
aW9uc10uZWxlbWVudCgpOworICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4OworICAgIH0K
KyAgICBpbnNlcnRpb25zLnJlc2l6ZSgwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3Vz
aW5nIFdURjo6SW5zZXJ0aW9uOwordXNpbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9uczsKKworI2Vu
ZGlmIC8vIEluc2VydGlvbl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206489</attachid>
            <date>2013-07-11 14:33:40 -0700</date>
            <delta_ts>2013-07-11 20:03:27 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>204111</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI0MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZG
ODlEQjAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0
Y2hDYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0NkU2QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1Zh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEY0NkU2RUYxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUg
LyogREZHQW5hbHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERG
R05hdHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAq
LzsgfTsKLQkJMEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdD
RjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBM
TFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1
IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2Vt
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDZFNkU1MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAw
RTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEw
MEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmgg
Ki87IH07CisJCTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjEx
NzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0
MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBE
RkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgx
NkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUx
NzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VF
MkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYgKzM1MywyMyBAQAogCQkwRkREQkZCNjE2NjZFRURB
MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4
RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0
aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi87IH07CisJCTBGRTUwNTU5
MTc4N0FBODkwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhD
IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1NUMxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRn
ZUJyZWFraW5nUGhhc2UuY3BwICovOyB9OworCQkwRkU1MDU1RDE3ODdCMENGMDBCMzVGOEMgLyog
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NUIxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkU1MDU2MzE3OEY1QjA1MDBCMzVGOEMgLyogREZHQmFzaWNCbG9j
ay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1
MDU2MjE3OEY1QjA1MDBCMzVGOEMgLyogREZHQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRTUw
NTcxMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2NDE3OEY1QjUzMDBC
MzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRkU1MDU3MjE3OEY1
QjUzMDBCMzVGOEMgLyogREZHQ29udHJhZGljdGlvblBydW5pbmdQaGFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2NTE3OEY1QjUzMDBC
MzVGOEMgLyogREZHQ29udHJhZGljdGlvblBydW5pbmdQaGFzZS5jcHAgKi87IH07CisJCTBGRTUw
NTczMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2NjE3OEY1
QjUzMDBCMzVGOEMgLyogREZHQ29udHJhZGljdGlvblBydW5pbmdQaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTc0MTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2NzE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hG
b3JtYXQuY3BwICovOyB9OworCQkwRkU1MDU3NTE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hG
b3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTUwNTY4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTc2MTc4RjVCNTMwMEIz
NUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2OTE3OEY1QjUzMDBCMzVGOEMg
LyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwICovOyB9OworCQkwRkU1MDU3NzE3
OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZBMTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTc4MTc4RjVCNTMwMEIz
NUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NkIxNzhGNUI1MzAwQjM1RjhDIC8qIERG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTc5MTc4RjVCNTMwMEIz
NUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZDMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkU1MDU3QTE3OEY1QjUzMDBCMzVGOEMgLyogREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU2RDE3OEY1QjUzMDBCMzVGOEMgLyogREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTdCMTc4RjVCNTMwMEIzNUY4QyAv
KiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2RTE3OEY1QjUzMDBCMzVGOEMgLyogREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTdDMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNTA1NkYxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAgKi87IH07CisJCTBGRTUwNTdEMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252
ZXJzaW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTUwNTcwMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU4NTM0
QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUwMEI2
MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0QzE3MjND
REE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyog
REZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZFQTBBMDgxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlh
dGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExODYsMTMgKzEyMDMsMTMg
QEAKIAkJMEY0NkU2QjcxNzZGODlEOTAwRTFGNzU1IC8qIEZUTFN3aXRjaENhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU3dpdGNoQ2FzZS5oOyBwYXRoID0gZnRsL0ZU
TFN3aXRjaENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NkU2QzIxNzZG
OEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdMYXp5SlNW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDZFNkMzMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdMYXp5SlNWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDZFNkVFMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdB
bmFseXNpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBbmFseXNpcy5o
OyBwYXRoID0gZGZnL0RGR0FuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGNDZFNkYxMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmNwcDsgcGF0aCA9
IGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjQ2RTZGMjE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5oOyBwYXRoID0gZGZnL0RGR05h
dHVyYWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZENzE3N0NC
OEZDMDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBMTFZNRGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxl
ci9MTFZNRGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
NkU2RTAxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gTExWTURpc2Fzc2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1i
bGVyL0xMVk1EaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBVRGlzODZEaXNhc3NlbWJsZXIuaDsgcGF0aCA9IGRpc2Fz
c2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0NkU2RTIxNzdDQzM2NjAwRTFGNzU1IC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBYODZEaXNhc3NlbWJsZXIuY3BwOyBwYXRo
ID0gZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNDZFNkVFMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdBbmFseXNpcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBbmFseXNpcy5oOyBwYXRoID0gZGZnL0RG
R0FuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDZFNkYxMTc3Q0Yw
RDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmNwcDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFs
TG9vcHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ2RTZGMjE3N0NGMEQy
MDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR05hdHVyYWxMb29wcy5oOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIgLyog
U291cmNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U291cmNlUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRFMUEw
QzE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTM4NCw2ICsxNDAxLDIzIEBACiAJCTBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTIyOEVBMTQzNkFC
MjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTU4
MTc4N0FBODgwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdCbG9ja0luc2VydGlvblNldC5oOyBwYXRoID0gZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4
QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU1QjE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2MjE3OEY1QjA1
MDBCMzVGOEMgLyogREZHQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NjQxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGRmZy9ERkdCbG9ja0lu
c2VydGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTY1MTc4
RjVCNTMwMEIzNUY4QyAvKiBERkdDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2NjE3OEY1QjUzMDBCMzVGOEMgLyogREZH
Q29udHJhZGljdGlvblBydW5pbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29udHJh
ZGljdGlvblBydW5pbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1
MDU2NzE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmx1c2hGb3JtYXQuY3BwOyBwYXRoID0gZGZnL0RG
R0ZsdXNoRm9ybWF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1Njgx
NzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0ZsdXNoRm9ybWF0Lmg7IHBhdGggPSBkZmcvREZHRmx1c2hGb3JtYXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NjkxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRTUwNTZBMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdG
bHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ZsdXNoTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTZCMTc4
RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDsg
cGF0aCA9IGRmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkU1MDU2QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2RDE3OEY1QjUzMDBCMzVGOEMgLyog
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oOyBwYXRoID0gZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
NTA1NkYxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
OyBwYXRoID0gZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTUwNTcwMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU1NBQ29udmVyc2lv
blBoYXNlLmg7IHBhdGggPSBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVk
V2F0Y2hwb2ludHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0QTE3MjNDREE1MDBCNjE4
RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRj
aHBvaW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMDlGRDE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGVExBYmJyZXZpYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMQWJicmV2aWF0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk2MiwxMCArMjk5NiwxMyBAQAogCQkJ
CTBGQzA5NzZDMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLywKIAkJ
CQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAgKi8sCiAJCQkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1By
b3BhZ2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkU1MDU2MjE3OEY1QjA1MDBCMzVGOEMgLyogREZH
QmFzaWNCbG9jay5jcHAgKi8sCiAJCQkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jh
c2ljQmxvY2suaCAqLywKIAkJCQkwRkQ1NjUyMjE2QUI3ODBBMDAxOTc2NTMgLyogREZHQmFzaWNC
bG9ja0lubGluZXMuaCAqLywKIAkJCQkwRkQyODEyNTE3NzkzQkUzMDBCQkIwRjMgLyogREZHQmlu
YXJ5U3dpdGNoLmNwcCAqLywKIAkJCQkwRkQyODEyNjE3NzkzQkUzMDBCQkIwRjMgLyogREZHQmlu
YXJ5U3dpdGNoLmggKi8sCisJCQkJMEZFNTA1NjQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0Jsb2Nr
SW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZH
QmxvY2tJbnNlcnRpb25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyog
REZHQnJhbmNoRGlyZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR0J5dGVDb2RlUGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcg
LyogREZHQnl0ZUNvZGVQYXJzZXIuaCAqLywKQEAgLTI5ODMsOCArMzAyMCwxMiBAQAogCQkJCTBG
RUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8sCiAJCQkJMEYzQjNB
MTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCAqLywKIAkJ
CQkwRjNCM0ExODE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCAq
LywKKwkJCQkwRkU1MDU2NTE3OEY1QjUzMDBCMzVGOEMgLyogREZHQ29udHJhZGljdGlvblBydW5p
bmdQaGFzZS5jcHAgKi8sCisJCQkJMEZFNTA1NjYxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0NvbnRy
YWRpY3Rpb25QcnVuaW5nUGhhc2UuaCAqLywKIAkJCQkwRkJFMEY2QjE2QzFEQjAxMDA4MkM1RTgg
LyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNkMxNkMxREIwMTAw
ODJDNUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCAqLywKKwkJCQkwRkU1MDU1QTE3ODdC
MENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgKi8sCisJCQkJ
MEZFNTA1NUIxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2Uu
aCAqLywKIAkJCQkwRkZGQzk0RDE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwICov
LAogCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5oICovLAogCQkJ
CTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgKi8sCkBAIC0zMDEx
LDYgKzMwNTIsMTAgQEAKIAkJCQkwRkRCMkNENDE3NDJEODA0MDA3QjNDMUIgLyogREZHRmluYWxp
emVyLmggKi8sCiAJCQkJMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2Uu
Y3BwICovLAogCQkJCTBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmgg
Ki8sCisJCQkJMEZFNTA1NjcxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCAq
LywKKwkJCQkwRkU1MDU2ODE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuaCAqLywK
KwkJCQkwRkU1MDU2OTE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTZBMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oICovLAogCQkJCTg2QUU2QzRCMTM2QTExRTQwMDk2MzAxMiAv
KiBERkdGUFJJbmZvLmggKi8sCiAJCQkJODZFQzlEQjYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dl
bmVyYXRpb25JbmZvLmggKi8sCiAJCQkJODZBRTZDNEMxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQ
UkluZm8uaCAqLywKQEAgLTMwMjUsNiArMzA3MCw4IEBACiAJCQkJMEZEQjJDRDYxNzQyRDgwNDAw
N0IzQzFCIC8qIERGR0pJVEZpbmFsaXplci5oICovLAogCQkJCTBGNDZFNkMyMTc2RjhBNUIwMEUx
Rjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi8sCiAJCQkJMEY0NkU2QzMxNzZGOEE1QjAwRTFG
NzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8sCisJCQkJMEZFNTA1NkIxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8sCisJCQkJMEZFNTA1NkMxNzhGNUI1
MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oICovLAogCQkJCTBGQjRCNTFD
MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdMb25nTGl2ZWRTdGF0ZS5jcHAgKi8sCiAJCQkJMEZCNEI1
MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggKi8sCiAJCQkJMEYyQkRD
M0QxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCAqLywKQEAgLTMwNDEsNiAr
MzA4OCw4IEBACiAJCQkJMEZBNTgxQjkxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmgg
Ki8sCiAJCQkJODZFQzlEQkYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwICov
LAogCQkJCTg2RUM5REMwMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggKi8sCisJ
CQkJMEZFNTA1NkQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTZFMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi8sCiAJCQkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0
IC8qIERGR09TUkVudHJ5LmNwcCAqLywKIAkJCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyog
REZHT1NSRW50cnkuaCAqLywKIAkJCQkwRkMwOTc4RTE0NkE2RjYzMDBDRjI0NDIgLyogREZHT1NS
RXhpdC5jcHAgKi8sCkBAIC0zMDc4LDYgKzMxMjcsOCBAQAogCQkJCTg2RUM5REMzMTMyOERGODIw
MDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oICovLAogCQkJCTg2ODgwRjFCMTQzMjhCQjkw
MEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCAqLywKIAkJCQk4Njg4MEY0QzE0
MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgKi8sCisJCQkJMEZFNTA1
NkYxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgKi8sCisJCQkJ
MEZFNTA1NzAxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oICovLAog
CQkJCTBGNjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
LmggKi8sCiAJCQkJMEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi8s
CiAJCQkJMEZDMDk3QTAxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oICovLApAQCAtMzI5
OCw2ICszMzQ5LDcgQEAKIAkJCQk4NjAxNjFFMzBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NUYwRjUxNEQxMDYzQzAwQUM3
NjQ5IC8qIEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U1MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBBUElDYXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3OTE3OEY1QjUz
MDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjVGNDA4ODEwRTdENTYzMDA5NDczNjEgLyogQVBJU2hpbXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRjYwNTE0MEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzI1N0RFODBFMUY1MUM1MDAxNkI2QzkgLyogQXJndW1lbnRzLmggaW4gSGVhZGVycyAq
LywKQEAgLTM0MDcsNiArMzQ1OSw3IEBACiAJCQkJMEZFQTBBMUQxNzA4QjAwNzAwQkI3MjJDIC8q
IEZUTEFic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRGQjRGMDAw
OTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ3MTUz
NENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFNTA1N0QxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0
UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDI4LDYgKzM0ODEsNyBAQAogCQkJCTBGQzA5
NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFj
ZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NzcxNzhGNUI1MzAwQjM1RjhDIC8q
IERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjRF
MUExMjE3M0FGMDdCMDA3RUUyRDMgLyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ0NCw2ICszNDk4LDcgQEAK
IAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5T3Zl
cnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBX
YXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NUQxNzg3QjBDRjAwQjM1RjhDIC8q
IERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJE
QzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzU5MSw2ICszNjQ2LDggQEAKIAkJ
CQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4
aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyog
SnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3NTE3OEY1QjUzMDBCMzVGOEMg
LyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTU5MTc4N0FBODkw
MEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcy
RkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTYwMDk3QTYwRUJBQkI1ODAwN0E3Mjk3IC8qIExhYmVsU2NvcGUuaCBpbiBIZWFkZXJzICov
LApAQCAtMzYyMiw2ICszNjc5LDcgQEAKIAkJCQk4NkMzNkVFQTBFRTEyODlEMDBCM0RGNTkgLyog
TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM2MTAxNTZCREUwMDI4
NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDYw
RkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRTUwNTczMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdDb250cmFkaWN0aW9uUHJ1bmluZ1Bo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJERTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
T1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNEIxNEMxNkQ0
M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzA4LDYgKzM3NjYsNyBAQAogCQkJCTE0NzRDMzNC
MTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
REIyQ0RFMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkU1MDU3QjE3OEY1QjUzMDBCMzVGOEMgLyogREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAw
MzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVC
REIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLApAQCAt
NDE5NCw2ICs0MjUzLDcgQEAKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExp
bmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREIyQ0Q5MTc0MkQ4MDQwMDdCM0MxQiAv
KiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUQxNENB
N0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RTUwNTc4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY3M0Q3QUUxNjVBMTQyRDAwQUNBQjcxIC8qIENsb3N1cmVDYWxs
U3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTY5QTA3OTYwRUQxRDNBRTAwRjFG
NjgxIC8qIENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MDE2Njc2MzMw
MDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQyMjUsOSAr
NDI4NSwxMSBAQAogCQkJCTBGQzA5NzZFMTQ2OEFCNTEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhl
bHBlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR0J5dGVDb2RlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkQ4MTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFNTA1NzQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NG
QVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAv
KiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUw
NTcxMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjIzNUJEMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMQ0FyZ3VtZW50R2V0dGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAvKiBERkdD
b2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlEMTZCNzJBMDgwMDVERjk1
QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MzQ2LDYgKzQ0MDgsNyBAQAog
CQkJCTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRSZWYuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTc4ODAxNDAxNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDYxMDdFQzI3MTAwNURCQzhEIC8qIEpTRnVuY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzYxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0Zs
dXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOEUzQTU5
MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlEMjEw
N0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNDM4Myw2ICs0NDQ2LDcgQEAKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3
MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0Njc5MTRG
NUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NUFCODM0MjBEQTQzMjI1MDBCQzgzRjMgLyogTGVnYWN5UHJvZmlsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1N0MxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZl
cnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFCMDEwN0VDNTQxMDA0MkVD
MkMgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENC
OUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBD
RjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NDA1LDcg
KzQ0NjksOSBAQAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0
YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBN
YXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTdBMTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkwMjEzRTNEMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRTUwNTVDMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDI4MTI3MTc3OTNCRTUw
MEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2
N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQkYyRkYxNTYwRjA2QTAwOEU5MjIyIC8qIE5hbWVDb25zdHJ1
Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0MTcsNiArNDQ4Myw3IEBACiAJCQkJNjU1RUIy
OUIxMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVzQ29kZWdlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDQ2OURFMjEwN0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyQ29uc3RydWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ0NjlERTMxMDdFQzdFNzAwNjUwNDQ2IC8qIE51bWJlck9iamVjdC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU2MzE3OEY1QjA1MDBCMzVGOEMgLyogREZHQmFz
aWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFNDEwN0VDN0U3MDA2NTA0NDYg
LyogTnVtYmVyUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RjNFRUJFMTY4Q0RF
OTMwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDY5REU1MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTQ0MjYsNiArNDQ5Myw3IEBACiAJCQkJMTQyODA4NTAxMDdFQzBENzAwMTNF
N0IyIC8qIE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMjI4RUUxNDM2QUIy
QzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4RjIxQkMxMDdF
QzU0RDAwNDJFQzJDIC8qIFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU3MjE3
OEY1QjUzMDBCMzVGOEMgLyogREZHQ29udHJhZGljdGlvblBydW5pbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5MzA1MkMzNDBGQjc5MjE5MDA0OEZEQzMgLyogUGFyc2VyQXJlbmEuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3Jw
aGljUHV0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTU3NDJGNjUwREQxMUY1QTAw
MDkxN0ZCIC8qIFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
OSwxMiArMjA5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9jYWxGaXJzdFRpbWUob3BlcmFu
ZCwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNsZWFyKCkKKyAgICB2b2lkIGZpbGwo
VCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVu
dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFRyYWl0czo6ZGVm
YXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IHZhbHVlOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUoKTsgKytpKQotICAgICAgICAg
ICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgICAgICAgICAgbV9s
b2NhbHNbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgewor
ICAgICAgICBmaWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwogICAgIH0KICAgICAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE1MjQzMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDYgKzc0LDE2IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Js
b2NrKEJhc2kKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBpZiAobV9ncmFwaC5tX2Zvcm0g
PT0gU1NBKSB7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+OjppdGVyYXRv
ciBpdGVyID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQuYmVnaW4oKTsKKyAgICAgICAg
SGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9yIGVuZCA9IGJhc2ljQmxvY2st
PnNzYS0+dmFsdWVzQXRIZWFkLmVuZCgpOworICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgeworICAgICAgICAgICAgZm9yTm9kZShpdGVyLT5rZXkpID0gaXRlci0+dmFsdWU7Cisg
ICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUuaGFzQ2xvYmJlcmFibGVTdGF0ZSgpKQorICAgICAg
ICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAg
IAogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKICAgICBiYXNpY0Js
b2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsKICAgICBtX2Jsb2NrID0gYmFzaWNCbG9jazsKQEAg
LTgzLDYgKzkzLDE2IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2kK
ICAgICBtX2N1cnJlbnROb2RlID0gMDsKIH0KIAorc3RhdGljIHZvaWQgc2V0TGl2ZVZhbHVlcyhI
YXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBIYXNoU2V0PE5vZGUqPiYgbGl2
ZSkKK3sKKyAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICAKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRl
cmF0b3IgaXRlciA9IGxpdmUuYmVnaW4oKTsKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3Ig
ZW5kID0gbGl2ZS5lbmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAg
ICAgdmFsdWVzLmFkZCgqaXRlciwgQWJzdHJhY3RWYWx1ZSgpKTsKK30KKwogdm9pZCBBYnN0cmFj
dFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKIHsKICAgICBCYXNpY0Jsb2NrKiByb290
ID0gZ3JhcGguYmxvY2soMCk7CkBAIC0xNTEsNiArMTcxLDEwIEBAIHZvaWQgQWJzdHJhY3RTdGF0
ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICNlbmRpZgogICAgICAgICB9CiAgICAgICAgIGJsb2Nr
LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09
IFNTQSkgeworICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNBdEhl
YWQsIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpOworICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhi
bG9jay0+c3NhLT52YWx1ZXNBdFRhaWwsIGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwpOworICAgICAg
ICB9CiAgICAgfQogfQogCkBAIC0xNzIsMjAgKzE5NiwzOSBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmVuZEJhc2ljQmxvY2soTWVyZ2VNCiAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgCiAg
ICAgaWYgKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIUFTU0VSVF9ESVNBQkxFRCkgewotICAg
ICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgIHN3aXRj
aCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBUaHJlYWRlZENQUzogeworICAgICAg
ICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgewogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgIE1lcmdpbmcgc3RhdGUgZm9yIGFyZ3VtZW50ICV6dS5cbiIsIGFyZ3VtZW50KTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRlIGZvciBhcmd1bWVudCAl
enUuXG4iLCBhcmd1bWVudCk7CiAjZW5kaWYKLSAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRl
c3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFi
bGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChh
cmd1bWVudCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKHNpemVfdCBsb2Nh
bCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyAr
K2xvY2FsKSB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBi
bG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFibGVzLmFyZ3Vt
ZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVfdCBs
b2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2Fscygp
OyArK2xvY2FsKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBzdGF0ZSBmb3IgbG9jYWwgJXp1
LlxuIiwgbG9jYWwpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcg
c3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKICNlbmRpZgotICAgICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2Fs
KTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwg
bV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxv
Y2FsKSk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9j
ay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFibGVzLmxvY2FsKGxvY2FsKSwg
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFNT
QTogeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRU
YWlsLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gYmxvY2stPnNzYS0+bGl2ZUF0
VGFpbC5iZWdpbigpOworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9
IGJsb2NrLT5zc2EtPmxpdmVBdFRBaWwuZW5kKCk7CisgICAgICAgICAgICBmb3IgKDsgaXRlciAh
PSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGJsb2NrLT5zc2EtPnZh
bHVlc0F0VGFpbC5maW5kKCppdGVyKS0+dmFsdWUubWVyZ2UoZm9yTm9kZShub2RlKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAg
ICAgfQogICAgIApAQCAtMTU4Niw2ICsxNjI5LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IFBoaToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAg
ICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBk
ZWNpZGVkLgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBVcHNpbG9uOgorICAg
ICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGZvck5vZGUobm9kZS0+cGhpKCkp
ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBjYXNlIEZsdXNoOgogICAg
IGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQnJlYWtwb2ludDoKQEAgLTE2NzksNyArMTcz
Miw3IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJTdHJ1Y3QKICAgICBtX2Rp
ZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0
YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZh
cmlhYmxlLCBOb2RlKiBub2RlKQorYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWls
KEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBO
b2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTc2NywyMSArMTgyMCw0NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRl
QXRUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1l
cmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQorYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKIHsKICAgICBBU1NFUlQo
ZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCkgPT0gdG8tPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVz
QXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpKTsKICAgICAKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAKLSAgICBmb3Ig
KHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJv
bS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5h
cmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkpOworICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICBjYXNlIFRocmVhZGVkQ1BT
OiB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJpYWJsZUJldHdl
ZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCksIHRvLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpLCBmcm9tLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20tPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBk
ZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9jYWwpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJvbS0+
dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2Nh
bCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2Fs
IDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKLSAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmxvY2Fs
KGxvY2FsKTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyhk
ZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkp
OworICAgICAgICAKKyAgICBjYXNlIFNTQTogeworICAgICAgICBmb3IgKHNpemVfdCBpID0gZnJv
bS0+dmFyaWFibGVzQXRUYWlsLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
dG8tPnZhcmlhYmxlc0F0SGVhZFtpXS5tZXJnZShmcm9tLT52YXJpYWJsZXNBdFRhaWxbaV0pOwor
ICAgICAgICAKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSB0by0+c3Nh
LT5saXZlQXRIZWFkLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBl
bmQgPSB0by0+c3NhLT5saXZlQXRIZWFkLmVuZCgpOworICAgICAgICBmb3IgKDsgaXRlciAhPSBl
bmQ7ICsraXRlcikgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICAg
ICAgY2hhbmdlZCB8PSB0by0+c3NhLT52YWx1ZXNBdEhlYWQuZmluZChub2RlKS0+dmFsdWUubWVy
Z2UoCisgICAgICAgICAgICAgICAgZnJvbS0+c3NhLT52YWx1ZXNBdFRhaWwuZmluZChub2RlKS0+
dmFsdWUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCF0by0+Y2ZhSGFzVmlzaXRlZCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCShyZXZpc2lvbiAxNTI0
MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtOTksNiArOTksMTUgQEAgcHVibGljOgogICAgIAogICAgIEVkZ2UgY2hp
bGQxVW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV93b3Jkc1swXTsgfQogICAgIAorICAgIEVk
Z2UganVzdE9uZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghIWNoaWxkMSgpICYm
ICFjaGlsZDIoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjaGlsZDMoKSk7CisgICAgICAgICAg
ICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEVkZ2UoKTsKKyAg
ICB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXplKEVkZ2UgY2hpbGQxLCBFZGdlIGNoaWxkMiwg
RWRnZSBjaGlsZDMpCiAgICAgewogICAgICAgICBjaGlsZCgwKSA9IGNoaWxkMTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9j
ay5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1
bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscykKKyAgICA6IGJ5dGVjb2Rl
QmVnaW4oYnl0ZWNvZGVCZWdpbikKKyAgICAsIGluZGV4KE5vQmxvY2spCisgICAgLCBpc09TUlRh
cmdldChmYWxzZSkKKyAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2UpCisgICAgLCBjZmFTaG91bGRS
ZXZpc2l0KGZhbHNlKQorICAgICwgY2ZhRm91bmRDb25zdGFudHMoZmFsc2UpCisgICAgLCBjZmFE
aWRGaW5pc2godHJ1ZSkKKyAgICAsIGNmYUJyYW5jaERpcmVjdGlvbihJbnZhbGlkQnJhbmNoRGly
ZWN0aW9uKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAsIGlzTGlua2VkKGZhbHNlKQorI2Vu
ZGlmCisgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKKyAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1B
cmd1bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMs
IG51bUxvY2FscykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykK
KyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKK3sKK30KKworQmFz
aWNCbG9jazo6fkJhc2ljQmxvY2soKSB7IH0KKwordm9pZCBCYXNpY0Jsb2NrOjplbnN1cmVMb2Nh
bHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQoreworICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVM
b2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2YXJpYWJsZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5l
d051bUxvY2Fscyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMp
OworICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKK30KKworYm9v
bCBCYXNpY0Jsb2NrOjppc0luUGhpcyhOb2RlKiBub2RlKSBjb25zdAoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocGhpc1tpXSA9
PSBub2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjppc0luQmxvY2soTm9kZSogbXlOb2RlKSBjb25zdAor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9kZXMoKTsgKytpKSB7CisgICAgICAg
IGlmIChub2RlKGkpID09IG15Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiIyIsIGluZGV4KTsKK30KKworQmFzaWNC
bG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICA6IGZsdXNoRm9y
bWF0QXRIZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAsIGZs
dXNoRm9ybWF0QXRUYWlsKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKKyAg
ICAsIGF2YWlsYWJpbGl0eUF0SGVhZChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhl
YWQpCisgICAgLCBhdmFpbGFiaWxpdHlBdFRhaWwoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFi
bGVzQXRIZWFkKQoreworfQorCitCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+U1NBRGF0YSgpIHsgfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlz
aW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSAiREZHTm9kZS5oIgog
I2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00NCw0MiAr
NDYsMTYgQEAgY2xhc3MgSW5zZXJ0aW9uU2V0OwogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayos
IDI+IFByZWRlY2Vzc29yTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJh
c2ljQmxvY2s+IHsKLSAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2ln
bmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQotICAgICAgICA6IGJ5dGVjb2Rl
QmVnaW4oYnl0ZWNvZGVCZWdpbikKLSAgICAgICAgLCBpbmRleChOb0Jsb2NrKQotICAgICAgICAs
IGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2UpCi0gICAg
ICAgICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxzZSkKLSAgICAgICAgLCBjZmFGb3VuZENvbnN0YW50
cyhmYWxzZSkKLSAgICAgICAgLCBjZmFEaWRGaW5pc2godHJ1ZSkKLSAgICAgICAgLCBjZmFCcmFu
Y2hEaXJlY3Rpb24oSW52YWxpZEJyYW5jaERpcmVjdGlvbikKLSNpZiAhQVNTRVJUX0RJU0FCTEVE
Ci0gICAgICAgICwgaXNMaW5rZWQoZmFsc2UpCi0jZW5kaWYKLSAgICAgICAgLCBpc1JlYWNoYWJs
ZShmYWxzZSkKLSAgICAgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMpCi0gICAgICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQot
ICAgICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAgICAg
LCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgewotICAgIH0KKyAg
ICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50
cywgdW5zaWduZWQgbnVtTG9jYWxzKTsKKyAgICB+QmFzaWNCbG9jaygpOwogICAgIAotICAgIH5C
YXNpY0Jsb2NrKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVu
c2lnbmVkIG5ld051bUxvY2FscykKLSAgICB7Ci0gICAgICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICAgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZUxv
Y2FscyhuZXdOdW1Mb2NhbHMpOwotICAgICAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5l
d051bUxvY2Fscyk7Ci0gICAgICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVtTG9j
YWxzKTsKLSAgICB9CisgICAgdm9pZCBlbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxz
KTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgp
OyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQogICAgIE5v
ZGUqJiBhdChzaXplX3QgaSkgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQogICAgIE5vZGUqIGF0KHNp
emVfdCBpKSBjb25zdCB7IHJldHVybiBtX25vZGVzW2ldOyB9CisgICAgTm9kZSomIG9wZXJhdG9y
W10oc2l6ZV90IGkpIHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogb3BlcmF0b3JbXShzaXpl
X3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KICAgICBOb2RlKiBsYXN0KCkgY29uc3QgeyBy
ZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KICAgICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkgeyBt
X25vZGVzLnJlc2l6ZShzaXplKTsgfQpAQCAtOTYsMjMgKzcyLDggQEAgc3RydWN0IEJhc2ljQmxv
Y2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIH0KICAgICBib29sIGlzUGhpSW5kZXgoc2l6
ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGkgPCBwaGlzLnNpemUoKTsgfQogICAgIAotICAgIGJvb2wg
aXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKHBoaXNbaV0gPT0g
bm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNJbkJsb2NrKE5vZGUqIG15Tm9k
ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9kZXMo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZShpKSA9PSBteU5vZGUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KKyAgICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OworICAgIGJvb2wgaXNJbkJs
b2NrKE5vZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29y
cygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAgCkBAIC0xMzAsMTAg
KzkxLDEyIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBE
RkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1
bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJpbnQoIiMiLCBpbmRleCk7Ci0g
ICAgfQorI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0
ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFy
Z3MpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBl
bmROb25UZXJtaW5hbChHcmFwaCYsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFs
dWVQYXJhbXMpOworICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5F
X0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKKyAgICAKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiAgICAgLy8gVGhpcyB2YWx1
ZSBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJsb2NrIGxpbmtpbmcgYW5kIE9TUiBlbnRyeS4gSXQg
aXMgbW9zdGx5IG1lYW5pbmdsZXNzCiAgICAgLy8gZm9yIG90aGVyIHB1cnBvc2VzIGR1ZSB0byBp
bmxpbmluZy4KQEAgLTE2MCw2ICsxMjMsMjEgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3Vu
dGVkPEJhc2ljQmxvYwogICAgIAogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0
SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7CisgICAgCisg
ICAgc3RydWN0IFNTQURhdGEgeworICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZmx1c2hG
b3JtYXRBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBmbHVzaEZvcm1hdEF0
VGFpbDsKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAg
ICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgSGFzaFNldDxO
b2RlKj4gbGl2ZUF0SGVhZDsKKyAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKKyAg
ICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOworICAgICAg
ICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7CisgICAgICAgIAor
ICAgICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKKyAgICAgICAgflNTQURhdGEoKTsKKyAgICB9
OworICAgIE93blB0cjxTU0FEYXRhPiBzc2E7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IEluc2VydGlvblNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NiArNDMsMTcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIERGR19WQVJJ
QURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERG
R19ERUZJTkVfQVBQRU5EX05PREUKIAorI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRl
bXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZh
bHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBs
YXRlUG9zdCBpbmxpbmUgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9uVGVybWluYWwoR3JhcGgm
IGdyYXBoLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMp
IFwKKyAgICB7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZSh0eXBlIHZh
bHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAorICAgICAgICBhcHBlbmQobGFzdCgpKTsgXAor
ICAgICAgICBhdChzaXplKCkgLSAyKSA9IHJlc3VsdDsgXAorICAgICAgICByZXR1cm4gcmVzdWx0
OyBcCisgICAgfQorICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5F
X0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKKwogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRp
b25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmxvY2tJbnNlcnRpb25TZXQ6OkJs
b2NrSW5zZXJ0aW9uU2V0KEdyYXBoJiBncmFwaCkKKyAgICA6IG1fZ3JhcGgoZ3JhcGgpCit7Cit9
CisKK0Jsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQoKSB7IH0KKwordm9pZCBC
bG9ja0luc2VydGlvblNldDo6aW5zZXJ0KGNvbnN0IEJsb2NrSW5zZXJ0aW9uJiBpbnNlcnRpb24p
Cit7CisgICAgbV9pbnNlcnRpb25zLmFwcGVuZChpbnNlcnRpb24pOworfQorCit2b2lkIEJsb2Nr
SW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNzUmVmUHRyPEJhc2ljQmxvY2s+
IGJsb2NrKQoreworICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRleCwgYmxvY2spKTsKK30K
KworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgpCit7
CisgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYobmV3IEJhc2ljQmxvY2so
CisgICAgICAgIFVJTlRfTUFYLAorICAgICAgICBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgbV9ncmFwaC5ibG9jaygwKS0+dmFy
aWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICBpbnNlcnQoaW5kZXgsIGJsb2Nr
KTsKKyAgICByZXR1cm4gYmxvY2suZ2V0KCk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlKQoreworICAgIHJldHVybiBp
bnNlcnQoYmxvY2stPmluZGV4KTsKK30KKworYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0
ZSgpCit7CisgICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVz
IGluIGFueSBvcmRlci4gU28sIHdlIG5lZWQgdG8KKyAgICAvLyBzb3J0IHRoZW0gYmVmb3JlIHJ1
bm5pbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4KKyAgICBzdGQ6OnNvcnQobV9pbnNlcnRpb25z
LmJlZ2luKCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CisKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyht
X2dyYXBoLm1fYmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAorICAgIC8vIFBydW5lIG91dCBl
bXB0eSBlbnRyaWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAg
IC8vIGhlYWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgdW5z
aWduZWQgdGFyZ2V0SW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgc291cmNlSW5kZXggPSAw
OyBzb3VyY2VJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOykgeworICAgICAgICBSZWZQ
dHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3NvdXJjZUluZGV4KytdOwor
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fZ3Jh
cGgubV9ibG9ja3NbdGFyZ2V0SW5kZXgrK10gPSBibG9jazsKKyAgICB9CisgICAgbV9ncmFwaC5t
X2Jsb2Nrcy5yZXNpemUodGFyZ2V0SW5kZXgpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IHRoZSBibG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9ncmFwaC5t
X2Jsb2Nrc1tpXS0+aW5kZXggPSBpOworICAgIAorICAgIC8vIEFuZCBmaW5hbGx5LCBpbnZhbGlk
YXRlIGFsbCBhbmFseXNlcyB0aGF0IHJlbHkgb24gdGhlIENGRy4KKyAgICBtX2dyYXBoLmludmFs
aWRhdGVDRkcoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKyNk
ZWZpbmUgREZHQmxvY2tJbnNlcnRpb25TZXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVk
ZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPFJlZlB0cjxC
YXNpY0Jsb2NrPiA+IEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBCbG9ja0luc2VydGlvblNldCB7
CitwdWJsaWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoR3JhcGgmIGdyYXBoKTsKKyAgICB+Qmxv
Y2tJbnNlcnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGluc2VydChjb25zdCBCbG9ja0luc2Vy
dGlvbiYgaW5zZXJ0aW9uKTsKKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIFBhc3NSZWZQ
dHI8QmFzaWNCbG9jaz4gYmxvY2spOworICAgIEJhc2ljQmxvY2sqIGluc2VydChzaXplX3QgaW5k
ZXgpOworICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpOwor
ICAgIAorICAgIGJvb2wgZXhlY3V0ZSgpOworCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBo
OworICAgIFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdCbG9ja0luc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiwxMCBAQCBl
bnVtIEdyYXBoRm9ybSB7CiAgICAgLy8KICAgICAvLyBUaHJlYWRlZENQUyBmb3JtIGlzIHN1aXRh
YmxlIGZvciBkYXRhIGZsb3cgYW5hbHlzaXMgKENGQSwgcHJlZGljdGlvbgogICAgIC8vIHByb3Bh
Z2F0aW9uKSwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgYW5kIGNvZGUgZ2VuZXJhdGlvbi4KLSAgICBU
aHJlYWRlZENQUworICAgIFRocmVhZGVkQ1BTLAorICAgIAorICAgIC8vIFNTQSBmb3JtLiBTZWUg
REZHU1NBQ29udmVyc2lvblBoYXNlLmggZm9yIGEgZGVzY3JpcHRpb24uCisgICAgU1NBCiB9Owog
CiAvLyBEZXNjcmliZXMgdGhlIHN0YXRlIG9mIHRoZSBVbmlvbkZpbmQgc3RydWN0dXJlIG9mIFZh
cmlhYmxlQWNjZXNzRGF0YSdzLgpAQCAtMjUwLDYgKzI1MywxOSBAQCBpbmxpbmUgUHJvb2ZTdGF0
dXMgcHJvb2ZTdGF0dXNGb3JJc1Byb3ZlCiAgICAgcmV0dXJuIGlzUHJvdmVkID8gSXNQcm92ZWQg
OiBOZWVkc0NoZWNrOwogfQogCitlbnVtIEtpbGxTdGF0dXMgeyBEb2VzTm90S2lsbCwgRG9lc0tp
bGwgfTsKKworaW5saW5lIGJvb2wgZG9lc0tpbGwoS2lsbFN0YXR1cyBraWxsU3RhdHVzKQorewor
ICAgIEFTU0VSVChraWxsU3RhdHVzID09IERvZXNOb3RLaWxsIHx8IGtpbGxTdGF0dXMgPT0gRG9l
c0tpbGwpOworICAgIHJldHVybiBraWxsU3RhdHVzID09IERvZXNLaWxsOworfQorCitpbmxpbmUg
S2lsbFN0YXR1cyBraWxsU3RhdHVzRm9yRG9lc0tpbGwoYm9vbCBkb2VzS2lsbCkKK3sKKyAgICBy
ZXR1cm4gZG9lc0tpbGwgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsOworfQorCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0
KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb250cmFkaWN0aW9uUHJ1
bmluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ29udHJh
ZGljdGlvblBydW5pbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIENvbnRyYWRp
Y3Rpb25QcnVuaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIENvbnRyYWRp
Y3Rpb25QcnVuaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
Y29udHJhZGljdGlvbiBwcnVuaW5nIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVu
KCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgLy8gRmlyc3QgZmluZCB0aGUgYmxvY2tzIHRoYXQgYXJlIGFscmVhZHkgY29udHJhZGljdG9y
eSwgYW5kIG1ha2UgdGhlbSBtb3JlCisgICAgICAgIC8vIG9idmlvdXNseSBjb250cmFkaWN0b3J5
IGJ5IGhvaXN0aW5nIHRoZSBGb3JjZU9TUkV4aXQgdG8gdGhlIHRvcC4KKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9j
aykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGlzQ29udHJhZGljdG9yeShibG9jaykpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgaXNDb250cmFkaWN0aW9uID0gZmFsc2U7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9k
ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBUaHJvdzoKKyAgICAgICAgICAg
ICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CisgICAgICAgICAgICAgICAgY2FzZSBGb3Jj
ZU9TUkV4aXQ6CisgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkRm9yY2VPU1JFeGl0OgorICAg
ICAgICAgICAgICAgICAgICBpc0NvbnRyYWRpY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmICghaXNDb250cmFkaWN0aW9uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtYWtlQ29udHJhZGljdG9yeShibG9jayk7CisgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gSWYg
YWxsIG9mIGEgYmxvY2sncyBzdWNjZXNzb3JzIGFyZSBjb250cmFkaWN0b3J5IHRoZW4gbWFrZSB0
aGF0IGJsb2NrCisgICAgICAgIC8vIGNvbnRyYWRpY3RvcnksIHdpdGggdGhlIGNhdmVhdCB0aGF0
IGEgYmxvY2sgd2l0aCBubyBzdWNjZXNzb3JzIHdvbid0IGJlCisgICAgICAgIC8vIG1hZGUgY29u
dHJhZGljdG9yeS4gUnVuIHRoaXMgcnVsZSB0byBmaXhwb2ludC4KKyAgICAgICAgYm9vbCByZXJ1
bkZpeHBvaW50OworICAgICAgICBkbyB7CisgICAgICAgICAgICByZXJ1bkZpeHBvaW50ID0gZmFs
c2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKGlzQ29udHJhZGljdG9yeShibG9jaykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycyA9IG1fZ3JhcGgubnVt
U3VjY2Vzc29ycyhibG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFudW1TdWNjZXNzb3JzKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBib29sIGFsbEFyZUNvbnRyYWRpY3RvcnkgPSB0cnVlOworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bVN1Y2Nlc3NvcnM7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc0NvbnRyYWRpY3RvcnkobV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nl
c3NvcihibG9jaywgaSldLmdldCgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWxsQXJl
Q29udHJhZGljdG9yeSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKCFhbGxBcmVDb250cmFkaWN0b3J5KQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtYWtl
Q29udHJhZGljdG9yeShibG9jayk7CisgICAgICAgICAgICAgICAgcmVydW5GaXhwb2ludCA9IGNo
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChyZXJ1bkZpeHBv
aW50KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBib29sIGlzQ29udHJhZGljdG9yeShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBibG9jay0+YXQoMCktPm9wKCkgPT0gRm9yY2VPU1JFeGl0OworICAgIH0K
KyAgICAKKyAgICB2b2lkIG1ha2VDb250cmFkaWN0b3J5KEJhc2ljQmxvY2sqIGJsb2NrKQorICAg
IHsKKyAgICAgICAgTm9kZSogb2xkRmlyc3QgPSBibG9jay0+YXQoMCk7CisgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwgb2xkRmlyc3Qt
PmNvZGVPcmlnaW4pOworICAgICAgICBibG9jay0+cHJlcGVuZChub2RlKTsKKyAgICB9Cit9Owor
Citib29sIHBlcmZvcm1Db250cmFkaWN0aW9uUHJ1bmluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAg
U2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDb250cmFkaWN0aW9uIFBydW5pbmcg
UGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q29udHJhZGljdGlvblBydW5pbmdQaGFzZT4o
Z3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb250cmFk
aWN0aW9uUHJ1bmluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ29udHJhZGljdGlvblBydW5pbmdQaGFzZV9o
CisjZGVmaW5lIERGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2VfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29udHJhZGljdGlvbiBwcnVuaW5n
LiBNYWtlcyBhbnkgYmxvY2sgdGhhdCBpcyBndWFyYW50ZWVkIHRvIEZvcmNlT1NSRXhpdAorLy8g
ZG8gc28gYXMgdGhlIHZlcnkgZmlyc3Qgbm9kZS4gQW55dGltZSBhbGwgb2YgYSBibG9jaydzIHN1
Y2Nlc3NvcnMgYXJlCisvLyBjb250cmFkaWN0aW9ucywgbWFrZXMgdGhhdCBibG9jayBhIGNvbnRy
YWRpY3Rpb24gYXMgd2VsbC4KKworYm9vbCBwZXJmb3JtQ29udHJhZGljdGlvblBydW5pbmcoR3Jh
cGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2Fs
RWRnZUJyZWFraW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5oIgorI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlIDogcHVibGljIFBo
YXNlIHsKK3B1YmxpYzoKKyAgICBDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlKEdyYXBoJiBncmFw
aCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImNyaXRpY2FsIGVkZ2UgYnJlYWtpbmciKQorICAg
ICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9v
bCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBBbiBlZGdlIEEtPkIgaXMgY3JpdGljYWwgaWYgQSBoYXMgbXVs
dGlwbGUgc3VjY2Vzc29yIGFuZCBCIGhhcyBtdWx0aXBsZQorICAgICAgICAgICAgLy8gcHJlZGVj
ZXNzb3JzLiBUaHVzIHdlIGZhaWwgZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSBtdWx0aXBsZSBzdWNj
ZXNzb3JzLgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxvY2stPm51bVN1Y2Nlc3Nv
cnMoKSA8PSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7
CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayoqIHN1Y2Nlc3NvciA9ICZibG9jay0+c3VjY2Vz
c29yKGkpOworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnByZWRlY2Vzc29ycy5zaXpl
KCkgPD0gMSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgYnJlYWtDcml0aWNhbEVkZ2UoYmxvY2ssIHN1Y2Nlc3Nvcik7IAor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9pbnNl
cnRpb25TZXQuZXhlY3V0ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGJyZWFrQ3Jp
dGljYWxFZGdlKAorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgc3VjY2Vzc29y
SW5kZXgsIEJhc2ljQmxvY2sqKiBzdWNjZXNzb3IpCisgICAgeworICAgICAgICBtX2dyYXBoLmRl
dGhyZWFkKCk7CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBwYWQgPSBtX2luc2VydGlv
blNldC5pbnNlcnRCZWZvcmUoKnN1Y2Nlc3Nvcik7CisgICAgICAgIHBhZC0+YXBwZW5kTm9kZSht
X2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgT3BJbmZvKCpzdWNjZXNzb3IpKTsKKyAgICAgICAgCisg
ICAgICAgICpzdWNjZXNzb3IgPSBwYWQ7CisgICAgfQorICAgIAorICAgIEJsb2NrSW5zZXJ0aW9u
U2V0IG1faW5zZXJ0aW9uU2V0OworfTsKKworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtp
bmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJE
RkcgQ3JpdGljYWwgRWRnZSBCcmVha2luZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQ
aGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorI2RlZmluZSBERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7
CisKKy8vIEluc2VydHMgZHVtbXkgYmFzaWMgYmxvY2tzIHRvIGJyZWFrIGNyaXRpY2FsIGVkZ2Vz
LiBBbiBlZGdlIEEtPkIgaXMKKy8vIGNyaXRpY2FsIGlmIEEgaGFzIG11bHRpcGxlIHN1Y2Nlc3Nv
cnMgYW5kIEIgaGFzIG11bHRpcGxlIHByZWRlc3NvcnMuCisKK2Jvb2wgcGVyZm9ybUNyaXRpY2Fs
RWRnZUJyZWFraW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RD
RVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09
IFRocmVhZGVkQ1BTIHx8IG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAogICAgICAg
ICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBAIC03NSwxMCArNzcsMjkgQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB3aGlsZSAoIW1fd29ya2xpc3QuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAg
ICAgICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5s
ZXNzIGl0J3MgcmVmJ2VkLgotICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9n
cmFwaCwgbm9kZSwgY291bnRFZGdlKTsKKyAgICAgICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0
KCk7CisgICAgICAgICAgICAgICAgbV93b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJl
IG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCisgICAgICAgICAgICAgICAgREZH
X05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291bnRFZGdlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNT
QSkgeworICAgICAgICAgICAgICAgIC8vIEZpbmQgUGhpLT5VcHNpbG9uIGVkZ2VzLCB3aGljaCBh
cmUgcmVwcmVzZW50ZWQgYXMgbWV0YS1kYXRhIGluIHRoZQorICAgICAgICAgICAgICAgIC8vIFVw
c2lsb24uCisgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXpl
KCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5waGkoKS0+c2hvdWxkR2VuZXJhdGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudE5vZGUobm9kZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewpAQCAtOTQsOCAr
MTE1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkuaXNQcm92ZWQoKSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAg
Y2FzZSBNb3ZIaW50OiB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgobm9kZS0+b3AoKSA9
PSBTZXRMb2NhbCkgPT0gKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS53aWxsTm90SGF2ZUNoZWNrKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSB0aGF0IFVJ
bnQzMlRvTnVtYmVyIGlzIGRlYWQgYnV0IGl0cwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Y2hpbGQgaXNuJ3Q7IGlmIHNvIHRoZW4gd2Ugc2hvdWxkIE1vdkhpbnQgdGhlIGNoaWxkLgogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2VuZXJhdGUo
KQpAQCAtMTE3LDggKzE0MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1
bWVudDogewotICAgICAgICAgICAgICAgICAgICAvLyBMZWF2ZSB0aGVtIGFzIG5vdCBzaG91bGRH
ZW5lcmF0ZS4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTGVhdmUgdGhlbSBhcyBub3Qgc2hvdWxkR2VuZXJhdGUuCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKQEAgLTEyNiw3ICsxNTEsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9k
ZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51
bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
ZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlIHx8IGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdl
LnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghZWRnZSB8fCBlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2Rl
LT5jb2RlT3JpZ2luLCBlZGdlKTsKQEAgLTE1OCwyMSArMTgzLDI1IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhbiAidW5wcm92ZWQiIHVudHlwZWQgdXNlIGZvciBj
b2RlIHRoYXQgaXMgdW5yZWFjaGFibGUuIFRoZSBDRkEKICAgICAgICAgLy8gd2lsbCBqdXN0IG5v
dCBoYXZlIGdvdHRlbiBhcm91bmQgdG8gaXQuCi0gICAgICAgIGlmIChlZGdlLmlzUHJvdmVkKCkg
fHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgaWYgKGVkZ2Uud2lsbE5v
dEhhdmVDaGVjaygpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIWVkZ2UtPnBv
c3RmaXhSZWYoKSkKICAgICAgICAgICAgIG1fd29ya2xpc3QuYXBwZW5kKGVkZ2Uubm9kZSgpKTsK
ICAgICB9CiAgICAgCisgICAgdm9pZCBjb3VudE5vZGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIGlmIChub2RlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IG1fd29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvdW50RWRn
ZShOb2RlKiwgRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgLy8gRG9uJ3QgY291bnQgZWRnZXMg
dGhhdCBhcmUgYWxyZWFkeSBjb3VudGVkIGZvciB0aGVpciB0eXBlIGNoZWNrcy4KLSAgICAgICAg
aWYgKCEoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKGVkZ2UtPnBvc3RmaXhS
ZWYoKSkKKyAgICAgICAgaWYgKGVkZ2Uud2lsbEhhdmVDaGVjaygpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChlZGdlLm5vZGUoKSk7CisgICAgICAgIGNv
dW50Tm9kZShlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZWxpbWluYXRlSXJy
ZWxldmFudFBoYW50b21DaGlsZHJlbihOb2RlKiBub2RlKQpAQCAtMTgxLDcgKzIxMCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsK
ICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmIChlZGdlLmlzUHJvdmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVz
ZSkKKyAgICAgICAgICAgIGlmIChlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGktLSk7CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAJKHJldmlzaW9uIDE1MjQzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDggQEAgdm9pZCBFZGdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CiAgICAgICAgICAgICBvdXQucHJpbnQoIkNoZWNrOiIpOwogICAgICAgICBvdXQucHJpbnQodXNl
S2luZCgpLCAiOiIpOwogICAgIH0KKyAgICBpZiAoZG9lc0tpbGwoa2lsbFN0YXR1cygpKSkKKyAg
ICAgICAgb3V0LnByaW50KCJLaWxsOiIpOwogICAgIG91dC5wcmludChub2RlKCkpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24gMTUyNDMyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDEyICszOSwxMiBAQCBjbGFzcyBBZGphY2VuY3lMaXN0OwogCiBjbGFzcyBFZGdlIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBFZGdlKE5vZGUqIG5vZGUgPSAwLCBVc2VLaW5kIHVzZUtpbmQgPSBV
bnR5cGVkVXNlLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cyA9IE5lZWRzQ2hlY2spCisgICAgZXhw
bGljaXQgRWRnZShOb2RlKiBub2RlID0gMCwgVXNlS2luZCB1c2VLaW5kID0gVW50eXBlZFVzZSwg
UHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMgPSBOZWVkc0NoZWNrLCBLaWxsU3RhdHVzIGtpbGxTdGF0
dXMgPSBEb2VzTm90S2lsbCkKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICA6IG1fZW5jb2Rl
ZFdvcmQobWFrZVdvcmQobm9kZSwgdXNlS2luZCwgcHJvb2ZTdGF0dXMpKQorICAgICAgICA6IG1f
ZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwgdXNlS2luZCwgcHJvb2ZTdGF0dXMsIGtpbGxTdGF0
dXMpKQogI2Vsc2UKICAgICAgICAgOiBtX25vZGUobm9kZSkKLSAgICAgICAgLCBtX2VuY29kZWRX
b3JkKG1ha2VXb3JkKHVzZUtpbmQsIHByb29mU3RhdHVzKSkKKyAgICAgICAgLCBtX2VuY29kZWRX
b3JkKG1ha2VXb3JkKHVzZUtpbmQsIHByb29mU3RhdHVzLCBraWxsU3RhdHVzKSkKICNlbmRpZgog
ICAgIHsKICAgICB9CkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5vZGUo
Tm9kZSogbm9kZSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9lbmNvZGVk
V29yZCA9IG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMoKSk7CisgICAgICAg
IG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCksIHByb29mU3RhdHVzKCks
IGtpbGxTdGF0dXMoKSk7CiAjZWxzZQogICAgICAgICBtX25vZGUgPSBub2RlOwogI2VuZGlmCkBA
IC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlKCkpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2Rl
KCksIHVzZUtpbmQsIHByb29mU3RhdHVzKCkpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFr
ZVdvcmQobm9kZSgpLCB1c2VLaW5kLCBwcm9vZlN0YXR1cygpLCBraWxsU3RhdHVzKCkpOwogI2Vs
c2UKICAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQsIHByb29mU3RhdHVz
KCkpOwogI2VuZGlmCkBAIC0xMDgsOSArMTA4LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
QVNTRVJUKG5vZGUoKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9lbmNvZGVkV29y
ZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cyk7CisgICAgICAgIG1f
ZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMsIGtp
bGxTdGF0dXMoKSk7CiAjZWxzZQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQodXNl
S2luZCgpLCBwcm9vZlN0YXR1cyk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZCh1
c2VLaW5kKCksIHByb29mU3RhdHVzLCBraWxsU3RhdHVzKCkpOwogI2VuZGlmCiAgICAgfQogICAg
IGJvb2wgaXNQcm92ZWQoKSBjb25zdApAQCAtMTIyLDYgKzEyMiwzNiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBwcm9vZlN0YXR1cygpID09IE5lZWRzQ2hlY2s7CiAgICAgfQogICAgIAorICAg
IGJvb2wgd2lsbE5vdEhhdmVDaGVjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNQ
cm92ZWQoKSB8fCB1c2VLaW5kKCkgPT0gVW50eXBlZFVzZTsKKyAgICB9CisgICAgYm9vbCB3aWxs
SGF2ZUNoZWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhd2lsbE5vdEhhdmVDaGVj
aygpOworICAgIH0KKyAgICAKKyAgICBLaWxsU3RhdHVzIGtpbGxTdGF0dXNVbmNoZWNrZWQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbGxTdGF0dXNGb3JEb2VzS2lsbChtX2VuY29k
ZWRXb3JkICYgMik7CisgICAgfQorICAgIEtpbGxTdGF0dXMga2lsbFN0YXR1cygpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQobm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIGtpbGxTdGF0dXNV
bmNoZWNrZWQoKTsKKyAgICB9CisgICAgdm9pZCBzZXRLaWxsU3RhdHVzKEtpbGxTdGF0dXMga2ls
bFN0YXR1cykKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlKCkpOworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQoKSwg
cHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1cyk7CisjZWxzZQorICAgICAgICBtX2VuY29kZWRXb3Jk
ID0gbWFrZVdvcmQodXNlS2luZCgpLCBwcm9vZlN0YXR1cygpLCBraWxsU3RhdHVzKTsKKyNlbmRp
ZgorICAgIH0KKyAgICBib29sIGRvZXNLaWxsKCkgY29uc3QgeyByZXR1cm4gZG9lc0tpbGwoa2ls
bFN0YXR1cygpKTsgfQorICAgIGJvb2wgZG9lc05vdEtpbGwoKSBjb25zdCB7IHJldHVybiAhZG9l
c2tpbGwoKTsgfQorICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW5vZGUo
KTsgfQogICAgIAogICAgIHR5cGVkZWYgdm9pZCogRWRnZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGU7
CkBAIC0xNTAsMjAgKzE4MCwyMCBAQCBwcml2YXRlOgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
c3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNjsgfQogICAgIAotICAgIHN0YXRpYyB1
aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1
cyBwcm9vZlN0YXR1cykKKyAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKE5vZGUqIG5vZGUs
IFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMsIEtpbGxTdGF0dXMga2ls
bFN0YXR1cykKICAgICB7CiAgICAgICAgIEFTU0VSVChzaXplb2Yobm9kZSkgPT0gOCk7CiAgICAg
ICAgIHVpbnRwdHJfdCBzaGlmdGVkVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2Rl
KSA8PCBzaGlmdCgpOwogICAgICAgICBBU1NFUlQoKHNoaWZ0ZWRWYWx1ZSA+PiBzaGlmdCgpKSA9
PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSk7CiAgICAgICAgIEFTU0VSVCh1c2VLaW5k
ID49IDAgJiYgdXNlS2luZCA8IExhc3RVc2VLaW5kKTsKLSAgICAgICAgQVNTRVJUKChzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KExhc3RVc2VLaW5kKSA8PCAxKSA8PSAoc3RhdGljX2Nhc3Q8dWludHB0
cl90PigxKSA8PCBzaGlmdCgpKSk7Ci0gICAgICAgIHJldHVybiBzaGlmdGVkVmFsdWUgfCAoc3Rh
dGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAxKSB8IERGRzo6aXNQcm92ZWQocHJvb2ZT
dGF0dXMpOworICAgICAgICBBU1NFUlQoKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTGFzdFVzZUtp
bmQpIDw8IDIpIDw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDIpIDw8IHNoaWZ0KCkpKTsKKyAg
ICAgICAgcmV0dXJuIHNoaWZ0ZWRWYWx1ZSB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtp
bmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1cykgPDwgMSkgfCBERkc6OmlzUHJv
dmVkKHByb29mU3RhdHVzKTsKICAgICB9CiAgICAgCiAjZWxzZQotICAgIHN0YXRpYyB1aW50cHRy
X3QgbWFrZVdvcmQoVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKKyAg
ICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMg
cHJvb2ZTdGF0dXMsIEtpbGxTdGF0dXMga2lsbFN0YXR1cykKICAgICB7Ci0gICAgICAgIHJldHVy
biAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAxKSB8IERGRzo6aXNQcm92ZWQo
cHJvb2ZTdGF0dXMpOworICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNl
S2luZCkgPDwgMikgfCAoREZHOjpkb2VzS2lsbChraWxsU3RhdHVzKSA8PCAxKSB8IERGRzo6aXNQ
cm92ZWQocHJvb2ZTdGF0dXMpOwogICAgIH0KICAgICAKICAgICBOb2RlKiBtX25vZGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Zs
dXNoRm9ybWF0LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIFdURiB7CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgRmx1c2hGb3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7Cisg
ICAgY2FzZSBEZWFkRmx1c2g6CisgICAgICAgIG91dC5wcmludCgiRGVhZEZsdXNoIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJG
bHVzaGVkSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZERvdWJsZToK
KyAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRDZWxsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICBvdXQucHJp
bnQoIkZsdXNoZWRCb29sZWFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZsdXNoZWRK
U1ZhbHVlOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRKU1ZhbHVlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHRmx1c2hGb3JtYXRfaAorI2RlZmluZSBERkdGbHVzaEZvcm1h
dF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworZW51bSBGbHVzaEZvcm1hdCB7CisgICAgRGVhZEZsdXNoLAorICAgIEZsdXNo
ZWRJbnQzMiwKKyAgICBGbHVzaGVkRG91YmxlLAorICAgIEZsdXNoZWRDZWxsLAorICAgIEZsdXNo
ZWRCb29sZWFuLAorICAgIEZsdXNoZWRKU1ZhbHVlCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBGbHVzaEZvcm1hdCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdGbHVzaEZvcm1hdF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0Fu
YWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0ZsdXNoTGl2ZW5lc3NBbmFseXNp
c1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxv
Y2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRp
b25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBGbHVzaExpdmVuZXNz
QW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgRmx1c2hMaXZlbmVz
c0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiZmx1
c2gtbGl2ZW5lc3MgYW5hbHlzaXMiKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4o
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAg
IAorICAgICAgICAvLyBMaXZlbmVzcyBpcyBhIGJhY2t3YXJkcyBhbmFseXNpczsgdGhlIHJvb3Rz
IGFyZSB0aGUgYmxvY2tzIHRoYXQKKyAgICAgICAgLy8gZW5kIGluIGEgdGVybWluYWwgKFJldHVy
bi9UaHJvdy9UaHJvd1JlZmVyZW5jZUVycm9yKS4gRm9yIG5vdywgd2UKKyAgICAgICAgLy8gdXNl
IGEgZml4cG9pbnQgZm9ybXVsYXRpb24gc2luY2UgbGl2ZW5lc3MgaXMgYSByYXBpZCBhbmFseXNp
cyB3aXRoCisgICAgICAgIC8vIGNvbnZlcmdlbmNlIGd1YXJhbnRlZWQgYWZ0ZXIgTyhjb25uZWN0
aXZpdHkpLgorICAgICAgICAKKyAgICAgICAgLy8gU3RhcnQgYnkgYXNzdW1pbmcgdGhhdCBldmVy
eXRoaW5nIGlzIGRlYWQuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9n
cmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2Et
PmZsdXNoRm9ybWF0QXRIZWFkLmZpbGwoRGVhZEZsdXNoKTsKKyAgICAgICAgICAgIGJsb2NrLT5z
c2EtPmZsdXNoRm9ybWF0QXRUYWlsLmZpbGwoRGVhZEZsdXNoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9ja0luZGV4KTsKKyAgICAg
ICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoQmxvY2tJbmRleCBibG9ja0luZGV4
KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdFRhaWw7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5v
ZGVJbmRleC0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgc2V0Rm9yTm9kZShub2RlLCB2YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNo
Rm9ybWF0KCksIERlYWRGbHVzaCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBG
bHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKKyAgICAgICAgICAg
ICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhcmlhYmxlLT5sb2NhbCgpLCBmb3JtYXQsIGZvcm1hdCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9saXZlID09IGJsb2NrLT5z
c2EtPmZsdXNoRm9ybWF0QXRIZWFkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRB
dEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5wcmVkZWNl
c3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nv
ciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSBtX2xpdmUuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQmIHBy
ZWRlY2Vzc29yRm9ybWF0ID0gcHJlZGVjZXNzb3ItPnNzYS0+Zmx1c2hGb3JtYXRBdFRhaWxbal07
CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgbXlGb3JtYXQgPSBteUxpdmVbal07CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGhyZWUgcG9zc2liaWxpdGllczoKKyAg
ICAgICAgICAgICAgICAvLyAxKSBQcmVkZWNlc3NvciBmb3JtYXQgaXMgRGVhZCwgaW4gd2hpY2gg
Y2FzZSBpdCBhY3F1aXJlcyBvdXIgZm9ybWF0LgorICAgICAgICAgICAgICAgIC8vIDIpIFByZWRl
Y2Vzc29yIGZvcm1hdCBpcyBpZGVudGljYWwgdG8gb3VyIGZvcm1hdCwgaW4gd2hpY2ggY2FzZSB3
ZQorICAgICAgICAgICAgICAgIC8vICAgIGRvIG5vdGhpbmcuCisgICAgICAgICAgICAgICAgLy8g
MykgUHJlZGVjZXNzb3IgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIG91ciBmb3JtYXQgYW5kIGl0
J3Mgbm90IERlYWQsCisgICAgICAgICAgICAgICAgLy8gICAgaW4gd2hpY2ggY2FzZSB3ZSBoYXZl
IGFuIGVycm9uZW91cyBzZXQgb2YgRmx1c2hlcyBhbmQgU2V0TG9jYWxzLgorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvckZvcm1hdCA9PSBEZWFkRmx1c2gp
IHsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JGb3JtYXQgPSBteUZvcm1hdDsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvckZvcm1hdCA9PSBteUZvcm1h
dCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkJhZCBGbHVzaCBtZXJn
ZSBhdCBlZGdlICIsICpwcmVkZWNlc3NvciwgIiAtPiAiLCAqYmxvY2ssCisgICAgICAgICAgICAg
ICAgICAgICIsIGxvY2FsIHZhcmlhYmxlIHIiLCBteUxpdmUub3BlcmFuZEZvckluZGV4KGopLCAi
OiAiLCAqcHJlZGVjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICIgaGFzICIsIHByZWRlY2Vz
c29yRm9ybWF0LCAiIGFuZCAiLCAqYmxvY2ssICIgaGFzICIsIG15Rm9ybWF0LCAiLlxuIik7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiSVIgYXQgdGltZSBvZiBlcnJvcjpcbiIpOworICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRGb3JOb2RlKE5v
ZGUqIG5vZGUsIGludCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBub2RlRm9ybWF0LCBGbHVzaEZvcm1h
dCBuZXdGb3JtYXQpCisgICAgeworICAgICAgICBGbHVzaEZvcm1hdCYgY3VycmVudEZvcm1hdCA9
IG1fbGl2ZS5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgLy8gRG8gc29tZSB1
c2VmdWwgdmVyaWZpY2F0aW9uIGhlcmUuIEl0J3MgT0sgaWYgd2UgdGhpbmsgdGhhdCB0aGUKKyAg
ICAgICAgLy8gZmx1c2ggZm9ybWF0IGlzIGRlYWQgYXQgdGhlIHRpbWUgdGhhdCB3ZSBzZWUgdGhl
IG5vZGUuIEJ1dCBpdCdzCisgICAgICAgIC8vIG5vdCBPSyBpZiBib3RoIHRoZSBub2RlIGFuZCBt
X2xpdmUgc2VlIGEgRmx1c2hGb3JtYXQgYW5kIHRoZXkgZG8KKyAgICAgICAgLy8gbm90IGFncmVl
IG9uIGl0LgorICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnRGb3JtYXQgPT0gRGVhZEZsdXNo
IHx8IGN1cnJlbnRGb3JtYXQgPT0gbm9kZUZvcm1hdCkgeworICAgICAgICAgICAgY3VycmVudEZv
cm1hdCA9IG5ld0Zvcm1hdDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJCYWQgRmx1c2ggbWVyZ2UgYXQgbm9k
ZSAiLCBub2RlLCAiLCByIiwgb3BlcmFuZCwgIjogbm9kZSBjbGFpbXMgIiwgbm9kZUZvcm1hdCwK
KyAgICAgICAgICAgICIgYnV0IGJhY2t3YXJkcyBmbG93IGNsYWltcyAiLCBjdXJyZW50Rm9ybWF0
LCAiLlxuIik7CisgICAgICAgIGRhdGFMb2coIklSIGF0IHRpbWUgb2YgZXJyb3I6XG4iKTsKKyAg
ICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAg
IEZsdXNoRm9ybWF0IGZsdXNoRm9ybWF0KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1
cm4gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAg
IG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG1fY2hhbmdl
ZDsKKyAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gbV9saXZlOworfTsKKworYm9vbCBwZXJmb3Jt
Rmx1c2hMaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbigiREZHIEZsdXNoLUxpdmVuZXNzIEFuYWx5c2lzIFBoYXNlIik7Cisg
ICAgcmV0dXJuIHJ1blBoYXNlPEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlPihncmFwaCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
bHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisjZGVm
aW5lIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8g
Q29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5mbHVzaEZvcm1hdEF0SGVhZAorCitib29sIHBlcmZv
cm1GbHVzaExpdmVuZXNzQW5hbHlzaXMoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSw4IEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICB9CiAgICAgaWYgKG5vZGUtPmhh
c0luZGV4aW5nVHlwZSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIEluZGV4aW5nVHlwZUR1
bXAobm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBpZiAobm9kZS0+aGFzUGhpKCkpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgIl4iLCBub2RlLT5waGkoKS0+aW5kZXgoKSk7CiAgICAgaWYg
KG5vZGUtPmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBS
YXdQb2ludGVyKG5vZGUtPmV4ZWN1dGlvbkNvdW50ZXIoKSkpOwogICAgIGlmIChvcCA9PSBKU0Nv
bnN0YW50KSB7CkBAIC0zMTMsMjEgKzMxNSwyMyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFk
ZXIoUHJpbnRTdHJlYW0mCiAgICAgICAgICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgb3V0LnByaW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9k
ZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW2ldOwotICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2RlID09IER1bXBMaXZlUGhpc09ubHkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4
KCksICI8IiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKLSAgICAgICAgaWYgKHBoaU5v
ZGUtPmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIkAiLCBwaGlOb2RlLT5jaGls
ZDEoKS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkpIHsKLSAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMigpLT5pbmRleCgp
KTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQzKCkpCi0gICAgICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQzKCktPmluZGV4KCkpOworICAg
IGlmICghYmxvY2stPnBoaXMuaXNFbXB0eSgpKSB7CisgICAgICAgIG91dC5wcmludChwcmVmaXgs
ICIgIFBoaSBOb2RlczoiKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
cGhpcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5w
aGlzW2ldOworICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBo
aU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmluZGV4KCksICI8Iiwg
cGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKKyAgICAgICAgICAgIGlmIChwaGlOb2RlLT5j
aGlsZDEoKSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxk
MSgpLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDIoKS0+
aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDMoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQzKCkt
PmluZGV4KCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG91dC5wcmludCgiKSIsIGkgKyAxIDwgYmxvY2stPnBoaXMuc2l6ZSgpID8gIiwiIDogIiIpOwog
ICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgiKSIsIGkgKyAxIDwgYmxvY2stPnBoaXMuc2l6
ZSgpID8gIiwiIDogIiIpOwogICAgIH0KICAgICBvdXQucHJpbnQoIlxuIik7CiB9CkBAIC0zNDUs
NyArMzQ5LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgICAgICBk
dW1wQmxvY2tIZWFkZXIob3V0LCAiIiwgYmxvY2ssIER1bXBBbGxQaGlzKTsKICAgICAgICAgb3V0
LnByaW50KCIgIHZhcnMgYmVmb3JlOiAiKTsKICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNp
dGVkKQotICAgICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdEhlYWQsIG91dCk7
CisgICAgICAgICAgICBvdXQucHJpbnQoYmxvY2stPnZhbHVlc0F0SGVhZCk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICBvdXQucHJpbnQo
IlxuIik7CkBAIC0zNTksNyArMzYzLDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KQogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiICB2YXJzIGFmdGVyOiAiKTsKICAg
ICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQotICAgICAgICAgICAgZHVtcE9wZXJhbmRz
KGJsb2NrLT52YWx1ZXNBdFRhaWwsIG91dCk7CisgICAgICAgICAgICBvdXQucHJpbnQoYmxvY2st
PnZhbHVlc0F0VGFpbCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG91dC5wcmludCgiPGVt
cHR5PiIpOwogICAgICAgICBvdXQucHJpbnQoIlxuIik7CkBAIC00NzgsNiArNDgyLDI4IEBAIHZv
aWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2MKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KIH0KKwordm9pZCBHcmFwaDo6YWRkRm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJh
c2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEhh
c2hTZXQ8QmFzaWNCbG9jayo+JiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBpZiAo
c2Vlbi5jb250YWlucyhibG9jaykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZXN1bHQu
YXBwZW5kKGJsb2NrKTsKKyAgICB3b3JrbGlzdC5hcHBlbmQoYmxvY2spOworICAgIHNlZW4uYWRk
KGJsb2NrKTsKK30KKwordm9pZCBHcmFwaDo6ZGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxv
Y2sqPiYgcmVzdWx0KQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0Owor
ICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHNlZW47CisgICAgYWRkRm9yRGVwdGhGaXJzdFNvcnQo
cmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkpOworICAgIHdoaWxlICghd29ya2xpc3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxh
c3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsg
aS0tOykKKyAgICAgICAgICAgIGFkZEZvckRlcHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xpc3Qs
IHNlZW4sIGJsb2NrLT5zdWNjZXNzb3IoaSkpOworICAgIH0KK30KICAgICAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTUyNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNiArNjUxLDggQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgaW52YWxpZGF0ZUNGRygpOwogICAgIAorICAgIHZvaWQgZ2V0QmxvY2tzSW5EZXB0aEZpcnN0
T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KTsKKyAgICAKICAgICBQcm9maWxlcjo6
Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9uLmdl
dCgpOyB9CiAgICAgCiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0
dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQpAQCAtNjg5LDYgKzY5MSw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJhc2ljQmxvY2sq
LCAxNj4mIHdvcmtsaXN0LCBCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayogc3VjY2Vzc29yKTsKKyAg
ICB2b2lkIGFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwg
VmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBIYXNoU2V0PEJhc2ljQmxvY2sqPiYg
c2VlbiwgQmFzaWNCbG9jayopOwogICAgIAogICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1l
ZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE1MjQzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDI2ICszMSwxMiBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWNsYXNzIElu
c2VydGlvbiB7Ci1wdWJsaWM6Ci0gICAgSW5zZXJ0aW9uKCkgeyB9Ci0gICAgCi0gICAgSW5zZXJ0
aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVudCkKLSAgICAgICAgOiBtX2luZGV4KGluZGV4
KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAg
c2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIE5vZGUqIGVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1f
aW5kZXg7Ci0gICAgTm9kZSogbV9lbGVtZW50OwotfTsKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248
Tm9kZSo+IEluc2VydGlvbjsKIAogY2xhc3MgSW5zZXJ0aW9uU2V0IHsKIHB1YmxpYzoKQEAgLTgx
LDIwICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayog
YmxvY2spCiAgICAgewotICAgICAgICBpZiAoIW1faW5zZXJ0aW9ucy5zaXplKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGJsb2NrLT5ncm93KGJsb2NrLT5zaXplKCkgKyBtX2luc2Vy
dGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgc2l6ZV90IGxhc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gbV9pbnNlcnRpb25zLnNp
emUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsKLSAgICAgICAgICAgIEluc2VydGlvbiYgaW5z
ZXJ0aW9uID0gbV9pbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXTsKLSAgICAgICAgICAgIHNp
emVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsK
LSAgICAgICAgICAgIHNpemVfdCBpbmRleE9mZnNldCA9IGluZGV4SW5JbnNlcnRpb25zICsgMTsK
LSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7
KQotICAgICAgICAgICAgICAgIGJsb2NrLT5hdChpKSA9IGJsb2NrLT5hdChpIC0gaW5kZXhPZmZz
ZXQpOwotICAgICAgICAgICAgYmxvY2stPmF0KGZpcnN0SW5kZXgpID0gaW5zZXJ0aW9uLmVsZW1l
bnQoKTsKLSAgICAgICAgICAgIGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9pbnNlcnRpb25zLnJlc2l6ZSgwKTsKKyAgICAgICAgZXhlY3V0ZUluc2VydGlvbnMo
KmJsb2NrLCBtX2luc2VydGlvbnMpOwogICAgIH0KIHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3Jh
cGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5c2lzUGhh
c2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lu
bGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNl
dC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIExpdmVuZXNzQW5hbHlzaXNQ
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImxpdmVuZXNzIGFuYWx5c2lz
IikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgLy8gTGl2ZW5l
c3MgaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXM7IHRoZSByb290cyBhcmUgdGhlIGJsb2NrcyB0aGF0
CisgICAgICAgIC8vIGVuZCBpbiBhIHRlcm1pbmFsIChSZXR1cm4vVGhyb3cvVGhyb3dSZWZlcmVu
Y2VFcnJvcikuIEZvciBub3csIHdlCisgICAgICAgIC8vIHVzZSBhIGZpeHBvaW50IGZvcm11bGF0
aW9uIHNpbmNlIGxpdmVuZXNzIGlzIGEgcmFwaWQgYW5hbHlzaXMgd2l0aAorICAgICAgICAvLyBj
b252ZXJnZW5jZSBndWFyYW50ZWVkIGFmdGVyIE8oY29ubmVjdGl2aXR5KS4KKyAgICAgICAgCisg
ICAgICAgIC8vIFN0YXJ0IGJ5IGFzc3VtaW5nIHRoYXQgZXZlcnl0aGluZyBpcyBkZWFkLgorICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBibG9jay0+bGl2ZUF0SGVhZC5jbGVhcigpOworICAg
ICAgICAgICAgYmxvY2stPmxpdmVBdFRhaWwuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9ja0luZGV4KTsKKyAgICAgICAg
fSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoQmxvY2tJbmRleCBibG9ja0luZGV4KQor
ICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQs
IGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKKyAgICAgICAgbV9saXZl
ID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gICAgbjogVXBzaWxvbigkcCwgQHgpCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
V2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFuZCB1c2VzIEB4LgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhpOgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vICAgIHA6IFBoaSgpCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Ugc2F5
IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVzZSBub3IgYSBkZWYuCisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2RlOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwgQGMuCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2Fz
ZSBVcHNpbG9uOiB7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+cGhpKCk7Cisg
ICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkpOworICAgICAgICAgICAgICAgIG1fbGl2
ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICAgICAgbV9saXZlLmFkZChub2RlLT5jaGlsZDEo
KS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAgICAgICAgICAgICBE
RkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRDaGlsZFVzZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgIGJs
b2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgYmxvY2stPnNz
YS0+bGl2ZUF0VGFpbC5hZGQobV9saXZlLmJlZ2luKCksIG1fbGl2ZS5lbmQoKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UmIGVkZ2UpCisgICAgeworICAg
ICAgICBhZGRDaGlsZFVzZShlZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRDaGlsZFVz
ZShFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgZWRnZS5zZXRLaWxsU3RhdHVzKG1fbGl2ZS5h
ZGQoZWRnZS5ub2RlKCkpLmlzTmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7CisgICAgSGFzaFNldDxOb2RlKj4gbV9saXZl
OworfTsKKworYm9vbCBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYgZ3JhcGgpCit7Cisg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBMaXZlbmVzcyBBbmFseXNpcyBQ
aGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxMaXZlbmVzc0FuYWx5c2lzUGhhc2U+KGdyYXBo
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisjZGVmaW5lIERGR0xpdmVuZXNz
QW5hbHlzaXNQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6
OnNzYS0+bGl2ZUF0SGVhZC9saXZlQXRUYWlsLgorCitib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5
c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAxNTI0MzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw2ICs2NiwxMCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
Tm9kCiAgICAgICAgIG91dC5wcmludCgiLSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IGlmIChub2RlID09IE5vZGU6OnRvcCgpKSB7CisgICAgICAgIG91dC5wcmludCgiVE9QIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgb3V0LnByaW50KCJAIiwgbm9kZS0+aW5kZXgoKSk7
CiAgICAgb3V0LnByaW50KEFiYnJldmlhdGVkU3BlY3VsYXRpb25EdW1wKG5vZGUtPnByZWRpY3Rp
b24oKSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MzgsNiArNTM4LDE3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAg
ICBib29sIGhhc1BoaSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBVcHNpbG9uOwor
ICAgIH0KKyAgICAKKyAgICBOb2RlKiBwaGkoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1Bo
aSgpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxOb2RlKj4obV9vcEluZm8pOworICAg
IH0KKyAgICAKICAgICBib29sIGhhc0lkZW50aWZpZXIoKQogICAgIHsKICAgICAgICAgc3dpdGNo
IChvcCgpKSB7CkBAIC03NzMsMTYgKzc4NCwxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1f
b3BJbmZvMiA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJsb2NrKTsKICAgICB9CiAgICAgCi0g
ICAgQmFzaWNCbG9jayogdGFrZW5CbG9jaygpCisgICAgQmFzaWNCbG9jayomIHRha2VuQmxvY2so
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOwotICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbyk7CisgICAgICAgIHJl
dHVybiAqYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZvKTsKICAgICB9CiAgICAg
Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW5CbG9jaygpCisgICAgQmFzaWNCbG9jayomIG5vdFRh
a2VuQmxvY2soKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwotICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbzIpOworICAgICAgICByZXR1
cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbzIpOwogICAgIH0KICAgICAK
ICAgICBTd2l0Y2hEYXRhKiBzd2l0Y2hEYXRhKCkKQEAgLTgwNSw3ICs4MTYsNyBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5k
ZXgpCiAgICAgewogICAgICAgICBpZiAoaXNTd2l0Y2goKSkgewogICAgICAgICAgICAgaWYgKGlu
ZGV4IDwgc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFpvbWJpZUhpbnQs
IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhOb3AsIE5vZGVEb2VzTm90RXhpdCkgXAorICAgIG1hY3JvKFVwc2lsb24s
IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCiAgICAgbWFjcm8oUGhpLCBO
b2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikgXAogICAgIG1hY3JvKEZsdXNoLCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhhbnRvbUxv
Y2FsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJ
bnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShn
cmFwaCwgIk9TUiBhdmFpbGFiaWxpdHkgYW5hbHlzaXMiKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNT
QSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Cisg
ICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJzdCk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBkZXB0aEZpcnN0W2ld
OworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkLmZpbGwoMCk7Cisg
ICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwuZmlsbCgwKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmly
c3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhG
aXJzdFtpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgZWRpdCBhdmFpbGFiaWxp
dHlBdFRhaWwgaW4tcGxhY2UsIGJ1dCBmaXJzdCBpbml0aWFsaXplIGl0IHRvCisgICAgICAgICAg
ICAvLyBhdmFpbGFiaWxpdHlBdEhlYWQuCisgICAgICAgICAgICBPcGVyYW5kczxOb2RlKj4mIGF2
YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgICAg
IGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAg
IGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewor
ICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQo
bm9kZS0+bG9jYWwoKSkgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKTsgai0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioaik7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8
Tm9kZSo+JiBzdWNjZXNzb3JBdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlB
dEhlYWQ7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gYXZhaWxhYmlsaXR5LnNp
emUoKTsgay0tOykgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBteU5vZGUgPSBhdmFpbGFi
aWxpdHlba107CisgICAgICAgICAgICAgICAgICAgIGlmICghbXlOb2RlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVuZXNzQXRIZWFkLmNvbnRhaW5zKG15Tm9kZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBvdmVyd3JpdGUgYXZh
aWxhYmlsaXR5IHdpdGggYSBib2d1cyBub2RlCisgICAgICAgICAgICAgICAgICAgIC8vIGF0IG1l
cmdlIHBvaW50cy4gVGhpcyBpcyBmaW5lLCBzaW5jZSBtZXJnZSBwb2ludHMgaGF2ZQorICAgICAg
ICAgICAgICAgICAgICAvLyBNb3ZIaW50KFBoaSkncyB0byB3b3JrIGFyb3VuZCB0aGlzLiBUaGUg
b3V0Y29tZSBvZiB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIHlvdSBtaWdodCBoYXZl
IGEgcHJvZ3JhbSBpbiB3aGljaCBhIG5vZGUgaGFwcGVucyB0byByZW1haW4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gbGl2ZSBpbnRvIHNvbWUgYmxvY2sgQiwgYW5kIHNlcGFyYXRlbHkgKGR1ZSB0
byBjb3B5CisgICAgICAgICAgICAgICAgICAgIC8vIHByb3BhZ2F0aW9uKSBqdXN0IG9uZSBvZiB0
aGUgcHJlZGVjZXNzb3JzIG9mIEIgaXNzdWVkIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gTW92
SGludCBwdXR0aW5nIHRoYXQgbm9kZSBpbnRvIHNvbWUgbG9jYWwuIFRoZW4gaW4gQiB3ZSBtaWdo
dAorICAgICAgICAgICAgICAgICAgICAvLyB0aGluayB0aGF0IHRoYXQgbm9kZSBpcyBhIHZhbGlk
IHZhbHVlIGZvciB0aGF0IGxvY2FsLiBPZgorICAgICAgICAgICAgICAgICAgICAvLyBjb3Vyc2Ug
aWYgdGhhdCBsb2NhbCB3YXMgYWN0dWFsbHkgbGl2ZSBpbiBCLCBCIHdvdWxkIGhhdmUgYQorICAg
ICAgICAgICAgICAgICAgICAvLyBQaGkgZm9yIGl0LiBTbyBlc3NlbnRpYWxseSB3ZSdsbCBoYXZl
IE9TUiBleGl0IGRyb3BwaW5nIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gbm9kZSdzIHZh
bHVlIGludG8gdGhlIGxvY2FsIHdoZW4gd2Ugb3RoZXJ3aXNlIChpbiB0aGUgREZHKQorICAgICAg
ICAgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIGRyb3BwZWQgdW5kZWZpbmVkIGludG8gdGhlIGxv
Y2FsLiBUaGlzIHNlZW1zCisgICAgICAgICAgICAgICAgICAgIC8vIGhhcm1sZXNzLgorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yQXZhaWxhYmlsaXR5
W2tdID0gbXlOb2RlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworYm9vbCBwZXJm
b3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5n
UmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgT1NSIEF2YWlsYWJpbGl0eSBBbmFseXNpcyBQaGFz
ZSIpOworICAgIHJldHVybiBydW5QaGFzZTxPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlPihn
cmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlX2gKKyNkZWZpbmUgREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZV9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgR3JhcGg7CisKKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxhYmlsdGl5
QXRIZWFkL1RhaWwuIFRoaXMgcmVsaWVzIG9uIGxpdmVuZXNzCisvLyBhbmFseXNpcyBwaGFzZSBo
YXZpbmcgYmVlbiBydW4gYW5kIHRoZSBncmFwaCBub3QgaGF2aW5nIGJlZW4gdHJhbnNmb3JtZWQK
Ky8vIGFmdGVyIHRoYXQuCisKK2Jvb2wgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKEdy
YXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTUyNDMy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgzLDIxICsxODMsMjAgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBp
bGVJblRocgogCiAgICAgcGVyZm9ybVN0b3JlRWxpbWluYXRpb24oZGZnKTsKICAgICBwZXJmb3Jt
Q1BTUmV0aHJlYWRpbmcoZGZnKTsKLSAgICAKLSAgICAvLyBOb3RlIHRoYXQgRENFIGlzIG5lY2Vz
c2FyeSBldmVuIGluIHRoZSBGVEwsIGJlY2F1c2Ugb25seSB3ZSBrbm93IHdoYXQgaXMKLSAgICAv
LyBsaXZlLWluLWJ5dGVjb2RlLiBUaGUgRlRMIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRl
cm1pbmUgd2hlbiBPU1IgZXhpdAotICAgIC8vIHZhbHVlcyBzaG91bGQgYmUgd2lyZWQgdG8gTFZh
bHVlcywgdmVyc3VzIGJlaW5nIHdpcmVkIHRvIEV4aXRWYWx1ZTo6ZGVhZCgpLgotICAgIC8vIFRo
aXMgaXMgZGlzdGluY3QgZnJvbSB3aGF0IFpvbWJpZUhpbnQgZ2l2ZXMgdXM6IFpvbWJpZUhpbnQg
c2F5cyB0aGF0IHRoZQotICAgIC8vIHZhbHVlIGluIHRoZSBnaXZlbiBieXRlY29kZSBsb2NhbCBp
cyBhbHdheXMgZGVhZDsgdGhlIHJlZmVyZW5jZSBjb3VudHMgdGhhdAotICAgIC8vIERDRSBwcm9k
dWNlcyB0ZWxsIHVzIHRoYXQgdGhlIHZhbHVlIGlzIGxpdmUgZm9yIGEgd2hpbGUgYnV0IGV2ZW50
dWFsbHkKLSAgICAvLyBkaWVzLCBhbmQgaXQgdGVsbHMgdXMgZXhhY3RseSB3aGVuIHRoZSBkZWF0
aCBwb2ludCBpcy4KLSAgICBwZXJmb3JtRENFKGRmZyk7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkK
ICAgICBpZiAoT3B0aW9uczo6dXNlRXhwZXJpbWVudGFsRlRMKCkKICAgICAgICAgJiYgY29tcGls
ZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uCiAgICAgICAgICYmIEZUTDo6Y2FuQ29tcGlsZShkZmcp
KSB7CiAgICAgICAgIAorICAgICAgICBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoZGZnKTsK
KyAgICAgICAgcGVyZm9ybVNTQUNvbnZlcnNpb24oZGZnKTsKKyAgICAgICAgcGVyZm9ybUNGQShk
ZmcpOworICAgICAgICBwZXJmb3JtRENFKGRmZyk7IC8vIFdlIHJlbHkgb24gdGhpcyB0byBjb252
ZXJ0IGRlYWQgU2V0TG9jYWxzIGludG8gdGhlIGFwcHJvcHJpYXRlIGhpbnQsIGFuZCB0byBraWxs
IGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJlY29nbml6ZWQgYXMgZGVhZCBieSBMTFZNLgorICAg
ICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOworICAgICAgICBwZXJmb3JtRmx1c2hM
aXZlbmVzc0FuYWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFs
eXNpcyhkZmcpOworICAgICAgICAKICAgICAgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdy
YXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoiKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJ
WE1FOiBTdXBwb3J0IE9TUiBlbnRyeS4KQEAgLTIxNSw2ICsyMTQsNyBAQCBQbGFuOjpDb21waWxh
dGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQogICAgIAorICAgIHBlcmZvcm1EQ0UoZGZnKTsKICAgICBwZXJmb3JtVmlydHVhbFJlZ2lz
dGVyQWxsb2NhdGlvbihkZmcpOwogICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBh
ZnRlciBvcHRpbWl6YXRpb246Iik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDE0ICs0NzIsMTkgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CiAgICAgICAgICAgICAvLyBUaGlz
IG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlv
bi4gSXQgaXMKICAgICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxv
d3MgdGhpcyBwaGFzZS4KLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICAgICAgLy8gUGhpcyBzaG91bGQgbm90
IGJlIHZpc2libGUgaGVyZSBzaW5jZSB3ZSdyZSBpdGVyYXRpbmcgdGhlIGFsbC1idXQtUGhpJ3MK
ICAgICAgICAgICAgIC8vIHBhcnQgb2YgYmFzaWMgYmxvY2tzLgotICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVwc2lsb246CisgICAgICAgICAg
ICAvLyBUaGVzZSBkb24ndCBnZXQgaW5zZXJ0ZWQgdW50aWwgd2UgZ28gaW50byBTU0EuCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBHZXRTY29wZToKQEAgLTU0MSw3ICs1NDYsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMYXN0Tm9kZVR5
cGU6Ci0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzODYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2Vy
dGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFNTQUNvbnZlcnNp
b25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgU1NBQ29udmVyc2lvblBoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikK
KyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICAgICAgLCBtX25vblRyaXZpYWxQ
aGlzKE9wZXJhbmRzTGlrZSwgZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAg
ICAgLCBtX2NoYW5nZWQoZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigp
CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRl
ZENQUyk7CisgICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIFNldExvY2FsJ3Mg
bmVlZCBmbHVzaGluZy4gTmVlZCB0byBkbyB0aGlzIHdoaWxlIHRoZQorICAgICAgICAvLyBQaGkg
Z3JhcGggaXMgc3RpbGwgaW50YWN0LgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGbHVzaCkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgYWRkRmx1c2hlZExvY2FsT3Aobm9kZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKCFtX2ZsdXNoZWRMb2NhbE9wV29ya2xp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9mbHVzaGVkTG9jYWxP
cFdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBBU1NFUlQobV9mbHVzaGVkTG9jYWxP
cHMuY29udGFpbnMobm9kZSkpOworICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4o
bV9ncmFwaCwgbm9kZSwgYWRkRmx1c2hlZExvY2FsRWRnZSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIEVsaW1pbmF0ZSBhbGwgZHVwbGljYXRlIG9yIHNlbGYtcG9pbnRpbmcgUGhp
IGVkZ2VzLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgLy8gd2UgdHJhbnNmb3JtOgorICAgICAg
ICAvLworICAgICAgICAvLyBwOiBQaGkoQG4xLCBAbjIsIEBuMykKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gaW50bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gcDogUGhpKEB4KQorICAgICAgICAv
LworICAgICAgICAvLyBpZiBlYWNoIEBuaSBpbiB7QG4xLCBAbjIsIEBuM30gaXMgZWl0aGVyIGVx
dWFsIHRvIEBwIHRvIGlzIGVxdWFsCisgICAgICAgIC8vIHRvIEB4LCBmb3IgZXhhY3RseSBvbmUg
b3RoZXIgQHguIEFkZGl0aW9uYWxseSwgdHJpdmlhbCBQaGlzIChpLmUuCisgICAgICAgIC8vIHA6
IFBoaShAeCkpIGFyZSBmb3J3YXJkZWQsIHNvIHRoYXQgaWYgaGF2ZSBhbiBlZGdlIHRvIHN1Y2gg
QHAsIHdlCisgICAgICAgIC8vIHJlcGxhY2UgaXQgd2l0aCBAeC4gVGhpcyBsb29wIGRvZXMgdGhp
cyBmb3IgUGhpcyBvbmx5OyBsYXRlciB3ZSBkbworICAgICAgICAvLyBzdWNoIGZvcndhcmRpbmcg
Zm9yIFBoaSByZWZlcmVuY2VzIGZvdW5kIGluIG90aGVyIG5vZGVzLgorICAgICAgICAvLworICAg
ICAgICAvLyBTZWUgQXljb2NrIGFuZCBIb3JzcG9vbCBpbiBDQycwMCBmb3IgYSBiZXR0ZXIgZGVz
Y3JpcHRpb24gb2Ygd2hhdAorICAgICAgICAvLyB3ZSdyZSBkb2luZyBoZXJlLgorICAgICAgICBk
byB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykg
eworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxv
Y2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmIChw
aGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yd2FyZFBoaUNoaWxkcmVu
KHBoaSk7CisgICAgICAgICAgICAgICAgICAgIGRlZHVwbGljYXRlQ2hpbGRyZW4ocGhpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdl
ZCk7CisgICAgICAgIAorICAgICAgICAvLyBGb3IgZWFjaCBiYXNpYyBibG9jaywgZm9yIGVhY2gg
bG9jYWwgbGl2ZSBhdCB0aGUgaGVhZCBvZiB0aGF0IGJsb2NrLAorICAgICAgICAvLyBmaWd1cmUg
b3V0IHdoYXQgbm9kZSB3ZSBzaG91bGQgYmUgcmVmZXJyaW5nIHRvIGluc3RlYWQgb2YgdGhhdCBs
b2NhbC4KKyAgICAgICAgLy8gSWYgaXQgdHVybnMgb3V0IHRvIGJlIGEgbm9uLXRyaXZpYWwgUGhp
LCBtYWtlIHN1cmUgdGhhdCB0byBjcmVhdGUgYW4KKyAgICAgICAgLy8gU1NBIFBoaSBhbmQgVXBz
aWxvbnMgaW4gcHJlZGVjZXNzb3IgYmxvY2tzLiBXZSByZXVzZQorICAgICAgICAvLyBCYXNpY0Js
b2NrOjp2YXJpYWJsZXNBdEhlYWQgZm9yIHRyYWNraW5nIHdoaWNoIG5vZGVzIHRvIHJlZmVyIHRv
LgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07CisgICAgICAgICAg
ICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxl
LT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUG9pc29uIHRoaXMgZW50
cnkgaW4gdmFyaWFibGVzQXRIZWFkIGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAg
ICAgLy8gd2FudCBhbnlvbmUgdG8gdHJ5IHRvIHJlZmVyIHRvIGl0LCBpZiB0aGUgdmFyaWFibGUg
aXMKKyAgICAgICAgICAgICAgICAgICAgLy8gY2FwdHVyZWQuCisgICAgICAgICAgICAgICAgICAg
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSAwOworICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBQaGk6CisgICAg
ICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICBjYXNlIEdldExv
Y2FsOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAg
ICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGkgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVu
dCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
UGhpKSB7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmp1
c3RPbmVDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSBlZGdlLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGEgbm9uLXRyaXZpYWwgUGhpLgor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzZXQgdGhlIFBoaSdz
IHR5cGUgKGkuZS4gTm9kZVJlc3VsdE1hc2spIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyByZWZsZWN0IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEncyB1bmJveGluZy4gVGhpcyB3aWxsIG1h
a2UgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhc2llciBmb3IgdGhlIGJhY2tlbmQg
dG8gZmlndXJlIG91dCB3aGljaCB2YWx1ZSB0byB1c2UgZm9yCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBVcHNpbG9ucywgYW5kIHdoYXQgdHlwZSB0byB1c2UgZm9yIHRoZSBQaGkgaXRzZWxm
LgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
RmxhZ3MgcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91
bGRVbmJveElmUG9zc2libGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IE5vZGVSZXN1bHROdW1iZXI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IE5vZGVSZXN1bHRJbnQzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBOb2RlUmVzdWx0Qm9vbGVhbjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gTm9kZVJlc3VsdEpTOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IE5vZGVSZXN1bHRKUzsKKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydCgwLCBT
cGVjTm9uZSwgUGhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3Mo
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVSZXN1bHRNYXNrKSA9PSByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNz
b3JzLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiB1cHNpbG9uID0gcHJlZGVjZXNzb3ItPmFwcGVuZE5vblRlcm1p
bmFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwg
VXBzaWxvbiwgT3BJbmZvKG5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNO
b25lLCBNb3ZIaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhibG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBi
bG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gbm9kZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIENvbnZlcnQgb3BlcmF0aW9ucyBvdmVyIGxvY2FscyBpbnRvIG9wZXJhdGlv
bnMgb3ZlciBTU0Egbm9kZXMuCisgICAgICAgIC8vIC0gR2V0TG9jYWwgb3ZlciBjYXB0dXJlZCB2
YXJpYWJsZXMgbG9zZSB0aGVpciBwaGlzLgorICAgICAgICAvLyAtIEdldExvY2FsIG92ZXIgdW5j
YXB0dXJlZCB2YXJpYWJsZXMgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzCisg
ICAgICAgIC8vICAgdG8gdGhlIG5vZGUgc3BlY2lmaWVkIGJ5IHZhcmlhYmxlc0F0SGVhZC4KKyAg
ICAgICAgLy8gLSBTZXRMb2NhbCBnZXRzIE5vZGVNdXN0R2VuZXJhdGUgaWYgaXQncyBmbHVzaGVk
LCBvciB0dXJucyBpbnRvIGEKKyAgICAgICAgLy8gICBNb3ZIaW50IG90aGVyd2lzZS4KKyAgICAg
ICAgLy8gLSBGbHVzaCBsb3NlcyBpdHMgY2hpbGRyZW4gYnV0IHJlbWFpbnMsIGJlY2F1c2Ugd2Ug
d2FudCB0byBrbm93IHdoZW4gYQorICAgICAgICAvLyAgIGZsdXNoZWQgU2V0TG9jYWwncyB2YWx1
ZSBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGlzIGFsc28gbWFrZXMgaXQgc2ltcGxlcgorICAgICAg
ICAvLyAgIHRvIHJlYXNvbiBhYm91dCB0aGUgZm9ybWF0IG9mIGEgbG9jYWwsIHNpbmNlIHdlIGNh
biBqdXN0IGZvbGQgaXQgaW50byB0aGUKKyAgICAgICAgLy8gICBiYWNrd2FyZHMgYW5hbHlzaXMg
dGhhdCBMaXZlbmVzc0FuYWx5c2lzUGhhc2UgZG9lcy4gQXMgcGFydCBvZiB0aGUKKyAgICAgICAg
Ly8gICBiYWNrd2FyZHMgYW5hbHlzaXMsIHdlIHNheSB0aGF0IHRoZSB0eXBlIG9mIGEgbG9jYWwg
Y2FuIGJlIGVpdGhlcgorICAgICAgICAvLyAgIGludDMyLCBkb3VibGUsIHZhbHVlLCBvciBkZWFk
LgorICAgICAgICAvLyAtIFBoYW50b21Mb2NhbCBiZWNvbWVzIFBoYW50b20sIGFuZCBpdHMgY2hp
bGQgaXMgd2hhdGV2ZXIgaXMgc3BlY2lmaWVkCisgICAgICAgIC8vICAgYnkgdmFyaWFibGVzQXRI
ZWFkLgorICAgICAgICAvLyAtIFNldEFyZ3VtZW50IHR1cm5zIGludG8gR2V0TG9jYWwuCisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgICAgICAgICAgYmxv
Y2stPmF0KG5vZGVJbmRleCktPnJlcGxhY2VtZW50ID0gMDsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBo
LnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+aXNDYXB0dXJlZCgpIHx8IG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTXVzdEdlbmVyYXRl
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJl
bi5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNh
c2UgRmx1c2g6IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogeworICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0
dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLnNldE5vZGUoYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50
OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldExv
Y2FsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBGcmVlIGFsbCBwaGlzIGFuZCByZXNldCB2YXJpYWJsZXMgdmVjdG9ycy4KKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlz
LnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRv
ci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgICAgICBibG9jay0+cGhpcy5j
bGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5jbGVhcigpOworICAg
ICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5jbGVhcigpOworICAgICAgICAgICAgYmxv
Y2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVh
ZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnNzYSA9IGFkb3B0UHRyKG5ldyBCYXNpY0Js
b2NrOjpTU0FEYXRhKGJsb2NrKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZ3Jh
cGgubV9mb3JtID0gU1NBOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGZvcndhcmRQaGlD
aGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAgICAgICAgICAgRWRnZSYgZWRnZSA9
IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOworICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IGZvcndhcmRQaGlF
ZGdlKGVkZ2UpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGUqIGZvcndhcmRQaGko
Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAg
ICBFZGdlIGVkZ2UgPSBub2RlLT5qdXN0T25lQ2hpbGQoKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWVkZ2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgICAg
IHJldHVybiBlZGdlLm5vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR2V0
TG9jYWw6CisgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGZvcndh
cmRQaGlFZGdlKEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBOb2RlKiBuZXdOb2RlID0gZm9y
d2FyZChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChuZXdOb2RlID09IGVkZ2Uubm9kZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBlZGdlLnNldE5vZGUobmV3Tm9kZSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlZHVwbGljYXRl
Q2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKKyAgICAgICAgICAgIEVkZ2UgZWRnZSA9
IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOworICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGVkZ2UgPT0gbm9kZSkgeworICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2UoaS0tKTsKKyAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBBZGphY2VuY3lM
aXN0OjpTaXplOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGRyZW4uY2hp
bGQoaikgPT0gZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1v
dmVFZGdlKGotLSk7CisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHZvaWQgZm9yd2FyZE5vZGVDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgREZH
X05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgZm9yd2FyZE5vZGVFZGdlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBmb3J3YXJkTm9kZUVkZ2UoTm9kZSosIEVkZ2UmIGVkZ2UpCisg
ICAgeworICAgICAgICBpZiAoZWRnZS0+b3AoKSAKKyAgICAgICAgc3dpdGNoIChlZGdlLT5vcCgp
KSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
dm9pZCBhZGRGbHVzaGVkTG9jYWxPcChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG1f
Zmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBtX2ZsdXNoZWRMb2NhbE9wcy5hZGQobm9kZSk7CisgICAgICAgIG1fZmx1c2hlZExvY2Fs
T3BXb3JrbGlzdC5hcHBlbmQobm9kZSk7CisgICAgfQorCisgICAgdm9pZCBhZGRGbHVzaGVkTG9j
YWxFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBhZGRGbHVzaGVkTG9jYWxP
cChlZGdlLm5vZGUoKSk7CisgICAgfQorCisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0
OworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BzOworICAgIFZlY3RvcjxOb2Rl
Kj4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OworICAgIGJvb2wgbV9jaGFuZ2VkOworfTsKKwor
Ym9vbCBwZXJmb3JtU1NBQ29udmVyc2lvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBTU0EgQ29udmVyc2lvbiBQaGFzZSIpOworICAgIHJl
dHVybiBydW5QaGFzZTxTU0FDb252ZXJzaW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdTU0FDb252ZXJzaW9u
UGhhc2VfaAorI2RlZmluZSBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29udmVydCBUaHJlYWRlZENQUyBm
b3JtIGludG8gU1NBIGZvcm0uIFRoaXMgcmVzdWx0cyBpbiBhIGZvcm0gdGhhdCBoYXM6CisvLwor
Ly8gLSBSb3VnaGx5IG1pbmltYWwgUGhpJ3MuIFdlIHVzZSB0aGUgQXljb2NrICYgSG9yc3Bvb2wg
Zml4cG9pbnQgZm9yCisvLyAgIGNvbnZlcnRpbmcgdGhlIENQUyBtYXhpbWFsIFBoaXMgaW50byBT
U0EgbWluaW1hbCBQaGlzLCB3aXRoIHRoZSBjYXZlYXQKKy8vICAgdGhhdCBpcnJlZHVjaWJsZSBj
b250cm9sIGZsb3cgbWF5IHJlc3VsdCBpbiBzb21lIG1pc3NlZCBvcHBvcnR1bml0aWVzCisvLyAg
IGZvciBQaGkgcmVkdWN0aW9uLgorLy8KKy8vIC0gTm8gdXNlcyBvZiBHZXRMb2NhbC9TZXRMb2Nh
bCBleGNlcHQgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcyBhbmQgZmx1c2hlcy4KKy8vICAgQWZ0ZXIg
dGhpcywgYW55IHJlbWFpbmluZyBTZXRMb2NhbCBtZWFucyBGbHVzaC4gRmx1c2ggbm9kZXMgYXJl
CisvLyAgIGVsaW1pbmF0ZWQuIFBoYW50b21Mb2NhbHMgYmVjb21lIFBoYW50b21zLiBOb2RlcyBt
YXkgbWF5IGhhdmUgY2hpbGRyZW4KKy8vICAgdGhhdCBhcmUgaW4gYW5vdGhlciBiYXNpYyBibG9j
ay4KKy8vCisvLyAtIE1vdkhpbnRzIGFyZSB1c2VkIGZvciBPU1IgaW5mb3JtYXRpb24sIGFuZCBh
cmUgdGhlbXNlbHZlcyBtaW5pbWFsLgorLy8gICBBIE1vdkhpbnQgd2lsbCBvY2N1ciBhdCBzb21l
IHBvaW50IGFmdGVyIHRoZSBhc3NpZ25pbmcsIGFuZCBhdCBQaGkKKy8vICAgcG9pbnRzLgorLy8K
Ky8vIC0gVW5saWtlIGNvbnZlbnRpb25hbCBTU0EgaW4gd2hpY2ggUGhpIGZ1bmN0aW9ucyByZWZl
ciB0byBwcmVkZWNlc3NvcnMKKy8vICAgYW5kIHZhbHVlcywgb3VyIFNTQSB1c2VzIFVwc2lsb24g
ZnVuY3Rpb25zIHRvIGluZGljYXRlIHZhbHVlcyBpbgorLy8gICBwcmVkZWNlc3NvcnMuIEEgbWVy
Z2Ugd2lsbCBsb29rIGxpa2U6CisvLworLy8gICBsYWJlbEE6CisvLyAgICAgICBhOiBUaGluZ3ko
Li4uKQorLy8gICAgICAgYjogVXBzaWxvbiheZSwgQGEpCisvLyAgICAgICBKdW1wKGxhYmVsQykK
Ky8vCisvLyAgIGxhYmVsQjoKKy8vICAgICAgIGM6IE90aGVyVGhpbmd5KC4uLikKKy8vICAgICAg
IGQ6IFVwc2lsb24oXmUsIEBjKQorLy8gICAgICAgSnVtcChsYWJlbEMpCisvLworLy8gICBsYWJl
bEM6CisvLyAgICAgICBlOiBQaGkoKQorLy8KKy8vICAgTm90ZSB0aGF0IHRoZSBQaGkgaGFzIG5v
IGNoaWxkcmVuLCBidXQgdGhlIHByZWRlY2Vzc29ycyBoYXZlIFVwc2lsb25zCisvLyAgIHRoYXQg
aGF2ZSBhIHdlYWsgcmVmZXJlbmNlIHRvIHRoZSBQaGkgKF5lIGluc3RlYWQgb2YgQGU7IHdlIHN0
b3JlIGl0CisvLyAgIGluIHRoZSBPcEluZm8gcmF0aGVyIHRoYW4gdGhlIEFkamFjZW5jeUxpc3Qp
LiBUaGluayBvZiB0aGUgVXBzaWxvbgorLy8gICBhcyAiYXNzaWduaW5nIiB0byB0aGUgInZhcmlh
YmxlIiBhc3NvY2lhdGVkIHdpdGggdGhlIFBoaSwgYW5kIHRoYXQKKy8vICAgdGhpcyBpcyB0aGUg
b25lIHBsYWNlIGluIFNTQSBmb3JtIHdoZXJlIHlvdSBjYW4gaGF2ZSBtdWx0aXBsZQorLy8gICBh
c3NpZ25tZW50cy4KKy8vCisvLyAgIFRoaXMgaW1wbGllcyBzb21lIG90aGVyIGxvb3NlbmluZ3Mg
b2YgU1NBLiBGb3IgZXhhbXBsZSwgYW4gVXBzaWxvbgorLy8gICBtYXkgcHJlY2VkZSBhIFBoaSBp
biB0aGUgc2FtZSBiYXNpYyBibG9jazsgdGhpcyBtYXkgYXJpc2UgYWZ0ZXIgQ0ZHCisvLyAgIHNp
bXBsaWZpY2F0aW9uLiBBbHRob3VnaCBpdCdzIHByb2ZpdGFibGUgZm9yIENGRyBzaW1wbGlmaWNh
dGlvbiAob3IKKy8vICAgc29tZSBvdGhlciBwaGFzZSkgdG8gcmVtb3ZlIHRoZXNlLCBpdCdzIG5v
dCBzdHJpY3RseSBuZWNlc3NhcnkuIEFzCisvLyAgIHdlbGwsIHRoaXMgZm9ybSBhbGxvd3MgdGhl
IFVwc2lsb24gdG8gYmUgaW4gYW55IGJsb2NrIHRoYXQgZG9taW5hdGVzCisvLyAgIHRoZSBwcmVk
ZWNlc3NvciBibG9jayBvZiB0aGUgUGhpLCB3aGljaCBhbGxvd3MgZm9yIGJsb2NrIHNwbGl0dGlu
ZyB0bworLy8gICBpZ25vcmUgdGhlIHBvc3NpYmlsaXR5IG9mIGludHJvZHVjaW5nIGFuIGV4dHJh
IGVkZ2UgYmV0d2VlbiB0aGUgUGhpCisvLyAgIGFuZCB0aGUgcHJlZGVjZXNzb3IgKHRob3VnaCBu
b3JtYWwgU1NBIHdvdWxkIGFsbG93IHRoaXMsIGFsc28sIHdpdGgKKy8vICAgdGhlIGNhdmVhdCB0
aGF0IHRoZSBQaGkgcHJlZGVjZXNzb3IgYmxvY2sgbGlzdHMgd291bGQgaGF2ZSB0byBiZQorLy8g
ICB1cGRhdGVkKS4KKy8vCisvLyAgIFRoZSBlYXNpZXN0IHdheSB0byBjb252ZXJ0IGZyb20gdGhp
cyBTU0EgZm9ybSBpbnRvIGEgZGlmZmVyZW50IFNTQQorLy8gICBmb3JtIGlzIHRvIHJlZG8gU1NB
IGNvbnZlcnNpb24gZm9yIFBoaSBmdW5jdGlvbnMuIFRoYXQgaXMsIHRyZWF0IGVhY2gKKy8vICAg
UGhpIGluIG91ciBJUiBhcyBhIG5vbi1TU0EgdmFyaWFibGUgaW4gdGhlIGZvcmVpZ24gSVIgKHNv
LCBhcyBhbgorLy8gICBhbGxvY2EgaW4gTExWTSBJUiwgZm9yIGV4YW1wbGUpOyB0aGUgVXBzaWxv
bnMgdGhhdCByZWZlciB0byB0aGUgUGhpCisvLyAgIGJlY29tZSBzdG9yZXMgYW5kIHRoZSBQaGlz
IHRoZW1zZWx2ZXMgYmVjb21lIGxvYWRzLgorLy8KKy8vICAgRnVuIGZhY3Q6IFVwc2lsb24gaXMg
c28gbmFtZWQgYmVjYXVzZSBpdCBjb21lcyBiZWZvcmUgUGhpIGluIHRoZQorLy8gICBhbHBoYWJl
dC4gSXQgY2FuIGJlIHdyaXR0ZW4gYXMgIlkiLgorCitib29sIHBlcmZvcm1TU0FDb252ZXJzaW9u
KEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
CShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNiArMzE4LDI3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGNoZWNrQW5kU2V0KG1fZmxhZ3MsIG1fZmxhZ3MgfCBuZXdGbGFn
cyk7CiAgICAgfQogICAgIAorICAgIEZsdXNoRm9ybWF0IGZsdXNoRm9ybWF0KCkKKyAgICB7Cisg
ICAgICAgIGlmICghc2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpCisgICAgICAgICAgICByZXR1cm4g
Rmx1c2hlZEpTVmFsdWU7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkVXNlRG91YmxlRm9y
bWF0KCkpCisgICAgICAgICAgICByZXR1cm4gRmx1c2hlZERvdWJsZTsKKyAgICAgICAgCisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhcmd1bWVudEF3YXJlUHJlZGljdGlvbigp
OworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAg
ICAgcmV0dXJuIEZsdXNoZWRJbnQzMjsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0NlbGxTcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkQ2VsbDsKKyAg
ICAgICAgCisgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAg
ICAgICAgICAgIHJldHVybiBGbHVzaGVkQm9vbGVhbjsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBGbHVzaGVkSlNWYWx1ZTsKKyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMg
c2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQg
d2l0aAogICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0
aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIs
NiArODIsOCBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBK
dW1wOgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgRm9yd2FyZEZvcmNlT1NSRXhp
dDoKKyAgICBjYXNlIFBoaToKKyAgICBjYXNlIFVwc2lsb246CiAgICAgICAgIC8vIFRoZXNlIGFy
ZSBPSy4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKQEAgLTE3NCw2
ICsxNzYsOCBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAKIGJvb2wgY2Fu
Q29tcGlsZShHcmFwaCYgZ3JhcGgpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQoZ3JhcGgubV9mb3Jt
ID09IFNTQSk7CisgICAgCiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFwaC5u
dW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlz
aW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMCArNjEsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICwgbV9mdGxTdGF0ZShzdGF0ZSkKICAgICAgICAgLCBtX2hlYXBzKHN0YXRlLmNvbnRleHQpCiAg
ICAgICAgICwgbV9vdXQoc3RhdGUuY29udGV4dCkKLSAgICAgICAgLCBtX2xvY2Fsc0Jvb2xlYW4o
T3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQotICAg
ICAgICAsIG1fbG9jYWxzMzIoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFy
aWFibGVzQXRIZWFkKQotICAgICAgICAsIG1fbG9jYWxzNjQoT3BlcmFuZHNMaWtlLCBzdGF0ZS5n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQotICAgICAgICAsIG1fbG9jYWxzRG91Ymxl
KE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKICAg
ICAgICAgLCBtX3ZhbHVlU291cmNlcyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDAp
LT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKQogICAgICAgICAsIG1fZXhpdFRodW5rR2VuZXJhdG9yKHN0
YXRlKQpAQCAtODUsMTIgKzgxLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgbV9wcm9s
b2d1ZSA9IGFwcGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5jb250ZXh0LCBtX2Z0bFN0YXRlLmZ1
bmN0aW9uKTsKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSBtX2xvY2Fsc0Jvb2xlYW4uc2l6ZSgpOyBpbmRleC0tOykgewot
ICAgICAgICAgICAgbV9sb2NhbHNCb29sZWFuW2luZGV4XSA9IGJ1aWxkQWxsb2NhKG1fb3V0Lm1f
YnVpbGRlciwgbV9vdXQuYm9vbGVhbik7Ci0gICAgICAgICAgICBtX2xvY2FsczMyW2luZGV4XSA9
IGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgbV9vdXQuaW50MzIpOwotICAgICAgICAgICAg
bV9sb2NhbHM2NFtpbmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0Lmlu
dDY0KTsKLSAgICAgICAgICAgIG1fbG9jYWxzRG91YmxlW2luZGV4XSA9IGJ1aWxkQWxsb2NhKG1f
b3V0Lm1fYnVpbGRlciwgbV9vdXQuZG91YmxlVHlwZSk7Ci0gICAgICAgIH0KKyAgICAgICAgY3Jl
YXRlUGhpVmFyaWFibGVzKCk7CiAgICAgICAgIAogICAgICAgICBtX2luaXRpYWxpemF0aW9uID0g
YXBwZW5kQmFzaWNCbG9jayhtX2Z0bFN0YXRlLmNvbnRleHQsIG1fZnRsU3RhdGUuZnVuY3Rpb24p
OwogICAgICAgICBtX2FyZ3VtZW50Q2hlY2tzID0gYXBwZW5kQmFzaWNCbG9jayhtX2Z0bFN0YXRl
LmNvbnRleHQsIG1fZnRsU3RhdGUuZnVuY3Rpb24pOwpAQCAtMTA0LDE5ICs5NSwxOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBpZiAoIW1faGlnaEJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgbV9ibG9ja3MuYWRkKG1faGlnaEJsb2NrLCBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkJsb2NrICIsICptX2hpZ2hCbG9jaykpKTsKLSAgICAgICAgICAgIGFkZEZsdXNo
ZWRMb2NhbE9wUm9vdHMoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgY2xvc2VPdmVy
Rmx1c2hlZExvY2FsT3BzKCk7Ci0gICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhtX2Fy
Z3VtZW50Q2hlY2tzLCBsb3dCbG9jayhtX2dyYXBoLmJsb2NrKDApKSk7CiAKLSAgICAgICAgdHJh
bnNmZXJBbmRDaGVja0FyZ3VtZW50cygpOworICAgICAgICBjaGVja0FyZ3VtZW50cygpOwogICAg
ICAgICAKICAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX2dyYXBoLmJsb2NrKDApKSk7CiAg
ICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpCi0gICAgICAgICAgICBjb21w
aWxlQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhG
aXJzdDsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZp
cnN0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBjb21waWxlQmxvY2soZGVwdGhGaXJzdFtpXSk7CiAgICAgICAg
IAogICAgICAgICAvLyBBbmQgbm93IGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBibG9jay4K
ICAgICAgICAgbGlua09TUkV4aXRzQW5kQ29tcGxldGVJbml0aWFsaXphdGlvbkJsb2NrcygpOwpA
QCAtMTI5LDQxICsxMTksNDAgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIAotICAgIHZvaWQg
YWRkRmx1c2hlZExvY2FsT3BSb290cygpCisgICAgdm9pZCBjcmVhdGVQaGlWYXJpYWJsZXMoKQog
ICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBtX2hpZ2hCbG9jay0+c2l6
ZSgpOyBub2RlSW5kZXgtLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9j
ay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IEZsdXNoKQor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7
IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChub2RlKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygp
Ci0gICAgewotICAgICAgICB3aGlsZSAoIW1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Qu
bGFzdCgpOwotICAgICAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LnJlbW92ZUxhc3Qo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fZmx1c2hlZExvY2FsT3BzLmNv
bnRhaW5zKG5vZGUpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgREZHX05PREVfRE9fVE9f
Q0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkRmx1c2hlZExvY2FsRWRnZSk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykg
eworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBQaGkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIExUeXBlIHR5cGU7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5mbGFncygpICYgTm9kZVJlc3VsdE1hc2spIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIE5vZGVSZXN1bHROdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtX291
dC5kb3VibGVUeXBlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIE5vZGVSZXN1bHRJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0
LmludDMyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IE5vZGVSZXN1bHRCb29sZWFuOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gbV9vdXQuYm9v
bGVhbjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBO
b2RlUmVzdWx0SlM6CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtX291dC5pbnQ2NDsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcGhp
cy5hZGQobm9kZSwgYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCB0eXBlKSk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxP
cChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRh
aW5zKG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ZsdXNoZWRMb2NhbE9w
cy5hZGQobm9kZSk7Ci0gICAgICAgIG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5hcHBlbmQobm9k
ZSk7Ci0gICAgfQotICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsRWRnZShOb2RlKiwgRWRnZSBlZGdl
KQotICAgIHsKLSAgICAgICAgYWRkRmx1c2hlZExvY2FsT3AoZWRnZS5ub2RlKCkpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKQorICAgIHZvaWQgY2hl
Y2tBcmd1bWVudHMoKQogICAgIHsKICAgICAgICAgLy8gV2hpbGUgY2hlY2tpbmcgYXJndW1lbnRz
LCBldmVyeXRoaW5nIGlzIGluIHRoZSBzdGFjay4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV92YWx1ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KQpAQCAtMTcyLDU2ICsxNjEsNDkgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbigwKTsKICAgICAgICAgbV9ub2Rl
ID0gMDsKICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9ncmFwaC5tX2Nv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBtX2dyYXBoLm1fYXJndW1lbnRzW2ldOwotICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gbV9ncmFwaC5ibG9jaygwKS0+Zmx1c2hGb3JtYXRBdEhlYWQuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBtX2dyYXBoLmJsb2NrKDApLT5mbHVz
aEZvcm1hdEF0SGVhZFtpXTsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5ibG9j
aygwKS0+Zmx1c2hGb3JtYXRBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAvLyBJZiBpdCdzIGNhcHR1cmVkIHRoZW4gd2Un
bGwgYmUgYWNjZXNzaW5nIGl0IHRocm91Z2ggbG9hZHMgYW5kIHN0b3JlcwotICAgICAgICAgICAg
Ly8gYW55d2F5IC0gdGhlcmUncyBubyBwb2ludCBpbiB0cmFuc2ZlcmluZyBpdCBvdXQuCi0gICAg
ICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIGlmIChmb3Jt
YXQgPT0gRGVhZEZsdXNoIHx8IGZvcm1hdCA9PSBGbHVzaGVkSlNWYWx1ZSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUg
PSBtX291dC5sb2FkNjQoYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZm9ybWF0ICE9IEZsdXNoZWREb3VibGUpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVG
b3JtYXQoKSk7CisgICAgICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRy
ZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkg
eworICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6IHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90
SW50MzIoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGNh
c2UgRmx1c2hlZENlbGw6IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUo
anNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAg
ICBtX291dC5zZXQodW5ib3hJbnQzMihqc1ZhbHVlKSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46IHsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5v
ZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzQ2VsbFNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJh
Y2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpz
VmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1fbG9jYWxz
NjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJh
Y2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29sZWFu
KGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHVuYm94Qm9vbGVhbihq
c1ZhbHVlKSwgbV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlQmxv
Y2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHZvaWQgY29tcGlsZUJsb2NrKEJhc2ljQmxv
Y2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgbV9oaWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOworICAgICAgICBtX2hpZ2hCbG9jayA9IGJsb2NrOwogICAgICAgICBpZiAoIW1f
aGlnaEJsb2NrKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgTEJhc2lj
QmxvY2sgbG93QmxvY2sgPSBtX2Jsb2Nrcy5nZXQobV9oaWdoQmxvY2spOwogICAgICAgICAKICAg
ICAgICAgbV9uZXh0SGlnaEJsb2NrID0gMDsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IG5leHRC
bG9ja0luZGV4ID0gYmxvY2tJbmRleCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytuZXh0QmxvY2tJbmRleCkgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4
dEJsb2NrSW5kZXggPSBtX2hpZ2hCbG9jay0+aW5kZXggKyAxOyBuZXh0QmxvY2tJbmRleCA8IG1f
Z3JhcGgubnVtQmxvY2tzKCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIG1fbmV4
dEhpZ2hCbG9jayA9IG1fZ3JhcGguYmxvY2sobmV4dEJsb2NrSW5kZXgpOwogICAgICAgICAgICAg
aWYgKG1fbmV4dEhpZ2hCbG9jaykKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0MSwxMSAr
MjIzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3Rh
dGVGb3JCbG9jaygpOwogICAgICAgICAKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5jbGVhcigpOwot
ICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuY2xlYXIoKTsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVz
LmNsZWFyKCk7Ci0gICAgICAgIG1fc3RvcmFnZVZhbHVlcy5jbGVhcigpOwotICAgICAgICBtX3Rp
bWVUb0xpdmUuY2xlYXIoKTsKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVh
ZDsKICAgICAgICAgCiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKICAgICAgICAgbV9zdGF0ZS5i
ZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxvY2spOwpAQCAtMjc0LDYgKzI1MiwxMiBAQCBwcml2YXRl
OgogICAgICAgICBtX2RpcmVjdGlvbiA9IChtX25vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3
YXJkKSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAgICAg
IAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIFVwc2lsb246
CisgICAgICAgICAgICBjb21waWxlVXBzaWxvbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgY29tcGlsZVBoaSgpOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgICAgIGNvbXBpbGVKU0NvbnN0
YW50KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ0NSw4ICs0MjksOCBAQCBwcml2YXRlOgog
ICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgREZHX05P
REVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbV9ub2RlLCB1c2UpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKG1fbm9kZS0+aGFzUmVzdWx0KCkpCi0gICAgICAgICAgICBtX3RpbWVUb0xpdmUuYWRk
KG1fbm9kZSwgbV9ub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICBpZiAobV9ub2Rl
LT5hZGp1c3RlZFJlZkNvdW50KCkpCisgICAgICAgICAgICBtX2xpdmUuYWRkKG1fbm9kZSk7CiAg
ICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRXhlY3V0ZUVmZmVjdHMpCiAgICAgICAgICAgICBt
X3N0YXRlLmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7CkBAIC00NTQsNzMgKzQzOCw4MCBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb21w
aWxlVXBzaWxvbigpCisgICAgeworICAgICAgICBMVmFsdWUgZGVzdGluYXRpb24gPSBtX3BoaXMu
Z2V0KG1fbm9kZS0+cGhpKCkpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPnBo
aSgpLT5mbGFncygpICYgTm9kZVJlc3VsdE1hc2spIHsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0
TnVtYmVyOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgp
KSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJl
c3VsdEludDMyOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQx
KCkpLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2Rl
UmVzdWx0Qm9vbGVhbjoKKyAgICAgICAgICAgIG1fb3V0LnNldChsb3dCb29sZWFuKG1fbm9kZS0+
Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOb2RlUmVzdWx0SlM6CisgICAgICAgICAgICBtX291dC5zZXQobG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlUGhp
KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBzb3VyY2UgPSBtX3BoaXMuZ2V0KG1fbm9kZSk7Cisg
ICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNr
KSB7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdE51bWJlcjoKKyAgICAgICAgICAgIHNldERvdWJs
ZShtX291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBO
b2RlUmVzdWx0SW50MzI6CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5nZXQoc291cmNlKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKKyAg
ICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQuZ2V0KHNvdXJjZSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEpTOgorICAgICAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICB2b2lkIGNvbXBpbGVKU0NvbnN0YW50
KCkKICAgICB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0
YW50KG1fbm9kZSk7CiAgICAgICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQotICAgICAgICAgICAg
bV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuY29uc3REb3VibGUodmFsdWUuYXNEb3Vi
bGUoKSkpOworICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmNvbnN0RG91YmxlKHZhbHVlLmFz
RG91YmxlKCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFk
ZChtX25vZGUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSkpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlV2Vha0pTQ29uc3RhbnQoKQogICAg
IHsKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIHdlYWtQb2ludGVyKG1fbm9k
ZS0+d2Vha0NvbnN0YW50KCkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh3ZWFrUG9pbnRlcihtX25v
ZGUtPndlYWtDb25zdGFudCgpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldExv
Y2FsKCkKICAgICB7Ci0gICAgICAgIC8vIEdldExvY2FsIGlzIG9uZSBvZiB0aGUgZmV3IG5vZGVz
IHRoYXQgbWF5IGJlIGxlZnQgYmVoaW5kLCB3aXRoICFzaG91bGRHZW5lcmF0ZSgpLgotICAgICAg
ICBpZiAoIW1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgLy8gR2V0TG9jYWxzIGFyaXNlIG9ubHkgaW4gdHdvIGNhc2VzOiBjYXB0dXJlZCB2YXJp
YWJsZXMgYW5kIGFyZ3VtZW50cy4KICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9u
KCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChwcmVkaWN0
aW9uID09IFNwZWNOb25lKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVy
YWdlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKHZhbHVlLmlzQ2xlYXIoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0
cmFwIGluc3RlYWQuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEwMzgzCi0gICAgICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVy
YWdlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FT
U0VSVCghdmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKTsKICAgICAgICAgCi0gICAg
ICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXNJbnQz
MlNwZWN1bGF0aW9uKHZhbHVlLm1fdmFsdWUpKQotICAgICAgICAgICAgICAgIG1faW50MzJWYWx1
ZXMuYWRkKG1fbm9kZSwgbV9vdXQubG9hZDMyKHBheWxvYWRGb3IodmFyaWFibGUtPmxvY2FsKCkp
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFk
ZChtX25vZGUsIG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodmFy
aWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAodmFyaWFi
bGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9kb3VibGVW
YWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZ2V0KG1fbG9jYWxzRG91YmxlLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBMb2NhbHMgdGhhdCBhcmUgbWFya2VkIHNob3Vs
ZFVuYm94SWZQb3NzaWJsZSgpIHRoYXQgYXJlbid0IGFsc28gZm9yY2VkIHRvCi0gICAgICAgICAg
ICAvLyB1c2UgZG91YmxlIGZvcm1hdCwgYW5kIHRoYXQgaGF2ZSB0aGUgcmlnaHQgcHJlZGljdGlv
biwgd2lsbCBhbHdheXMgYmUKLSAgICAgICAgICAgIC8vIHNwZWN1bGF0ZWQgb24gU2V0TG9jYWwg
YW5kIHdpbGwgYWx3YXlzIGJlIHN0b3JlZCBpbnRvIGFuIGFwcHJvcHJpYXRlbHkKLSAgICAgICAg
ICAgIC8vIHR5cGVkIHJlZmVyZW5jZSBMVmFsdWUuCi0gICAgICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5h
ZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAg
IG1fYm9vbGVhblZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHNCb29sZWFuLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgLy8gV2Ugc2tpcCB0aGUgQ2VsbCBjYXNlIGhlcmUgYmVj
YXVzZSB0aGF0IGdldHMgdHJlYXRlZCBpZGVudGljYWxseSB0bwotICAgICAgICAgICAgLy8gSlNW
YWx1ZXMsIHNpbmNlIGNlbGxzIGFyZSBzdG9yZWQgdW50YWdnZWQuCi0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2Nh
bHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOworICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKHZhbHVlLm1fdmFsdWUpKQorICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9h
ZDMyKHBheWxvYWRGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2Fs
KCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVNldExvY2FsKCkKQEAgLTUzNCw1
OSArNTI1LDM2IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJ
ZlBvc3NpYmxlKCkpIHsKICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91Ymxl
Rm9ybWF0KCkpIHsKICAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2Fs
c0RvdWJsZS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KG5lZWRzRmx1c2hpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUo
dmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJj
ZShEb3VibGVJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVl
U291cmNlKERvdWJsZUluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZURvdWJs
ZSh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAg
IG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2Uo
RG91YmxlSW5KU1N0YWNrKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpIHsKICAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzMzIu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0Zs
dXNoaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxv
YWRGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNT
dGFjayk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fdmFs
dWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJ
bkxvY2Fscyk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZv
cih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChp
c0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAgICAgIExWYWx1ZSB2
YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQu
c2V0KHZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAg
ICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewotICAgICAgICAgICAgICAgICAgICBtX291
dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0g
VmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0
b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAg
ICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291
cmNlKFZhbHVlSW5KU1N0YWNrKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsK
LSAgICAgICAgICAgICAgICBtX291dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwg
bV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAg
ICAgICBpZiAobmVlZHNGbHVzaGluZykgewotICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9y
ZTY0KGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIGFkZHJlc3NGb3IodmFyaWFibGUtPmxv
Y2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkxvY2Fscyk7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCisgICAgICAgICAgICAgICAg
ICAgIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVl
SW5KU1N0YWNrKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAg
ICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgp
KSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2FsczY0Lm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsK
LSAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxv
Y2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFs
dWVTb3VyY2UoVmFsdWVJbkxvY2Fscyk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFk
ZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgbV92YWx1ZVNvdXJjZXMub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoKQpAQCAtNjIwLDE5ICs1ODgsMTgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRl
SW50ZWdlcihtX25vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9p
bnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5hZGQobGVmdCwgcmlnaHQpKTsKKyAgICAgICAg
ICAgICAgICBzZXRJbnQzMihtX291dC5hZGQobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IG1fb3V0LmFkZFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKICAgICAgICAg
ICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUo
cmVzdWx0LCAxKSk7Ci0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0
LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmV4
dHJhY3RWYWx1ZShyZXN1bHQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91
YmxlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRE
b3VibGUoCiAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlQWRkKGxvd0RvdWJsZShtX25vZGUt
PmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtNjUxLDE5ICs2MTgsMTggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihtX25vZGUtPmFyaXRo
Tm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2Rl
LCBtX291dC5zdWIobGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihtX291
dC5zdWIobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnN1Yldp
dGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxv
dywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAxKSk7Ci0gICAgICAg
ICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQs
IDApKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDAp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZCgKLSAgICAg
ICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXREb3VibGUoCiAgICAgICAgICAgICAg
ICAgbV9vdXQuZG91YmxlU3ViKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91Ymxl
KG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
NzAzLDEzICs2NjksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAgICAg
ICAgc2V0SW50MzIocmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91Ymxl
VmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXREb3Vi
bGUoCiAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTXVsKGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtODAwLDEzICs3NjUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG9uZSwgbGFzdE5leHQpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnBoaShtX291
dC5pbnQzMiwgcmVzdWx0cykpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKG1fb3V0
LmludDMyLCByZXN1bHRzKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZh
bHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0RG91Ymxl
KAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZURpdihsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTg5MSwxMyArODU1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvbmUsIGxhc3ROZXh0KTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5waGkobV9vdXQu
aW50MzIsIHJlc3VsdHMpKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LnBoaShtX291dC5p
bnQzMiwgcmVzdWx0cykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1
ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgK
ICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVSZW0obG93RG91YmxlKG1fbm9kZS0+Y2hpbGQx
KCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC05MTUsOCArODc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1
ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBMVmFsdWUg
cmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAg
ICAgICAgc2V0SW50MzIoCiAgICAgICAgICAgICAgICAgbV9vdXQuc2VsZWN0KAogICAgICAgICAg
ICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQXJpdGhNaW4KICAgICAgICAgICAgICAgICAgICAg
ICAgID8gbV9vdXQubGVzc1RoYW4obGVmdCwgcmlnaHQpCkBAIC05NTAsNyArOTEyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0g
ICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5waGkobV9vdXQuZG91
YmxlVHlwZSwgcmVzdWx0cykpOworICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291
dC5kb3VibGVUeXBlLCByZXN1bHRzKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC05NzEsMTIgKzkzMywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
CiAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXF1
YWwocmVzdWx0LCBtX291dC5jb25zdEludDMyKDEgPDwgMzEpKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHNldEludDMyKHJlc3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZh
bHVlcy5hZGQobV9ub2RlLCBtX291dC5kb3VibGVBYnMobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQx
KCkpKSk7CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlQWJzKGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIApAQCAtMTAwMywxMiArOTY1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAwKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2Rl
LCByZXN1bHQpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsK
LSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmRvdWJsZU5lZyhs
b3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291
dC5kb3VibGVOZWcobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMDIwLDQ3ICs5ODIsMzggQEAgcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVCaXRBbmQoKQogICAgIHsKLSAgICAgICAgbV9p
bnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsIG1fb3V0LmJpdEFuZChsb3dJbnQz
MihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAg
ICAgc2V0SW50MzIobV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVC
aXRPcigpCiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1f
bm9kZSwgbV9vdXQuYml0T3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmJpdE9yKGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGNvbXBpbGVCaXRYb3IoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZh
bHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsIG1fb3V0LmJpdFhvcihsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgc2V0
SW50MzIobV9vdXQuYml0WG9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVCaXRSU2hp
ZnQoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25v
ZGUsCi0gICAgICAgICAgICBtX291dC5hU2hyKAotICAgICAgICAgICAgICAgIGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgICAgIHNldElu
dDMyKG1fb3V0LmFTaHIoCisgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwK
KyAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9v
dXQuY29uc3RJbnQzMigzMSkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdExT
aGlmdCgpCiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1f
bm9kZSwKLSAgICAgICAgICAgIG1fb3V0LnNobCgKLSAgICAgICAgICAgICAgICBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIo
bV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOworICAgICAgICBzZXRJ
bnQzMihtX291dC5zaGwoCisgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwK
KyAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9v
dXQuY29uc3RJbnQzMigzMSkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdFVS
U2hpZnQoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICBt
X25vZGUsCi0gICAgICAgICAgICBtX291dC5sU2hyKAotICAgICAgICAgICAgICAgIGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQz
MihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgICAgIHNl
dEludDMyKG1fb3V0LmxTaHIoCisgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgp
KSwKKyAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwg
bV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVVJ
bnQzMlRvTnVtYmVyKCkKQEAgLTEwNjgsMTQgKzEwMjEsMTQgQEAgcHJpdmF0ZToKICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgaWYg
KCFub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihtX25vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0g
ICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC51bnNpZ25lZFRvRG91
YmxlKHZhbHVlKSk7CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQudW5zaWduZWRUb0RvdWJs
ZSh2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBzcGVjdWxhdGVGb3J3YXJkKAogICAgICAgICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwg
MCwgbV9vdXQubGVzc1RoYW4odmFsdWUsIG1fb3V0LmludDMyWmVybyksCiAgICAgICAgICAgICBG
b3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdFVJbnQzMiwgdmFsdWUpKTsKLSAgICAgICAgbV9pbnQz
MlZhbHVlcy5hZGQobV9ub2RlLCB2YWx1ZSk7CisgICAgICAgIHNldEludDMyKHZhbHVlKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlSW50MzJUb0RvdWJsZSgpCkBAIC0xMDg3LDcgKzEw
NDAsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBjb250ZW1wb3JhbmVvdXMgbG93LWxldmVsIHJl
cHJlc2VudGF0aW9ucy4gU28sIHRoaXMgZ2l2ZXMgY2hpbGQxIGEgZG91YmxlCiAgICAgICAgIC8v
IHJlcHJlc2VudGF0aW9uIGFuZCB0aGVuIGZvcndhcmRzIHRoYXQgcmVwcmVzZW50YXRpb24gdG8g
bV9ub2RlLgogICAgICAgICAKLSAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbG93
RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgc2V0RG91YmxlKGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrU3Ry
dWN0dXJlKCkKQEAgLTEyMTUsOCArMTE2OCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBj
b21waWxlR2V0QnV0dGVyZmx5KCkKICAgICB7Ci0gICAgICAgIG1fc3RvcmFnZVZhbHVlcy5hZGQo
Ci0gICAgICAgICAgICBtX25vZGUsIG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgc2V0U3RvcmFnZSht
X291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNPYmplY3Rf
YnV0dGVyZmx5KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEFycmF5TGVuZ3Ro
KCkKQEAgLTEyMjUsOCArMTE3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAg
ICAgIG1fbm9kZSwgbV9vdXQubG9hZDMyKGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDIoKSksIG1f
aGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkpOworICAgICAgICAgICAgc2V0SW50MzIobV9v
dXQubG9hZDMyKGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDIoKSksIG1faGVhcHMuQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtMTI1Niw3ICsxMjA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZSwgbV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwKICAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKG1fbm9kZS0+Y2hpbGQyKCkpLm1fdmFsdWUpKTsKICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIDAsIG1fb3V0
LmlzWmVybzY0KHJlc3VsdCkpOwotICAgICAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQo
bV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEy
ODgsNyArMTIzOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJv
bUhvbGUsIG5vVmFsdWUoKSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJs
ZU5vdEVxdWFsT3JVbm9yZGVyZWQocmVzdWx0LCByZXN1bHQpKTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTM4OCw4ICsxMzM5LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPQogICAgICAgICAgICAgbV9ncmFw
aC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW21fbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsK
ICAgICAgICAgCi0gICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25v
ZGUsCisgICAgICAgIHNldEpTVmFsdWUoCiAgICAgICAgICAgICBtX291dC5sb2FkNjQoCiAgICAg
ICAgICAgICAgICAgbV9vdXQuYWRkcmVzcygKICAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5w
cm9wZXJ0aWVzW2RhdGEuaWRlbnRpZmllck51bWJlcl0sCkBAIC0xNDEyLDcgKzEzNjIsNyBAQCBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEdsb2JhbFZhcigpCiAgICAgewotICAg
ICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQubG9hZDY0KG1fb3V0LmFic29s
dXRlKG1fbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9v
dXQubG9hZDY0KG1fb3V0LmFic29sdXRlKG1fbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVB1dEdsb2JhbFZhcigpCkBAIC0xNDM3LDMwICsx
Mzg3LDI3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlQobV9ncmFwaC52YWx1ZU9m
SlNDb25zdGFudChtX25vZGUtPmNoaWxkMigpLm5vZGUoKSkuaXNOdWxsKCkpOwogICAgICAgICBt
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElmSXNTdGlsbFZhbGlkKCk7Ci0gICAgICAg
IG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsIGVxdWFsTnVsbE9yVW5k
ZWZpbmVkKAorICAgICAgICBzZXRCb29sZWFuKAorICAgICAgICAgICAgZXF1YWxOdWxsT3JVbmRl
ZmluZWQoCiAgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxz
ZSwgRXF1YWxOdWxsT3JVbmRlZmluZWQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
Q29tcGFyZVN0cmljdEVxKCkKICAgICB7CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNl
S2luZChJbnQzMlVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAg
ICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAg
ICAgICBtX291dC5lcXVhbChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9u
b2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpIHsKLSAg
ICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAor
ICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVFcXVh
bChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigp
KSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoT2JqZWN0VXNlKSkgewogICAgICAgICAgICAgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnRJZklzU3RpbGxWYWxpZCgpOwotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFk
ZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAg
ICAgICAgICAgICAgIG1fb3V0LmVxdWFsKAogICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxs
T2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpLAogICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxs
T2JqZWN0KG1fbm9kZS0+Y2hpbGQyKCkpKSk7CkBAIC0xNDc3LDE5ICsxNDI0LDE2IEBAIHByaXZh
dGU6CiAgICAgICAgIGlmIChjb25zdGFudC5pc1VuZGVmaW5lZE9yTnVsbCgpCiAgICAgICAgICAg
ICAmJiAhbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJZklzU3RpbGxWYWxpZCgpKSB7
CiAgICAgICAgICAgICBpZiAoY29uc3RhbnQuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBt
X2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgICAgICBtX25vZGUsIGVxdWFsTnVs
bE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsTnVs
bCkpOworICAgICAgICAgICAgICAgIHNldEJvb2xlYW4oZXF1YWxOdWxsT3JVbmRlZmluZWQobV9u
b2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxOdWxsKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIEFTU0VS
VChjb25zdGFudC5pc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5h
ZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLCBlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUt
PmNoaWxkMSgpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbFVuZGVmaW5lZCkpOworICAgICAgICAg
ICAgc2V0Qm9vbGVhbihlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBBbGxD
ZWxsc0FyZUZhbHNlLCBFcXVhbFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAg
ICAgbV9ub2RlLAorICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgbV9vdXQuZXF1YWwo
CiAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwKICAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShjb25zdGFudCkpKSk7CkBA
IC0xNDk4LDE1ICsxNDQyLDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlQ29tcGFyZUxl
c3MoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNl
KSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBt
X25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0Lmxl
c3NUaGFuKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewotICAgICAgICAgICAg
bV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAg
ICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUxlc3NUaGFuKGxvd0Rv
dWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTE1MTcsMTUgKzE0NTksMTMgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlTGVzc0VxKCkKICAgICB7CiAgICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9v
bGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0
Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5sZXNzVGhhbk9yRXF1YWwobG93SW50MzIo
bV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlz
QmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMu
YWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAg
ICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTGVzc1RoYW5PckVxdWFsKAogICAgICAgICAgICAg
ICAgICAgICBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUzNywxNSArMTQ3NywxMyBAQCBw
cml2YXRlOgogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVHcmVhdGVyKCkKICAgICB7CiAgICAgICAg
IGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKLSAgICAgICAgICAgIG1f
Ym9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAg
c2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5ncmVhdGVyVGhhbihsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNC
aW5hcnlVc2VLaW5kKE51bWJlclVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5h
ZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAg
ICAgICAgICAgICAgICBtX291dC5kb3VibGVHcmVhdGVyVGhhbigKICAgICAgICAgICAgICAgICAg
ICAgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIo
KSkpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1NTcsMTYgKzE0OTUsMTQgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlR3JlYXRlckVxKCkKICAgICB7CiAgICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9v
bGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0
Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5ncmVhdGVyVGhhbk9yRXF1YWwoCiAgICAg
ICAgICAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewotICAg
ICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisg
ICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUdyZWF0
ZXJUaGFuT3JFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgbG93RG91YmxlKG1fbm9kZS0+Y2hp
bGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTE1NzcsNyArMTUxMyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxl
TG9naWNhbE5vdCgpCiAgICAgewotICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKG1fbm9kZSwg
bV9vdXQuYml0Tm90KGJvb2xpZnkobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgc2V0Qm9v
bGVhbihtX291dC5iaXROb3QoYm9vbGlmeShtX25vZGUtPmNoaWxkMSgpKSkpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBpbGVKdW1wKCkKQEAgLTE5OTksMTQgKzE5MzUsMTcgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IEludDMyVXNlIHx8IGVkZ2UudXNl
S2luZCgpID09IEtub3duSW50MzJVc2UpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUg
cmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgYm94ZWRSZXN1bHQgPSBt
X2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICBMb3dlcmVkTm9kZVZh
bHVlIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAo
aXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICAg
ICAgCisgICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Cisg
ICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIGJveGVkUmVz
dWx0ID0gdmFsdWUudmFsdWUoKTsKICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAogICAgICAg
ICAgICAgICAgIGpzVmFsdWVWYWx1ZShib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNJbnQzMiwgaXNO
b3RJbnQzMihib3hlZFJlc3VsdCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94
SW50MzIoYm94ZWRSZXN1bHQpOwotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoZWRnZS5u
b2RlKCksIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRJbnQzMihlZGdlLm5vZGUoKSwgcmVzdWx0
KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIApAQCAtMjAxOSwxMCAr
MTk1OCwxMSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBt
b2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBpc0NlbGwoZWRnZS51c2VLaW5kKCkp
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgdW5jaGVja2VkUmVzdWx0ID0gbV9qc1Zh
bHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2
YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNW
YWxpZCh2YWx1ZSkpIHsKICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAg
ICAgIGpzVmFsdWVWYWx1ZSh1bmNoZWNrZWRSZXN1bHQpLCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RD
ZWxsKHVuY2hlY2tlZFJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFJlc3Vs
dDsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodW5jaGVja2VkUmVzdWx0KSwgZWRnZSwg
U3BlY0NlbGwsIGlzTm90Q2VsbCh2YWx1ZS52YWx1ZSgpKSk7CisgICAgICAgICAgICByZXR1cm4g
dmFsdWUudmFsdWUoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIShtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0NlbGwpKTsKQEAgLTIwNjEs
MTQgKzIwMDEsMTcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9k
ZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0g
Qm9vbGVhblVzZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fYm9v
bGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fanNWYWx1ZVZh
bHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUg
PSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZSgpOworICAgICAgICAKKyAg
ICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAg
aWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgdW5ib3hlZFJlc3VsdCA9
IHZhbHVlLnZhbHVlKCk7CiAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKICAgICAgICAgICAg
ICAgICBqc1ZhbHVlVmFsdWUodW5ib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNCb29sZWFuLCBpc05v
dEJvb2xlYW4odW5ib3hlZFJlc3VsdCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVu
Ym94Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5h
ZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVkZ2Uubm9k
ZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAg
ICAgICAKQEAgLTIwODEsMTYgKzIwMjQsMjEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFT
U0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgaXNE
b3VibGUoZWRnZS51c2VLaW5kKCkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVz
dWx0ID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgTG93ZXJlZE5v
ZGVWYWx1ZSB2YWx1ZSA9IG1fZG91YmxlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAg
IGlmIChpc1ZhbGlkKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
IAotICAgICAgICBpZiAoTFZhbHVlIGludFJlc3VsdCA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmludFRvRG91Ymxl
KGludFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCks
IHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkp
OworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1
bHQgPSBtX291dC5pbnRUb0RvdWJsZSh2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHNldERv
dWJsZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgYm94ZWRSZXN1bHQgPSBtX2pz
VmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICB2YWx1ZSA9IG1fanNWYWx1
ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsK
KyAgICAgICAgICAgIExWYWx1ZSBib3hlZFJlc3VsdCA9IHZhbHVlLnZhbHVlKCk7CisgICAgICAg
ICAgICAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkRvdWJsZSB1bmJveGluZyBpbnQgY2FzZSIpKTsKICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJsZSB1bmJveGluZyBk
b3VibGUgY2FzZSIpKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiRG91YmxlIHVuYm94aW5nIGNvbnRpbnVhdGlvbiIpKTsKQEAg
LTIxMTUsNyArMjA2Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExW
YWx1ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3VibGUsIHVu
Ym94ZWREb3VibGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5h
ZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgICAgICBzZXREb3VibGUoZWRnZS5ub2Rl
KCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAg
ICAgIApAQCAtMjEyOCwyNCArMjA3NiwyOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNT
RVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdl
LnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUg
cmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCisgICAgICAgIExvd2Vy
ZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAg
ICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1faW50MzJWYWx1ZXMu
Z2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEludDMy
KHVuYm94ZWRSZXN1bHQpOwotICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChlZGdlLm5v
ZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5v
ZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGJveEludDMyKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fYm9v
bGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gYm94Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVl
cy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9ib29sZWFuVmFs
dWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAg
ICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEJvb2xlYW4odmFsdWUudmFsdWUoKSk7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmJv
eGVkUmVzdWx0ID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IGJveERvdWJsZSh1bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAg
IG1fanNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgIHZhbHVl
ID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQo
dmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94RG91YmxlKHZhbHVlLnZh
bHVlKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMTU1LDEx
ICsyMTA3LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgTFZhbHVlIGxvd1N0b3JhZ2UoRWRnZSBl
ZGdlKQogICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX3N0b3JhZ2VWYWx1ZXMu
Z2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIExv
d2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX3N0b3JhZ2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZh
bHVlKCk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlKTsK
LSAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAg
ICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgCkBAIC0yMjQyLDYgKzIxOTUsOSBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIE51bWJlclVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihlZGdlKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgICAgICBzcGVj
dWxhdGVCb29sZWFuKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CkBA
IC0yMzQyLDYgKzIyOTgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRvdWJsZVZhbHVlKHZh
bHVlKSwgZWRnZSwgU3BlY1JlYWxOdW1iZXIsCiAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkKHZhbHVlLCB2YWx1ZSkpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHNw
ZWN1bGF0ZUJvb2xlYW4oRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbG93Qm9vbGVhbihlZGdl
KTsKKyAgICB9CiAKICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNT
dGlsbFZhbGlkKCkKICAgICB7CkBAIC0yNDMwLDIyICsyMzkxLDE1IEBAIHByaXZhdGU6CiAgICAg
CiAgICAgYm9vbCBpc0xpdmUoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8Tm9k
ZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fdGltZVRvTGl2ZS5maW5kKG5vZGUpOwot
ICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3RpbWVUb0xpdmUuZW5kKCkpOwotICAgICAgICByZXR1
cm4gISFpdGVyLT52YWx1ZTsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZS5jb250YWlucyhub2RlKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgaWYg
KCFlZGdlLT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGVkZ2UtPmhhc1Zhcmlh
YmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgQVNTRVJUKGVkZ2UtPmhhc1Jlc3VsdCgpKTsKKyAg
ICAgICAgaWYgKCFlZGdlLmRvZXNLaWxsKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3Ig
aXRlciA9IG1fdGltZVRvTGl2ZS5maW5kKGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKGl0
ZXIgIT0gbV90aW1lVG9MaXZlLmVuZCgpKTsKLSAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlKTsK
LSAgICAgICAgaXRlci0+dmFsdWUtLTsKKyAgICAgICAgbV9saXZlLnJlbW92ZShlZGdlLm5vZGUo
KSk7CiAgICAgfQogICAgIAogICAgIC8vIFdyYXBwZXIgdXNlZCBvbmx5IGZvciBERkdfTk9ERV9E
T19UT19DSElMRFJFTgpAQCAtMjQ2Miw2MyArMjQxNiwzNCBAQCBwcml2YXRlOgogICAgIHZvaWQg
aW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKCkKICAgICB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG1faGlnaEJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07Ci0gICAgICAgICAgICBp
ZiAoIW5vZGUpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291
cmNlKFNvdXJjZUlzRGVhZCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0FyZ3VtZW50c0FsaWFzKCkp
IHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEFyZ3Vt
ZW50c1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewot
ICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNE
ZWFkKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyB2YWx1ZSB3aWxsIGhhdmUgYmVlbiBmbHVzaGVkIHRv
IHRoZSBKU1N0YWNrIGluIHNvbWUgZm9ybSBvcgotICAgICAgICAgICAgICAgIC8vIGFub3RoZXIu
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRV
bmJveElmUG9zc2libGUoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNo
b3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
U291cmNlc1tpXSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjayk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVk
aWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBW
YWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9y
bWF0ID0gbV9oaWdoQmxvY2stPmZsdXNoRm9ybWF0QXRIZWFkW2ldOworICAgICAgICAgICAgc3dp
dGNoIChmb3JtYXQpIHsKKyAgICAgICAgICAgIGNhc2UgRGVhZEZsdXNoOiB7CisgICAgICAgICAg
ICAgICAgLy8gTXVzdCBjb25zaWRlciBhdmFpbGFibGUgbm9kZXMgaW5zdGVhZC4KKyAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9oaWdoQmxvY2stPmF2YWlsYWJpbGl0eUF0SGVhZFtpXTsK
KyAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbaV0gPSBWYWx1ZVNvdXJjZShub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRV
bmJveElmUG9zc2libGUoKSkgewotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxk
VXNlRG91YmxlRm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNb
aV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkxvY2Fscyk7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoSW50MzJJbkxvY2Fscyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKEJvb2xlYW5JbkxvY2Fscyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToK
KyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKERvdWJsZUlu
SlNTdGFjayk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVh
bjoKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgICAgICAgICAgbV92
YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkxvY2Fscyk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCkBAIC0yNjAyLDI3ICsyNTI3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGNhc2UgRG91YmxlSW5KU1N0YWNrOgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0g
PSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFZhbHVlSW5Mb2NhbHM6Ci0gICAgICAgICAgICAgICAgYWRkRXhp
dEFyZ3VtZW50KAotICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVl
Rm9ybWF0SlNWYWx1ZSwgbV9vdXQuZ2V0KG1fbG9jYWxzNjRbaV0pKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSW50MzJJbkxvY2FsczoKLSAgICAgICAgICAgICAg
ICBhZGRFeGl0QXJndW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywg
aSwgVmFsdWVGb3JtYXRJbnQzMiwgbV9vdXQuZ2V0KG1fbG9jYWxzMzJbaV0pKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQm9vbGVhbkluTG9jYWxzOgotICAgICAg
ICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKLSAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJn
dW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEJvb2xlYW4sIG1fb3V0LmdldChtX2xvY2Fsc0Jvb2xlYW5b
aV0pKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRG91YmxlSW5M
b2NhbHM6Ci0gICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAotICAgICAgICAgICAgICAg
ICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0RG91YmxlLCBtX291dC5nZXQobV9s
b2NhbHNEb3VibGVbaV0pKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgQXJndW1lbnRzU291cmNlOgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQg
UGhhbnRvbUFyZ3VtZW50cy4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzOTg2Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgU291cmNlSXNEZWFkOgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0
VmFsdWU6OmRlYWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI2ODIsMTIgKzI1ODYs
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiB1aW50MzJUb051bWJlciA9IDA7
CiAgICAgICAgICAgICAgICAgTm9kZSogZG91YmxlQXNJbnQzMiA9IDA7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBp
dGVyID0gbV90aW1lVG9MaXZlLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxOb2Rl
KiwgdW5zaWduZWQ+OjppdGVyYXRvciBlbmQgPSBtX3RpbWVUb0xpdmUuZW5kKCk7CisgICAgICAg
ICAgICAgICAgSGFzaE1hcDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xpdmUuYmVnaW4oKTsK
KyAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9saXZlLmVu
ZCgpOwogICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gaXRlci0+
a2V5OworICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSAqaXRlcjsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmNo
aWxkMSgpICE9IG5vZGUpCkBAIC0yNzMyLDI0ICsyNjM0LDI4IEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIEFTU0VSVChpc0xpdmUobm9kZSkpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChub2RlKSkgewotICAg
ICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9y
bWF0SW50MzIsIHJlc3VsdCk7CisKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1f
aW50MzJWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZv
cm1hdEludDMyLCB2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMu
Z2V0KG5vZGUpKSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRz
LCBpbmRleCwgVmFsdWVGb3JtYXRCb29sZWFuLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1f
Ym9vbGVhblZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgewor
ICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVl
Rm9ybWF0Qm9vbGVhbiwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9qc1ZhbHVlVmFs
dWVzLmdldChub2RlKSkgewotICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3Vt
ZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SlNWYWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUg
PSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
IHsKKyAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBW
YWx1ZUZvcm1hdEpTVmFsdWUsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fZG91Ymxl
VmFsdWVzLmdldChub2RlKSkgewotICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFy
Z3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0RG91YmxlLCByZXN1bHQpOworICAgICAgICB2YWx1
ZSA9IG1fZG91YmxlVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUp
KSB7CisgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwg
VmFsdWVGb3JtYXREb3VibGUsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTI4MzQsNiArMjc0MCw1NyBAQCBwcml2YXRlOgogICAgICAgICBtX3Zh
bHVlU291cmNlcy5vcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2Uobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRJbnQzMihOb2RlKiBub2RlLCBMVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2ludDMyVmFsdWVzLnNldChub2RlLCBMb3dlcmVk
Tm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldEpTVmFs
dWUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9qc1ZhbHVlVmFs
dWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAg
IH0KKyAgICB2b2lkIHNldEJvb2xlYW4oTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgbV9ib29sZWFuVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVl
LCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldFN0b3JhZ2UoTm9kZSogbm9kZSwg
TFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBM
b3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNl
dERvdWJsZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2RvdWJs
ZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsK
KyAgICB9CisKKyAgICB2b2lkIHNldEludDMyKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHNldEludDMyKG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIHNldEpTVmFsdWUoTFZh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX25vZGUsIHZhbHVlKTsKKyAg
ICB9CisgICAgdm9pZCBzZXRCb29sZWFuKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNl
dEJvb2xlYW4obV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0U3RvcmFnZShMVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRTdG9yYWdlKG1fbm9kZSwgdmFsdWUpOworICAg
IH0KKyAgICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRE
b3VibGUobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZChjb25z
dCBMb3dlcmVkTm9kZVZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghbV9ncmFwaC5kb21pbmF0b3Jz
LmRvbWluYXRlcyhtX2hpZ2hCbG9jaywgdmFsdWUuYmxvY2soKSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKICAgICB2b2lkIGFk
ZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0YXJnZXQpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRl
LmppdENvZGUtPmNvbW1vbi53ZWFrUmVmZXJlbmNlcy5hcHBlbmQoCkBAIC0yODg4LDIwICsyODQ1
LDE0IEBAIHByaXZhdGU6CiAgICAgTFZhbHVlIG1fdGFnVHlwZU51bWJlcjsKICAgICBMVmFsdWUg
bV90YWdNYXNrOwogICAgIAotICAgIEhhc2hTZXQ8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BzOwot
ICAgIFZlY3RvcjxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OworICAgIEhhc2hNYXA8
Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1faW50MzJWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2Rl
KiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSos
IExvd2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBM
b3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93
ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7CisgICAgSGFzaFNldDxOb2RlKj4gbV9saXZl
OwogICAgIAotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9pbnQzMlZhbHVlczsKLSAgICBI
YXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fanNWYWx1ZVZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUq
LCBMVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1f
c3RvcmFnZVZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fZG91YmxlVmFsdWVz
OwotICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBtX3RpbWVUb0xpdmU7Ci0gICAgCi0gICAg
T3BlcmFuZHM8TFZhbHVlPiBtX2xvY2Fsc0Jvb2xlYW47Ci0gICAgT3BlcmFuZHM8TFZhbHVlPiBt
X2xvY2FsczMyOwotICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHM2NDsKLSAgICBPcGVyYW5k
czxMVmFsdWU+IG1fbG9jYWxzRG91YmxlOworICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9w
aGlzOwogICAgIAogICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBtX3ZhbHVlU291cmNlczsKICAg
ICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJlZE5vZGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJlZE5vZGVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlcmVkTm9kZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEZUTExvd2VyZWROb2RlVmFsdWVfaAorI2RlZmluZSBGVExMb3dlcmVkTm9kZVZh
bHVlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRU
eXBlcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIFJlcHJlc2Vu
dHMgdGhlIGFjdCBvZiBoYXZpbmcgbG93ZXJlZCBhIERGRzo6Tm9kZSB0byBhbiBMVmFsdWUsIGFu
ZCByZWNvcmRzIHRoZQorLy8gREZHOjpCYXNpY0Jsb2NrIHRoYXQgZGlkIHRoZSBsb3dlcmluZy4g
VGhlIExWYWx1ZSBpcyB3aGF0IHdlIHVzZSBtb3N0IG9mdGVuLCBidXQKKy8vIHdlIG5lZWQgdG8g
dmVyaWZ5IHRoYXQgd2UncmUgaW4gYSBibG9jayB0aGF0IGlzIGRvbWluYXRlZCBieSB0aGUgb25l
IHRoYXQgZGlkCisvLyB0aGUgbG93ZXJpbmcuIFdlJ3JlIGd1YXJhbnRlZWQgdGhhdCBmb3IgZWFj
aCBERkc6Ok5vZGUsIHRoZXJlIHdpbGwgYmUgb25lCisvLyBMb3dlcmVkTm9kZVZhbHVlIHRoYXQg
YWx3YXlzIGRvbWluYXRlcyBhbGwgdXNlcyBvZiB0aGUgREZHOjpOb2RlOyBidXQgdGhlcmUgbWF5
CisvLyBiZSBvdGhlcnMgdGhhdCBkb24ndCBkb21pbmF0ZSBhbmQgd2UncmUgZWZmZWN0aXZlbHkg
ZG9pbmcgb3Bwb3J0dW5pc3RpYyBHVk4gb24KKy8vIHRoZSBsb3dlcmluZyBjb2RlLgorCitjbGFz
cyBMb3dlcmVkTm9kZVZhbHVlIHsKK3B1YmxpYzoKKyAgICBMb3dlcmVkTm9kZVZhbHVlKCkKKyAg
ICAgICAgOiBtX3ZhbHVlKDApCisgICAgICAgICwgbV9ibG9jaygwKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgTG93ZXJlZE5vZGVWYWx1ZShMVmFsdWUgdmFsdWUsIERGRzo6QmFzaWNCbG9jayog
YmxvY2spCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX2Jsb2NrKGJsb2Nr
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdmFsdWUpOworICAgICAgICBBU1NFUlQobV9ibG9j
ayk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW1fdmFs
dWU7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9Cisg
ICAgCisgICAgTFZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIERG
Rzo6QmFzaWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgCitw
cml2YXRlOgorICAgIExWYWx1ZSBtX3ZhbHVlOworICAgIERGRzo6QmFzaWNCbG9jayogbV9ibG9j
azsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorCisjZW5kaWYgLy8gRlRMTG93ZXJlZE5vZGVWYWx1ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmgJKHJldmlzaW9uIDE1
MjQzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgewogCiBjbGFzcyBWYWx1ZUZyb21CbG9jayB7CiBwdWJsaWM6CisgICAgVmFsdWVGcm9t
QmxvY2soKQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAgICAgICAgLCBtX2Jsb2NrKDApCisgICAg
eworICAgIH0KKyAgICAKICAgICBWYWx1ZUZyb21CbG9jayhMVmFsdWUgdmFsdWUsIExCYXNpY0Js
b2NrIGJsb2NrKQogICAgICAgICA6IG1fdmFsdWUodmFsdWUpCiAgICAgICAgICwgbV9ibG9jayhi
bG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2Uu
Y3BwCShyZXZpc2lvbiAxNTI0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZh
bHVlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMjEgKzQ1LDYgQEAgdm9pZCBWYWx1
ZVNvdXJjZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgIGNhc2UgRG91YmxlSW5KU1N0YWNr
OgogICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUluSlNTdGFjayIpOwogICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBWYWx1ZUluTG9jYWxzOgotICAgICAgICBvdXQucHJpbnQoIlZhbHVlSW5Mb2Nh
bHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW50MzJJbkxvY2FsczoKLSAgICAgICAg
b3V0LnByaW50KCJJbnQzMkluTG9jYWxzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEJv
b2xlYW5JbkxvY2FsczoKLSAgICAgICAgb3V0LnByaW50KCJCb29sZWFuSW5Mb2NhbHMiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgRG91YmxlSW5Mb2NhbHM6Ci0gICAgICAgIG91dC5wcmlu
dCgiRG91YmxlSW5Mb2NhbHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQXJndW1lbnRz
U291cmNlOgotICAgICAgICBvdXQucHJpbnQoIkFyZ3VtZW50c1NvdXJjZSIpOwotICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBTb3VyY2VJc0RlYWQ6CiAgICAgICAgIG91dC5wcmludCgiU291cmNl
SXNEZWFkIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFZhbHVlU291cmNlLmgJKHJldmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQx
LDYgQEAgZW51bSBWYWx1ZVNvdXJjZUtpbmQgewogICAgIFZhbHVlSW5KU1N0YWNrLAogICAgIElu
dDMySW5KU1N0YWNrLAogICAgIERvdWJsZUluSlNTdGFjaywKLSAgICBWYWx1ZUluTG9jYWxzLAot
ICAgIEludDMySW5Mb2NhbHMsCi0gICAgQm9vbGVhbkluTG9jYWxzLAotICAgIERvdWJsZUluTG9j
YWxzLAotICAgIEFyZ3VtZW50c1NvdXJjZSwKICAgICBTb3VyY2VJc0RlYWQsCiAgICAgSGF2ZU5v
ZGUKIH07CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE1MjQzMikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIAkJMEZEODFBQzUxNTRGQjIyRTAw
OTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMEZEREJGQTcxNjY2
REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBT
dHJpbmdQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBGRERCRkE4MTY2NkRGQTMwMEM1NUZFRiAv
KiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFt
LmggKi87IH07CisJCTBGRTUwNTU3MTc4N0E4MDYwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTU2MTc4N0E4
MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLzsgfTsKIAkJMTQzRjYxMUYxNTY1RjBGOTAwREI1
MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovOyB9Owog
CQkxNDNGNjEyMDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUUxNTY1RjBGOTAwREI1MTRBIC8q
IFJBTVNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkxNDY5
NDE5MjE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDY5NDE5MDE2RUFBRjZEMDAyNEUxNDYgLyog
UnVuTG9vcFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTM1Miw2ICszNTMsNyBAQAogCQkwRkQ4MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyog
RmFzdEJpdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGYXN0Qml0
VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkE1MTY2NkRGQTMw
MEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU1NjE3ODdBODAyMDBCMzVGOEMgLyog
SW5zZXJ0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc2VydGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVDM0VFNDE3MUI4MzQ3MDBGREFDOEQgLyogQnl0ZVNwaW5Mb2NrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJ5dGVTcGluTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSQU1TaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQzRjYxMUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUkFNU2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzg1LDYgKzc4Nyw3IEBACiAJCQkJQThBNDcyQkExNTFBODI1QTAwNDEyM0ZG
IC8qIEhhc2hUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzJCQjE1MUE4MjVBMDA0MTIzRkYgLyogSGV4
TnVtYmVyLmggKi8sCiAJCQkJQThBNDcyQkMxNTFBODI1QTAwNDEyM0ZGIC8qIElubGluZUFTTS5o
ICovLAorCQkJCTBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLywKIAkJ
CQlBOEE0NzJCRTE1MUE4MjVBMDA0MTIzRkYgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE4QTQ3
MkJGMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQzMkFycmF5LmggKi8sCiAJCQkJQThBNDcyQkQxNTFB
ODI1QTAwNDEyM0ZGIC8qIEludDhBcnJheS5oICovLApAQCAtMTE4MSw2ICsxMTg0LDcgQEAKIAkJ
CQlBOEE0NzNFODE1MUE4MjVCMDA0MTIzRkYgLyogTWF0aEV4dHJhcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDczRUExNTFBODI1QjAwNDEyM0ZGIC8qIE1ENS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0Q1NDk3QUQxNTg1N0QwMzAwQjVCQzMwIC8qIE1lZGlhVGltZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZFNTA1NTcxNzg3QTgwNjAwQjM1RjhDIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNEYxRDExNTQxNUZGMTFCRTAwMjZFOTA4IC8qIE1lbW9yeUluc3RydW1lbnRhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEZEODU1NDcxNjEzM0UwRTAwQzVCNzA0IC8qIE1lbW9y
eUluc3RydW1lbnRhdGlvbkFycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjNG
QkM3MUUxNjFBRjdCRjAwQkI0QkQ0IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hDb3VudGVk
U2V0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHJldmlzaW9uIDE1MjQzMikKKysr
IFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtODYsMTIgKzg2LDE5
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJldmVyc2Ug
dGhlIG9yZGVyIG9mIHRoZSB0ZW1wbGF0ZSBhcmd1bWVudHMgc28gdGhhdCBjYWxsZXJzCiAgICAg
ICAgIC8vIGNhbiBqdXN0IHBhc3MgdGhlIHRyYW5zbGF0b3IgYW5kIGxldCB0aGUgY29tcGlsZXIg
ZGVkdWNlIFQuCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFu
c2xhdG9yPiBBZGRSZXN1bHQgYWRkKGNvbnN0IFQmKTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0
dGVtcHRzIHRvIGFkZCBhIGxpc3Qgb2YgdGhpbmdzIHRvIHRoZSBzZXQuIFJldHVybnMgdHJ1ZSBp
ZiBhbnkgb2YKKyAgICAgICAgLy8gdGhlbSBhcmUgbmV3IHRvIHRoZSBzZXQuIFJldHVybnMgZmFs
c2UgaWYgdGhlIHNldCBpcyB1bmNoYW5nZWQuCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yVHlwZT4KKyAgICAgICAgYm9vbCBhZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRv
clR5cGUgZW5kKTsKIAogICAgICAgICB2b2lkIHJlbW92ZShjb25zdCBWYWx1ZVR5cGUmKTsKICAg
ICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IpOwogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKICAg
ICAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYpOworICAgICAg
ICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hTZXQmKSBjb25zdDsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCB2b2lkIGRlbGV0ZUFsbFZhbHVlczw+KGNvbnN0IEhh
c2hTZXQmKTsKQEAgLTE5MSw2ICsxOTgsMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+CisgICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBV
LCBWPjo6YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKKyAgICB7Cisg
ICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBp
dGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICBjaGFuZ2VkIHw9
IGFkZCgqaXRlcikuaXNOZXdFbnRyeTsKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KICAgICBp
bmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiAgICAgewog
ICAgICAgICBpZiAoaXQubV9pbXBsID09IG1faW1wbC5lbmQoKSkKQEAgLTI1Niw2ICsyNzMsMTgg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICB2ZWN0b3JbaV0gPSAqaXQ7CiAgICAgfSAg
CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAg
IGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yPT0oY29uc3QgSGFzaFNldCYg
b3RoZXIpCisgICAgeworICAgICAgICBpZiAoc2l6ZSgpICE9IG90aGVyLnNpemUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdGVyID0g
YmVnaW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAoIW90aGVy
LmNvbnRhaW5zKCppdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
dXNpbmcgV1RGOjpIYXNoU2V0OwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE1MjQzMikK
KysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcwLDYg
KzExNzAsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB7CiAgICAgICAgIC8vIENvcHkgdGhlIGhh
c2ggdGFibGUgdGhlIGR1bWIgd2F5LCBieSBhZGRpbmcgZWFjaCBlbGVtZW50IHRvIHRoZSBuZXcg
dGFibGUuCiAgICAgICAgIC8vIEl0IG1pZ2h0IGJlIG1vcmUgZWZmaWNpZW50IHRvIGNvcHkgdGhl
IHRhYmxlIHNsb3RzLCBidXQgaXQncyBub3QgY2xlYXIgdGhhdCBlZmZpY2llbmN5IGlzIG5lZWRl
ZC4KKyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92
ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAgICAgICAgLy8gSGFzaFNldHMuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKICAgICAgICAgY29u
c3RfaXRlcmF0b3IgZW5kID0gb3RoZXIuZW5kKCk7CiAgICAgICAgIGZvciAoY29uc3RfaXRlcmF0
b3IgaXQgPSBvdGhlci5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBhZGQo
Kml0KTsKQEAgLTEyMDksNiArMTIxMSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAg
ICAgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
LCBLZXlUcmFpdHM+JiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHMsIEtleVRyYWl0cz46Om9wZXJhdG9yPShjb25zdCBIYXNoVGFibGUmIG90aGVy
KQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUg
aW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAgICAgICAgLy8gSGFzaFNl
dHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKICAgICAg
ICAgSGFzaFRhYmxlIHRtcChvdGhlcik7CiAgICAgICAgIHN3YXAodG1wKTsKICAgICAgICAgcmV0
dXJuICp0aGlzOwpJbmRleDogU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RG
L3d0Zi9JbnNlcnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5zZXJ0aW9u
X2gKKyNkZWZpbmUgSW5zZXJ0aW9uX2gKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitjbGFzcyBJbnNlcnRpb24geworcHVibGljOgorICAgIEluc2VydGlvbigpIHsg
fQorICAgIAorICAgIEluc2VydGlvbihzaXplX3QgaW5kZXgsIFQgZWxlbWVudCkKKyAgICAgICAg
OiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQor
ICAgIFQgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IEluc2VydGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9pbmRleCA8IG90aGVyLm1faW5kZXg7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBzaXplX3QgbV9pbmRleDsKKyAgICBUIG1fZWxlbWVudDsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFRhcmdldFZlY3RvclR5cGUsIHR5cGVuYW1lIEluc2VydGlvblZlY3RvclR5cGU+Cit2
b2lkIGV4ZWN1dGVJbnNlcnRpb25zKFRhcmdldFZlY3RvclR5cGUmIHRhcmdldCwgSW5zZXJ0aW9u
VmVjdG9yVHlwZSYgaW5zZXJ0aW9ucykKK3sKKyAgICBpZiAoIWluc2VydGlvbnMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm47CisgICAgdGFyZ2V0Lmdyb3codGFyZ2V0LnNpemUoKSArIGluc2VydGlv
bnMuc2l6ZSgpKTsKKyAgICBzaXplX3QgbGFzdEluZGV4ID0gdGFyZ2V0LnNpemUoKTsKKyAgICBm
b3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9ucyA9IGluc2VydGlvbnMuc2l6ZSgpOyBpbmRleElu
SW5zZXJ0aW9ucy0tOykgeworICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbnNb
aW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKKyAgICAgICAg
c2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJzdEluZGV4OykKKyAgICAgICAgICAgIHRh
cmdldFtpXSA9IHRhcmdldFtpIC0gaW5kZXhPZmZzZXRdOworICAgICAgICB0YXJnZXRbZmlyc3RJ
bmRleF0gPSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5lbGVtZW50KCk7CisgICAgICAg
IGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7CisgICAgfQorICAgIGluc2VydGlvbnMucmVzaXplKDAp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpJbnNlcnRpb247Cit1c2lu
ZyBXVEY6OmV4ZWN1dGVJbnNlcnRpb25zOworCisjZW5kaWYgLy8gSW5zZXJ0aW9uX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206503</attachid>
            <date>2013-07-11 20:03:27 -0700</date>
            <delta_ts>2013-07-11 21:56:47 -0700</delta_ts>
            <desc>still not compiling</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>231085</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NiBA
QAorMjAxMy0wNy0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcg
VVJMIChPT1BTISkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpmaWxsKToK
KyAgICAgICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmNsZWFyKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpzZXRMaXZl
VmFsdWVzKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZW5kQmFz
aWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKiBk
ZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6
Omp1c3RPbmVDaGlsZCk6CisgICAgICAgIChBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKiBkZmcv
REZHQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Js
b2NrOjp+QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6ZW5zdXJl
TG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjppc0luUGhpcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6aXNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FE
YXRhOjpTU0FEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+
U1NBRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKEJhc2lj
QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Om9wZXJhdG9yW10pOgorICAg
ICAgICAoU1NBRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja0luc2VydGlvblNl
dDo6QmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9u
U2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnRCZWZvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0OjpleGVj
dXRlKToKKyAgICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAoQmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAqIGRmZy9E
RkdDb21tb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzS2lsbCk6CisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6OmtpbGxTdGF0dXNGb3JEb2VzS2lsbCk6CisgICAgICAgICog
ZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2U6OmlzQ29udHJhZGlj
dG9yeSk6CisgICAgICAgIChKU0M6OkRGRzo6Q29udHJhZGljdGlvblBydW5pbmdQaGFzZTo6bWFr
ZUNvbnRyYWRpY3RvcnkpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1Db250cmFkaWN0aW9u
UHJ1bmluZyk6CisgICAgICAgICogZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZTo6Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlOjpicmVha0NyaXRpY2FsRWRnZSk6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKToKKyAgICAgICAgKiBkZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
ICogZGZnL0RGR0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6ZmluZFR5cGVDaGVja1Jvb3QpOgorICAg
ICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpjb3VudE5vZGUpOgorICAgICAgICAoRENFUGhhc2Up
OgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpjb3VudEVkZ2UpOgorICAgICAgICAoSlND
OjpERkc6OkRDRVBoYXNlOjplbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKToKKyAg
ICAgICAgKiBkZmcvREZHRWRnZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0VkZ2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpFZGdl
KToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXROb2RlKToKKyAgICAgICAgKEpTQzo6REZH
OjpFZGdlOjpzZXRVc2VLaW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRQcm9vZlN0
YXR1cyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6d2lsbE5vdEhhdmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkRGRzo6RWRnZTo6d2lsbEhhdmVDaGVjayk6CisgICAgICAgIChFZGdlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpFZGdlOjpraWxsU3RhdHVzVW5jaGVja2VkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpFZGdlOjpraWxsU3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRL
aWxsU3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpkb2VzS2lsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6RWRnZTo6ZG9lc05vdEtpbGwpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6
Om1ha2VXb3JkKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hGb3JtYXQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRm
Zy9ERkdGbHVzaEZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChXVEYp
OgorICAgICAgICAqIGRmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZTo6Rmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZW5lc3NBbmFseXNp
c1BoYXNlOjpwcm9jZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVuZXNzQW5hbHlz
aXNQaGFzZTo6c2V0Rm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hMaXZlbmVzc0Fu
YWx5c2lzUGhhc2U6OmZsdXNoRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZv
cm1GbHVzaExpdmVuZXNzQW5hbHlzaXMpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaExpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgIChERkcpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjphZGRGb3JEZXB0aEZpcnN0U29ydCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmRlcHRoRmlyc3RTb3J0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Okluc2VydGlvblNldDo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKExpdmVuZXNzQW5hbHlzaXNQaGFzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnByb2Nlc3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OnBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKToKKyAgICAgICAgKiBkZmcvREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUGhpKToKKyAgICAgICAgKE5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnBoaSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dGFrZW5CbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bm90VGFrZW5CbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyk6CisgICAg
ICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChTU0FDb252ZXJzaW9u
UGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6U1NBQ29udmVy
c2lvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpQ2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2FyZFBoaSk6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpRWRnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpkZWR1cGxpY2F0ZUNoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmROb2Rl
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2Fy
ZE5vZGVFZGdlKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmg6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpmbHVzaEZvcm1hdCk6Cisg
ICAgICAgIChWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93
ZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjcmVhdGVQaGlWYXJpYWJs
ZXMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjaGVja0FyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVVwc2lsb24pOgorICAgICAgICAoTG93ZXJE
RkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUGhp
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUpTQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlV2Vha0pTQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQWRkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoU3ViKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTXVsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoRGl2KToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTW9kKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTWluT3JNYXgpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhBYnMpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhOZWdhdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQml0QW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZUJpdE9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUJpdFhvcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVCaXRSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlQml0TFNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUJpdFVSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
VUludDMyVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlSW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVHZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZUNvbXBhcmVFcUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVDb21wYXJlU3RyaWN0RXFDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzcyk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzc0VxKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVHcmVhdGVyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVHcmVhdGVyRXEpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0ludDMyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Q2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06Omxvd0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpsb3dEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dKU1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc0xpdmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjp1c2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppbml0
aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjplbWl0T1NSRXhpdENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjphZGRFeGl0QXJndW1lbnRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6c2V0SW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpz
ZXRKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c2V0Qm9vbGVh
bik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNldFN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzZXREb3VibGUpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc1ZhbGlkKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJl
ZE5vZGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChMb3dlcmVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjpMb3dlcmVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJlZE5vZGVWYWx1ZTo6b3BlcmF0b3IhKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJlZE5vZGVWYWx1ZTo6YmxvY2spOgorICAgICAgICAqIGZ0bC9GVExWYWx1ZUZyb21CbG9j
ay5oOgorICAgICAgICAoSlNDOjpGVEw6OlZhbHVlRnJvbUJsb2NrOjpWYWx1ZUZyb21CbG9jayk6
CisgICAgICAgIChWYWx1ZUZyb21CbG9jayk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlU291cmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgICog
ZnRsL0ZUTFZhbHVlU291cmNlLmg6CisKIDIwMTMtMDctMTEgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlc3VycmVjdCB0aGUgQ0xvb3AgTExJTlQgb24gdGhlIEZU
TCBicmFuY2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUy
NTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMyArMTcwLDEzIEBACiAJCTBG
NDZFNkI5MTc2Rjg5REIwMEUxRjc1NSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUg
LyogRlRMU3dpdGNoQ2FzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNDZFNkM1MTc2RjhBNUUwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZD
MjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovOyB9OwogCQkwRjQ2RTZD
NjE3NkY4QTYwMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBE
RkdMYXp5SlNWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGNDZFNkVGMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1
QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi87IH07Ci0JCTBGNDZFNkYzMTc3Q0YwRDIwMEUx
Rjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxM
b29wcy5jcHAgKi87IH07Ci0JCTBGNDZFNkY0MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFs
TG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ2RTZEOTE3N0NCOTAwMDBF
MUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZENzE3N0NCOEZDMDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5jcHAgKi87IH07CiAJCTBGNDZFNkUzMTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlz
YXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkU0MTc3Q0Mz
NjYwMEUxRjc1NSAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUxMTc3Q0MzNjYwMEUxRjc1NSAvKiBVRGlz
ODZEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ2RTZFNTE3N0NDMzY2MDBFMUY3NTUgLyogWDg2RGlzYXNzZW1ibGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUy
MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwICovOyB9OworCQkwRjQ2RTZF
RjE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkVFMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdB
bmFseXNpcy5oICovOyB9OworCQkwRjQ2RTZGMzE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJh
bExvb3BzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDZFNkYxMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovOyB9Owor
CQkwRjQ2RTZGNDE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZGMjE3N0NGMEQyMDBF
MUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJ
CTBGNEUxQTBFMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTBDMTcz
QUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLzsgfTsKIAkJMEY0
RTFBMEYxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTBEMTczQUVEREMw
MDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1Myw2ICszNTMsMjMgQEAKIAkJMEZEREJG
QjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4
IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2
QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9Owor
CQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTU4MTc4N0FB
ODgwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTVDMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1NUQxNzg3QjBDRjAw
QjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1NjMxNzhGNUIwNTAwQjM1RjhDIC8qIERG
R0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhDIC8qIERGR0Jhc2ljQmxvY2suY3BwICovOyB9
OworCQkwRkU1MDU3MTE3OEY1QjUzMDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NjQx
NzhGNUI1MzAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEZF
NTA1NzIxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NjUx
NzhGNUI1MzAwQjM1RjhDIC8qIERGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuY3BwICovOyB9
OworCQkwRkU1MDU3MzE3OEY1QjUzMDBCMzVGOEMgLyogREZHQ29udHJhZGljdGlvblBydW5pbmdQ
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
NTA1NjYxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU3
NDE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NjcxNzhGNUI1MzAwQjM1RjhDIC8q
IERGR0ZsdXNoRm9ybWF0LmNwcCAqLzsgfTsKKwkJMEZFNTA1NzUxNzhGNUI1MzAwQjM1RjhDIC8q
IERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkU1MDU2ODE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU3NjE3
OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NjkxNzhGNUI1
MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJ
MEZFNTA1NzcxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2
QTE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU3ODE3
OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZCMTc4RjVCNTMwMEIz
NUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwICovOyB9OworCQkwRkU1MDU3OTE3
OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2QzE3OEY1QjUzMDBCMzVG
OEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1N0ExNzhGNUI1MzAwQjM1RjhDIC8qIERG
R09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NkQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwICovOyB9OworCQkwRkU1MDU3QjE3OEY1QjUz
MDBCMzVGOEMgLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NkUxNzhGNUI1MzAwQjM1
RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU3QzE3OEY1QjUzMDBCMzVG
OEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwICovOyB9OworCQkwRkU1MDU3RDE3OEY1QjUzMDBCMzVGOEMgLyog
REZHU1NBQ29udmVyc2lvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU3MDE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29udmVyc2lv
blBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZFODUzNEIxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0OTE3
MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLzsgfTsKIAkJMEZF
ODUzNEMxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUzNEExNzIzQ0RBNTAw
QjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTA4MTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTg2LDEz
ICsxMjAzLDEzIEBACiAJCTBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0Y2hDYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFN3aXRjaENhc2UuaDsgcGF0
aCA9IGZ0bC9GVExTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDZFNkMyMTc2RjhBNUIwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMYXp5SlNWYWx1ZS5jcHA7IHBhdGggPSBkZmcv
REZHTGF6eUpTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZD
MzE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdMYXp5SlNWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3
NTUgLyogREZHQW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QW5hbHlzaXMuaDsgcGF0aCA9IGRmZy9ERkdBbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5j
cHA7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEY0NkU2RjIxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuaDsgcGF0aCA9
IGRmZy9ERkdOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
NkU2RDcxNzdDQjhGQzAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExWTURpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBk
aXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNDZFNkUwMTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIuaDsgcGF0aCA9
IGRpc2Fzc2VtYmxlci9MTFZNRGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNDZFNkUxMTc3Q0MzNjYwMEUxRjc1NSAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVURpczg2RGlzYXNzZW1ibGVyLmg7IHBh
dGggPSBkaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNDZFNkUyMTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWDg2RGlzYXNzZW1ibGVy
LmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlz
aXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQW5hbHlzaXMuaDsgcGF0
aCA9IGRmZy9ERkdBbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ2
RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5jcHA7IHBhdGggPSBkZmcv
REZHTmF0dXJhbExvb3BzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2
RjIxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuaDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFs
TG9vcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAw
ODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0RTFBMEMxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEUxQTBEMTczQUVEREMw
MDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEzODQsNiArMTQwMSwyMyBAQAogCQkwRkREQkZCMzE2NjZFRUQ1MDBDNTVG
RUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBkZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUy
MjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja0lu
c2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU1QTE3ODdC
MENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNl
LmNwcDsgcGF0aCA9IGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0Ny
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NyaXRpY2Fs
RWRnZUJyZWFraW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1
NjIxNzhGNUIwNTAwQjM1RjhDIC8qIERGR0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmFzaWNCbG9jay5jcHA7IHBhdGggPSBkZmcvREZHQmFz
aWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTY0MTc4RjVC
NTMwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCbG9ja0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcv
REZHQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU2NTE3OEY1QjUzMDBCMzVGOEMgLyogREZHQ29udHJhZGljdGlvblBydW5pbmdQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb250cmFkaWN0aW9u
UHJ1bmluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NjYxNzhGNUI1MzAwQjM1
RjhDIC8qIERGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ29udHJhZGljdGlvblBydW5pbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFNTA1NjcxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZsdXNoRm9ybWF0LmNwcDsgcGF0
aCA9IGRmZy9ERkdGbHVzaEZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRTUwNTY4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbHVzaEZvcm1hdC5oOyBwYXRoID0gZGZnL0RGR0Zs
dXNoRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTY5MTc4RjVC
NTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2QTE3OEY1QjUzMDBCMzVGOEMgLyogREZH
Rmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGbHVz
aExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU2QjE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkMxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkQxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTZFMTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU3MDE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NB
Q29udmVyc2lvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NT
QUNvbnZlcnNpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyog
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNEExNzIz
Q0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRmZy9ERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTA5
RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0aW9ucy5oOyBwYXRoID0gZnRsL0ZUTEFiYnJl
dmlhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NjIsMTAgKzI5OTYs
MTMgQEAKIAkJCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJz
LmggKi8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCisJCQkJMEZFNTA1NjIxNzhGNUIwNTAwQjM1
RjhDIC8qIERGR0Jhc2ljQmxvY2suY3BwICovLAogCQkJCTBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3
QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8q
IERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCiAJCQkJMEZEMjgxMjUxNzc5M0JFMzAwQkJCMEYz
IC8qIERGR0JpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEZEMjgxMjYxNzc5M0JFMzAwQkJCMEYz
IC8qIERGR0JpbmFyeVN3aXRjaC5oICovLAorCQkJCTBGRTUwNTY0MTc4RjVCNTMwMEIzNUY4QyAv
KiBERkdCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFNTA1NTgxNzg3QUE4ODAwQjM1
RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEY4MzY0QjUxNjRCMEMwRTAw
NTMzMjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oICovLAogCQkJCTg2RUM5REI0MTMyOERGODIw
MDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yOTgzLDggKzMwMjAsMTIg
QEAKIAkJCQkwRkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovLAog
CQkJCTBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAgKi8sCiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmggKi8sCisJCQkJMEZFNTA1NjUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0NvbnRyYWRp
Y3Rpb25QcnVuaW5nUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNTY2MTc4RjVCNTMwMEIzNUY4QyAv
KiBERkdDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIxNkMxREIw
MTAwODJDNUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBGQkUwRjZD
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJCQkJMEZF
NTA1NUExNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3Bw
ICovLAorCQkJCTBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlLmggKi8sCiAJCQkJMEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBo
YXNlLmNwcCAqLywKIAkJCQkwRkZGQzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2Uu
aCAqLywKIAkJCQkwRjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICov
LApAQCAtMzAxMSw2ICszMDUyLDEwIEBACiAJCQkJMEZEQjJDRDQxNzQyRDgwNDAwN0IzQzFCIC8q
IERGR0ZpbmFsaXplci5oICovLAogCQkJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdG
aXh1cFBoYXNlLmNwcCAqLywKIAkJCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5oICovLAorCQkJCTBGRTUwNTY3MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZv
cm1hdC5jcHAgKi8sCisJCQkJMEZFNTA1NjgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9y
bWF0LmggKi8sCisJCQkJMEZFNTA1NjkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU2QTE3OEY1QjUzMDBCMzVGOEMgLyog
REZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLywKIAkJCQk4NkFFNkM0QjEzNkExMUU0
MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICovLAogCQkJCTg2RUM5REI2MTMyOERGODIwMDJCMkFE
NyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovLAogCQkJCTg2QUU2QzRDMTM2QTExRTQwMDk2MzAx
MiAvKiBERkdHUFJJbmZvLmggKi8sCkBAIC0zMDI1LDYgKzMwNzAsOCBAQAogCQkJCTBGREIyQ0Q2
MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjQ2RTZDMjE3
NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovLAogCQkJCTBGNDZFNkMzMTc2
RjhBNUIwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oICovLAorCQkJCTBGRTUwNTZCMTc4RjVC
NTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwICovLAorCQkJCTBGRTUw
NTZDMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLywKIAkJ
CQkwRkI0QjUxQzE2QjYyNzcyMDAzRjY5NkIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwICovLAog
CQkJCTBGQjRCNTFEMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdMb25nTGl2ZWRTdGF0ZS5oICovLAog
CQkJCTBGMkJEQzNEMTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggKi8sCkBA
IC0zMDQxLDYgKzMwODgsOCBAQAogCQkJCTBGQTU4MUI5MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdO
b2RlVHlwZS5oICovLAogCQkJCTg2RUM5REJGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRp
b25zLmNwcCAqLywKIAkJCQk4NkVDOURDMDEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9u
cy5oICovLAorCQkJCTBGRTUwNTZEMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU2RTE3OEY1QjUzMDBCMzVGOEMgLyog
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oICovLAogCQkJCTBGRDgyRTUyMTQxREFF
REUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi8sCiAJCQkJMEZEODJFNTMxNDFEQUVERTAw
MTc5Qzk0IC8qIERGR09TUkVudHJ5LmggKi8sCiAJCQkJMEZDMDk3OEUxNDZBNkY2MzAwQ0YyNDQy
IC8qIERGR09TUkV4aXQuY3BwICovLApAQCAtMzA3OCw2ICszMTI3LDggQEAKIAkJCQk4NkVDOURD
MzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLywKIAkJCQk4Njg4MEYx
QjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgKi8sCiAJCQkJ
ODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovLAor
CQkJCTBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
ICovLAorCQkJCTBGRTUwNTcwMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhh
c2UuaCAqLywKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5oICovLAogCQkJCTBGQzA5NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVu
a3MuY3BwICovLAogCQkJCTBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAq
LywKQEAgLTMyOTgsNiArMzM0OSw3IEBACiAJCQkJODYwMTYxRTMwRjNBODNDMTAwRjg0NzEwIC8q
IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTVGMEY1MTRE
MTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNF
NTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1
NzkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODY1RjQwODgxMEU3RDU2MzAwOTQ3MzYxIC8qIEFQSVNoaW1zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNDA3LDYgKzM0NTksNyBAQAogCQkJCTBGRUEwQTFEMTcwOEIwMDcw
MEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUQz
MTU0RkI0RjAwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRTUwNTdEMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBE
RkdEcml2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAv
KiBERkdFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQg
LyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQyOCw2ICszNDgxLDcgQEAK
IAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTc3MTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY0RTFBMTIxNzNBRjA3QjAwN0VFMkQzIC8qIERGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFp
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQ
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTM0NDQsNiAr
MzQ5OCw3IEBACiAJCQkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0NzE1MjI4MDI1MDBDRDg5MTAgLyogREZHVmFsdWVS
ZWNvdmVyeU92ZXJyaWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQ5NEYyRjE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTVEMTc4N0IwQ0Yw
MEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCREM0ODE1MjI4MDI5MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLywKQEAgLTM1OTEsNiArMzY0
Niw4IEBACiAJCQkJMEY3NjZEMzUxNUFFMjUzQjAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdh
dGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAv
KiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAw
MjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NzUxNzhGNUI1
MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1
OTE3ODdBQTg5MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MkZGRDY0MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk2MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4g
SGVhZGVycyAqLywKQEAgLTM2MjIsNiArMzY3OSw3IEBACiAJCQkJODZDMzZFRUEwRUUxMjg5RDAw
QjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNjEw
MTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2QUREMTQ2MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkU1MDU3MzE3OEY1QjUzMDBCMzVGOEMgLyogREZHQ29udHJhZGljdGlv
blBydW5pbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCREUxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MzRCMTRDMTZENDNFMEQwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2M0IyM0UwMEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCBpbiBIZWFkZXJzICovLApAQCAtMzcwOCw2ICszNzY2LDcgQEAKIAkJ
CQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkRCMkNERTE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxpemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1N0IxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMy
MTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMjM1QkRCMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVy
cyAqLywKQEAgLTQxOTQsNiArNDI1Myw3IEBACiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRG
IC8qIENhbGxMaW5rSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRCMkNEOTE3NDJEODA0
MDA3QjNDMUIgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkU1MDU3ODE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk2OUEwNzk2MEVE
MUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0
NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00MjI1LDkgKzQyODUsMTEgQEAKIAkJCQkwRkMwOTc2RTE0NjhBQjUxMDBDRjI0NDIgLyogREZH
QXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM0MTMyOERGODIw
MDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIz
NUJEODE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRTUwNTc0MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2Fw
YWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU3MTRFRjkwQTAwMEM3MjUz
MiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0EyNzE1NDRDOTk1
MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkU1MDU3MTE3OEY1QjUzMDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRDExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTENBcmd1
bWVudEdldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFF
NEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5RDE2Qjcy
QTA4MDA1REY5NUIgLyogREZHQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDM0Niw2ICs0
NDA4LDcgQEAKIAkJCQkxNEJENUEzMDBBM0U5MUY2MDBCQUY1OUMgLyogSlNDb250ZXh0UmVmLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3ODgwMTQwMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVN
YXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MDU2NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBK
U0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTc2MTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5RDIxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTR2xvYmFsT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzODMsNiArNDQ0Niw3IEBACiAJCQkJQkNGRDhD
OTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTVBQjgzNDIwREE0MzIyNTAwQkM4M0YzIC8qIExlZ2FjeVByb2Zp
bGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTdDMTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4RjIxQjAxMDdF
QzU0MTAwNDJFQzJDIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzU3MTU5
MTRBMjAwMDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJF
QTZDMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtNDQwNSw3ICs0NDY5LDkgQEAKIAkJCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTWFy
a2VkU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2
IC8qIE1hcmtTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2
NTA0NDYgLyogTWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU3QTE3OEY1
QjUzMDBCMzVGOEMgLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGlj
cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU1QzE3ODdCMENGMDBCMzVGOEMgLyogREZH
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQyODEy
NzE3NzkzQkU1MDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNoLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUJGMkZGMTU2MEYwNkEwMDhFOTIyMiAvKiBO
YW1lQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NDE3LDYgKzQ0ODMsNyBAQAog
CQkJCTY1NUVCMjlCMTBDRTI1ODEwMDFBOTkwRSAvKiBOb2Rlc0NvZGVnZW4uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0NjlERTIxMDdFQzdFNzAwNjUwNDQ2IC8qIE51bWJlckNvbnN0cnVjdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REUzMTA3RUM3RTcwMDY1MDQ0NiAvKiBOdW1i
ZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NjMxNzhGNUIwNTAwQjM1RjhD
IC8qIERGR0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTQxMDdFQzdF
NzAwNjUwNDQ2IC8qIE51bWJlclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkYz
RUVCRTE2OENERTkzMDA3N0I5MkEgLyogT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0gaW4gU291cmNl
cyAqLywKIAkJCQkxNDQ2OURFNTEwN0VDN0U3MDA2NTA0NDYgLyogT2JqZWN0Q29uc3RydWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NDI2LDYgKzQ0OTMsNyBAQAogCQkJCTE0MjgwODUwMTA3
RUMwRDcwMDEzRTdCMiAvKiBPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTIy
OEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
OEYyMUJDMTA3RUM1NEQwMDQyRUMyQyAvKiBQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFNTA1NzIxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMwNTJDMzQwRkI3OTIxOTAwNDhGREMzIC8qIFBhcnNl
ckFyZW5hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUZDOEMzMTRFMUI1RkUwMEQ1MkFFMCAv
KiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQyRjY1
MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDE1MjU4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDksMTIgKzIwOSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHNldExvY2FsRmlyc3RU
aW1lKG9wZXJhbmQsIHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjbGVhcigpCisgICAg
dm9pZCBmaWxsKFQgdmFsdWUpCiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBU
cmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSB2YWx1
ZTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgIG1fbG9jYWxzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICAg
ICAgICAgIG1fbG9jYWxzW2ldID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIo
KQorICAgIHsKKyAgICAgICAgZmlsbChUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAx
NTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCwxNiBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmJl
Z2luQmFzaWNCbG9jayhCYXNpCiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgaWYgKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSkgeworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVl
Pjo6aXRlcmF0b3IgaXRlciA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmJlZ2luKCk7
CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+OjppdGVyYXRvciBlbmQgPSBi
YXNpY0Jsb2NrLT5zc2EtPnZhbHVlc0F0SGVhZC5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGZvck5vZGUoaXRlci0+a2V5KSA9IGl0ZXIt
PnZhbHVlOworICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLmhhc0Nsb2JiZXJhYmxlU3RhdGUo
KSkKKyAgICAgICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKICAgICBiYXNpY0Jsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7CiAg
ICAgYmFzaWNCbG9jay0+Y2ZhSGFzVmlzaXRlZCA9IHRydWU7CiAgICAgbV9ibG9jayA9IGJhc2lj
QmxvY2s7CkBAIC04Myw5ICs5MywxOSBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNC
bG9jayhCYXNpCiAgICAgbV9jdXJyZW50Tm9kZSA9IDA7CiB9CiAKLXZvaWQgQWJzdHJhY3RTdGF0
ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3JhcGgpCitzdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKEhh
c2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+JiB2YWx1ZXMsIEhhc2hTZXQ8Tm9kZSo+JiBsaXZl
KQoreworICAgIHZhbHVlcy5jbGVhcigpOworICAgIAorICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVy
YXRvciBpdGVyID0gbGl2ZS5iZWdpbigpOworICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBl
bmQgPSBsaXZlLmVuZCgpOworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAg
ICB2YWx1ZXMuYWRkKCppdGVyLCBBYnN0cmFjdFZhbHVlKCkpOworfQorCit2b2lkIEFic3RyYWN0
U3RhdGU6OmluaXRpYWxpemUoKQogewotICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5ibG9j
aygwKTsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKICAgICByb290
LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKICAgICByb290LT5jZmFIYXNWaXNpdGVkID0gZmFs
c2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKQEAgLTExOCw4ICsxMzgs
OCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAgICAgICAgICAg
ICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAgcm9vdC0+dmFs
dWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgfQotICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0lu
ZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAxIDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2spCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCkBA
IC0xMzcsMTIgKzE1NywxMiBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgm
IGdyCiAgICAgICAgIH0KICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9IGdyYXBo
Lm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgIGlmIChibG9jay0+Ynl0ZWNv
ZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBncmFwaC5tX3Bs
YW4ubXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgICAgICAgICB2YWx1ZS5zZXRN
b3N0U3BlY2lmaWMoZ3JhcGgsIGdyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ldKTsKLSAg
ICAgICAgICAgIGludCBvcGVyYW5kID0gZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgdmFsdWUuc2V0TW9zdFNwZWNpZmljKG1fZ3Jh
cGgsIG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0pOworICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKTsKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKS5t
ZXJnZSh2YWx1ZSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQog
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBJbml0aWFsaXppbmcgQmxvY2sgIyV1LCBvcGVyYW5k
IHIlZCwgdG8gIiwgYmxvY2tJbmRleCwgb3BlcmFuZCk7CkBAIC0xNTEsNiArMTcxLDEwIEBAIHZv
aWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICNlbmRpZgogICAgICAgICB9
CiAgICAgICAgIGJsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1f
Z3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+
c3NhLT52YWx1ZXNBdEhlYWQsIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpOworICAgICAgICAgICAg
c2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwsIGJsb2NrLT5zc2EtPmxpdmVB
dFRhaWwpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0xNzIsMjAgKzE5Niw0MSBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNCiAgICAgYm9vbCBjaGFuZ2VkID0g
ZmFsc2U7CiAgICAgCiAgICAgaWYgKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIUFTU0VSVF9E
SVNBQkxFRCkgewotICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwg
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7
CisgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBUaHJlYWRl
ZENQUzogeworICAgICAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkg
ewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAg
IGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGFyZ3VtZW50ICV6dS5cbiIsIGFy
Z3VtZW50KTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRl
IGZvciBhcmd1bWVudCAlenUuXG4iLCBhcmd1bWVudCk7CiAjZW5kaWYKLSAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChh
cmd1bWVudCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGlu
YXRpb24sIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBm
b3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1i
ZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1f
dmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1
bWVudChhcmd1bWVudCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBzdGF0
ZSBmb3IgbG9jYWwgJXp1LlxuIiwgbG9jYWwpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIg
ICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKICNlbmRpZgot
ICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRU
YWlsLmxvY2FsKGxvY2FsKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFp
bChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFibGVz
QXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVz
dGluYXRpb24gPSBibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKTsKKyAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFibGVz
LmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIFNTQTogeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gYmxvY2stPnZhbHVlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gYmxvY2st
PnNzYS0+bGl2ZUF0VGFpbC5iZWdpbigpOworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0
ZXJhdG9yIGVuZCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuZW5kKCk7CisgICAgICAgICAgICBm
b3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSAqaXRlcjsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGJsb2NrLT5zc2EtPnZhbHVlc0F0
VGFpbC5maW5kKG5vZGUpLT52YWx1ZS5tZXJnZShmb3JOb2RlKG5vZGUpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCkBAIC0xNTg2LDYgKzE2MzEsMTcgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgUGhpOgorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpOworICAgICAgICAvLyBUaGUgc3RhdGUgb2YgdGhpcyBub2RlIHdvdWxkIGhhdmUgYWxyZWFk
eSBiZWVuIGRlY2lkZWQuCisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFVwc2ls
b246IHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBmb3JOb2RlKG5v
ZGUtPnBoaSgpKSA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAg
IGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgY2FzZSBCcmVha3BvaW50
OgpAQCAtMTY3OCw3ICsxNzM0LDcgQEAgaW5saW5lIHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJl
clN0cnVjdAogICAgIG1fZGlkQ2xvYmJlciA9IHRydWU7CiB9CiAKLWlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFi
c3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGUqIG5vZGUpCitib29sIEFic3RyYWN0U3RhdGU6
Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIGluVmFyaWFibGUsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNzY2LDIxICsxODIyLDQ0IEBAIGlubGluZSBib29sIEFic3RyYWN0
U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCiti
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRv
KQogewogICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMo
KSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgIEFTU0VS
VChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9PSB0by0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwogICAgIAogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNl
OwogICAgIAotICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgewotICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQo
YXJndW1lbnQpOwotICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tz
KGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpLCB0by0+
dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZnJvbS0+dmFyaWFibGVzQXRUYWls
LmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgc3dpdGNoIChtX2dyYXBoLm1fZm9ybSkgeworICAg
IGNhc2UgVGhyZWFkZWRDUFM6IHsKKyAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2Fy
Z3VtZW50KSB7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52
YWx1ZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWls
LmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVu
dCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgZnJvbS0+
dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKKyAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gdG8tPnZhbHVlc0F0SGVhZC5sb2NhbChsb2Nh
bCk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRl
c3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpLCB0by0+dmFyaWFibGVz
QXRIZWFkLmxvY2FsKGxvY2FsKSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIGZvciAoc2l6ZV90
IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMo
KTsgKytsb2NhbCkgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52
YWx1ZXNBdEhlYWQubG9jYWwobG9jYWwpOwotICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFyaWFi
bGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRhaWwubG9jYWwobG9j
YWwpLCB0by0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKSwgZnJvbS0+dmFyaWFibGVzQXRU
YWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgIAorICAgIGNhc2UgU1NBOiB7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBmcm9tLT52YWx1ZXNBdFRhaWwuc2l6ZSgpOyBpLS07KQorICAgICAgICAg
ICAgY2hhbmdlZCB8PSB0by0+dmFsdWVzQXRIZWFkW2ldLm1lcmdlKGZyb20tPnZhbHVlc0F0VGFp
bFtpXSk7CisgICAgICAgIAorICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9
IHRvLT5zc2EtPmxpdmVBdEhlYWQuYmVnaW4oKTsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0
ZXJhdG9yIGVuZCA9IHRvLT5zc2EtPmxpdmVBdEhlYWQuZW5kKCk7CisgICAgICAgIGZvciAoOyBp
dGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHRvLT5zc2EtPnZhbHVlc0F0SGVhZC5maW5kKG5vZGUpLT52
YWx1ZS5tZXJnZSgKKyAgICAgICAgICAgICAgICBmcm9tLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5k
KG5vZGUpLT52YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAoIXRvLT5jZmFIYXNWaXNpdGVkKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlz
aW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgcHVibGljOgogICAgIC8vIENh
bGwgdGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0byBpbml0aWFsaXplIHRoZSBhYnN0cmFjdCB2
YWx1ZXMgb2YKICAgICAvLyBhcmd1bWVudHMsIGFuZCB0byBpbmRpY2F0ZSB3aGljaCBibG9ja3Mg
c2hvdWxkIGJlIGxpc3RlZCBmb3IgQ0ZBCiAgICAgLy8gZXhlY3V0aW9uLgotICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemUoR3JhcGgmKTsKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKIAogICAgIC8v
IFN0YXJ0IGFic3RyYWN0bHkgZXhlY3V0aW5nIHRoZSBnaXZlbiBiYXNpYyBibG9jay4gSW5pdGlh
bGl6ZXMgdGhlCiAgICAgLy8gbm90aW9uIG9mIGFic3RyYWN0IHN0YXRlIHRvIHdoYXQgd2UgYmVs
aWV2ZSBpdCB0byBiZSBhdCB0aGUgaGVhZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2
ICs5OSwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgRWRnZSBjaGlsZDFVbmNoZWNrZWQoKSBjb25z
dCB7IHJldHVybiBtX3dvcmRzWzBdOyB9CiAgICAgCisgICAgRWRnZSBqdXN0T25lQ2hpbGQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKCEhY2hpbGQxKCkgJiYgIWNoaWxkMigpKSB7CisgICAg
ICAgICAgICBBU1NFUlQoIWNoaWxkMygpKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDEoKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gRWRnZSgpOworICAgIH0KKyAgICAKICAgICB2b2lk
IGluaXRpYWxpemUoRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyLCBFZGdlIGNoaWxkMykKICAgICB7
CiAgICAgICAgIGNoaWxkKDApID0gY2hpbGQxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitCYXNpY0Jsb2Nr
OjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50
cywgdW5zaWduZWQgbnVtTG9jYWxzKQorICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2lu
KQorICAgICwgaW5kZXgoTm9CbG9jaykKKyAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQorICAgICwg
Y2ZhSGFzVmlzaXRlZChmYWxzZSkKKyAgICAsIGNmYVNob3VsZFJldmlzaXQoZmFsc2UpCisgICAg
LCBjZmFGb3VuZENvbnN0YW50cyhmYWxzZSkKKyAgICAsIGNmYURpZEZpbmlzaCh0cnVlKQorICAg
ICwgY2ZhQnJhbmNoRGlyZWN0aW9uKEludmFsaWRCcmFuY2hEaXJlY3Rpb24pCisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgICwgaXNMaW5rZWQoZmFsc2UpCisjZW5kaWYKKyAgICAsIGlzUmVhY2hh
YmxlKGZhbHNlKQorICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
KQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICwg
dmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICwgdmFsdWVzQXRUYWls
KG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQoreworfQorCitCYXNpY0Jsb2NrOjp+QmFzaWNCbG9j
aygpIHsgfQorCit2b2lkIEJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1M
b2NhbHMpCit7CisgICAgdmFyaWFibGVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMp
OworICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2
YWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgdmFsdWVzQXRUYWls
LmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworfQorCitib29sIEJhc2ljQmxvY2s6OmlzSW5Q
aGlzKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwaGlzW2ldID09IG5vZGUpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJhc2lj
QmxvY2s6OmlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1Ob2RlcygpOyArK2kpIHsKKyAgICAgICAgaWYgKG5vZGUoaSkgPT0gbXlO
b2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOworfQorCitCYXNpY0Jsb2NrOjpTU0FEYXRhOjpTU0FE
YXRhKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIDogZmx1c2hGb3JtYXRBdEhlYWQoT3BlcmFuZHNM
aWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQorICAgICwgZmx1c2hGb3JtYXRBdFRhaWwoT3Bl
cmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQorICAgICwgYXZhaWxhYmlsaXR5QXRI
ZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAsIGF2YWlsYWJp
bGl0eUF0VGFpbChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCit7Cit9CisK
K0Jhc2ljQmxvY2s6OlNTQURhdGE6On5TU0FEYXRhKCkgeyB9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFk
aWNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQ0LDQyICs0NiwxNiBAQCBjbGFzcyBJbnNl
cnRpb25TZXQ7CiB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0
OwogCiBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewotICAgIEJh
c2ljQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1
bnNpZ25lZCBudW1Mb2NhbHMpCi0gICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2lu
KQotICAgICAgICAsIGluZGV4KE5vQmxvY2spCi0gICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2Up
Ci0gICAgICAgICwgY2ZhSGFzVmlzaXRlZChmYWxzZSkKLSAgICAgICAgLCBjZmFTaG91bGRSZXZp
c2l0KGZhbHNlKQotICAgICAgICAsIGNmYUZvdW5kQ29uc3RhbnRzKGZhbHNlKQotICAgICAgICAs
IGNmYURpZEZpbmlzaCh0cnVlKQotICAgICAgICAsIGNmYUJyYW5jaERpcmVjdGlvbihJbnZhbGlk
QnJhbmNoRGlyZWN0aW9uKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgLCBpc0xpbmtl
ZChmYWxzZSkKLSNlbmRpZgotICAgICAgICAsIGlzUmVhY2hhYmxlKGZhbHNlKQotICAgICAgICAs
IHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAgICAgLCB2YXJp
YWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgICAgICwgdmFsdWVzQXRI
ZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICAgICAsIHZhbHVlc0F0VGFpbChudW1B
cmd1bWVudHMsIG51bUxvY2FscykKLSAgICB7Ci0gICAgfQorICAgIEJhc2ljQmxvY2sodW5zaWdu
ZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2Nh
bHMpOworICAgIH5CYXNpY0Jsb2NrKCk7CiAgICAgCi0gICAgfkJhc2ljQmxvY2soKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBlbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxz
KQotICAgIHsKLSAgICAgICAgdmFyaWFibGVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2Nh
bHMpOwotICAgICAgICB2YXJpYWJsZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7
Ci0gICAgICAgIHZhbHVlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICAg
ICAgdmFsdWVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAgIH0KKyAgICB2
b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpOwogICAgIAogICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlcy5zaXplKCk7IH0KICAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CiAgICAgTm9kZSomIGF0KHNpemVfdCBpKSB7
IHJldHVybiBtX25vZGVzW2ldOyB9CiAgICAgTm9kZSogYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0
dXJuIG1fbm9kZXNbaV07IH0KKyAgICBOb2RlKiYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1
cm4gYXQoaSk7IH0KICAgICBOb2RlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVy
biBhdChpKTsgfQogICAgIE5vZGUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBhdChzaXplKCkgLSAx
KTsgfQogICAgIHZvaWQgcmVzaXplKHNpemVfdCBzaXplKSB7IG1fbm9kZXMucmVzaXplKHNpemUp
OyB9CkBAIC05NiwyMyArNzIsOCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFz
aWNCbG9jCiAgICAgfQogICAgIGJvb2wgaXNQaGlJbmRleChzaXplX3QgaSkgY29uc3QgeyByZXR1
cm4gaSA8IHBoaXMuc2l6ZSgpOyB9CiAgICAgCi0gICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2Rl
KSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAocGhpc1tpXSA9PSBub2RlKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgCi0gICAgYm9vbCBpc0luQmxvY2soTm9kZSogbXlOb2RlKSBjb25zdAotICAgIHsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Ob2RlcygpOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmIChub2RlKGkpID09IG15Tm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNJblBo
aXMoTm9kZSogbm9kZSkgY29uc3Q7CisgICAgYm9vbCBpc0luQmxvY2soTm9kZSogbXlOb2RlKSBj
b25zdDsKICAgICAKICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgeyByZXR1cm4gbGFzdCgp
LT5udW1TdWNjZXNzb3JzKCk7IH0KICAgICAKQEAgLTEzMCwxMCArOTEsMTIgQEAgc3RydWN0IEJh
c2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIERGR19WQVJJQURJQ19URU1QTEFU
RV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVfQVBQ
RU5EX05PREUKICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIG91dC5wcmludCgiIyIsIGluZGV4KTsKLSAgICB9CisjZGVmaW5lIERGR19E
RUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywg
dmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAorICAgIHRlbXBsYXRl
UHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFwcGVuZE5vblRlcm1pbmFsKEdyYXBo
JiwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CisgICAgREZH
X1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCisjdW5k
ZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdDsKICAgICAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxs
eSBmb3IgYmxvY2sgbGlua2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xl
c3MKICAgICAvLyBmb3Igb3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5nLgpAQCAtMTYwLDYg
KzEyMywyMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAg
CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgIE9wZXJhbmRz
PEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKKyAgICAKKyAgICBzdHJ1Y3QgU1NBRGF0YSB7
CisgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBmbHVzaEZvcm1hdEF0SGVhZDsKKyAgICAg
ICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGZsdXNoRm9ybWF0QXRUYWlsOworICAgICAgICBPcGVy
YW5kczxOb2RlKj4gYXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICBPcGVyYW5kczxOb2RlKj4g
YXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRIZWFkOwor
ICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRUYWlsOworICAgICAgICBIYXNoTWFwPE5vZGUq
LCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFi
c3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKKyAgICAgICAgCisgICAgICAgIFNTQURhdGEoQmFz
aWNCbG9jayopOworICAgICAgICB+U1NBRGF0YSgpOworICAgIH07CisgICAgT3duUHRyPFNTQURh
dGE+IHNzYTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMu
aAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNU
SU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9E
RQogCisjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRl
UG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJn
cykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IGlubGluZSBOb2Rl
KiBCYXNpY0Jsb2NrOjphcHBlbmROb25UZXJtaW5hbChHcmFwaCYgZ3JhcGgsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHsgXAorICAgICAg
ICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1
ZUFyZ3MpOyBcCisgICAgICAgIGFwcGVuZChsYXN0KCkpOyBcCisgICAgICAgIGF0KHNpemUoKSAt
IDIpID0gcmVzdWx0OyBcCisgICAgICAgIHJldHVybiByZXN1bHQ7IFwKKyAgICB9CisgICAgREZH
X1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCisjdW5k
ZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitCbG9ja0luc2VydGlvblNldDo6QmxvY2tJbnNlcnRpb25TZXQoR3Jh
cGgmIGdyYXBoKQorICAgIDogbV9ncmFwaChncmFwaCkKK3sKK30KKworQmxvY2tJbnNlcnRpb25T
ZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQorCit2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnQoY29uc3QgQmxvY2tJbnNlcnRpb24mIGluc2VydGlvbikKK3sKKyAgICBtX2luc2VydGlv
bnMuYXBwZW5kKGluc2VydGlvbik7Cit9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2Vy
dChzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2spCit7CisgICAgaW5z
ZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBibG9jaykpOworfQorCitCYXNpY0Jsb2NrKiBCbG9j
a0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCkKK3sKKyAgICBSZWZQdHI8QmFzaWNC
bG9jaz4gYmxvY2sgPSBhZG9wdFJlZihuZXcgQmFzaWNCbG9jaygKKyAgICAgICAgVUlOVF9NQVgs
CisgICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3Vt
ZW50cygpLAorICAgICAgICBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZMb2NhbHMoKSkpOworICAgIGluc2VydChpbmRleCwgYmxvY2spOworICAgIHJldHVybiBibG9j
ay5nZXQoKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydEJlZm9y
ZShCYXNpY0Jsb2NrKiBiZWZvcmUpCit7CisgICAgcmV0dXJuIGluc2VydChibG9jay0+aW5kZXgp
OworfQorCitib29sIEJsb2NrSW5zZXJ0aW9uU2V0OjpleGVjdXRlKCkKK3sKKyAgICBpZiAobV9p
bnNlcnRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8v
IFdlIGFsbG93IGluc2VydGlvbnMgdG8gYmUgZ2l2ZW4gdG8gdXMgaW4gYW55IG9yZGVyLiBTbywg
d2UgbmVlZCB0bworICAgIC8vIHNvcnQgdGhlbSBiZWZvcmUgcnVubmluZyBXVEY6OmV4ZWN1dGVJ
bnNlcnRpb25zLgorICAgIHN0ZDo6c29ydChtX2luc2VydGlvbnMuYmVnaW4oKSwgbV9pbnNlcnRp
b25zLmVuZCgpKTsKKworICAgIGV4ZWN1dGVJbnNlcnRpb25zKG1fZ3JhcGgubV9ibG9ja3MsIG1f
aW5zZXJ0aW9ucyk7CisgICAgCisgICAgLy8gUHJ1bmUgb3V0IGVtcHR5IGVudHJpZXMuIFRoaXMg
aXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBpdCdzCisgICAgLy8gaGVhbHRoeSB0byBrZWVw
IHRoZSBibG9jayBsaXN0IGZyb20gZ3Jvd2luZy4KKyAgICB1bnNpZ25lZCB0YXJnZXRJbmRleCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBzb3VyY2VJbmRleCA9IDA7IHNvdXJjZUluZGV4IDwgbV9n
cmFwaC5tX2Jsb2Nrcy5zaXplKCk7KSB7CisgICAgICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3Nbc291cmNlSW5kZXgrK107CisgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1t0YXJnZXRJ
bmRleCsrXSA9IGJsb2NrOworICAgIH0KKyAgICBtX2dyYXBoLm1fYmxvY2tzLnJlc2l6ZSh0YXJn
ZXRJbmRleCk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJsb2NrcyBrbm93IHRo
ZWlyIG5ldyBpbmRpY2VzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1f
YmxvY2tzLnNpemUoKTsgKytpKQorICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2ldLT5pbmRleCA9
IGk7CisgICAgCisgICAgLy8gQW5kIGZpbmFsbHksIGludmFsaWRhdGUgYWxsIGFuYWx5c2VzIHRo
YXQgcmVseSBvbiB0aGUgQ0ZHLgorICAgIG1fZ3JhcGguaW52YWxpZGF0ZUNGRygpOworICAgIAor
ICAgIHJldHVybiB0cnVlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHQmxvY2tJbnNlcnRpb25TZXRfaAorI2RlZmluZSBERkdCbG9ja0luc2Vy
dGlvblNldF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248UmVmUHRyPEJhc2ljQmxvY2s+ID4gQmxvY2tJ
bnNlcnRpb247CisKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9j
a0luc2VydGlvblNldChHcmFwaCYgZ3JhcGgpOworICAgIH5CbG9ja0luc2VydGlvblNldCgpOwor
ICAgIAorICAgIHZvaWQgaW5zZXJ0KGNvbnN0IEJsb2NrSW5zZXJ0aW9uJiBpbnNlcnRpb24pOwor
ICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgUGFzc1JlZlB0cjxCYXNpY0Jsb2NrPiBibG9j
ayk7CisgICAgQmFzaWNCbG9jayogaW5zZXJ0KHNpemVfdCBpbmRleCk7CisgICAgQmFzaWNCbG9j
ayogaW5zZXJ0QmVmb3JlKEJhc2ljQmxvY2sqIGJlZm9yZSk7CisgICAgCisgICAgYm9vbCBleGVj
dXRlKCk7CisKK3ByaXZhdGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgVmVjdG9yPEJsb2Nr
SW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jsb2NrSW5z
ZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFz
ZS5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZBUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gYWZ0ZXIgYWxsIHByZWRlY2Vzc29ycyBoYXZlIGJlZW4gdmlzaXRlZC4gT25seSBs
b29wcyB3aWxsIGNhdXNlIHRoaXMgYW5hbHlzaXMgdG8KICAgICAgICAgLy8gcmV2aXNpdCBibG9j
a3MsIGFuZCB0aGUgYW1vdW50IG9mIHJldmlzaXRpbmcgaXMgcHJvcG9ydGlvbmFsIHRvIGxvb3Ag
ZGVwdGguCiAgICAgICAgIAotICAgICAgICBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKG1fZ3Jh
cGgpOworICAgICAgICBtX3N0YXRlLmluaXRpYWxpemUoKTsKICAgICAgICAgCiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDEwIEBA
IGVudW0gR3JhcGhGb3JtIHsKICAgICAvLwogICAgIC8vIFRocmVhZGVkQ1BTIGZvcm0gaXMgc3Vp
dGFibGUgZm9yIGRhdGEgZmxvdyBhbmFseXNpcyAoQ0ZBLCBwcmVkaWN0aW9uCiAgICAgLy8gcHJv
cGFnYXRpb24pLCByZWdpc3RlciBhbGxvY2F0aW9uLCBhbmQgY29kZSBnZW5lcmF0aW9uLgotICAg
IFRocmVhZGVkQ1BTCisgICAgVGhyZWFkZWRDUFMsCisgICAgCisgICAgLy8gU1NBIGZvcm0uIFNl
ZSBERkdTU0FDb252ZXJzaW9uUGhhc2UuaCBmb3IgYSBkZXNjcmlwdGlvbi4KKyAgICBTU0EKIH07
CiAKIC8vIERlc2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhlIFVuaW9uRmluZCBzdHJ1Y3R1cmUgb2Yg
VmFyaWFibGVBY2Nlc3NEYXRhJ3MuCkBAIC0yNTAsNiArMjUzLDE5IEBAIGlubGluZSBQcm9vZlN0
YXR1cyBwcm9vZlN0YXR1c0ZvcklzUHJvdmUKICAgICByZXR1cm4gaXNQcm92ZWQgPyBJc1Byb3Zl
ZCA6IE5lZWRzQ2hlY2s7CiB9CiAKK2VudW0gS2lsbFN0YXR1cyB7IERvZXNOb3RLaWxsLCBEb2Vz
S2lsbCB9OworCitpbmxpbmUgYm9vbCBkb2VzS2lsbChLaWxsU3RhdHVzIGtpbGxTdGF0dXMpCit7
CisgICAgQVNTRVJUKGtpbGxTdGF0dXMgPT0gRG9lc05vdEtpbGwgfHwga2lsbFN0YXR1cyA9PSBE
b2VzS2lsbCk7CisgICAgcmV0dXJuIGtpbGxTdGF0dXMgPT0gRG9lc0tpbGw7Cit9CisKK2lubGlu
ZSBLaWxsU3RhdHVzIGtpbGxTdGF0dXNGb3JEb2VzS2lsbChib29sIGRvZXNLaWxsKQoreworICAg
IHJldHVybiBkb2VzS2lsbCA/IERvZXNLaWxsIDogRG9lc05vdEtpbGw7Cit9CisKIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiBib29sIGNoZWNrQW5kU2V0KFQmIGxlZnQsIFUgcmln
aHQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnRyYWRpY3Rpb25Q
cnVuaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29udHJhZGljdGlvblBydW5pbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDb250
cmFkaWN0aW9uUHJ1bmluZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ29udHJh
ZGljdGlvblBydW5pbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ29udHJh
ZGljdGlvblBydW5pbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgs
ICJjb250cmFkaWN0aW9uIHBydW5pbmciKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBy
dW4oKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICAvLyBGaXJzdCBmaW5kIHRoZSBibG9ja3MgdGhhdCBhcmUgYWxyZWFkeSBjb250cmFkaWN0
b3J5LCBhbmQgbWFrZSB0aGVtIG1vcmUKKyAgICAgICAgLy8gb2J2aW91c2x5IGNvbnRyYWRpY3Rv
cnkgYnkgaG9pc3RpbmcgdGhlIEZvcmNlT1NSRXhpdCB0byB0aGUgdG9wLgorICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoaXNDb250cmFkaWN0b3J5KGJsb2NrKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBpc0NvbnRyYWRpY3Rpb24gPSBmYWxzZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBu
b2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRocm93OgorICAgICAgICAg
ICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgICAgICAgICBjYXNlIEZv
cmNlT1NSRXhpdDoKKyAgICAgICAgICAgICAgICBjYXNlIEZvcndhcmRGb3JjZU9TUkV4aXQ6Cisg
ICAgICAgICAgICAgICAgICAgIGlzQ29udHJhZGljdGlvbiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFpc0NvbnRyYWRpY3Rpb24pCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1ha2VDb250cmFkaWN0b3J5KGJsb2NrKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBJ
ZiBhbGwgb2YgYSBibG9jaydzIHN1Y2Nlc3NvcnMgYXJlIGNvbnRyYWRpY3RvcnkgdGhlbiBtYWtl
IHRoYXQgYmxvY2sKKyAgICAgICAgLy8gY29udHJhZGljdG9yeSwgd2l0aCB0aGUgY2F2ZWF0IHRo
YXQgYSBibG9jayB3aXRoIG5vIHN1Y2Nlc3NvcnMgd29uJ3QgYmUKKyAgICAgICAgLy8gbWFkZSBj
b250cmFkaWN0b3J5LiBSdW4gdGhpcyBydWxlIHRvIGZpeHBvaW50LgorICAgICAgICBib29sIHJl
cnVuRml4cG9pbnQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHJlcnVuRml4cG9pbnQgPSBm
YWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAoaXNDb250cmFkaWN0b3J5KGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzID0gbV9ncmFwaC5u
dW1TdWNjZXNzb3JzKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW51bVN1Y2Nlc3NvcnMp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGJvb2wgYWxsQXJlQ29udHJhZGljdG9yeSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtU3VjY2Vzc29yczsgaS0tOykgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzQ29udHJhZGljdG9yeShtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3Vj
Y2Vzc29yKGJsb2NrLCBpKV0uZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbGxB
cmVDb250cmFkaWN0b3J5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoIWFsbEFyZUNvbnRyYWRpY3RvcnkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1h
a2VDb250cmFkaWN0b3J5KGJsb2NrKTsKKyAgICAgICAgICAgICAgICByZXJ1bkZpeHBvaW50ID0g
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKHJlcnVuRml4
cG9pbnQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorCitwcml2
YXRlOgorICAgIGJvb2wgaXNDb250cmFkaWN0b3J5KEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJsb2NrLT5hdCgwKS0+b3AoKSA9PSBGb3JjZU9TUkV4aXQ7CisgICAg
fQorICAgIAorICAgIHZvaWQgbWFrZUNvbnRyYWRpY3RvcnkoQmFzaWNCbG9jayogYmxvY2spCisg
ICAgeworICAgICAgICBOb2RlKiBvbGRGaXJzdCA9IGJsb2NrLT5hdCgwKTsKKyAgICAgICAgTm9k
ZSogbm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LCBvbGRGaXJz
dC0+Y29kZU9yaWdpbik7CisgICAgICAgIGJsb2NrLT5wcmVwZW5kKG5vZGUpOworICAgIH0KK307
CisKK2Jvb2wgcGVyZm9ybUNvbnRyYWRpY3Rpb25QcnVuaW5nKEdyYXBoJiBncmFwaCkKK3sKKyAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENvbnRyYWRpY3Rpb24gUHJ1bmlu
ZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNl
PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnRy
YWRpY3Rpb25QcnVuaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29udHJhZGljdGlvblBydW5pbmdQaGFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNl
X2gKKyNkZWZpbmUgREZHQ29udHJhZGljdGlvblBydW5pbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb250cmFkaWN0aW9uIHBydW5p
bmcuIE1ha2VzIGFueSBibG9jayB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gRm9yY2VPU1JFeGl0Cisv
LyBkbyBzbyBhcyB0aGUgdmVyeSBmaXJzdCBub2RlLiBBbnl0aW1lIGFsbCBvZiBhIGJsb2NrJ3Mg
c3VjY2Vzc29ycyBhcmUKKy8vIGNvbnRyYWRpY3Rpb25zLCBtYWtlcyB0aGF0IGJsb2NrIGEgY29u
dHJhZGljdGlvbiBhcyB3ZWxsLgorCitib29sIHBlcmZvcm1Db250cmFkaWN0aW9uUHJ1bmluZyhH
cmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2VfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NyaXRpY2Fs
RWRnZUJyZWFraW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5j
bHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHVibGljOgorICAgIENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UoR3JhcGgmIGdy
YXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiY3JpdGljYWwgZWRnZSBicmVha2luZyIpCisg
ICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIHJ1bigpCisgICAgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAg
ICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEFuIGVkZ2UgQS0+QiBpcyBjcml0aWNhbCBpZiBBIGhhcyBt
dWx0aXBsZSBzdWNjZXNzb3IgYW5kIEIgaGFzIG11bHRpcGxlCisgICAgICAgICAgICAvLyBwcmVk
ZWNlc3NvcnMuIFRodXMgd2UgZmFpbCBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIG11bHRpcGxlIHN1
Y2Nlc3NvcnMuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChibG9jay0+bnVtU3VjY2Vz
c29ycygpIDw9IDEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTsp
IHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiogc3VjY2Vzc29yID0gJmJsb2NrLT5zdWNj
ZXNzb3IoaSk7CisgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLnNp
emUoKSA8PSAxKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBicmVha0NyaXRpY2FsRWRnZShibG9jaywgc3VjY2Vzc29yKTsg
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2lu
c2VydGlvblNldC5leGVjdXRlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgYnJlYWtD
cml0aWNhbEVkZ2UoCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBzdWNjZXNz
b3JJbmRleCwgQmFzaWNCbG9jayoqIHN1Y2Nlc3NvcikKKyAgICB7CisgICAgICAgIG1fZ3JhcGgu
ZGV0aHJlYWQoKTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHBhZCA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydEJlZm9yZSgqc3VjY2Vzc29yKTsKKyAgICAgICAgcGFkLT5hcHBlbmROb2Rl
KG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBPcEluZm8oKnN1Y2Nlc3NvcikpOworICAgICAgICAK
KyAgICAgICAgKnN1Y2Nlc3NvciA9IHBhZDsKKyAgICB9CisgICAgCisgICAgQmxvY2tJbnNlcnRp
b25TZXQgbV9pbnNlcnRpb25TZXQ7Cit9OworCitib29sIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVh
a2luZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBDcml0aWNhbCBFZGdlIEJyZWFraW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNl
PENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2lu
Z1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ny
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZV9oCisjZGVmaW5lIERGR0NyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFw
aDsKKworLy8gSW5zZXJ0cyBkdW1teSBiYXNpYyBibG9ja3MgdG8gYnJlYWsgY3JpdGljYWwgZWRn
ZXMuIEFuIGVkZ2UgQS0+QiBpcworLy8gY3JpdGljYWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vz
c29ycyBhbmQgQiBoYXMgbXVsdGlwbGUgcHJlZGVzc29ycy4KKworYm9vbCBwZXJmb3JtQ3JpdGlj
YWxFZGdlQnJlYWtpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFz
ZS5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RENFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAg
ICAKICAgICBib29sIHJ1bigpCiAgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0g
PT0gVGhyZWFkZWRDUFMgfHwgbV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCiAgICAg
ICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBjb3VudHMgdG8gMCBmb3IgYWxsIG5vZGVzLgogICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKQEAgLTc1LDEwICs3NywyOSBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKLSAgICAg
ICAgICAgIG1fd29ya2xpc3QucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1
bmxlc3MgaXQncyByZWYnZWQuCi0gICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTiht
X2dyYXBoLCBub2RlLCBjb3VudEVkZ2UpOworICAgICAgICAgICAgd2hpbGUgKCFtX3dvcmtsaXN0
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX3dvcmtsaXN0Lmxh
c3QoKTsKKyAgICAgICAgICAgICAgICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7IC8vIEl0IHNob3VsZCBub3Qg
YmUgb24gdGhlIHdvcmtsaXN0IHVubGVzcyBpdCdzIHJlZidlZC4KKyAgICAgICAgICAgICAgICBE
RkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBjb3VudEVkZ2UpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0g
U1NBKSB7CisgICAgICAgICAgICAgICAgLy8gRmluZCBQaGktPlVwc2lsb24gZWRnZXMsIHdoaWNo
IGFyZSByZXByZXNlbnRlZCBhcyBtZXRhLWRhdGEgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8g
VXBzaWxvbi4KKyAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1f
Z3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNp
emUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSAhPSBVcHNpbG9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBoaSgpLT5zaG91bGRHZW5lcmF0
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Tm9kZShub2RlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CkBAIC05NCw4
ICsxMTUsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS5pc1Byb3ZlZCgpIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5
cGVkVXNlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAg
ICBjYXNlIE1vdkhpbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKChub2RlLT5vcCgp
ID09IFNldExvY2FsKSA9PSAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2soKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQg
VUludDMyVG9OdW1iZXIgaXMgZGVhZCBidXQgaXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBjaGlsZCBpc24ndDsgaWYgc28gdGhlbiB3ZSBzaG91bGQgTW92SGludCB0aGUgY2hpbGQuCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0
ZSgpCkBAIC0xMTcsOCArMTQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3Vs
ZEdlbmVyYXRlLgotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBMZWF2ZSB0aGVtIGFzIG5vdCBzaG91bGRHZW5lcmF0ZS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgZGVmYXVsdDogewpAQCAtMTI2LDcgKzE1MSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+
bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVkZ2UgZWRnZSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF07CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UgfHwgZWRnZS5pc1Byb3ZlZCgpIHx8IGVk
Z2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFlZGdlIHx8IGVkZ2Uud2lsbE5vdEhhdmVDaGVjaygpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5v
ZGUtPmNvZGVPcmlnaW4sIGVkZ2UpOwpAQCAtMTU4LDIxICsxODMsMjUgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZlIGFuICJ1bnByb3ZlZCIgdW50eXBlZCB1c2UgZm9y
IGNvZGUgdGhhdCBpcyB1bnJlYWNoYWJsZS4gVGhlIENGQQogICAgICAgICAvLyB3aWxsIGp1c3Qg
bm90IGhhdmUgZ290dGVuIGFyb3VuZCB0byBpdC4KLSAgICAgICAgaWYgKGVkZ2UuaXNQcm92ZWQo
KSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKQorICAgICAgICBpZiAoZWRnZS53aWxs
Tm90SGF2ZUNoZWNrKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmICghZWRnZS0+
cG9zdGZpeFJlZigpKQogICAgICAgICAgICAgbV93b3JrbGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkp
OwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvdW50Tm9kZShOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgaWYgKG5vZGUtPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV93b3JrbGlzdC5hcHBlbmQobm9kZSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY291bnRF
ZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICAvLyBEb24ndCBjb3VudCBlZGdl
cyB0aGF0IGFyZSBhbHJlYWR5IGNvdW50ZWQgZm9yIHRoZWlyIHR5cGUgY2hlY2tzLgotICAgICAg
ICBpZiAoIShlZGdlLmlzUHJvdmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoZWRnZS0+cG9zdGZp
eFJlZigpKQorICAgICAgICBpZiAoZWRnZS53aWxsSGF2ZUNoZWNrKCkpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIG1fd29ya2xpc3QuYXBwZW5kKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAg
Y291bnROb2RlKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbGltaW5hdGVJ
cnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKE5vZGUqIG5vZGUpCkBAIC0xODEsNyArMjEwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkp
OwogICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgaWYgKGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVk
VXNlKQorICAgICAgICAgICAgaWYgKGVkZ2Uud2lsbE5vdEhhdmVDaGVjaygpKQogICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2UoaS0tKTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAkocmV2aXNpb24gMTUyNTgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksOCBAQCB2b2lkIEVkZ2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKICAgICAgICAgICAgIG91dC5wcmludCgiQ2hlY2s6Iik7CiAgICAgICAgIG91dC5wcmludCh1
c2VLaW5kKCksICI6Iik7CiAgICAgfQorICAgIGlmIChkb2VzS2lsbCgpKQorICAgICAgICBvdXQu
cHJpbnQoIktpbGw6Iik7CiAgICAgb3V0LnByaW50KG5vZGUoKSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEy
IEBAIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAKIGNsYXNzIEVkZ2UgewogcHVibGljOgotICAgIGV4
cGxpY2l0IEVkZ2UoTm9kZSogbm9kZSA9IDAsIFVzZUtpbmQgdXNlS2luZCA9IFVudHlwZWRVc2Us
IFByb29mU3RhdHVzIHByb29mU3RhdHVzID0gTmVlZHNDaGVjaykKKyAgICBleHBsaWNpdCBFZGdl
KE5vZGUqIG5vZGUgPSAwLCBVc2VLaW5kIHVzZUtpbmQgPSBVbnR5cGVkVXNlLCBQcm9vZlN0YXR1
cyBwcm9vZlN0YXR1cyA9IE5lZWRzQ2hlY2ssIEtpbGxTdGF0dXMga2lsbFN0YXR1cyA9IERvZXNO
b3RLaWxsKQogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtl
V29yZChub2RlLCB1c2VLaW5kLCBwcm9vZlN0YXR1cykpCisgICAgICAgIDogbV9lbmNvZGVkV29y
ZChtYWtlV29yZChub2RlLCB1c2VLaW5kLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cykpCiAjZWxz
ZQogICAgICAgICA6IG1fbm9kZShub2RlKQotICAgICAgICAsIG1fZW5jb2RlZFdvcmQobWFrZVdv
cmQodXNlS2luZCwgcHJvb2ZTdGF0dXMpKQorICAgICAgICAsIG1fZW5jb2RlZFdvcmQobWFrZVdv
cmQodXNlS2luZCwgcHJvb2ZTdGF0dXMsIGtpbGxTdGF0dXMpKQogI2VuZGlmCiAgICAgewogICAg
IH0KQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2Rl
KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFr
ZVdvcmQobm9kZSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cygpKTsKKyAgICAgICAgbV9lbmNvZGVk
V29yZCA9IG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1
cygpKTsKICNlbHNlCiAgICAgICAgIG1fbm9kZSA9IG5vZGU7CiAjZW5kaWYKQEAgLTg5LDcgKzg5
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUoKSk7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2lu
ZCwgcHJvb2ZTdGF0dXMoKSk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2Rl
KCksIHVzZUtpbmQsIHByb29mU3RhdHVzKCksIGtpbGxTdGF0dXMoKSk7CiAjZWxzZQogICAgICAg
ICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQodXNlS2luZCwgcHJvb2ZTdGF0dXMoKSk7CiAjZW5k
aWYKQEAgLTEwOCw5ICsxMDgsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobm9k
ZSgpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdv
cmQobm9kZSgpLCB1c2VLaW5kKCksIHByb29mU3RhdHVzKTsKKyAgICAgICAgbV9lbmNvZGVkV29y
ZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cygp
KTsKICNlbHNlCi0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZCh1c2VLaW5kKCksIHBy
b29mU3RhdHVzKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQoKSwg
cHJvb2ZTdGF0dXMsIGtpbGxTdGF0dXMoKSk7CiAjZW5kaWYKICAgICB9CiAgICAgYm9vbCBpc1By
b3ZlZCgpIGNvbnN0CkBAIC0xMjIsNiArMTIyLDM2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHByb29mU3RhdHVzKCkgPT0gTmVlZHNDaGVjazsKICAgICB9CiAgICAgCisgICAgYm9vbCB3aWxs
Tm90SGF2ZUNoZWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1Byb3ZlZCgpIHx8
IHVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlOworICAgIH0KKyAgICBib29sIHdpbGxIYXZlQ2hlY2so
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICF3aWxsTm90SGF2ZUNoZWNrKCk7CisgICAg
fQorICAgIAorICAgIEtpbGxTdGF0dXMga2lsbFN0YXR1c1VuY2hlY2tlZCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4ga2lsbFN0YXR1c0ZvckRvZXNLaWxsKG1fZW5jb2RlZFdvcmQgJiAy
KTsKKyAgICB9CisgICAgS2lsbFN0YXR1cyBraWxsU3RhdHVzKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChub2RlKCkpOworICAgICAgICByZXR1cm4ga2lsbFN0YXR1c1VuY2hlY2tlZCgp
OworICAgIH0KKyAgICB2b2lkIHNldEtpbGxTdGF0dXMoS2lsbFN0YXR1cyBraWxsU3RhdHVzKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1
cygpLCBraWxsU3RhdHVzKTsKKyNlbHNlCisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29y
ZCh1c2VLaW5kKCksIHByb29mU3RhdHVzKCksIGtpbGxTdGF0dXMpOworI2VuZGlmCisgICAgfQor
ICAgIGJvb2wgZG9lc0tpbGwoKSBjb25zdCB7IHJldHVybiBERkc6OmRvZXNLaWxsKGtpbGxTdGF0
dXMoKSk7IH0KKyAgICBib29sIGRvZXNOb3RLaWxsKCkgY29uc3QgeyByZXR1cm4gIWRvZXNLaWxs
KCk7IH0KKyAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFub2RlKCk7IH0K
ICAgICAKICAgICB0eXBlZGVmIHZvaWQqIEVkZ2U6OipVbnNwZWNpZmllZEJvb2xUeXBlOwpAQCAt
MTUwLDIwICsxODAsMjAgQEAgcHJpdmF0ZToKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHN0YXRp
YyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDY7IH0KICAgICAKLSAgICBzdGF0aWMgdWludHB0
cl90IG1ha2VXb3JkKE5vZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJv
b2ZTdGF0dXMpCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VL
aW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3RhdHVzLCBLaWxsU3RhdHVzIGtpbGxTdGF0
dXMpCiAgICAgewogICAgICAgICBBU1NFUlQoc2l6ZW9mKG5vZGUpID09IDgpOwogICAgICAgICB1
aW50cHRyX3Qgc2hpZnRlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkgPDwg
c2hpZnQoKTsKICAgICAgICAgQVNTRVJUKChzaGlmdGVkVmFsdWUgPj4gc2hpZnQoKSkgPT0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpOwogICAgICAgICBBU1NFUlQodXNlS2luZCA+PSAw
ICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7Ci0gICAgICAgIEFTU0VSVCgoc3RhdGljX2Nhc3Q8
dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMSkgPD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gc2hpZnRlZFZhbHVlIHwgKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMSkgfCBERkc6OmlzUHJvdmVkKHByb29mU3RhdHVz
KTsKKyAgICAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KExhc3RVc2VLaW5kKSA8
PCAyKSA8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigyKSA8PCBzaGlmdCgpKSk7CisgICAgICAg
IHJldHVybiBzaGlmdGVkVmFsdWUgfCAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8
PCAyKSB8IChERkc6OmRvZXNLaWxsKGtpbGxTdGF0dXMpIDw8IDEpIHwgREZHOjppc1Byb3ZlZChw
cm9vZlN0YXR1cyk7CiAgICAgfQogICAgIAogI2Vsc2UKLSAgICBzdGF0aWMgdWludHB0cl90IG1h
a2VXb3JkKFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMpCisgICAgc3Rh
dGljIHVpbnRwdHJfdCBtYWtlV29yZChVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29m
U3RhdHVzLCBLaWxsU3RhdHVzIGtpbGxTdGF0dXMpCiAgICAgewotICAgICAgICByZXR1cm4gKHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMSkgfCBERkc6OmlzUHJvdmVkKHByb29m
U3RhdHVzKTsKKyAgICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQp
IDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1cykgPDwgMSkgfCBERkc6OmlzUHJvdmVk
KHByb29mU3RhdHVzKTsKICAgICB9CiAgICAgCiAgICAgTm9kZSogbV9ub2RlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI1
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MDEsNiArOTAxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNlIEdl
dEFycmF5TGVuZ3RoOgogICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBVcHNpbG9uOgog
ICAgICAgICBjYXNlIEZvcndhcmRJbnQzMlRvRG91YmxlOgogICAgICAgICBjYXNlIFBoYW50b21Q
dXRTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
Rmx1c2hGb3JtYXQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgV1RGIHsK
KwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHCisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBGbHVzaEZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsK
KyAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgb3V0LnByaW50KCJEZWFkRmx1c2giKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICBvdXQucHJpbnQo
IkZsdXNoZWRJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGbHVzaGVkRG91Ymxl
OgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWREb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZENlbGwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgIG91dC5w
cmludCgiRmx1c2hlZEJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hl
ZEpTVmFsdWU6CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZEpTVmFsdWUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdGbHVzaEZvcm1hdF9oCisjZGVmaW5lIERGR0ZsdXNoRm9y
bWF0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitlbnVtIEZsdXNoRm9ybWF0IHsKKyAgICBEZWFkRmx1c2gsCisgICAgRmx1
c2hlZEludDMyLAorICAgIEZsdXNoZWREb3VibGUsCisgICAgRmx1c2hlZENlbGwsCisgICAgRmx1
c2hlZEJvb2xlYW4sCisgICAgRmx1c2hlZEpTVmFsdWUKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6REZHOjpGbHVzaEZvcm1hdCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdGbHVzaEZvcm1hdF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1
c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0ZsdXNoTGl2
ZW5lc3NBbmFseXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBG
bHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAg
Rmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNl
KGdyYXBoLCAiZmx1c2gtbGl2ZW5lc3MgYW5hbHlzaXMiKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNT
QSk7CisgICAgICAgIAorICAgICAgICAvLyBMaXZlbmVzcyBpcyBhIGJhY2t3YXJkcyBhbmFseXNp
czsgdGhlIHJvb3RzIGFyZSB0aGUgYmxvY2tzIHRoYXQKKyAgICAgICAgLy8gZW5kIGluIGEgdGVy
bWluYWwgKFJldHVybi9UaHJvdy9UaHJvd1JlZmVyZW5jZUVycm9yKS4gRm9yIG5vdywgd2UKKyAg
ICAgICAgLy8gdXNlIGEgZml4cG9pbnQgZm9ybXVsYXRpb24gc2luY2UgbGl2ZW5lc3MgaXMgYSBy
YXBpZCBhbmFseXNpcyB3aXRoCisgICAgICAgIC8vIGNvbnZlcmdlbmNlIGd1YXJhbnRlZWQgYWZ0
ZXIgTyhjb25uZWN0aXZpdHkpLgorICAgICAgICAKKyAgICAgICAgLy8gU3RhcnQgYnkgYXNzdW1p
bmcgdGhhdCBldmVyeXRoaW5nIGlzIGRlYWQuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkLmZpbGwoRGVhZEZsdXNoKTsKKyAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRUYWlsLmZpbGwoRGVhZEZsdXNoKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFs
c2U7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVt
QmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9ja0lu
ZGV4KTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoQmxvY2tJbmRl
eCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRB
dFRhaWw7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2Nr
LT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCB2YXJpYWJsZS0+bG9jYWwoKSwgdmFy
aWFibGUtPmZsdXNoRm9ybWF0KCksIERlYWRGbHVzaCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZsdXNo
OgorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAg
ICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsK
KyAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhcmlhYmxlLT5sb2NhbCgpLCBmb3Jt
YXQsIGZvcm1hdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9saXZl
ID09IGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgYmxvY2stPnNzYS0+
Zmx1c2hGb3JtYXRBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSBtX2xpdmUuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgRmx1
c2hGb3JtYXQmIHByZWRlY2Vzc29yRm9ybWF0ID0gcHJlZGVjZXNzb3ItPnNzYS0+Zmx1c2hGb3Jt
YXRBdFRhaWxbal07CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgbXlGb3JtYXQgPSBteUxp
dmVbal07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGhyZWUgcG9zc2li
aWxpdGllczoKKyAgICAgICAgICAgICAgICAvLyAxKSBQcmVkZWNlc3NvciBmb3JtYXQgaXMgRGVh
ZCwgaW4gd2hpY2ggY2FzZSBpdCBhY3F1aXJlcyBvdXIgZm9ybWF0LgorICAgICAgICAgICAgICAg
IC8vIDIpIFByZWRlY2Vzc29yIGZvcm1hdCBpcyBpZGVudGljYWwgdG8gb3VyIGZvcm1hdCwgaW4g
d2hpY2ggY2FzZSB3ZQorICAgICAgICAgICAgICAgIC8vICAgIGRvIG5vdGhpbmcuCisgICAgICAg
ICAgICAgICAgLy8gMykgUHJlZGVjZXNzb3IgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIG91ciBm
b3JtYXQgYW5kIGl0J3Mgbm90IERlYWQsCisgICAgICAgICAgICAgICAgLy8gICAgaW4gd2hpY2gg
Y2FzZSB3ZSBoYXZlIGFuIGVycm9uZW91cyBzZXQgb2YgRmx1c2hlcyBhbmQgU2V0TG9jYWxzLgor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvckZvcm1hdCA9
PSBEZWFkRmx1c2gpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JGb3JtYXQgPSBt
eUZvcm1hdDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvckZvcm1h
dCA9PSBteUZvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkJh
ZCBGbHVzaCBtZXJnZSBhdCBlZGdlICIsICpwcmVkZWNlc3NvciwgIiAtPiAiLCAqYmxvY2ssCisg
ICAgICAgICAgICAgICAgICAgICIsIGxvY2FsIHZhcmlhYmxlIHIiLCBteUxpdmUub3BlcmFuZEZv
ckluZGV4KGopLCAiOiAiLCAqcHJlZGVjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICIgaGFz
ICIsIHByZWRlY2Vzc29yRm9ybWF0LCAiIGFuZCAiLCAqYmxvY2ssICIgaGFzICIsIG15Rm9ybWF0
LCAiLlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSVIgYXQgdGltZSBvZiBlcnJvcjpc
biIpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgIENS
QVNIKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBz
ZXRGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBub2RlRm9ybWF0
LCBGbHVzaEZvcm1hdCBuZXdGb3JtYXQpCisgICAgeworICAgICAgICBGbHVzaEZvcm1hdCYgY3Vy
cmVudEZvcm1hdCA9IG1fbGl2ZS5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAg
Ly8gRG8gc29tZSB1c2VmdWwgdmVyaWZpY2F0aW9uIGhlcmUuIEl0J3MgT0sgaWYgd2UgdGhpbmsg
dGhhdCB0aGUKKyAgICAgICAgLy8gZmx1c2ggZm9ybWF0IGlzIGRlYWQgYXQgdGhlIHRpbWUgdGhh
dCB3ZSBzZWUgdGhlIG5vZGUuIEJ1dCBpdCdzCisgICAgICAgIC8vIG5vdCBPSyBpZiBib3RoIHRo
ZSBub2RlIGFuZCBtX2xpdmUgc2VlIGEgRmx1c2hGb3JtYXQgYW5kIHRoZXkgZG8KKyAgICAgICAg
Ly8gbm90IGFncmVlIG9uIGl0LgorICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnRGb3JtYXQg
PT0gRGVhZEZsdXNoIHx8IGN1cnJlbnRGb3JtYXQgPT0gbm9kZUZvcm1hdCkgeworICAgICAgICAg
ICAgY3VycmVudEZvcm1hdCA9IG5ld0Zvcm1hdDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJCYWQgRmx1c2gg
bWVyZ2UgYXQgbm9kZSAiLCBub2RlLCAiLCByIiwgb3BlcmFuZCwgIjogbm9kZSBjbGFpbXMgIiwg
bm9kZUZvcm1hdCwKKyAgICAgICAgICAgICIgYnV0IGJhY2t3YXJkcyBmbG93IGNsYWltcyAiLCBj
dXJyZW50Rm9ybWF0LCAiLlxuIik7CisgICAgICAgIGRhdGFMb2coIklSIGF0IHRpbWUgb2YgZXJy
b3I6XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIENSQVNIKCk7CisgICAg
fQorICAgIAorICAgIEZsdXNoRm9ybWF0IGZsdXNoRm9ybWF0KE5vZGUqIG5vZGUpCisgICAgewor
ICAgICAgICByZXR1cm4gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAg
ICB7CisgICAgICAgIG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICBi
b29sIG1fY2hhbmdlZDsKKyAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gbV9saXZlOworfTsKKwor
Ym9vbCBwZXJmb3JtRmx1c2hMaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiBncmFwaCkKK3sKKyAgICBT
YW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEZsdXNoLUxpdmVuZXNzIEFuYWx5c2lz
IFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNl
PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQ
aGFzZV9oCisjZGVmaW5lIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBH
cmFwaDsKKworLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5mbHVzaEZvcm1hdEF0SGVhZAor
Citib29sIHBlcmZvcm1GbHVzaExpdmVuZXNzQW5hbHlzaXMoR3JhcGgmKTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSw4
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICB9CiAgICAg
aWYgKG5vZGUtPmhhc0luZGV4aW5nVHlwZSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIElu
ZGV4aW5nVHlwZUR1bXAobm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBpZiAobm9kZS0+aGFz
UGhpKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIl4iLCBub2RlLT5waGkoKS0+aW5kZXgo
KSk7CiAgICAgaWYgKG5vZGUtPmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkKICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPmV4ZWN1dGlvbkNvdW50ZXIoKSkpOwogICAgIGlm
IChvcCA9PSBKU0NvbnN0YW50KSB7CkBAIC0zMTMsMjEgKzMxNSwyMyBAQCB2b2lkIEdyYXBoOjpk
dW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgICAgICAgICBvdXQucHJpbnQoIlxuIik7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgb3V0LnByaW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW2ldOwotICAgICAgICBpZiAoIXBo
aU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2RlID09IER1bXBMaXZlUGhp
c09ubHkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb3V0LnByaW50KCIgQCIsIHBo
aU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKLSAgICAg
ICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIkAiLCBw
aGlOb2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hp
bGQyKCkpIHsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxk
MigpLT5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQzKCkpCi0g
ICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQzKCktPmlu
ZGV4KCkpOworICAgIGlmICghYmxvY2stPnBoaXMuaXNFbXB0eSgpKSB7CisgICAgICAgIG91dC5w
cmludChwcmVmaXgsICIgIFBoaSBOb2RlczoiKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTm9kZSogcGhpTm9k
ZSA9IGJsb2NrLT5waGlzW2ldOworICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5l
cmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBoaU5vZGUtPmlu
ZGV4KCksICI8IiwgcGhpTm9kZS0+cmVmQ291bnQoKSwgIj4tPigiKTsKKyAgICAgICAgICAgIGlm
IChwaGlOb2RlLT5jaGlsZDEoKSkgeworICAgICAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBo
aU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+
Y2hpbGQyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2Rl
LT5jaGlsZDIoKS0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5j
aGlsZDMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCBAIiwgcGhpTm9k
ZS0+Y2hpbGQzKCktPmluZGV4KCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG91dC5wcmludCgiKSIsIGkgKyAxIDwgYmxvY2stPnBoaXMuc2l6ZSgpID8g
IiwiIDogIiIpOwogICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgiKSIsIGkgKyAxIDwgYmxv
Y2stPnBoaXMuc2l6ZSgpID8gIiwiIDogIiIpOwogICAgIH0KICAgICBvdXQucHJpbnQoIlxuIik7
CiB9CkBAIC0zNDUsNyArMzQ5LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KQogICAgICAgICBkdW1wQmxvY2tIZWFkZXIob3V0LCAiIiwgYmxvY2ssIER1bXBBbGxQaGlzKTsK
ICAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYmVmb3JlOiAiKTsKICAgICAgICAgaWYgKGJsb2Nr
LT5jZmFIYXNWaXNpdGVkKQotICAgICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNB
dEhlYWQsIG91dCk7CisgICAgICAgICAgICBvdXQucHJpbnQoYmxvY2stPnZhbHVlc0F0SGVhZCk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAg
ICBvdXQucHJpbnQoIlxuIik7CkBAIC0zNTksNyArMzYzLDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KQogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiICB2YXJzIGFm
dGVyOiAiKTsKICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQotICAgICAgICAgICAg
ZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdFRhaWwsIG91dCk7CisgICAgICAgICAgICBvdXQu
cHJpbnQoYmxvY2stPnZhbHVlc0F0VGFpbCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG91
dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICBvdXQucHJpbnQoIlxuIik7CkBAIC00NzgsNiAr
NDgyLDI4IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2MKICAgICAg
ICAgICAgIGJyZWFrOwogICAgIH0KIH0KKwordm9pZCBHcmFwaDo6YWRkRm9yRGVwdGhGaXJzdFNv
cnQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYg
d29ya2xpc3QsIEhhc2hTZXQ8QmFzaWNCbG9jayo+JiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykK
K3sKKyAgICBpZiAoc2Vlbi5jb250YWlucyhibG9jaykpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKKyAgICB3b3JrbGlzdC5hcHBlbmQoYmxvY2spOwor
ICAgIHNlZW4uYWRkKGJsb2NrKTsKK30KKwordm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5EZXB0aEZp
cnN0T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQoreworICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKiwgMTY+IHdvcmtsaXN0OworICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHNlZW47Cisg
ICAgYWRkRm9yRGVwdGhGaXJzdFNvcnQocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkp
OworICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
YmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgIGFkZEZvckRlcHRoRmly
c3RTb3J0KHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNzb3IoaSkpOworICAg
IH0KK30KICAgICAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NDEsNiArNjQxLDgg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgaW52YWxpZGF0ZUNGRygpOwogICAgIAorICAgIHZv
aWQgZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0
KTsKKyAgICAKICAgICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1
cm4gbV9wbGFuLmNvbXBpbGF0aW9uLmdldCgpOyB9CiAgICAgCiAgICAgRGVzaXJlZElkZW50aWZp
ZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQpAQCAtNjc5
LDYgKzY4MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNj
ZXNzb3IoVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCYXNpY0Jsb2NrKiwgQmFz
aWNCbG9jayogc3VjY2Vzc29yKTsKKyAgICB2b2lkIGFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3Rv
cjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0
LCBIYXNoU2V0PEJhc2ljQmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9jayopOwogICAgIAogICAgIEFk
ZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUq
IGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludGVnZXIsIE5vZGUqIGltbWVkaWF0
ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9u
U2V0LmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI2ICszMSwxMiBAQAogI2lmIEVO
QUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYvSW5z
ZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKLWNsYXNzIEluc2VydGlvbiB7Ci1wdWJsaWM6Ci0gICAgSW5zZXJ0aW9u
KCkgeyB9Ci0gICAgCi0gICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVudCkK
LSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleDsgfQotICAgIE5vZGUqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0K
LXByaXZhdGU6Ci0gICAgc2l6ZV90IG1faW5kZXg7Ci0gICAgTm9kZSogbV9lbGVtZW50OwotfTsK
K3R5cGVkZWYgV1RGOjpJbnNlcnRpb248Tm9kZSo+IEluc2VydGlvbjsKIAogY2xhc3MgSW5zZXJ0
aW9uU2V0IHsKIHB1YmxpYzoKQEAgLTgxLDIwICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBpZiAoIW1faW5z
ZXJ0aW9ucy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJsb2NrLT5ncm93
KGJsb2NrLT5zaXplKCkgKyBtX2luc2VydGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgc2l6ZV90IGxh
c3RJbmRleCA9IGJsb2NrLT5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5JbnNl
cnRpb25zID0gbV9pbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsKLSAg
ICAgICAgICAgIEluc2VydGlvbiYgaW5zZXJ0aW9uID0gbV9pbnNlcnRpb25zW2luZGV4SW5JbnNl
cnRpb25zXTsKLSAgICAgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uLmluZGV4
KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9mZnNldCA9
IGluZGV4SW5JbnNlcnRpb25zICsgMTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0
SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQotICAgICAgICAgICAgICAgIGJsb2NrLT5hdChpKSA9
IGJsb2NrLT5hdChpIC0gaW5kZXhPZmZzZXQpOwotICAgICAgICAgICAgYmxvY2stPmF0KGZpcnN0
SW5kZXgpID0gaW5zZXJ0aW9uLmVsZW1lbnQoKTsKLSAgICAgICAgICAgIGxhc3RJbmRleCA9IGZp
cnN0SW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgbV9pbnNlcnRpb25zLnJlc2l6ZSgwKTsKKyAg
ICAgICAgZXhlY3V0ZUluc2VydGlvbnMoKmJsb2NrLCBtX2luc2VydGlvbnMpOwogICAgIH0KIHBy
aXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgor
I2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIExpdmVuZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6Cisg
ICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShn
cmFwaCwgImxpdmVuZXNzIGFuYWx5c2lzIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
cnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAg
ICAgICAKKyAgICAgICAgLy8gTGl2ZW5lc3MgaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXM7IHRoZSBy
b290cyBhcmUgdGhlIGJsb2NrcyB0aGF0CisgICAgICAgIC8vIGVuZCBpbiBhIHRlcm1pbmFsIChS
ZXR1cm4vVGhyb3cvVGhyb3dSZWZlcmVuY2VFcnJvcikuIEZvciBub3csIHdlCisgICAgICAgIC8v
IHVzZSBhIGZpeHBvaW50IGZvcm11bGF0aW9uIHNpbmNlIGxpdmVuZXNzIGlzIGEgcmFwaWQgYW5h
bHlzaXMgd2l0aAorICAgICAgICAvLyBjb252ZXJnZW5jZSBndWFyYW50ZWVkIGFmdGVyIE8oY29u
bmVjdGl2aXR5KS4KKyAgICAgICAgCisgICAgICAgIC8vIFN0YXJ0IGJ5IGFzc3VtaW5nIHRoYXQg
ZXZlcnl0aGluZyBpcyBkZWFkLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBibG9jay0+
bGl2ZUF0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPmxpdmVBdFRhaWwuY2xlYXIo
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1f
Z3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2Vz
cyhibG9ja0luZGV4KTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3Mo
QmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRo
YXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAg
ICAgICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTg0NTUKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9k
ZUluZGV4LS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRl
eCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246CisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gICAgbjogVXBzaWxvbigkcCwgQHgpCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFu
ZCB1c2VzIEB4LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhpOgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCisgICAgICAgICAgICAv
LworICAgICAgICAgICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVzZSBub3Ig
YSBkZWYuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2RlOgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1
c2VzIEBhLCBAYiwgQGMuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgeworICAgICAgICAgICAgY2FzZSBVcHNpbG9uOiB7CisgICAgICAgICAgICAgICAgTm9k
ZSogcGhpID0gbm9kZS0+cGhpKCk7CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkp
OworICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICAgICAg
bV9saXZlLmFkZChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGk6
IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShu
b2RlKTsKKyAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBu
b2RlLCBhZGRDaGlsZFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+
bGl2ZUF0SGVhZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CisgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmU7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07
KQorICAgICAgICAgICAgYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5hZGQobV9saXZlLmJlZ2luKCks
IG1fbGl2ZS5lbmQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSos
IEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBhZGRDaGlsZFVzZShlZGdlKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhZGRDaGlsZFVzZShFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgZWRn
ZS5zZXRLaWxsU3RhdHVzKG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkpLmlzTmV3RW50cnkgPyBEb2Vz
S2lsbCA6IERvZXNOb3RLaWxsKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7Cisg
ICAgSGFzaFNldDxOb2RlKj4gbV9saXZlOworfTsKKworYm9vbCBwZXJmb3JtTGl2ZW5lc3NBbmFs
eXNpcyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBMaXZlbmVzcyBBbmFseXNpcyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxMaXZl
bmVzc0FuYWx5c2lzUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZV9oCisjZGVmaW5lIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9u
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisK
Ky8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+bGl2ZUF0SGVhZC9saXZlQXRUYWlsLgorCiti
b29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTGl2
ZW5lc3NBbmFseXNpc1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MzgsNiArNTM4LDE3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obV9vcEluZm8pOwogICAg
IH0KICAgICAKKyAgICBib29sIGhhc1BoaSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9
PSBVcHNpbG9uOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBwaGkoKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGhhc1BoaSgpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxOb2RlKj4obV9v
cEluZm8pOworICAgIH0KKyAgICAKICAgICBib29sIGhhc0lkZW50aWZpZXIoKQogICAgIHsKICAg
ICAgICAgc3dpdGNoIChvcCgpKSB7CkBAIC03NzMsMTYgKzc4NCwxNiBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIG1fb3BJbmZvMiA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJsb2NrKTsKICAg
ICB9CiAgICAgCi0gICAgQmFzaWNCbG9jayogdGFrZW5CbG9jaygpCisgICAgQmFzaWNCbG9jayom
IHRha2VuQmxvY2soKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1w
KCkpOwotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbyk7
CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZvKTsK
ICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9jayogbm90VGFrZW5CbG9jaygpCisgICAgQmFzaWNC
bG9jayomIG5vdFRha2VuQmxvY2soKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkp
OwotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbzIpOwor
ICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbzIpOwog
ICAgIH0KICAgICAKICAgICBTd2l0Y2hEYXRhKiBzd2l0Y2hEYXRhKCkKQEAgLTgwNSw3ICs4MTYs
NyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9j
ayogc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3Io
dW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICBpZiAoaXNTd2l0Y2goKSkgewogICAgICAg
ICAgICAgaWYgKGluZGV4IDwgc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkpCkBAIC04MjAsNyAr
ODMxLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAgICAgcmV0dXJuIG5vdFRha2VuQmxvY2so
KTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiB0YWtlbkJs
b2NrKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKE1vdkhpbnQsIE5vZGVE
b2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFpvbWJpZUhpbnQsIE5vZGVEb2VzTm90RXhpdCkgXAog
ICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhVcHNpbG9u
LCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikgXAogICAgIG1hY3JvKFBoaSwg
Tm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwKICAgICBtYWNybyhGbHVzaCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBoYW50b21M
b2NhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdC
YXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZH
SW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJPU1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzIikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0Owor
ICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtp
XTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5maWxsKDApOwor
ICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoMCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZp
cnN0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRo
Rmlyc3RbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIGVkaXQgYXZhaWxhYmls
aXR5QXRUYWlsIGluLXBsYWNlLCBidXQgZmlyc3QgaW5pdGlhbGl6ZSBpdCB0bworICAgICAgICAg
ICAgLy8gYXZhaWxhYmlsaXR5QXRIZWFkLgorICAgICAgICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBh
dmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAgICAg
ICBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAg
ICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsK
KyAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fz
ZSBab21iaWVIaW50OiB7CisgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2Nr
LT5udW1TdWNjZXNzb3JzKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKGopOworICAgICAgICAgICAgICAgIE9wZXJhbmRz
PE5vZGUqPiYgc3VjY2Vzc29yQXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5
QXRIZWFkOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IGF2YWlsYWJpbGl0eS5z
aXplKCk7IGstLTspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbXlOb2RlID0gYXZhaWxh
YmlsaXR5W2tdOworICAgICAgICAgICAgICAgICAgICBpZiAoIW15Tm9kZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlbmVzc0F0SGVhZC5jb250YWlucyhteU5vZGUp
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgb3ZlcndyaXRlIGF2
YWlsYWJpbGl0eSB3aXRoIGEgYm9ndXMgbm9kZQorICAgICAgICAgICAgICAgICAgICAvLyBhdCBt
ZXJnZSBwb2ludHMuIFRoaXMgaXMgZmluZSwgc2luY2UgbWVyZ2UgcG9pbnRzIGhhdmUKKyAgICAg
ICAgICAgICAgICAgICAgLy8gTW92SGludChQaGkpJ3MgdG8gd29yayBhcm91bmQgdGhpcy4gVGhl
IG91dGNvbWUgb2YgdGhpcyBpcworICAgICAgICAgICAgICAgICAgICAvLyB5b3UgbWlnaHQgaGF2
ZSBhIHByb2dyYW0gaW4gd2hpY2ggYSBub2RlIGhhcHBlbnMgdG8gcmVtYWluCisgICAgICAgICAg
ICAgICAgICAgIC8vIGxpdmUgaW50byBzb21lIGJsb2NrIEIsIGFuZCBzZXBhcmF0ZWx5IChkdWUg
dG8gY29weQorICAgICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGlvbikganVzdCBvbmUgb2Yg
dGhlIHByZWRlY2Vzc29ycyBvZiBCIGlzc3VlZCBhCisgICAgICAgICAgICAgICAgICAgIC8vIE1v
dkhpbnQgcHV0dGluZyB0aGF0IG5vZGUgaW50byBzb21lIGxvY2FsLiBUaGVuIGluIEIgd2UgbWln
aHQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpbmsgdGhhdCB0aGF0IG5vZGUgaXMgYSB2YWxp
ZCB2YWx1ZSBmb3IgdGhhdCBsb2NhbC4gT2YKKyAgICAgICAgICAgICAgICAgICAgLy8gY291cnNl
IGlmIHRoYXQgbG9jYWwgd2FzIGFjdHVhbGx5IGxpdmUgaW4gQiwgQiB3b3VsZCBoYXZlIGEKKyAg
ICAgICAgICAgICAgICAgICAgLy8gUGhpIGZvciBpdC4gU28gZXNzZW50aWFsbHkgd2UnbGwgaGF2
ZSBPU1IgZXhpdCBkcm9wcGluZyB0aGlzCisgICAgICAgICAgICAgICAgICAgIC8vIG5vZGUncyB2
YWx1ZSBpbnRvIHRoZSBsb2NhbCB3aGVuIHdlIG90aGVyd2lzZSAoaW4gdGhlIERGRykKKyAgICAg
ICAgICAgICAgICAgICAgLy8gd291bGQgaGF2ZSBkcm9wcGVkIHVuZGVmaW5lZCBpbnRvIHRoZSBs
b2NhbC4gVGhpcyBzZWVtcworICAgICAgICAgICAgICAgICAgICAvLyBoYXJtbGVzcy4KKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NvckF2YWlsYWJpbGl0
eVtrXSA9IG15Tm9kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK2Jvb2wgcGVy
Zm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9TUiBBdmFpbGFiaWxpdHkgQW5hbHlzaXMgUGhh
c2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZT4o
Z3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZV9oCisjZGVmaW5lIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VfaAor
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOworCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRp
eUF0SGVhZC9UYWlsLiBUaGlzIHJlbGllcyBvbiBsaXZlbmVzcworLy8gYW5hbHlzaXMgcGhhc2Ug
aGF2aW5nIGJlZW4gcnVuIGFuZCB0aGUgZ3JhcGggbm90IGhhdmluZyBiZWVuIHRyYW5zZm9ybWVk
CisvLyBhZnRlciB0aGF0LgorCitib29sIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhH
cmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1MjU4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDEyICszNiwxNyBAQAogI2luY2x1ZGUgIkRGR0NQU1JldGhyZWFkaW5nUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmgiCisjaW5jbHVkZSAiREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR0RDRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHRmFpbGVkRmluYWxpemVyLmgiCisj
aW5jbHVkZSAiREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdG
aXh1cFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdT
U0FDb252ZXJzaW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
LmgiCiAjaW5jbHVkZSAiREZHVW5pZmljYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlk
YXRlLmgiCkBAIC0xODMsMjEgKzE4OCwyMSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6
Y29tcGlsZUluVGhyCiAKICAgICBwZXJmb3JtU3RvcmVFbGltaW5hdGlvbihkZmcpOwogICAgIHBl
cmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwotICAgIAotICAgIC8vIE5vdGUgdGhhdCBEQ0UgaXMg
bmVjZXNzYXJ5IGV2ZW4gaW4gdGhlIEZUTCwgYmVjYXVzZSBvbmx5IHdlIGtub3cgd2hhdCBpcwot
ICAgIC8vIGxpdmUtaW4tYnl0ZWNvZGUuIFRoZSBGVEwgdXNlcyB0aGlzIGluZm9ybWF0aW9uIHRv
IGRldGVybWluZSB3aGVuIE9TUiBleGl0Ci0gICAgLy8gdmFsdWVzIHNob3VsZCBiZSB3aXJlZCB0
byBMVmFsdWVzLCB2ZXJzdXMgYmVpbmcgd2lyZWQgdG8gRXhpdFZhbHVlOjpkZWFkKCkuCi0gICAg
Ly8gVGhpcyBpcyBkaXN0aW5jdCBmcm9tIHdoYXQgWm9tYmllSGludCBnaXZlcyB1czogWm9tYmll
SGludCBzYXlzIHRoYXQgdGhlCi0gICAgLy8gdmFsdWUgaW4gdGhlIGdpdmVuIGJ5dGVjb2RlIGxv
Y2FsIGlzIGFsd2F5cyBkZWFkOyB0aGUgcmVmZXJlbmNlIGNvdW50cyB0aGF0Ci0gICAgLy8gRENF
IHByb2R1Y2VzIHRlbGwgdXMgdGhhdCB0aGUgdmFsdWUgaXMgbGl2ZSBmb3IgYSB3aGlsZSBidXQg
ZXZlbnR1YWxseQotICAgIC8vIGRpZXMsIGFuZCBpdCB0ZWxscyB1cyBleGFjdGx5IHdoZW4gdGhl
IGRlYXRoIHBvaW50IGlzLgotICAgIHBlcmZvcm1EQ0UoZGZnKTsKIAogI2lmIEVOQUJMRShGVExf
SklUKQogICAgIGlmIChPcHRpb25zOjp1c2VFeHBlcmltZW50YWxGVEwoKQogICAgICAgICAmJiBj
b21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24KICAgICAgICAgJiYgRlRMOjpjYW5Db21waWxl
KGRmZykpIHsKICAgICAgICAgCisgICAgICAgIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhk
ZmcpOworICAgICAgICBwZXJmb3JtU1NBQ29udmVyc2lvbihkZmcpOworICAgICAgICBwZXJmb3Jt
TGl2ZW5lc3NBbmFseXNpcyhkZmcpOworICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAgICAg
IHBlcmZvcm1EQ0UoZGZnKTsgLy8gV2UgcmVseSBvbiB0aGlzIHRvIGNvbnZlcnQgZGVhZCBTZXRM
b2NhbHMgaW50byB0aGUgYXBwcm9wcmlhdGUgaGludCwgYW5kIHRvIGtpbGwgZGVhZCBjb2RlIHRo
YXQgd29uJ3QgYmUgcmVjb2duaXplZCBhcyBkZWFkIGJ5IExMVk0uCisgICAgICAgIHBlcmZvcm1M
aXZlbmVzc0FuYWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1GbHVzaExpdmVuZXNzQW5hbHlz
aXMoZGZnKTsKKyAgICAgICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKGRmZyk7Cisg
ICAgICAgIAogICAgICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGgganVzdCBiZWZv
cmUgRlRMIGxvd2VyaW5nOiIpOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQg
T1NSIGVudHJ5LgpAQCAtMjE1LDYgKzIyMCw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFu
Ojpjb21waWxlSW5UaHIKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgCisg
ICAgcGVyZm9ybURDRShkZmcpOwogICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
KGRmZyk7CiAgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGFmdGVyIG9wdGltaXph
dGlvbjoiKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjU4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsMTQgKzQ3MiwxOSBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQg
bmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAg
ICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNl
LgotICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgY2FzZSBQaGk6CiAgICAgICAgICAgICAvLyBQaGlzIHNob3VsZCBub3QgYmUgdmlzaWJsZSBo
ZXJlIHNpbmNlIHdlJ3JlIGl0ZXJhdGluZyB0aGUgYWxsLWJ1dC1QaGkncwogICAgICAgICAgICAg
Ly8gcGFydCBvZiBiYXNpYyBibG9ja3MuCi0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAgIC8vIFRoZXNlIGRv
bid0IGdldCBpbnNlcnRlZCB1bnRpbCB3ZSBnbyBpbnRvIFNTQS4KKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBj
YXNlIEdldFNjb3BlOgpAQCAtNTQwLDcgKzU0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKLSAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAjZWxzZQogICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisj
aW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVi
bGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBTU0FDb252ZXJzaW9uUGhhc2UoR3JhcGgmIGdyYXBo
KQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiU1NBIGNvbnZlcnNpb24iKQorICAgICAgICAsIG1f
aW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgICAgICAsIG1fbm9uVHJpdmlhbFBoaXMoT3BlcmFuZHNM
aWtlLCBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fY2hhbmdl
ZChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggU2V0TG9jYWwncyBuZWVkIGZsdXNoaW5n
LiBOZWVkIHRvIGRvIHRoaXMgd2hpbGUgdGhlCisgICAgICAgIC8vIFBoaSBncmFwaCBpcyBzdGls
bCBpbnRhY3QuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5u
dW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IEZsdXNoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB3aGlsZSAoIW1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QudGFr
ZUxhc3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhu
b2RlKSk7CisgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
RWxpbWluYXRlIGFsbCBkdXBsaWNhdGUgb3Igc2VsZi1wb2ludGluZyBQaGkgZWRnZXMuIFRoaXMg
bWVhbnMgdGhhdAorICAgICAgICAvLyB3ZSB0cmFuc2Zvcm06CisgICAgICAgIC8vCisgICAgICAg
IC8vIHA6IFBoaShAbjEsIEBuMiwgQG4zKQorICAgICAgICAvLworICAgICAgICAvLyBpbnRvOgor
ICAgICAgICAvLworICAgICAgICAvLyBwOiBQaGkoQHgpCisgICAgICAgIC8vCisgICAgICAgIC8v
IGlmIGVhY2ggQG5pIGluIHtAbjEsIEBuMiwgQG4zfSBpcyBlaXRoZXIgZXF1YWwgdG8gQHAgdG8g
aXMgZXF1YWwKKyAgICAgICAgLy8gdG8gQHgsIGZvciBleGFjdGx5IG9uZSBvdGhlciBAeC4gQWRk
aXRpb25hbGx5LCB0cml2aWFsIFBoaXMgKGkuZS4KKyAgICAgICAgLy8gcDogUGhpKEB4KSkgYXJl
IGZvcndhcmRlZCwgc28gdGhhdCBpZiBoYXZlIGFuIGVkZ2UgdG8gc3VjaCBAcCwgd2UKKyAgICAg
ICAgLy8gcmVwbGFjZSBpdCB3aXRoIEB4LiBUaGlzIGxvb3AgZG9lcyB0aGlzIGZvciBQaGlzIG9u
bHk7IGxhdGVyIHdlIGRvCisgICAgICAgIC8vIHN1Y2ggZm9yd2FyZGluZyBmb3IgUGhpIHJlZmVy
ZW5jZXMgZm91bmQgaW4gb3RoZXIgbm9kZXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIFNlZSBB
eWNvY2sgYW5kIEhvcnNwb29sIGluIENDJzAwIGZvciBhIGJldHRlciBkZXNjcmlwdGlvbiBvZiB3
aGF0CisgICAgICAgIC8vIHdlJ3JlIGRvaW5nIGhlcmUuCisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXpl
KCk7IHBoaUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJsb2Nr
LT5waGlzW3BoaUluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBoaS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICBmb3J3YXJkUGhpQ2hpbGRyZW4ocGhpKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVkdXBsaWNhdGVDaGlsZHJlbihwaGkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAg
CisgICAgICAgIC8vIEZvciBlYWNoIGJhc2ljIGJsb2NrLCBmb3IgZWFjaCBsb2NhbCBsaXZlIGF0
IHRoZSBoZWFkIG9mIHRoYXQgYmxvY2ssCisgICAgICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBub2Rl
IHdlIHNob3VsZCBiZSByZWZlcnJpbmcgdG8gaW5zdGVhZCBvZiB0aGF0IGxvY2FsLgorICAgICAg
ICAvLyBJZiBpdCB0dXJucyBvdXQgdG8gYmUgYSBub24tdHJpdmlhbCBQaGksIG1ha2Ugc3VyZSB0
aGF0IHRvIGNyZWF0ZSBhbgorICAgICAgICAvLyBTU0EgUGhpIGFuZCBVcHNpbG9ucyBpbiBwcmVk
ZWNlc3NvciBibG9ja3MuIFdlIHJldXNlCisgICAgICAgIC8vIEJhc2ljQmxvY2s6OnZhcmlhYmxl
c0F0SGVhZCBmb3IgdHJhY2tpbmcgd2hpY2ggbm9kZXMgdG8gcmVmZXIgdG8uCisgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRl
eC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIW5v
ZGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQo
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBQb2lzb24gdGhpcyBlbnRyeSBpbiB2YXJpYWJs
ZXNBdEhlYWQgYmVjYXVzZSB3ZSBkb24ndAorICAgICAgICAgICAgICAgICAgICAvLyB3YW50IGFu
eW9uZSB0byB0cnkgdG8gcmVmZXIgdG8gaXQsIGlmIHRoZSB2YXJpYWJsZSBpcworICAgICAgICAg
ICAgICAgICAgICAvLyBjYXB0dXJlZC4KKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZFtpXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICBj
YXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAg
ICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5vcCgpID09IFBoaSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlKQorICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IGVkZ2Uubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEl0J3MgYSBub24tdHJpdmlhbCBQaGkuCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNldCB0aGUgUGhpJ3MgdHlwZSAoaS5lLiBO
b2RlUmVzdWx0TWFzaykgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZmxlY3QgdGhl
IFZhcmlhYmxlQWNjZXNzRGF0YSdzIHVuYm94aW5nLiBUaGlzIHdpbGwgbWFrZSBpdAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZWFzaWVyIGZvciB0aGUgYmFja2VuZCB0byBmaWd1cmUgb3V0
IHdoaWNoIHZhbHVlIHRvIHVzZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwc2ls
b25zLCBhbmQgd2hhdCB0eXBlIHRvIHVzZSBmb3IgdGhlIFBoaSBpdHNlbGYuCisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVGbGFncyByZXN1bHQ7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3Nz
aWJsZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91
bGRVc2VEb3VibGVGb3JtYXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gTm9kZVJlc3VsdE51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTm9kZVJlc3VsdElu
dDMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IE5vZGVSZXN1bHRCb29sZWFuOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBOb2RlUmVzdWx0SlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gTm9kZVJlc3VsdEpTOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAsIFNwZWNOb25lLCBQaGkp
OworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhyZXN1bHQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKChub2RlLT5mbGFncygpICYgTm9kZVJlc3VsdE1h
c2spID09IHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBq
LS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNz
b3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIHVwc2lsb24gPSBwcmVkZWNlc3Nvci0+YXBwZW5kTm9uVGVybWluYWwoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBPcElu
Zm8obm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yLT52
YXJpYWJsZXNBdFRhaWxbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUsIE1vdkhpbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGJsb2NrLT52YXJpYWJsZXNBdEhl
YWQub3BlcmFuZChvcGVyYW5kKS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWRbaV0gPSBub2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
Q29udmVydCBvcGVyYXRpb25zIG92ZXIgbG9jYWxzIGludG8gb3BlcmF0aW9ucyBvdmVyIFNTQSBu
b2Rlcy4KKyAgICAgICAgLy8gLSBHZXRMb2NhbCBvdmVyIGNhcHR1cmVkIHZhcmlhYmxlcyBsb3Nl
IHRoZWlyIHBoaXMuCisgICAgICAgIC8vIC0gR2V0TG9jYWwgb3ZlciB1bmNhcHR1cmVkIHZhcmlh
YmxlcyBkaWUgYW5kIGdldCByZXBsYWNlZCB3aXRoIHJlZmVyZW5jZXMKKyAgICAgICAgLy8gICB0
byB0aGUgbm9kZSBzcGVjaWZpZWQgYnkgdmFyaWFibGVzQXRIZWFkLgorICAgICAgICAvLyAtIFNl
dExvY2FsIGdldHMgTm9kZU11c3RHZW5lcmF0ZSBpZiBpdCdzIGZsdXNoZWQsIG9yIHR1cm5zIGlu
dG8gYQorICAgICAgICAvLyAgIE1vdkhpbnQgb3RoZXJ3aXNlLgorICAgICAgICAvLyAtIEZsdXNo
IGxvc2VzIGl0cyBjaGlsZHJlbiBidXQgcmVtYWlucywgYmVjYXVzZSB3ZSB3YW50IHRvIGtub3cg
d2hlbiBhCisgICAgICAgIC8vICAgZmx1c2hlZCBTZXRMb2NhbCdzIHZhbHVlIGlzIG5vIGxvbmdl
ciBuZWVkZWQuIFRoaXMgYWxzbyBtYWtlcyBpdCBzaW1wbGVyCisgICAgICAgIC8vICAgdG8gcmVh
c29uIGFib3V0IHRoZSBmb3JtYXQgb2YgYSBsb2NhbCwgc2luY2Ugd2UgY2FuIGp1c3QgZm9sZCBp
dCBpbnRvIHRoZQorICAgICAgICAvLyAgIGJhY2t3YXJkcyBhbmFseXNpcyB0aGF0IExpdmVuZXNz
QW5hbHlzaXNQaGFzZSBkb2VzLiBBcyBwYXJ0IG9mIHRoZQorICAgICAgICAvLyAgIGJhY2t3YXJk
cyBhbmFseXNpcywgd2Ugc2F5IHRoYXQgdGhlIHR5cGUgb2YgYSBsb2NhbCBjYW4gYmUgZWl0aGVy
CisgICAgICAgIC8vICAgaW50MzIsIGRvdWJsZSwgdmFsdWUsIG9yIGRlYWQuCisgICAgICAgIC8v
IC0gUGhhbnRvbUxvY2FsIGJlY29tZXMgUGhhbnRvbSwgYW5kIGl0cyBjaGlsZCBpcyB3aGF0ZXZl
ciBpcyBzcGVjaWZpZWQKKyAgICAgICAgLy8gICBieSB2YXJpYWJsZXNBdEhlYWQuCisgICAgICAg
IC8vIC0gU2V0QXJndW1lbnQgdHVybnMgaW50byBHZXRMb2NhbC4KKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2Nr
LT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAgICAgICBibG9jay0+YXQobm9kZUlu
ZGV4KS0+cmVwbGFjZW1lbnQgPSAwOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUlu
ZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0
aXR1dGlvbihub2RlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1
cmVkKCkgfHwgbV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhNb3ZIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdl
dExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5p
c0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICBu
b2RlLT5yZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDogewor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CisgICAgICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkuc2V0Tm9kZShibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TG9jYWwpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZyZWUgYWxs
IHBoaXMgYW5kIHJlc2V0IHZhcmlhYmxlcyB2ZWN0b3JzLgorICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJ
bmRleC0tOykKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2st
PnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgICAgIGJsb2NrLT5waGlzLmNsZWFyKCk7CisgICAg
ICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLmNsZWFyKCk7CisgICAgICAgICAgICBibG9j
ay0+dmFyaWFibGVzQXRUYWlsLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRI
ZWFkLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmNsZWFyKCk7Cisg
ICAgICAgICAgICBibG9jay0+c3NhID0gYWRvcHRQdHIobmV3IEJhc2ljQmxvY2s6OlNTQURhdGEo
YmxvY2spKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBT
U0E7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZm9yd2FyZFBoaUNoaWxkcmVuKE5vZGUq
IG5vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5
TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlJiBlZGdlID0gbm9kZS0+Y2hpbGRy
ZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gZm9yd2FyZFBoaUVkZ2UoZWRnZSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogZm9yd2FyZFBoaShOb2RlKiBub2RlKQor
ICAgIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CisgICAgICAgICAgICBjYXNlIFBoaTogeworICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9
IG5vZGUtPmp1c3RPbmVDaGlsZCgpOworICAgICAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVkZ2Uu
bm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAg
ICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgZm9yd2FyZFBoaUVkZ2UoRWRn
ZSYgZWRnZSkKKyAgICB7CisgICAgICAgIE5vZGUqIG5ld05vZGUgPSBmb3J3YXJkKGVkZ2Uubm9k
ZSgpKTsKKyAgICAgICAgaWYgKG5ld05vZGUgPT0gZWRnZS5ub2RlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGVkZ2Uuc2V0Tm9kZShuZXdOb2RlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVkdXBsaWNhdGVDaGlsZHJlbihOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5j
eUxpc3Q6OlNpemU7ICsraSkgeworICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRy
ZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBpZiAoZWRnZSA9PSBub2RlKSB7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0pOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsr
aikgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZHJlbi5jaGlsZChqKSA9PSBlZGdl
KSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2Uoai0tKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBmb3J3YXJk
Tm9kZUNoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBERkdfTk9ERV9ET19UT19D
SElMRFJFTihtX2dyYXBoLCBub2RlLCBmb3J3YXJkTm9kZUVkZ2UpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGZvcndhcmROb2RlRWRnZShOb2RlKiwgRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAg
IGlmIChlZGdlLT5vcCgpIAorICAgICAgICBzd2l0Y2ggKGVkZ2UtPm9wKCkpIHsKKyAgICAgICAg
Y2FzZSBHZXRMb2NhbDoKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEZsdXNo
ZWRMb2NhbE9wKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxP
cHMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fZmx1c2hl
ZExvY2FsT3BzLmFkZChub2RlKTsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmFw
cGVuZChub2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbEVkZ2UoTm9kZSos
IEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKGVkZ2Uubm9kZSgp
KTsKKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAgSGFzaFNl
dDxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX2ZsdXNoZWRM
b2NhbE9wV29ya2xpc3Q7CisgICAgYm9vbCBtX2NoYW5nZWQ7Cit9OworCitib29sIHBlcmZvcm1T
U0FDb252ZXJzaW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIFNTQSBDb252ZXJzaW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNl
PFNTQUNvbnZlcnNpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisjZGVm
aW5lIERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIEdyYXBoOworCisvLyBDb252ZXJ0IFRocmVhZGVkQ1BTIGZvcm0gaW50byBTU0Eg
Zm9ybS4gVGhpcyByZXN1bHRzIGluIGEgZm9ybSB0aGF0IGhhczoKKy8vCisvLyAtIFJvdWdobHkg
bWluaW1hbCBQaGkncy4gV2UgdXNlIHRoZSBBeWNvY2sgJiBIb3JzcG9vbCBmaXhwb2ludCBmb3IK
Ky8vICAgY29udmVydGluZyB0aGUgQ1BTIG1heGltYWwgUGhpcyBpbnRvIFNTQSBtaW5pbWFsIFBo
aXMsIHdpdGggdGhlIGNhdmVhdAorLy8gICB0aGF0IGlycmVkdWNpYmxlIGNvbnRyb2wgZmxvdyBt
YXkgcmVzdWx0IGluIHNvbWUgbWlzc2VkIG9wcG9ydHVuaXRpZXMKKy8vICAgZm9yIFBoaSByZWR1
Y3Rpb24uCisvLworLy8gLSBObyB1c2VzIG9mIEdldExvY2FsL1NldExvY2FsIGV4Y2VwdCBmb3Ig
Y2FwdHVyZWQgdmFyaWFibGVzIGFuZCBmbHVzaGVzLgorLy8gICBBZnRlciB0aGlzLCBhbnkgcmVt
YWluaW5nIFNldExvY2FsIG1lYW5zIEZsdXNoLiBGbHVzaCBub2RlcyBhcmUKKy8vICAgZWxpbWlu
YXRlZC4gUGhhbnRvbUxvY2FscyBiZWNvbWUgUGhhbnRvbXMuIE5vZGVzIG1heSBtYXkgaGF2ZSBj
aGlsZHJlbgorLy8gICB0aGF0IGFyZSBpbiBhbm90aGVyIGJhc2ljIGJsb2NrLgorLy8KKy8vIC0g
TW92SGludHMgYXJlIHVzZWQgZm9yIE9TUiBpbmZvcm1hdGlvbiwgYW5kIGFyZSB0aGVtc2VsdmVz
IG1pbmltYWwuCisvLyAgIEEgTW92SGludCB3aWxsIG9jY3VyIGF0IHNvbWUgcG9pbnQgYWZ0ZXIg
dGhlIGFzc2lnbmluZywgYW5kIGF0IFBoaQorLy8gICBwb2ludHMuCisvLworLy8gLSBVbmxpa2Ug
Y29udmVudGlvbmFsIFNTQSBpbiB3aGljaCBQaGkgZnVuY3Rpb25zIHJlZmVyIHRvIHByZWRlY2Vz
c29ycworLy8gICBhbmQgdmFsdWVzLCBvdXIgU1NBIHVzZXMgVXBzaWxvbiBmdW5jdGlvbnMgdG8g
aW5kaWNhdGUgdmFsdWVzIGluCisvLyAgIHByZWRlY2Vzc29ycy4gQSBtZXJnZSB3aWxsIGxvb2sg
bGlrZToKKy8vCisvLyAgIGxhYmVsQToKKy8vICAgICAgIGE6IFRoaW5neSguLi4pCisvLyAgICAg
ICBiOiBVcHNpbG9uKF5lLCBAYSkKKy8vICAgICAgIEp1bXAobGFiZWxDKQorLy8KKy8vICAgbGFi
ZWxCOgorLy8gICAgICAgYzogT3RoZXJUaGluZ3koLi4uKQorLy8gICAgICAgZDogVXBzaWxvbihe
ZSwgQGMpCisvLyAgICAgICBKdW1wKGxhYmVsQykKKy8vCisvLyAgIGxhYmVsQzoKKy8vICAgICAg
IGU6IFBoaSgpCisvLworLy8gICBOb3RlIHRoYXQgdGhlIFBoaSBoYXMgbm8gY2hpbGRyZW4sIGJ1
dCB0aGUgcHJlZGVjZXNzb3JzIGhhdmUgVXBzaWxvbnMKKy8vICAgdGhhdCBoYXZlIGEgd2VhayBy
ZWZlcmVuY2UgdG8gdGhlIFBoaSAoXmUgaW5zdGVhZCBvZiBAZTsgd2Ugc3RvcmUgaXQKKy8vICAg
aW4gdGhlIE9wSW5mbyByYXRoZXIgdGhhbiB0aGUgQWRqYWNlbmN5TGlzdCkuIFRoaW5rIG9mIHRo
ZSBVcHNpbG9uCisvLyAgIGFzICJhc3NpZ25pbmciIHRvIHRoZSAidmFyaWFibGUiIGFzc29jaWF0
ZWQgd2l0aCB0aGUgUGhpLCBhbmQgdGhhdAorLy8gICB0aGlzIGlzIHRoZSBvbmUgcGxhY2UgaW4g
U1NBIGZvcm0gd2hlcmUgeW91IGNhbiBoYXZlIG11bHRpcGxlCisvLyAgIGFzc2lnbm1lbnRzLgor
Ly8KKy8vICAgVGhpcyBpbXBsaWVzIHNvbWUgb3RoZXIgbG9vc2VuaW5ncyBvZiBTU0EuIEZvciBl
eGFtcGxlLCBhbiBVcHNpbG9uCisvLyAgIG1heSBwcmVjZWRlIGEgUGhpIGluIHRoZSBzYW1lIGJh
c2ljIGJsb2NrOyB0aGlzIG1heSBhcmlzZSBhZnRlciBDRkcKKy8vICAgc2ltcGxpZmljYXRpb24u
IEFsdGhvdWdoIGl0J3MgcHJvZml0YWJsZSBmb3IgQ0ZHIHNpbXBsaWZpY2F0aW9uIChvcgorLy8g
ICBzb21lIG90aGVyIHBoYXNlKSB0byByZW1vdmUgdGhlc2UsIGl0J3Mgbm90IHN0cmljdGx5IG5l
Y2Vzc2FyeS4gQXMKKy8vICAgd2VsbCwgdGhpcyBmb3JtIGFsbG93cyB0aGUgVXBzaWxvbiB0byBi
ZSBpbiBhbnkgYmxvY2sgdGhhdCBkb21pbmF0ZXMKKy8vICAgdGhlIHByZWRlY2Vzc29yIGJsb2Nr
IG9mIHRoZSBQaGksIHdoaWNoIGFsbG93cyBmb3IgYmxvY2sgc3BsaXR0aW5nIHRvCisvLyAgIGln
bm9yZSB0aGUgcG9zc2liaWxpdHkgb2YgaW50cm9kdWNpbmcgYW4gZXh0cmEgZWRnZSBiZXR3ZWVu
IHRoZSBQaGkKKy8vICAgYW5kIHRoZSBwcmVkZWNlc3NvciAodGhvdWdoIG5vcm1hbCBTU0Egd291
bGQgYWxsb3cgdGhpcywgYWxzbywgd2l0aAorLy8gICB0aGUgY2F2ZWF0IHRoYXQgdGhlIFBoaSBw
cmVkZWNlc3NvciBibG9jayBsaXN0cyB3b3VsZCBoYXZlIHRvIGJlCisvLyAgIHVwZGF0ZWQpLgor
Ly8KKy8vICAgVGhlIGVhc2llc3Qgd2F5IHRvIGNvbnZlcnQgZnJvbSB0aGlzIFNTQSBmb3JtIGlu
dG8gYSBkaWZmZXJlbnQgU1NBCisvLyAgIGZvcm0gaXMgdG8gcmVkbyBTU0EgY29udmVyc2lvbiBm
b3IgUGhpIGZ1bmN0aW9ucy4gVGhhdCBpcywgdHJlYXQgZWFjaAorLy8gICBQaGkgaW4gb3VyIElS
IGFzIGEgbm9uLVNTQSB2YXJpYWJsZSBpbiB0aGUgZm9yZWlnbiBJUiAoc28sIGFzIGFuCisvLyAg
IGFsbG9jYSBpbiBMTFZNIElSLCBmb3IgZXhhbXBsZSk7IHRoZSBVcHNpbG9ucyB0aGF0IHJlZmVy
IHRvIHRoZSBQaGkKKy8vICAgYmVjb21lIHN0b3JlcyBhbmQgdGhlIFBoaXMgdGhlbXNlbHZlcyBi
ZWNvbWUgbG9hZHMuCisvLworLy8gICBGdW4gZmFjdDogVXBzaWxvbiBpcyBzbyBuYW1lZCBiZWNh
dXNlIGl0IGNvbWVzIGJlZm9yZSBQaGkgaW4gdGhlCisvLyAgIGFscGhhYmV0LiBJdCBjYW4gYmUg
d3JpdHRlbiBhcyAiWSIuCisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNpb24oR3JhcGgmKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlz
aW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOTUsNyArNDM5NSw2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgY2FzZSBQaGk6CiAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgYnJlYWs7CiAKQEAgLTQ4
MjksNiArNDgyOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICBjYXNlIFBoaToK
KyAgICBjYXNlIFVwc2lsb246CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDI5Niw3ICs0Mjk2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgRmx1c2g6Ci0gICAgY2FzZSBQaGk6CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBCcmVha3BvaW50OgpAQCAtNDY5MCw2ICs0Njg5LDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CisgICAgY2FzZSBQaGk6CisgICAgY2Fz
ZSBVcHNpbG9uOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDIyICs4MSwyMSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBWX0VRVUFMKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAw
KSwgc3RhdGljX2Nhc3Q8Tm9kZSo+KDApLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkp
OwogICAgICAgICAKICAgICAgICAgLy8gVmFsaWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4KLSAg
ICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG15UmVmQ291bnRzOwogICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nr
cygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2Nr
LT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBWQUxJREFURSgoYmxvY2spLCBibG9jay0+aXNSZWFjaGFi
bGUpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMo
KTsgKytpKQotICAgICAgICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShpKSwg
MCk7CisgICAgICAgICAgICAgICAgbV9teVJlZkNvdW50cy5hZGQoYmxvY2stPm5vZGUoaSksIDAp
OwogICAgICAgICB9Ci0gICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGFjY2VwdGFibGVOb2RlczsKICAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2Nr
IHx8ICFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+bnVtTm9kZXMoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5ub2RlKGkpOwotICAgICAgICAgICAgICAgIGFjY2VwdGFibGVOb2Rlcy5hZGQobm9kZSk7
CisgICAgICAgICAgICAgICAgbV9hY2NlcHRhYmxlTm9kZXMuYWRkKG5vZGUpOwogICAgICAgICAg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3Jh
cGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewpAQCAtMTA4LDcgKzEwNywxMyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbXlS
ZWZDb3VudHMuZmluZChlZGdlLm5vZGUoKSktPnZhbHVlKys7CisgICAgICAgICAgICAgICAgICAg
IG1fbXlSZWZDb3VudHMuZmluZChlZGdlLm5vZGUoKSktPnZhbHVlKys7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBTU0EsIGFsbCBlZGdlcyBtdXN0IGhhc1Jl
c3VsdCgpLgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBl
ZGdlLT5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgLy8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFudG9tLCBHZXRMb2NhbCwgb3IgUGhpLCBt
eSBjaGlsZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCiAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewpAQCAtMTQ4LDYgKzE1Myw5IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNT
QToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CkBAIC0xNTcsOSArMTY1LDQ0IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxv
Y2stPm51bU5vZGVzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+bm9kZShpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3JlZkNvdW50U3RhdGUg
PT0gRXhhY3RSZWZDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG1f
bXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5vZGUt
PnJlZkNvdW50KCksIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7CisgICAgICAgIGNhc2UgTG9hZFN0b3JlOgor
ICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOgorICAgICAgICAgICAgdmFsaWRhdGVDUFMoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU1NBOgorICAgICAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBTU0EgdmVyaWZpY2F0aW9uLgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dy
YXBoOworICAgIEdyYXBoRHVtcE1vZGUgbV9ncmFwaER1bXBNb2RlOworICAgIAorICAgIEhhc2hN
YXA8Tm9kZSosIHVuc2lnbmVkPiBtX215UmVmQ291bnRzOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1f
YWNjZXB0YWJsZU5vZGVzOworICAgIAorICAgIHZvaWQgdmFsaWRhdGVDUFMoKQorICAgIHsKICAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2Nr
IHx8ICFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBIYXNoU2V0PE5v
ZGUqPiBwaGlzSW5UaGlzQmxvY2s7CkBAIC0xNzAsMTUgKzIxMywxMSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAg
aWYgKGJsb2NrLT5pc1BoaUluZGV4KGkpKQogICAgICAgICAgICAgICAgICAgICBwaGlzSW5UaGlz
QmxvY2suYWRkKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcmVmQ291bnRT
dGF0ZSA9PSBFeGFjdFJlZkNvdW50KQotICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2Rl
KSwgbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5v
ZGUtPnJlZkNvdW50KCksIDEpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAg
ICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVzLmNvbnRh
aW5zKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBl
ZGdlKSwgbV9hY2NlcHRhYmxlTm9kZXMuY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIyOCw3ICsyNjcsNiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBi
bG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBibG9jay0+cHJlZGVjZXNzb3JzW2tdOwogICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2
QmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5wcmVkZWNl
c3NvcnNba10pLCBwcmV2QmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChs
b2NhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQg
aXMgbm90IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFibGUu
CkBAIC0zMjEsNyArMzU5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBHZXRMb2NhbCdzIHRoYXQgd2Uga25v
dyB0byBiZSBkZWFkLCBidXQgdGhhdCB0aGUgZ3JhcGgKICAgICAgICAgICAgICAgICAgICAgLy8g
ZG9lc24ndCB5ZXQga25vdyB0byBiZSBkZWFkLgotICAgICAgICAgICAgICAgICAgICBpZiAoIW15
UmVmQ291bnRzLmdldChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX215UmVmQ291
bnRzLmdldChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CkBAIC0zNTUsMTAgKzM5Myw2IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLXByaXZhdGU6Ci0gICAgR3JhcGgmIG1fZ3Jh
cGg7Ci0gICAgR3JhcGhEdW1wTW9kZSBtX2dyYXBoRHVtcE1vZGU7Ci0gICAgCiAgICAgdm9pZCBj
aGVja09wZXJhbmQoCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrLCBPcGVyYW5kczxzaXplX3Q+
JiBnZXRMb2NhbFBvc2l0aW9ucywKICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiYgc2V0TG9jYWxQ
b3NpdGlvbnMsIGludCBvcGVyYW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCiAK
ICNpbmNsdWRlICJERkdEb3VibGVGb3JtYXRTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0ZsdXNoRm9y
bWF0LmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIK
ICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgpAQCAtMzE4LDYgKzMxOSwyOSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBjaGVja0FuZFNldChtX2ZsYWdzLCBtX2ZsYWdzIHwgbmV3RmxhZ3Mp
OwogICAgIH0KICAgICAKKyAgICBGbHVzaEZvcm1hdCBmbHVzaEZvcm1hdCgpCisgICAgeworICAg
ICAgICBBU1NFUlQoZmluZCgpID09IHRoaXMpOworICAgICAgICAKKyAgICAgICAgaWYgKCFzaG91
bGRVbmJveElmUG9zc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkSlNWYWx1ZTsK
KyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBGbHVzaGVkRG91YmxlOworICAgICAgICAKKyAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiA9IGFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CisgICAgICAgIGlmIChp
c0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gRmx1c2hl
ZEludDMyOworICAgICAgICAKKyAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRDZWxsOworICAgICAgICAKKyAgICAgICAg
aWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJu
IEZsdXNoZWRCb29sZWFuOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIEZsdXNoZWRKU1ZhbHVl
OworICAgIH0KKyAgICAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyBzbGlnaHRseSBzcGFjZS1p
bmVmZmljaWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRoCiAgICAgLy8gd2ls
bCBoYXZlIHRoZSBzYW1lIG9wZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRoZSBzYW1lIHByZWRpY3Rp
b24uIEJ1dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIGlubGlu
ZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBG
b3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBGb3J3YXJkRm9yY2VPU1JFeGl0OgorICAgIGNhc2UgUGhp
OgorICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAtMTc0LDYgKzE3Niw4IEBAIGlubGlu
ZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKIAogYm9vbCBjYW5Db21waWxlKEdyYXBoJiBn
cmFwaCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAK
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9j
a0luZGV4LS07KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmgiCiAjaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRlRM
Rm9ybWF0dGVkVmFsdWUuaCIKKyNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCiAjaW5j
bHVkZSAiRlRMT3V0cHV0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiRlRM
VmFsdWVTb3VyY2UuaCIKQEAgLTYxLDEwICs2Miw2IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Z0
bFN0YXRlKHN0YXRlKQogICAgICAgICAsIG1faGVhcHMoc3RhdGUuY29udGV4dCkKICAgICAgICAg
LCBtX291dChzdGF0ZS5jb250ZXh0KQotICAgICAgICAsIG1fbG9jYWxzQm9vbGVhbihPcGVyYW5k
c0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwg
bV9sb2NhbHMzMihPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQpCi0gICAgICAgICwgbV9sb2NhbHM2NChPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwgbV9sb2NhbHNEb3VibGUoT3BlcmFu
ZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAs
IG1fdmFsdWVTb3VyY2VzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlh
Ymxlc0F0SGVhZCkKICAgICAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCkpCiAgICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCkBA
IC03NCw2ICs3MSw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGxvd2VyKCkKICAgICB7Cisg
ICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsK
KyAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUubW9kdWxlID0KICAgICAgICAgICAgIExMVk1N
b2R1bGVDcmVhdGVXaXRoTmFtZUluQ29udGV4dCgianNCb2R5IiwgbV9mdGxTdGF0ZS5jb250ZXh0
KTsKICAgICAgICAgCkBAIC04NSwxMiArODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAg
ICBtX3Byb2xvZ3VlID0gYXBwZW5kQmFzaWNCbG9jayhtX2Z0bFN0YXRlLmNvbnRleHQsIG1fZnRs
U3RhdGUuZnVuY3Rpb24pOwogICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IG1fbG9jYWxzQm9vbGVhbi5zaXplKCk7IGluZGV4
LS07KSB7Ci0gICAgICAgICAgICBtX2xvY2Fsc0Jvb2xlYW5baW5kZXhdID0gYnVpbGRBbGxvY2Eo
bV9vdXQubV9idWlsZGVyLCBtX291dC5ib29sZWFuKTsKLSAgICAgICAgICAgIG1fbG9jYWxzMzJb
aW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291dC5pbnQzMik7Ci0gICAg
ICAgICAgICBtX2xvY2FsczY0W2luZGV4XSA9IGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwg
bV9vdXQuaW50NjQpOwotICAgICAgICAgICAgbV9sb2NhbHNEb3VibGVbaW5kZXhdID0gYnVpbGRB
bGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291dC5kb3VibGVUeXBlKTsKLSAgICAgICAgfQorICAg
ICAgICBjcmVhdGVQaGlWYXJpYWJsZXMoKTsKICAgICAgICAgCiAgICAgICAgIG1faW5pdGlhbGl6
YXRpb24gPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuY29udGV4dCwgbV9mdGxTdGF0ZS5m
dW5jdGlvbik7CiAgICAgICAgIG1fYXJndW1lbnRDaGVja3MgPSBhcHBlbmRCYXNpY0Jsb2NrKG1f
ZnRsU3RhdGUuY29udGV4dCwgbV9mdGxTdGF0ZS5mdW5jdGlvbik7CkBAIC0xMDQsMTkgKzk4LDE4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBtX2Jsb2Nrcy5hZGQobV9oaWdoQmxvY2ssIEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQmxvY2sgIiwgKm1faGlnaEJsb2NrKSkpOwotICAgICAgICAgICAg
YWRkRmx1c2hlZExvY2FsT3BSb290cygpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBj
bG9zZU92ZXJGbHVzaGVkTG9jYWxPcHMoKTsKLSAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG1fYXJndW1lbnRDaGVja3MsIGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsKIAotICAg
ICAgICB0cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKCk7CisgICAgICAgIGNoZWNrQXJndW1lbnRz
KCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5qdW1wKGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2so
MCkpKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkKLSAgICAgICAg
ICAgIGNvbXBpbGVCbG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sq
PiBkZXB0aEZpcnN0OworICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVy
KGRlcHRoRmlyc3QpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJz
dC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNvbXBpbGVCbG9jayhkZXB0aEZpcnN0W2ldKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIEFuZCBub3cgY29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9u
IGJsb2NrLgogICAgICAgICBsaW5rT1NSRXhpdHNBbmRDb21wbGV0ZUluaXRpYWxpemF0aW9uQmxv
Y2tzKCk7CkBAIC0xMjksNDEgKzEyMiw0MCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgCi0g
ICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCkKKyAgICB2b2lkIGNyZWF0ZVBoaVZhcmlh
YmxlcygpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IG1faGlnaEJs
b2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1f
aGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0g
Rmx1c2gpCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKG5v
ZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xvc2VPdmVyRmx1c2hlZExv
Y2FsT3BzKCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICghbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZmx1c2hlZExvY2FsT3BX
b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QucmVt
b3ZlTGFzdCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9mbHVzaGVkTG9j
YWxPcHMuY29udGFpbnMobm9kZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBERkdfTk9E
RV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUlu
ZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFBoaSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgTFR5cGUgdHlwZTsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgeworICAgICAg
ICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdE51bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9IG1fb3V0LmRvdWJsZVR5cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gbV9vdXQuaW50MzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBt
X291dC5ib29sZWFuOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIE5vZGVSZXN1bHRKUzoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0Lmlu
dDY0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbV9waGlzLmFkZChub2RlLCBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIHR5cGUpKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEZsdXNo
ZWRMb2NhbE9wKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxP
cHMuY29udGFpbnMobm9kZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZmx1c2hl
ZExvY2FsT3BzLmFkZChub2RlKTsKLSAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmFw
cGVuZChub2RlKTsKLSAgICB9Ci0gICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxFZGdlKE5vZGUqLCBF
ZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChlZGdlLm5vZGUoKSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgdHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50cygpCisgICAg
dm9pZCBjaGVja0FyZ3VtZW50cygpCiAgICAgewogICAgICAgICAvLyBXaGlsZSBjaGVja2luZyBh
cmd1bWVudHMsIGV2ZXJ5dGhpbmcgaXMgaW4gdGhlIHN0YWNrLgogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX3ZhbHVlU291cmNlcy5zaXplKCk7IGktLTspCkBAIC0xNzIsNTYgKzE2NCw1NCBA
QCBwcml2YXRlOgogICAgICAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKDApOwogICAgICAg
ICBtX25vZGUgPSAwOwogICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2dy
YXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewotICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07Ci0gICAgICAgICAgICBpZiAoIW5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBtX2dyYXBoLmJsb2NrKDApLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkLnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gbV9ncmFwaC5i
bG9jaygwKS0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZFtpXTsKKyAgICAgICAgICAgIGludCBvcGVy
YW5kID0gbV9ncmFwaC5ibG9jaygwKS0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZC5vcGVyYW5kRm9y
SW5kZXgoaSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIC8vIElm
IGl0J3MgY2FwdHVyZWQgdGhlbiB3ZSdsbCBiZSBhY2Nlc3NpbmcgaXQgdGhyb3VnaCBsb2FkcyBh
bmQgc3RvcmVzCi0gICAgICAgICAgICAvLyBhbnl3YXkgLSB0aGVyZSdzIG5vIHBvaW50IGluIHRy
YW5zZmVyaW5nIGl0IG91dC4KLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgp
KQorICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBEZWFkRmx1c2ggfHwgZm9ybWF0ID09IEZsdXNo
ZWRKU1ZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKHZhcmlhYmxl
LT5sb2NhbCgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChmb3JtYXQgIT0gRmx1c2hl
ZERvdWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUgcHJvZmlsZSA9IAorICAgICAgICAgICAgICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3Byb2ZpbGVkQmxvY2ssCisgICAgICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlS2V5KDAsIG9wZXJhbmQpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlh
YmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCF2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpOworICAgICAgICAgICAg
TFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAg
ICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6
IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFs
dWUoanNWYWx1ZSksIHByb2ZpbGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6IHsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIHBy
b2ZpbGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVC
YWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIo
anNWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hJbnQzMihqc1Zh
bHVlKSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
Rmx1c2hlZEJvb2xlYW46IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIHByb2ZpbGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVl
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVW
YWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVW
YWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuc2V0KHVuYm94Qm9vbGVhbihqc1ZhbHVlKSwgbV9sb2NhbHNCb29sZWFu
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5zZXQoanNW
YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4
KQorICAgIHZvaWQgY29tcGlsZUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAg
ICAgbV9oaWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBtX2hp
Z2hCbG9jayA9IGJsb2NrOwogICAgICAgICBpZiAoIW1faGlnaEJsb2NrKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbG93QmxvY2sgPSBtX2Jsb2Nr
cy5nZXQobV9oaWdoQmxvY2spOwogICAgICAgICAKICAgICAgICAgbV9uZXh0SGlnaEJsb2NrID0g
MDsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IG5leHRCbG9ja0luZGV4ID0gYmxvY2tJbmRleCAr
IDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytuZXh0QmxvY2tJbmRl
eCkgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBtX2hpZ2hCbG9j
ay0+aW5kZXggKyAxOyBuZXh0QmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrbmV4
dEJsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9IG1fZ3JhcGguYmxv
Y2sobmV4dEJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKG1fbmV4dEhpZ2hCbG9jaykKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTI0MSwxMSArMjMxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JCbG9jaygpOwogICAgICAgICAK
LSAgICAgICAgbV9pbnQzMlZhbHVlcy5jbGVhcigpOwotICAgICAgICBtX2pzVmFsdWVWYWx1ZXMu
Y2xlYXIoKTsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmNsZWFyKCk7Ci0gICAgICAgIG1fc3Rv
cmFnZVZhbHVlcy5jbGVhcigpOwotICAgICAgICBtX3RpbWVUb0xpdmUuY2xlYXIoKTsKKyAgICAg
ICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKICAgICAgICAgCiAgICAgICAgIG1f
c3RhdGUucmVzZXQoKTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxv
Y2spOwpAQCAtMjc0LDYgKzI2MCwxMiBAQCBwcml2YXRlOgogICAgICAgICBtX2RpcmVjdGlvbiA9
IChtX25vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSA/IEZvcndhcmRTcGVjdWxhdGlv
biA6IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+b3AoKSkgeworICAgICAgICBjYXNlIFVwc2lsb246CisgICAgICAgICAgICBjb21waWxlVXBz
aWxvbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAg
ICAgY29tcGlsZVBoaSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSlNDb25z
dGFudDoKICAgICAgICAgICAgIGNvbXBpbGVKU0NvbnN0YW50KCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTQ0NSw4ICs0MzcsOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV9ub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFw
aCwgbV9ub2RlLCB1c2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aGFzUmVzdWx0
KCkpCi0gICAgICAgICAgICBtX3RpbWVUb0xpdmUuYWRkKG1fbm9kZSwgbV9ub2RlLT5hZGp1c3Rl
ZFJlZkNvdW50KCkpOworICAgICAgICBpZiAobV9ub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpCisg
ICAgICAgICAgICBtX2xpdmUuYWRkKG1fbm9kZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hv
dWxkRXhlY3V0ZUVmZmVjdHMpCiAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGVFZmZlY3RzKG5v
ZGVJbmRleCk7CkBAIC00NTQsNzMgKzQ0Niw3OSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb21waWxlVXBzaWxvbigpCisgICAgeworICAg
ICAgICBMVmFsdWUgZGVzdGluYXRpb24gPSBtX3BoaXMuZ2V0KG1fbm9kZS0+cGhpKCkpOworICAg
ICAgICAKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPnBoaSgpLT5mbGFncygpICYgTm9kZVJlc3Vs
dE1hc2spIHsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0TnVtYmVyOgorICAgICAgICAgICAgbV9v
dXQuc2V0KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAg
bV9vdXQuc2V0KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKKyAgICAgICAg
ICAgIG1fb3V0LnNldChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0SlM6CisgICAgICAg
ICAgICBtX291dC5zZXQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlUGhpKCkKKyAgICB7CisgICAgICAgIExWYWx1
ZSBzb3VyY2UgPSBtX3BoaXMuZ2V0KG1fbm9kZSk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2gg
KG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNrKSB7CisgICAgICAgIGNhc2UgTm9kZVJl
c3VsdE51bWJlcjoKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5nZXQoc291cmNlKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50MzI6CisgICAgICAg
ICAgICBzZXRJbnQzMihtX291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKKyAgICAgICAgICAgIHNldEJvb2xlYW4obV9v
dXQuZ2V0KHNvdXJjZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJl
c3VsdEpTOgorICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5nZXQoc291cmNlKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKICAgICB2b2lkIGNvbXBpbGVKU0NvbnN0YW50KCkKICAgICB7CiAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZSk7CiAgICAgICAgIGlm
ICh2YWx1ZS5pc0RvdWJsZSgpKQotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9k
ZSwgbV9vdXQuY29uc3REb3VibGUodmFsdWUuYXNEb3VibGUoKSkpOworICAgICAgICAgICAgc2V0
RG91YmxlKG1fb3V0LmNvbnN0RG91YmxlKHZhbHVlLmFzRG91YmxlKCkpKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmNvbnN0SW50
NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlV2Vha0pTQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgbV9qc1ZhbHVlVmFs
dWVzLmFkZChtX25vZGUsIHdlYWtQb2ludGVyKG1fbm9kZS0+d2Vha0NvbnN0YW50KCkpKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZSh3ZWFrUG9pbnRlcihtX25vZGUtPndlYWtDb25zdGFudCgpKSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldExvY2FsKCkKICAgICB7Ci0gICAgICAgIC8v
IEdldExvY2FsIGlzIG9uZSBvZiB0aGUgZmV3IG5vZGVzIHRoYXQgbWF5IGJlIGxlZnQgYmVoaW5k
LCB3aXRoICFzaG91bGRHZW5lcmF0ZSgpLgotICAgICAgICBpZiAoIW1fbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gR2V0TG9jYWxzIGFyaXNl
IG9ubHkgaW4gdHdvIGNhc2VzOiBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGFyZ3VtZW50cy4KICAg
ICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0g
dmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKSB7Ci0gICAg
ICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkgewot
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cmFwIGluc3RlYWQuCi0gICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzgzCi0gICAg
ICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVk
KCkpIHsKLSAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24odmFsdWUubV92YWx1ZSkp
Ci0gICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5sb2FkMzIo
cGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQubG9hZDY0KGFkZHJl
c3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3Jt
YXQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3Nz
aWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1h
dCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQu
Z2V0KG1fbG9jYWxzRG91YmxlLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBMb2NhbHMgdGhhdCBhcmUgbWFya2VkIHNob3VsZFVuYm94SWZQb3NzaWJsZSgpIHRoYXQg
YXJlbid0IGFsc28gZm9yY2VkIHRvCi0gICAgICAgICAgICAvLyB1c2UgZG91YmxlIGZvcm1hdCwg
YW5kIHRoYXQgaGF2ZSB0aGUgcmlnaHQgcHJlZGljdGlvbiwgd2lsbCBhbHdheXMgYmUKLSAgICAg
ICAgICAgIC8vIHNwZWN1bGF0ZWQgb24gU2V0TG9jYWwgYW5kIHdpbGwgYWx3YXlzIGJlIHN0b3Jl
ZCBpbnRvIGFuIGFwcHJvcHJpYXRlbHkKLSAgICAgICAgICAgIC8vIHR5cGVkIHJlZmVyZW5jZSBM
VmFsdWUuCi0gICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7
Ci0gICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9s
b2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQobV9u
b2RlLCBtX291dC5nZXQobV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
KSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ly8gV2Ugc2tpcCB0aGUgQ2VsbCBjYXNlIGhlcmUgYmVjYXVzZSB0aGF0IGdldHMgdHJlYXRlZCBp
ZGVudGljYWxseSB0bwotICAgICAgICAgICAgLy8gSlNWYWx1ZXMsIHNpbmNlIGNlbGxzIGFyZSBz
dG9yZWQgdW50YWdnZWQuCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fanNWYWx1ZVZh
bHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSkpOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdmFsdWUp
KQorICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IodmFyaWFibGUt
PmxvY2FsKCkpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
bG9hZDY0KGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZVNldExvY2FsKCkKQEAgLTUyOSw2NCArNTI3LDQwIEBAIHByaXZhdGU6CiAg
ICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwotICAgICAgICBib29sIG5lZWRz
Rmx1c2hpbmcgPSBtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhtX25vZGUpOwogICAgICAgICAK
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewogICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewogICAgICAgICAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzRG91YmxlLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewotICAg
ICAgICAgICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJp
YWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjayk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2Vz
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoRG91YmxlSW5Mb2NhbHMp
OworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHZh
cmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAg
ICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwo
KSkpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluTG9jYWxzKTsKKyAgICAgICAgICAg
ICAgICBtX291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7
CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0Zs
dXNoaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJl
c3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNT
dGFjayk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fdmFs
dWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJ
bkxvY2Fscyk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zv
cih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChp
c0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgIG1fb3V0
LnNldChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5n
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQobG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVl
U291cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBW
YWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVCb29s
ZWFuKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCisg
ICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc0Zvcih2YXJpYWJs
ZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
aWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQo
dmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFs
dWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJ
bkpTU3RhY2spOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkpOwotICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewotICAgICAgICAgICAgbV9vdXQuc3Rv
cmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAg
bV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShW
YWx1ZUluSlNTdGFjayk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxz
KTsKKyAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9j
YWwoKSkpOworICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlTW92SGludCgpCkBAIC02MjAsMTkgKzU5NCwxOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG1fbm9kZS0+YXJpdGhO
b2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUs
IG1fb3V0LmFkZChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgICAgIHNldEludDMyKG1fb3V0
LmFkZChsZWZ0LCByaWdodCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuYWRkV2l0
aE92ZXJmbG93MzIobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93
LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKLSAgICAgICAg
ICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwg
MCkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAg
ICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAg
ICBtX291dC5kb3VibGVBZGQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02
NTEsMTkgKzYyNCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChu
b2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAg
ICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnN1YihsZWZ0LCByaWdo
dCkpOworICAgICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LnN1YihsZWZ0LCByaWdodCkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuc3ViV2l0aE92ZXJmbG93MzIobGVmdCwgcmln
aHQpOwogICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0
LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRk
KG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOworICAgICAgICAgICAgc2V0
SW50MzIobV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAg
ICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAg
ICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVTdWIobG93
RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03MDMsMTMgKzY3NSwxMiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMyVmFs
dWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAgICAg
ICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAgICBt
X291dC5kb3VibGVNdWwobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04MDAs
MTMgKzc3MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhkb25lLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7Cisg
ICAgICAgICAgICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBO
dW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZCgKLSAgICAgICAgICAg
ICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXREb3VibGUoCiAgICAgICAgICAgICAgICAgbV9v
dXQuZG91YmxlRGl2KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9k
ZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtODkxLDEz
ICs4NjEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oZG9uZSwgbGFzdE5leHQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMy
VmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cykpOworICAg
ICAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVt
YmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICAg
ICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAgICAgIG1fb3V0
LmRvdWJsZVJlbShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUt
PmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTkxNSw4ICs4
ODQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFk
ZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRJbnQzMigKICAgICAg
ICAgICAgICAgICBtX291dC5zZWxlY3QoCiAgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+b3Ao
KSA9PSBBcml0aE1pbgogICAgICAgICAgICAgICAgICAgICAgICAgPyBtX291dC5sZXNzVGhhbihs
ZWZ0LCByaWdodCkKQEAgLTk1MCw3ICs5MTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIG1fZG91YmxlVmFs
dWVzLmFkZChtX25vZGUsIG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCByZXN1bHRzKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIHJlc3VsdHMp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTk3MSwx
MiArOTM5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNwZWN1bGF0
ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5lcXVhbChyZXN1bHQsIG1fb3V0LmNvbnN0
SW50MzIoMSA8PCAzMSkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9pbnQzMlZhbHVl
cy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBO
dW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0
LmRvdWJsZUFicyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShtX291dC5kb3VibGVBYnMobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMDAzLDEyICs5
NzEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5leHRyYWN0
VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAg
ICBzZXRJbnQzMihyZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVW
YWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZG91YmxlTmVnKGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MSgpKSkpOworICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmRvdWJsZU5lZyhsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTEwMjAsNDcgKzk4OCwzOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Y29tcGlsZUJpdEFuZCgpCiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAg
ICAgICAgIG1fbm9kZSwgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRB
bmQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdE9yKCkKICAgICB7Ci0gICAgICAg
IG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLCBtX291dC5iaXRPcihsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAg
ICAgICAgc2V0SW50MzIobV9vdXQuYml0T3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGls
ZUJpdFhvcigpCiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAg
IG1fbm9kZSwgbV9vdXQuYml0WG9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRYb3IobG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdFJTaGlmdCgpCiAgICAgewotICAgICAgICBt
X2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKLSAgICAgICAgICAgIG1fb3V0
LmFTaHIoCi0gICAgICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCi0gICAg
ICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291
dC5jb25zdEludDMyKDMxKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQuYVNocigKKyAgICAg
ICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQuYml0
QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0TFNoaWZ0KCkKICAgICB7Ci0gICAgICAg
IG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLAotICAgICAgICAgICAgbV9v
dXQuc2hsKAotICAgICAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAg
ICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9v
dXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnNobCgKKyAgICAg
ICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQuYml0
QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0VVJTaGlmdCgpCiAgICAgewotICAgICAg
ICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKLSAgICAgICAgICAgIG1f
b3V0LmxTaHIoCi0gICAgICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCi0g
ICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBt
X291dC5jb25zdEludDMyKDMxKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQubFNocigKKyAg
ICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQu
Yml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkp
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlVUludDMyVG9OdW1iZXIoKQpAQCAtMTA2
OCwxNCArMTAyNywxNCBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBpZiAoIW5vZGVDYW5TcGVjdWxhdGVJbnRl
Z2VyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFs
dWVzLmFkZChtX25vZGUsIG1fb3V0LnVuc2lnbmVkVG9Eb3VibGUodmFsdWUpKTsKKyAgICAgICAg
ICAgIHNldERvdWJsZShtX291dC51bnNpZ25lZFRvRG91YmxlKHZhbHVlKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZUZvcndhcmQo
CiAgICAgICAgICAgICBPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbih2YWx1
ZSwgbV9vdXQuaW50MzJaZXJvKSwKICAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9y
bWF0VUludDMyLCB2YWx1ZSkpOwotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHZh
bHVlKTsKKyAgICAgICAgc2V0SW50MzIodmFsdWUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVJbnQzMlRvRG91YmxlKCkKQEAgLTEwODcsNyArMTA0Niw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIC8vIGNvbnRlbXBvcmFuZW91cyBsb3ctbGV2ZWwgcmVwcmVzZW50YXRpb25zLiBTbywgdGhp
cyBnaXZlcyBjaGlsZDEgYSBkb3VibGUKICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gYW5kIHRo
ZW4gZm9yd2FyZHMgdGhhdCByZXByZXNlbnRhdGlvbiB0byBtX25vZGUuCiAgICAgICAgIAotICAg
ICAgICBtX2RvdWJsZVZhbHVlcy5hZGQobV9ub2RlLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSkpOworICAgICAgICBzZXREb3VibGUobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQpAQCAtMTIxNSw4ICsx
MTc0LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKQog
ICAgIHsKLSAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwg
bV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSkpOworICAgICAgICBzZXRTdG9yYWdlKG1fb3V0LmxvYWRQdHIobG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlR2V0QXJyYXlMZW5ndGgoKQpAQCAtMTIyNSw4ICsxMTgzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAg
ICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLCBtX291dC5sb2Fk
MzIobG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGlj
TGVuZ3RoKSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIobG93U3RvcmFnZSht
X25vZGUtPmNoaWxkMigpKSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMjU2LDcgKzEyMTMs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLCBtX291dC56ZXJvRXh0
KGluZGV4LCBtX291dC5pbnRQdHIpLAogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmZvck5v
ZGUobV9ub2RlLT5jaGlsZDIoKSkubV92YWx1ZSkpOwogICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7Ci0g
ICAgICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTI4OCw3ICsxMjQ1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCAwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChy
ZXN1bHQsIHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2Rv
dWJsZVZhbHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHNldERvdWJs
ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC0xMzg4LDggKzEzNDUsNyBAQCBwcml2YXRlOgogICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bV9ub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOwogICAgICAgICAKLSAgICAgICAgbV9q
c1ZhbHVlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgc2V0SlNWYWx1
ZSgKICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NCgKICAgICAgICAgICAgICAgICBtX291dC5hZGRy
ZXNzKAogICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLnByb3BlcnRpZXNbZGF0YS5pZGVudGlm
aWVyTnVtYmVyXSwKQEAgLTE0MTIsNyArMTM2OCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlR2V0R2xvYmFsVmFyKCkKICAgICB7Ci0gICAgICAgIG1fanNWYWx1ZVZhbHVlcy5h
ZGQobV9ub2RlLCBtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUobV9ub2RlLT5yZWdpc3RlclBv
aW50ZXIoKSkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1
dGUobV9ub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlUHV0R2xvYmFsVmFyKCkKQEAgLTE0MzcsMzAgKzEzOTMsMjcgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZS0+Y2hp
bGQyKCkubm9kZSgpKS5pc051bGwoKSk7CiAgICAgICAgIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50SWZJc1N0aWxsVmFsaWQoKTsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgK
LSAgICAgICAgICAgIG1fbm9kZSwgZXF1YWxOdWxsT3JVbmRlZmluZWQoCisgICAgICAgIHNldEJv
b2xlYW4oCisgICAgICAgICAgICBlcXVhbE51bGxPclVuZGVmaW5lZCgKICAgICAgICAgICAgICAg
ICBtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGxPclVuZGVmaW5l
ZCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEoKQogICAg
IHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgewotICAg
ICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisg
ICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFs
dWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFu
KAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKSB7CiAg
ICAgICAgICAgICBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElmSXNTdGlsbFZhbGlk
KCk7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1f
bm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZXF1
YWwoCiAgICAgICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDEo
KSksCiAgICAgICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDIo
KSkpKTsKQEAgLTE0NzcsMTkgKzE0MzAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGNvbnN0
YW50LmlzVW5kZWZpbmVkT3JOdWxsKCkKICAgICAgICAgICAgICYmICFtYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludElmSXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIGlmIChjb25z
dGFudC5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0g
ICAgICAgICAgICAgICAgICAgIG1fbm9kZSwgZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5j
aGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxOdWxsKSk7CisgICAgICAgICAgICAgICAg
c2V0Qm9vbGVhbihlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxs
c0FyZUZhbHNlLCBFcXVhbE51bGwpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50LmlzVW5kZWZpbmVk
KCkpOwotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBt
X25vZGUsIGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJl
RmFsc2UsIEVxdWFsVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVxdWFsTnVs
bE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsVW5k
ZWZpbmVkKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsCisgICAgICAgIHNl
dEJvb2xlYW4oCiAgICAgICAgICAgICBtX291dC5lcXVhbCgKICAgICAgICAgICAgICAgICBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLAogICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpKTsKQEAgLTE0OTgsMTUgKzE0NDgsMTMgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlTGVzcygpCiAgICAgewogICAgICAgICBp
ZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jv
b2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNl
dEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQubGVzc1RoYW4obG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5
VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAot
ICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAg
ICAgICAgICAgbV9vdXQuZG91YmxlTGVzc1RoYW4obG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkp
LCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtMTUxNywxNSArMTQ2NSwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGls
ZUNvbXBhcmVMZXNzRXEoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKEludDMyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAg
ICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAg
ICAgIG1fb3V0Lmxlc3NUaGFuT3JFcXVhbChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVz
ZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAg
bV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5k
b3VibGVMZXNzVGhhbk9yRXF1YWwoCiAgICAgICAgICAgICAgICAgICAgIGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xNTM3LDE1ICsxNDgzLDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21w
aWxlQ29tcGFyZUdyZWF0ZXIoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKEludDMyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAg
ICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAg
ICAgICAgIG1fb3V0LmdyZWF0ZXJUaGFuKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNl
KSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBt
X25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmRv
dWJsZUdyZWF0ZXJUaGFuKAogICAgICAgICAgICAgICAgICAgICBsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMTU1NywxNiArMTUwMSwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUNv
bXBhcmVHcmVhdGVyRXEoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKEludDMyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAg
ICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAg
ICAgIG1fb3V0LmdyZWF0ZXJUaGFuT3JFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgbG93SW50
MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUt
PmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1
ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4o
CiAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlR3JlYXRlclRoYW5PckVxdWFsKAogICAgICAg
ICAgICAgICAgICAgICBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Nyw3ICsxNTE5LDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KCkKICAgICB7Ci0g
ICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5iaXROb3QoYm9vbGlmeSht
X25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmJpdE5vdChib29s
aWZ5KG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUp1
bXAoKQpAQCAtMTkzMSw2ICsxODczLDE0IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIHZv
aWQgc3BlY3VsYXRlQmFja3dhcmQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZh
bHVlIGxvd1ZhbHVlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUsCisgICAg
ICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgK
KyAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLCBwcm9maWxlLCBmYWlsQ29uZGl0aW9uLCBCYWNr
d2FyZFNwZWN1bGF0aW9uLCBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzcGVjdWxhdGVCYWNrd2FyZCgKICAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFs
dWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAg
ewogICAgICAgICBhcHBlbmRPU1JFeGl0KApAQCAtMTk5OSwxNCArMTk0OSwxNyBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VL
aW5kKCkgPT0gS25vd25JbnQzMlVzZSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSBy
ZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSBib3hlZFJlc3VsdCA9IG1f
anNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgIExvd2VyZWROb2RlVmFs
dWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChp
c1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAg
ICAKKyAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAg
ICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgYm94ZWRSZXN1
bHQgPSB2YWx1ZS52YWx1ZSgpOwogICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCiAgICAgICAg
ICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkUmVzdWx0KSwgZWRnZSwgU3BlY0ludDMyLCBpc05v
dEludDMyKGJveGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hJ
bnQzMihib3hlZFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChlZGdlLm5v
ZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldEludDMyKGVkZ2Uubm9kZSgpLCByZXN1bHQp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCkBAIC0yMDE5LDEwICsx
OTcyLDEyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1v
ZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzQ2VsbChlZGdlLnVzZUtpbmQoKSkp
OwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmNoZWNrZWRSZXN1bHQgPSBtX2pzVmFs
dWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZh
bHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1Zh
bGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHVuY2hlY2tlZFZhbHVlID0gdmFsdWUu
dmFsdWUoKTsKICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgIGpz
VmFsdWVWYWx1ZSh1bmNoZWNrZWRSZXN1bHQpLCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKHVu
Y2hlY2tlZFJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFJlc3VsdDsKKyAg
ICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodW5jaGVja2VkVmFsdWUpLCBlZGdlLCBTcGVjQ2Vs
bCwgaXNOb3RDZWxsKHVuY2hlY2tlZFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdW5jaGVj
a2VkVmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEo
bV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNDZWxsKSk7CkBAIC0yMDYxLDE0ICsy
MDE2LDE3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1v
ZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEJvb2xl
YW5Vc2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jvb2xlYW5W
YWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMu
Z2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9i
b29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAg
dmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IHZhbHVl
LnZhbHVlKCk7CiAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKICAgICAgICAgICAgICAgICBq
c1ZhbHVlVmFsdWUodW5ib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNCb29sZWFuLCBpc05vdEJvb2xl
YW4odW5ib3hlZFJlc3VsdCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94Qm9v
bGVhbih1bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoZWRn
ZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVkZ2Uubm9kZSgpLCBy
ZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAK
QEAgLTIwODEsMTYgKzIwMzksMjEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgaXNEb3VibGUo
ZWRnZS51c2VLaW5kKCkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0g
bV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIGludFJlc3VsdCA9IG1faW50MzJWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0
LmludFRvRG91YmxlKGludFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQo
ZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBt
X2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1
ZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgCisgICAgICAg
IHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNW
YWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5pbnRUb0Rv
dWJsZSh2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShlZGdlLm5vZGUoKSwg
cmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlmIChMVmFsdWUgYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVk
Z2Uubm9kZSgpKSkgeworICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5u
b2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1
ZSBib3hlZFJlc3VsdCA9IHZhbHVlLnZhbHVlKCk7CisgICAgICAgICAgICAKICAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJsZSB1bmJv
eGluZyBpbnQgY2FzZSIpKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJsZSB1bmJveGluZyBkb3VibGUgY2FzZSIpKTsKICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiRG91YmxlIHVuYm94aW5nIGNvbnRpbnVhdGlvbiIpKTsKQEAgLTIxMTUsNyArMjA3OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291
dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJl
c3VsdCk7CisgICAgICAgICAgICBzZXREb3VibGUoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjEyOCwyNCAr
MjA5MSwyOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBt
b2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5
cGVkVXNlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9qc1ZhbHVl
VmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5n
ZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94SW50MzIo
dW5ib3hlZFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKGVkZ2Uubm9k
ZSgpLCByZXN1bHQpOworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9qc1ZhbHVl
VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgdmFsdWUg
PSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEludDMyKHZhbHVlLnZhbHVl
KCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChM
VmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fYm9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7
Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsK
LSAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7Cisg
ICAgICAgIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAg
IGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEJv
b2xlYW4odmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9kZSgp
LCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9kb3VibGVWYWx1ZXMuZ2V0
KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveERvdWJsZSh1
bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5ub2Rl
KCksIHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9k
ZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gYm94RG91YmxlKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0yMTU1LDExICsyMTIyLDEyIEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgTFZhbHVlIGxvd1N0b3JhZ2UoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgaWYgKExWYWx1
ZSByZXN1bHQgPSBtX3N0b3JhZ2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX3N0b3Jh
Z2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CiAgICAgICAgIAogICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlKTsKLSAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmFkZChl
ZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVz
dWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0yMjQyLDYgKzIy
MTAsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE51bWJlclVzZToKICAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlcihlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJv
b2xlYW5Vc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGVkZ2UpOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9CkBAIC0yMzQyLDYgKzIzMTMsMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGRvdWJsZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY1JlYWxOdW1iZXIsCiAg
ICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHZhbHVlLCB2YWx1ZSkp
OwogICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgbG93Qm9vbGVhbihlZGdlKTsKKyAgICB9CiAKICAgICBib29sIG1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkKICAgICB7CkBAIC0yNDMwLDIy
ICsyNDA2LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBpc0xpdmUoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9
IG1fdGltZVRvTGl2ZS5maW5kKG5vZGUpOwotICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3RpbWVU
b0xpdmUuZW5kKCkpOwotICAgICAgICByZXR1cm4gISFpdGVyLT52YWx1ZTsKKyAgICAgICAgcmV0
dXJuIG1fbGl2ZS5jb250YWlucyhub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoRWRn
ZSBlZGdlKQogICAgIHsKLSAgICAgICAgaWYgKCFlZGdlLT5oYXNSZXN1bHQoKSkgewotICAgICAg
ICAgICAgQVNTRVJUKGVkZ2UtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgQVNT
RVJUKGVkZ2UtPmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgaWYgKCFlZGdlLmRvZXNLaWxsKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEhhc2hNYXA8
Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fdGltZVRvTGl2ZS5maW5kKGVkZ2Uu
bm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV90aW1lVG9MaXZlLmVuZCgpKTsKLSAg
ICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlKTsKLSAgICAgICAgaXRlci0+dmFsdWUtLTsKKyAgICAg
ICAgbV9saXZlLnJlbW92ZShlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAogICAgIC8vIFdyYXBw
ZXIgdXNlZCBvbmx5IGZvciBERkdfTk9ERV9ET19UT19DSElMRFJFTgpAQCAtMjQ2Miw2MyArMjQz
MSwzNCBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2Nr
KCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT52YXJpYWJs
ZXNBdEhlYWRbaV07Ci0gICAgICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgICAgICAgICBt
X3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7Ci0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJn
dW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZh
cmlhYmxlLT5pc0FyZ3VtZW50c0FsaWFzKCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlU291
cmNlc1tpXSA9IFZhbHVlU291cmNlKEFyZ3VtZW50c1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2Vz
W2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fZmx1c2hl
ZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyB2YWx1
ZSB3aWxsIGhhdmUgYmVlbiBmbHVzaGVkIHRvIHRoZSBKU1N0YWNrIGluIHNvbWUgZm9ybSBvcgot
ICAgICAgICAgICAgICAgIC8vIGFub3RoZXIuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKERvdWJs
ZUluSlNTdGFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gbV9oaWdoQmxvY2stPnNzYS0+Zmx1c2hG
b3JtYXRBdEhlYWRbaV07CisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAg
ICAgY2FzZSBEZWFkRmx1c2g6IHsKKyAgICAgICAgICAgICAgICAvLyBNdXN0IGNvbnNpZGVyIGF2
YWlsYWJsZSBub2RlcyBpbnN0ZWFkLgorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hp
Z2hCbG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV07CisgICAgICAgICAgICAgICAgaWYg
KCFub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVT
b3VyY2UoU291cmNlSXNEZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2Uo
bm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoRG91
YmxlSW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNl
c1tpXSA9IFZhbHVlU291cmNlKEludDMySW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQz
MjoKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMy
SW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShCb29sZWFu
SW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgICAgICAgICAgbV92
YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaGVk
Q2VsbDoKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICBjYXNl
IEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFs
dWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZh
bHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMjUy
Niw2ICsyNDY2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uLAog
ICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVlIHJl
Y292ZXJ5KQogICAgIHsKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgICAgIGtpbmQs
IGxvd1ZhbHVlLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZh
bHVlKSwKKyAgICAgICAgICAgIGZhaWxDb25kaXRpb24sIGRpcmVjdGlvbiwgcmVjb3ZlcnkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCisgICAgICAgIEV4aXRLaW5kIGtp
bmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
IHByb2ZpbGUsCisgICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVlIHJlY292ZXJ5KQorICAgIHsKICAgICAgICAg
aWYgKE9wdGlvbnM6OmZ0bFRyYXBzT25PU1JFeGl0KCkpIHsKICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGZhaWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPU1IgZXhpdCBmYWlsQ2FzZSIp
KTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiT1NSIGV4aXQgY29udGludWF0aW9uIikpOwpAQCAtMjU0NiwxMSArMjQ5NSw5IEBA
IHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6
ZSgpID09IG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCkpOwogICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCk7CiAgICAgICAgIAotICAgICAgICBtX2Z0bFN0
YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKAotICAgICAgICAgICAgT1NSRXhpdCgKLSAgICAg
ICAgICAgICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCi0gICAgICAgICAgICAgICAgbV9jb2RlT3Jp
Z2luLCBtX2xhc3RTZXRPcGVyYW5kLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFyZ3VtZW50cygp
LAotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKKyAg
ICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAorICAgICAg
ICAgICAga2luZCwgbG93VmFsdWUuZm9ybWF0KCksIHByb2ZpbGUsIG1fY29kZU9yaWdpbiwgbV9s
YXN0U2V0T3BlcmFuZCwKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mQXJndW1l
bnRzKCksIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxT
dGF0ZS5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAK
ICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0
KCk7CkBAIC0yNjAyLDI3ICsyNTQ5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgRG91
YmxlSW5KU1N0YWNrOgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFs
dWU6OmluSlNTdGFja0FzRG91YmxlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFZhbHVlSW5Mb2NhbHM6Ci0gICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50
KAotICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SlNW
YWx1ZSwgbV9vdXQuZ2V0KG1fbG9jYWxzNjRbaV0pKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgSW50MzJJbkxvY2FsczoKLSAgICAgICAgICAgICAgICBhZGRFeGl0
QXJndW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVG
b3JtYXRJbnQzMiwgbV9vdXQuZ2V0KG1fbG9jYWxzMzJbaV0pKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgQm9vbGVhbkluTG9jYWxzOgotICAgICAgICAgICAgICAg
IGFkZEV4aXRBcmd1bWVudCgKLSAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBp
LCBWYWx1ZUZvcm1hdEJvb2xlYW4sIG1fb3V0LmdldChtX2xvY2Fsc0Jvb2xlYW5baV0pKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRG91YmxlSW5Mb2NhbHM6Ci0g
ICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAotICAgICAgICAgICAgICAgICAgICBleGl0
LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0RG91YmxlLCBtX291dC5nZXQobV9sb2NhbHNEb3Vi
bGVbaV0pKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJndW1l
bnRzU291cmNlOgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgUGhhbnRvbUFy
Z3VtZW50cy4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEzOTg2Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU291cmNl
SXNEZWFkOgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRl
YWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI2ODIsMTIgKzI2MDgsMTAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiB1aW50MzJUb051bWJlciA9IDA7CiAgICAgICAg
ICAgICAgICAgTm9kZSogZG91YmxlQXNJbnQzMiA9IDA7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV90
aW1lVG9MaXZlLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWdu
ZWQ+OjppdGVyYXRvciBlbmQgPSBtX3RpbWVUb0xpdmUuZW5kKCk7CisgICAgICAgICAgICAgICAg
SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xpdmUuYmVnaW4oKTsKKyAgICAgICAg
ICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9saXZlLmVuZCgpOwogICAg
ICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghaXRlci0+dmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gaXRlci0+a2V5OworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSAqaXRlcjsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmNoaWxkMSgpICE9
IG5vZGUpCkBAIC0yNzMyLDI0ICsyNjU2LDI4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIEFTU0VSVChpc0xpdmUobm9kZSkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KExWYWx1ZSByZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChub2RlKSkgewotICAgICAgICAgICAg
YWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SW50MzIs
IHJlc3VsdCk7CisKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1
ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAg
IGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEludDMy
LCB2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KG5vZGUp
KSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwg
VmFsdWVGb3JtYXRCb29sZWFuLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1fYm9vbGVhblZh
bHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAg
ICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0Qm9v
bGVhbiwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChu
b2RlKSkgewotICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5k
ZXgsIFZhbHVlRm9ybWF0SlNWYWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2pzVmFs
dWVWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1h
dEpTVmFsdWUsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fZG91YmxlVmFsdWVzLmdl
dChub2RlKSkgewotICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywg
aW5kZXgsIFZhbHVlRm9ybWF0RG91YmxlLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1fZG91
YmxlVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAg
ICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3Jt
YXREb3VibGUsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKQEAgLTI4MzQsNiArMjc2Miw1NyBAQCBwcml2YXRlOgogICAgICAgICBtX3ZhbHVlU291cmNl
cy5vcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
ICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRJbnQzMihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBtX2ludDMyVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVl
KHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldEpTVmFsdWUoTm9kZSog
bm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLnNldChu
b2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2
b2lkIHNldEJvb2xlYW4oTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
bV9ib29sZWFuVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hC
bG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldFN0b3JhZ2UoTm9kZSogbm9kZSwgTFZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgbV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9k
ZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldERvdWJsZShO
b2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2RvdWJsZVZhbHVlcy5z
ZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldEludDMyKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEludDMy
KG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIHNldEpTVmFsdWUoTFZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAg
dm9pZCBzZXRCb29sZWFuKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEJvb2xlYW4o
bV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0U3RvcmFnZShMVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBzZXRTdG9yYWdlKG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2
b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXREb3VibGUobV9u
b2RlLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZChjb25zdCBMb3dlcmVk
Tm9kZVZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghbV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5h
dGVzKG1faGlnaEJsb2NrLCB2YWx1ZS5ibG9jaygpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRkV2Vha1Jl
ZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29k
ZS0+Y29tbW9uLndlYWtSZWZlcmVuY2VzLmFwcGVuZCgKQEAgLTI4ODgsMjAgKzI4NjcsMTQgQEAg
cHJpdmF0ZToKICAgICBMVmFsdWUgbV90YWdUeXBlTnVtYmVyOwogICAgIExWYWx1ZSBtX3RhZ01h
c2s7CiAgICAgCi0gICAgSGFzaFNldDxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7Ci0gICAgVmVj
dG9yPE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7CisgICAgSGFzaE1hcDxOb2RlKiwg
TG93ZXJlZE5vZGVWYWx1ZT4gbV9pbnQzMlZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dl
cmVkTm9kZVZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJl
ZE5vZGVWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWRO
b2RlVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9k
ZVZhbHVlPiBtX2RvdWJsZVZhbHVlczsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7CiAgICAg
Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2ludDMyVmFsdWVzOwotICAgIEhhc2hNYXA8
Tm9kZSosIExWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1
ZT4gbV9ib29sZWFuVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9zdG9yYWdl
VmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7Ci0gICAg
SGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG1fdGltZVRvTGl2ZTsKLSAgICAKLSAgICBPcGVyYW5k
czxMVmFsdWU+IG1fbG9jYWxzQm9vbGVhbjsKLSAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxz
MzI7Ci0gICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2FsczY0OwotICAgIE9wZXJhbmRzPExWYWx1
ZT4gbV9sb2NhbHNEb3VibGU7CisgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7CiAg
ICAgCiAgICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG1fdmFsdWVTb3VyY2VzOwogICAgIGludCBt
X2xhc3RTZXRPcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
cmVkTm9kZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlcmVkTm9kZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyZWROb2RlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgRlRMTG93ZXJlZE5vZGVWYWx1ZV9oCisjZGVmaW5lIEZUTExvd2VyZWROb2RlVmFsdWVfaAor
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gUmVwcmVzZW50cyB0aGUg
YWN0IG9mIGhhdmluZyBsb3dlcmVkIGEgREZHOjpOb2RlIHRvIGFuIExWYWx1ZSwgYW5kIHJlY29y
ZHMgdGhlCisvLyBERkc6OkJhc2ljQmxvY2sgdGhhdCBkaWQgdGhlIGxvd2VyaW5nLiBUaGUgTFZh
bHVlIGlzIHdoYXQgd2UgdXNlIG1vc3Qgb2Z0ZW4sIGJ1dAorLy8gd2UgbmVlZCB0byB2ZXJpZnkg
dGhhdCB3ZSdyZSBpbiBhIGJsb2NrIHRoYXQgaXMgZG9taW5hdGVkIGJ5IHRoZSBvbmUgdGhhdCBk
aWQKKy8vIHRoZSBsb3dlcmluZy4gV2UncmUgZ3VhcmFudGVlZCB0aGF0IGZvciBlYWNoIERGRzo6
Tm9kZSwgdGhlcmUgd2lsbCBiZSBvbmUKKy8vIExvd2VyZWROb2RlVmFsdWUgdGhhdCBhbHdheXMg
ZG9taW5hdGVzIGFsbCB1c2VzIG9mIHRoZSBERkc6Ok5vZGU7IGJ1dCB0aGVyZSBtYXkKKy8vIGJl
IG90aGVycyB0aGF0IGRvbid0IGRvbWluYXRlIGFuZCB3ZSdyZSBlZmZlY3RpdmVseSBkb2luZyBv
cHBvcnR1bmlzdGljIEdWTiBvbgorLy8gdGhlIGxvd2VyaW5nIGNvZGUuCisKK2NsYXNzIExvd2Vy
ZWROb2RlVmFsdWUgeworcHVibGljOgorICAgIExvd2VyZWROb2RlVmFsdWUoKQorICAgICAgICA6
IG1fdmFsdWUoMCkKKyAgICAgICAgLCBtX2Jsb2NrKDApCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBMb3dlcmVkTm9kZVZhbHVlKExWYWx1ZSB2YWx1ZSwgREZHOjpCYXNpY0Jsb2NrKiBibG9jaykK
KyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fYmxvY2soYmxvY2spCisgICAg
eworICAgICAgICBBU1NFUlQobV92YWx1ZSk7CisgICAgICAgIEFTU0VSVChtX2Jsb2NrKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAg
ICBMVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgREZHOjpCYXNp
Y0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICAKK3ByaXZhdGU6
CisgICAgTFZhbHVlIG1fdmFsdWU7CisgICAgREZHOjpCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKKyNlbmRpZiAvLyBGVExMb3dlcmVkTm9kZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZyb21CbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaAkocmV2aXNpb24gMTUyNTgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZyb21CbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKIGNsYXNzIFZhbHVlRnJvbUJsb2NrIHsKIHB1YmxpYzoKKyAgICBWYWx1ZUZyb21CbG9jaygp
CisgICAgICAgIDogbV92YWx1ZSgwKQorICAgICAgICAsIG1fYmxvY2soMCkKKyAgICB7CisgICAg
fQorICAgIAogICAgIFZhbHVlRnJvbUJsb2NrKExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxvY2sgYmxv
Y2spCiAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgLCBtX2Jsb2NrKGJsb2NrKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHJl
dmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3Vy
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyMSArNDUsNiBAQCB2b2lkIFZhbHVlU291cmNl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6CiAgICAg
ICAgIG91dC5wcmludCgiRG91YmxlSW5KU1N0YWNrIik7CiAgICAgICAgIHJldHVybjsKLSAgICBj
YXNlIFZhbHVlSW5Mb2NhbHM6Ci0gICAgICAgIG91dC5wcmludCgiVmFsdWVJbkxvY2FscyIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbnQzMkluTG9jYWxzOgotICAgICAgICBvdXQucHJp
bnQoIkludDMySW5Mb2NhbHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQm9vbGVhbklu
TG9jYWxzOgotICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW5JbkxvY2FscyIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBEb3VibGVJbkxvY2FsczoKLSAgICAgICAgb3V0LnByaW50KCJEb3Vi
bGVJbkxvY2FscyIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBBcmd1bWVudHNTb3VyY2U6
Ci0gICAgICAgIG91dC5wcmludCgiQXJndW1lbnRzU291cmNlIik7Ci0gICAgICAgIHJldHVybjsK
ICAgICBjYXNlIFNvdXJjZUlzRGVhZDoKICAgICAgICAgb3V0LnByaW50KCJTb3VyY2VJc0RlYWQi
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExW
YWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExWYWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsNiBAQCBl
bnVtIFZhbHVlU291cmNlS2luZCB7CiAgICAgVmFsdWVJbkpTU3RhY2ssCiAgICAgSW50MzJJbkpT
U3RhY2ssCiAgICAgRG91YmxlSW5KU1N0YWNrLAotICAgIFZhbHVlSW5Mb2NhbHMsCi0gICAgSW50
MzJJbkxvY2FscywKLSAgICBCb29sZWFuSW5Mb2NhbHMsCi0gICAgRG91YmxlSW5Mb2NhbHMsCi0g
ICAgQXJndW1lbnRzU291cmNlLAogICAgIFNvdXJjZUlzRGVhZCwKICAgICBIYXZlTm9kZQogfTsK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEzLTA3LTExICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISku
CisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChIYXNoU2V0KToKKyAgICAg
ICAgKFdURik6CisgICAgICAgIChXVEY6Ojo6YWRkKToKKyAgICAgICAgKFdURjo6PSk6CisgICAg
ICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjo6Okhhc2hUYWJsZSk6CisgICAg
ICAgIChXVEY6Oj0pOgorICAgICAgICAqIHd0Zi9JbnNlcnRpb24uaDogQWRkZWQuCisgICAgICAg
IChXVEYpOgorICAgICAgICAoSW5zZXJ0aW9uKToKKyAgICAgICAgKFdURjo6SW5zZXJ0aW9uOjpJ
bnNlcnRpb24pOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246OmluZGV4KToKKyAgICAgICAgKFdU
Rjo6SW5zZXJ0aW9uOjplbGVtZW50KToKKyAgICAgICAgKFdURjo6SW5zZXJ0aW9uOjpvcGVyYXRv
cjwpOgorICAgICAgICAoV1RGOjpleGVjdXRlSW5zZXJ0aW9ucyk6CisKIDIwMTMtMDctMDIgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXgg
MzItYml0IGJ1aWxkLgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAJCTBGRDgxQUM1MTU0
RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJp
dFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTBGRERC
RkE3MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNTE2NjZERkEzMDBDNTVG
RUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRkREQkZBODE2NjZERkEzMDBD
NTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmlu
dFN0cmVhbS5oICovOyB9OworCQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1
NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi87IH07CiAJCTE0M0Y2MTFGMTU2NUYw
RjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAq
LzsgfTsKIAkJMTQzRjYxMjAxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsK
IAkJMTQ2OTQxOTIxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2OTQxOTAxNkVBQUY2RDAwMjRF
MTQ2IC8qIFJ1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zNTIsNiArMzUzLDcgQEAKIAkJMEZEODFBQzQxNTRGQjIyRTAwOTgz
RTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RmFzdEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZBNTE2
NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRT
dHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nUHJpbnRTdHJl
YW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1
RjhDIC8qIEluc2VydGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNlcnRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGlu
TG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlU3BpbkxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTc4NSw2ICs3ODcsNyBAQAogCQkJCUE4QTQ3MkJBMTUxQTgyNUEw
MDQxMjNGRiAvKiBIYXNoVHJhaXRzLmggKi8sCiAJCQkJQThBNDcyQkIxNTFBODI1QTAwNDEyM0ZG
IC8qIEhleE51bWJlci5oICovLAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxp
bmVBU00uaCAqLywKKwkJCQkwRkU1MDU1NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmgg
Ki8sCiAJCQkJQThBNDcyQkUxNTFBODI1QTAwNDEyM0ZGIC8qIEludDE2QXJyYXkuaCAqLywKIAkJ
CQlBOEE0NzJCRjE1MUE4MjVBMDA0MTIzRkYgLyogSW50MzJBcnJheS5oICovLAogCQkJCUE4QTQ3
MkJEMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQ4QXJyYXkuaCAqLywKQEAgLTExODEsNiArMTE4NCw3
IEBACiAJCQkJQThBNDczRTgxNTFBODI1QjAwNDEyM0ZGIC8qIE1hdGhFeHRyYXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3M0VBMTUxQTgyNUIwMDQxMjNGRiAvKiBNRDUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUNENTQ5N0FEMTU4NTdEMDMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRTUwNTU3MTc4N0E4MDYwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTRGMUQxMTU0MTVGRjExQkUwMDI2RTkwOCAvKiBNZW1vcnlJbnN0cnVt
ZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRGRDg1NTQ3MTYxMzNFMEUwMEM1QjcwNCAv
KiBNZW1vcnlJbnN0cnVtZW50YXRpb25BcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUYzRkJDNzFFMTYxQUY3QkYwMEJCNEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNo
Q291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFNldC5oCShyZXZpc2lvbiAxNTI1
ODIpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDEy
ICs4NiwxOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBy
ZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgdGVtcGxhdGUgYXJndW1lbnRzIHNvIHRoYXQgY2FsbGVy
cwogICAgICAgICAvLyBjYW4ganVzdCBwYXNzIHRoZSB0cmFuc2xhdG9yIGFuZCBsZXQgdGhlIGNv
bXBpbGVyIGRlZHVjZSBULgogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBI
YXNoVHJhbnNsYXRvcj4gQWRkUmVzdWx0IGFkZChjb25zdCBUJik7CisgICAgICAgIAorICAgICAg
ICAvLyBBdHRlbXB0cyB0byBhZGQgYSBsaXN0IG9mIHRoaW5ncyB0byB0aGUgc2V0LiBSZXR1cm5z
IHRydWUgaWYgYW55IG9mCisgICAgICAgIC8vIHRoZW0gYXJlIG5ldyB0byB0aGUgc2V0LiBSZXR1
cm5zIGZhbHNlIGlmIHRoZSBzZXQgaXMgdW5jaGFuZ2VkLgorICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYXRvclR5cGU+CisgICAgICAgIGJvb2wgYWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwg
SXRlcmF0b3JUeXBlIGVuZCk7CiAKICAgICAgICAgdm9pZCByZW1vdmUoY29uc3QgVmFsdWVUeXBl
Jik7CiAgICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsKICAgICAgICAgdm9pZCBjbGVhcigp
OwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmKTsK
KyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoU2V0JikgY29uc3Q7
CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgdm9pZCBkZWxldGVBbGxWYWx1ZXM8Pihj
b25zdCBIYXNoU2V0Jik7CkBAIC0xOTEsNiArMTk4LDE2IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
IH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgorICAgIGlubGluZSBib29sIEhhc2hT
ZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCisg
ICAgeworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChJdGVyYXRv
clR5cGUgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgY2hh
bmdlZCB8PSBhZGQoKml0ZXIpLmlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBjaGFuZ2VkOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
CiAgICAgaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQog
ICAgIHsKICAgICAgICAgaWYgKGl0Lm1faW1wbCA9PSBtX2ltcGwuZW5kKCkpCkBAIC0yNTYsNiAr
MjczLDE4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgdmVjdG9yW2ldID0gKml0Owog
ICAgIH0gIAogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRvcj09KGNvbnN0IEhh
c2hTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHNpemUoKSAhPSBvdGhlci5z
aXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3RfaXRl
cmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikgeworICAgICAgICAg
ICAgaWYgKCFvdGhlci5jb250YWlucygqaXRlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6SGFzaFNldDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hh
c2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShyZXZp
c2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE3MCw2ICsxMTcwLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgewogICAgICAgICAv
LyBDb3B5IHRoZSBoYXNoIHRhYmxlIHRoZSBkdW1iIHdheSwgYnkgYWRkaW5nIGVhY2ggZWxlbWVu
dCB0byB0aGUgbmV3IHRhYmxlLgogICAgICAgICAvLyBJdCBtaWdodCBiZSBtb3JlIGVmZmljaWVu
dCB0byBjb3B5IHRoZSB0YWJsZSBzbG90cywgYnV0IGl0J3Mgbm90IGNsZWFyIHRoYXQgZWZmaWNp
ZW5jeSBpcyBuZWVkZWQuCisgICAgICAgIC8vIEZJWE1FOiBJdCdzIGxpa2VseSB0aGF0IHRoaXMg
Y2FuIGJlIGltcHJvdmVkLCBmb3Igc3RhdGljIGFuYWx5c2VzIHRoYXQgdXNlCisgICAgICAgIC8v
IEhhc2hTZXRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDU1
CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IG90aGVyLmVuZCgpOwogICAgICAgICBmb3Ig
KGNvbnN0X2l0ZXJhdG9yIGl0ID0gb3RoZXIuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAg
ICAgICAgICAgYWRkKCppdCk7CkBAIC0xMjA5LDYgKzEyMTEsOCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRy
YWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUg
S2V5VHJhaXRzPgogICAgIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiYgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3Rv
ciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpvcGVyYXRvcj0oY29uc3QgSGFz
aFRhYmxlJiBvdGhlcikKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJdCdzIGxpa2VseSB0aGF0
IHRoaXMgY2FuIGJlIGltcHJvdmVkLCBmb3Igc3RhdGljIGFuYWx5c2VzIHRoYXQgdXNlCisgICAg
ICAgIC8vIEhhc2hTZXRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE4NDU1CiAgICAgICAgIEhhc2hUYWJsZSB0bXAob3RoZXIpOwogICAgICAgICBzd2FwKHRtcCk7
CiAgICAgICAgIHJldHVybiAqdGhpczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEluc2VydGlvbl9oCisjZGVmaW5lIEluc2VydGlvbl9oCisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5zZXJ0aW9uIHsKK3B1YmxpYzoKKyAgICBJ
bnNlcnRpb24oKSB7IH0KKyAgICAKKyAgICBJbnNlcnRpb24oc2l6ZV90IGluZGV4LCBUIGVsZW1l
bnQpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVu
dCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXg7IH0KKyAgICBUIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBJbnNlcnRpb24mIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXggPCBvdGhlci5tX2luZGV4OworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1faW5kZXg7CisgICAgVCBtX2VsZW1lbnQ7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXRWZWN0b3JUeXBlLCB0eXBlbmFtZSBJbnNlcnRpb25W
ZWN0b3JUeXBlPgordm9pZCBleGVjdXRlSW5zZXJ0aW9ucyhUYXJnZXRWZWN0b3JUeXBlJiB0YXJn
ZXQsIEluc2VydGlvblZlY3RvclR5cGUmIGluc2VydGlvbnMpCit7CisgICAgaWYgKCFpbnNlcnRp
b25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHRhcmdldC5ncm93KHRhcmdldC5zaXpl
KCkgKyBpbnNlcnRpb25zLnNpemUoKSk7CisgICAgc2l6ZV90IGxhc3RJbmRleCA9IHRhcmdldC5z
aXplKCk7CisgICAgZm9yIChzaXplX3QgaW5kZXhJbkluc2VydGlvbnMgPSBpbnNlcnRpb25zLnNp
emUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsKKyAgICAgICAgc2l6ZV90IGZpcnN0SW5kZXgg
PSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5pbmRleCgpICsgaW5kZXhJbkluc2VydGlv
bnM7CisgICAgICAgIHNpemVfdCBpbmRleE9mZnNldCA9IGluZGV4SW5JbnNlcnRpb25zICsgMTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxhc3RJbmRleDsgLS1pID4gZmlyc3RJbmRleDspCisg
ICAgICAgICAgICB0YXJnZXRbaV0gPSB0YXJnZXRbaSAtIGluZGV4T2Zmc2V0XTsKKyAgICAgICAg
dGFyZ2V0W2ZpcnN0SW5kZXhdID0gaW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uZWxlbWVu
dCgpOworICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4OworICAgIH0KKyAgICBpbnNlcnRp
b25zLnJlc2l6ZSgwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6SW5z
ZXJ0aW9uOwordXNpbmcgV1RGOjpleGVjdXRlSW5zZXJ0aW9uczsKKworI2VuZGlmIC8vIEluc2Vy
dGlvbl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206504</attachid>
            <date>2013-07-11 21:56:47 -0700</date>
            <delta_ts>2013-07-11 21:57:51 -0700</delta_ts>
            <desc>OMG it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>233529</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NiBA
QAorMjAxMy0wNy0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcg
VVJMIChPT1BTISkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpmaWxsKToK
KyAgICAgICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmNsZWFyKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpzZXRMaXZl
VmFsdWVzKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZW5kQmFz
aWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKiBk
ZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6
Omp1c3RPbmVDaGlsZCk6CisgICAgICAgIChBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKiBkZmcv
REZHQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Js
b2NrOjp+QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6ZW5zdXJl
TG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjppc0luUGhpcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6aXNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FE
YXRhOjpTU0FEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+
U1NBRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKEJhc2lj
QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Om9wZXJhdG9yW10pOgorICAg
ICAgICAoU1NBRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja0luc2VydGlvblNl
dDo6QmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9u
U2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnRCZWZvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0OjpleGVj
dXRlKToKKyAgICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAoQmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAqIGRmZy9E
RkdDb21tb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzS2lsbCk6CisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6OmtpbGxTdGF0dXNGb3JEb2VzS2lsbCk6CisgICAgICAgICog
ZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2U6OmlzQ29udHJhZGlj
dG9yeSk6CisgICAgICAgIChKU0M6OkRGRzo6Q29udHJhZGljdGlvblBydW5pbmdQaGFzZTo6bWFr
ZUNvbnRyYWRpY3RvcnkpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1Db250cmFkaWN0aW9u
UHJ1bmluZyk6CisgICAgICAgICogZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZTo6Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlOjpicmVha0NyaXRpY2FsRWRnZSk6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKToKKyAgICAgICAgKiBkZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
ICogZGZnL0RGR0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6ZmluZFR5cGVDaGVja1Jvb3QpOgorICAg
ICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpjb3VudE5vZGUpOgorICAgICAgICAoRENFUGhhc2Up
OgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpjb3VudEVkZ2UpOgorICAgICAgICAoSlND
OjpERkc6OkRDRVBoYXNlOjplbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKToKKyAg
ICAgICAgKiBkZmcvREZHRWRnZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0VkZ2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpFZGdl
KToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXROb2RlKToKKyAgICAgICAgKEpTQzo6REZH
OjpFZGdlOjpzZXRVc2VLaW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRQcm9vZlN0
YXR1cyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6d2lsbE5vdEhhdmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkRGRzo6RWRnZTo6d2lsbEhhdmVDaGVjayk6CisgICAgICAgIChFZGdlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpFZGdlOjpraWxsU3RhdHVzVW5jaGVja2VkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpFZGdlOjpraWxsU3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRL
aWxsU3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpkb2VzS2lsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6RWRnZTo6ZG9lc05vdEtpbGwpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6
Om1ha2VXb3JkKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hGb3JtYXQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRm
Zy9ERkdGbHVzaEZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChXVEYp
OgorICAgICAgICAqIGRmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZTo6Rmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZW5lc3NBbmFseXNp
c1BoYXNlOjpwcm9jZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVuZXNzQW5hbHlz
aXNQaGFzZTo6c2V0Rm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hMaXZlbmVzc0Fu
YWx5c2lzUGhhc2U6OmZsdXNoRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZv
cm1GbHVzaExpdmVuZXNzQW5hbHlzaXMpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaExpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgIChERkcpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjphZGRGb3JEZXB0aEZpcnN0U29ydCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmRlcHRoRmlyc3RTb3J0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Okluc2VydGlvblNldDo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKExpdmVuZXNzQW5hbHlzaXNQaGFzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnByb2Nlc3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OnBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKToKKyAgICAgICAgKiBkZmcvREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUGhpKToKKyAgICAgICAgKE5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnBoaSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dGFrZW5CbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bm90VGFrZW5CbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyk6CisgICAg
ICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChTU0FDb252ZXJzaW9u
UGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6U1NBQ29udmVy
c2lvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpQ2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2FyZFBoaSk6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpRWRnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpkZWR1cGxpY2F0ZUNoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmROb2Rl
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2Fy
ZE5vZGVFZGdlKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmg6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpmbHVzaEZvcm1hdCk6Cisg
ICAgICAgIChWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93
ZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjcmVhdGVQaGlWYXJpYWJs
ZXMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjaGVja0FyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVVwc2lsb24pOgorICAgICAgICAoTG93ZXJE
RkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUGhp
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUpTQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlV2Vha0pTQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQWRkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoU3ViKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTXVsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoRGl2KToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTW9kKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTWluT3JNYXgpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhBYnMpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhOZWdhdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQml0QW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZUJpdE9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUJpdFhvcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVCaXRSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlQml0TFNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUJpdFVSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
VUludDMyVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlSW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVHZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZUNvbXBhcmVFcUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVDb21wYXJlU3RyaWN0RXFDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzcyk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzc0VxKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVHcmVhdGVyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVHcmVhdGVyRXEpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0ludDMyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Q2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06Omxvd0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpsb3dEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dKU1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc0xpdmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjp1c2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppbml0
aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjplbWl0T1NSRXhpdENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjphZGRFeGl0QXJndW1lbnRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6c2V0SW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpz
ZXRKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c2V0Qm9vbGVh
bik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNldFN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzZXREb3VibGUpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc1ZhbGlkKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJl
ZE5vZGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChMb3dlcmVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjpMb3dlcmVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJlZE5vZGVWYWx1ZTo6b3BlcmF0b3IhKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJlZE5vZGVWYWx1ZTo6YmxvY2spOgorICAgICAgICAqIGZ0bC9GVExWYWx1ZUZyb21CbG9j
ay5oOgorICAgICAgICAoSlNDOjpGVEw6OlZhbHVlRnJvbUJsb2NrOjpWYWx1ZUZyb21CbG9jayk6
CisgICAgICAgIChWYWx1ZUZyb21CbG9jayk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlU291cmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgICog
ZnRsL0ZUTFZhbHVlU291cmNlLmg6CisKIDIwMTMtMDctMTEgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlc3VycmVjdCB0aGUgQ0xvb3AgTExJTlQgb24gdGhlIEZU
TCBicmFuY2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUy
NTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMyArMTcwLDEzIEBACiAJCTBG
NDZFNkI5MTc2Rjg5REIwMEUxRjc1NSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUg
LyogRlRMU3dpdGNoQ2FzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNDZFNkM1MTc2RjhBNUUwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZD
MjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovOyB9OwogCQkwRjQ2RTZD
NjE3NkY4QTYwMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBE
RkdMYXp5SlNWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGNDZFNkVGMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1
QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi87IH07Ci0JCTBGNDZFNkYzMTc3Q0YwRDIwMEUx
Rjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxM
b29wcy5jcHAgKi87IH07Ci0JCTBGNDZFNkY0MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFs
TG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ2RTZEOTE3N0NCOTAwMDBF
MUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZENzE3N0NCOEZDMDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5jcHAgKi87IH07CiAJCTBGNDZFNkUzMTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlz
YXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkU0MTc3Q0Mz
NjYwMEUxRjc1NSAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUxMTc3Q0MzNjYwMEUxRjc1NSAvKiBVRGlz
ODZEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ2RTZFNTE3N0NDMzY2MDBFMUY3NTUgLyogWDg2RGlzYXNzZW1ibGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUy
MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwICovOyB9OworCQkwRjQ2RTZF
RjE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkVFMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdB
bmFseXNpcy5oICovOyB9OworCQkwRjQ2RTZGMzE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJh
bExvb3BzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDZFNkYxMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovOyB9Owor
CQkwRjQ2RTZGNDE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZGMjE3N0NGMEQyMDBF
MUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJ
CTBGNEUxQTBFMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTBDMTcz
QUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLzsgfTsKIAkJMEY0
RTFBMEYxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTBEMTczQUVEREMw
MDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1Myw2ICszNTMsMjEgQEAKIAkJMEZEREJG
QjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4
IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2
QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9Owor
CQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTU4MTc4N0FB
ODgwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTVDMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1NUQxNzg3QjBDRjAw
QjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1NjMxNzhGNUIwNTAwQjM1RjhDIC8qIERG
R0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhDIC8qIERGR0Jhc2ljQmxvY2suY3BwICovOyB9
OworCQkwRkU1MDU3MTE3OEY1QjUzMDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NjQx
NzhGNUI1MzAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEZF
NTA1NzQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTY3MTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdGbHVzaEZvcm1hdC5jcHAgKi87IH07CisJCTBGRTUwNTc1MTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNTA1NjgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1
NzYxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTY5MTc4
RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi87IH07
CisJCTBGRTUwNTc3MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
NTA1NkExNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1
NzgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2QjE3OEY1QjUz
MDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1
NzkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NkMxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTdBMTc4RjVCNTMwMEIzNUY4QyAv
KiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZEMTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1N0IxNzhG
NUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZFMTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1N0MxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2RjE3OEY1QjUzMDBCMzVGOEMgLyogREZH
U1NBQ29udmVyc2lvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1N0QxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NzAxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZl
cnNpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUz
NDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi87IH07CiAJ
CTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzRBMTcyM0NE
QTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE4
NiwxMyArMTIwMSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyogRlRMU3dpdGNo
Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0Y2hDYXNlLmg7
IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3BwOyBwYXRoID0g
ZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcvREZHTGF6eUpT
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUxNzdDRTk1QTAw
RTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29w
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9v
cHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBh
dGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIuY3BwOyBwYXRo
ID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1ibGVyLmg7IHBh
dGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlzYXNzZW1ibGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5o
OyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2RGlzYXNzZW1i
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4NkRpc2Fzc2Vt
Ymxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0Fu
YWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7
IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3BwOyBwYXRoID0g
ZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBkZmcvREZHTmF0
dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkzQUY4MTZEMENB
RDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRFMUEwRDE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzOTksMjEgQEAKIAkJMEZEREJGQjMxNjY2RUVENTAw
QzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBkZmcvREZHQmxv
Y2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUEx
Nzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTUwNTYyMTc4RjVCMDUwMEIzNUY4QyAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Jhc2ljQmxvY2suY3BwOyBwYXRoID0gZGZnL0RG
R0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2NDE3
OEY1QjUzMDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0g
ZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNTA1NjcxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZsdXNoRm9ybWF0LmNwcDsgcGF0aCA9
IGRmZy9ERkdGbHVzaEZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTUwNTY4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbHVzaEZvcm1hdC5oOyBwYXRoID0gZGZnL0RGR0ZsdXNo
Rm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTY5MTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2QTE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1
c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1
MDU2QjE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkMxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkQxNzhGNUI1MzAwQjM1
RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTZFMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU3MDE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29u
dmVyc2lvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NTQUNv
bnZlcnNpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RB
NTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTA5RkQx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0aW9ucy5oOyBwYXRoID0gZnRsL0ZUTEFiYnJldmlh
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NjIsMTAgKzI5OTIsMTMg
QEAKIAkJCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmgg
Ki8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCisJCQkJMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhD
IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLAogCQkJCTBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERG
R0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCiAJCQkJMEZEMjgxMjUxNzc5M0JFMzAwQkJCMEYzIC8q
IERGR0JpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEZEMjgxMjYxNzc5M0JFMzAwQkJCMEYzIC8q
IERGR0JpbmFyeVN3aXRjaC5oICovLAorCQkJCTBGRTUwNTY0MTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhD
IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEY4MzY0QjUxNjRCMEMwRTAwNTMz
MjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oICovLAogCQkJCTg2RUM5REI0MTMyOERGODIwMDJC
MkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yOTg1LDYgKzMwMTgsOCBAQAog
CQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5o
ICovLAogCQkJCTBGQkUwRjZCMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5oICovLAorCQkJCTBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU1QjE3ODdCMENGMDBCMzVG
OEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRF
RjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5
NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEYyRkM3NzAxNkUxMkY2RjAwMzhE
OTc2IC8qIERGR0RDRVBoYXNlLmNwcCAqLywKQEAgLTMwMTEsNiArMzA0NiwxMCBAQAogCQkJCTBG
REIyQ0Q0MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjJCREMx
MjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi8sCiAJCQkJMEYyQkRDMTMx
NTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLywKKwkJCQkwRkU1MDU2NzE3OEY1
QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuY3BwICovLAorCQkJCTBGRTUwNTY4MTc4RjVC
NTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oICovLAorCQkJCTBGRTUwNTY5MTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8sCisJCQkJMEZF
NTA1NkExNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
Ki8sCiAJCQkJODZBRTZDNEIxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCAqLywKIAkJ
CQk4NkVDOURCNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCAqLywKIAkJ
CQk4NkFFNkM0QzEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oICovLApAQCAtMzAyNSw2
ICszMDY0LDggQEAKIAkJCQkwRkRCMkNENjE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxp
emVyLmggKi8sCiAJCQkJMEY0NkU2QzIxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVl
LmNwcCAqLywKIAkJCQkwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUu
aCAqLywKKwkJCQkwRkU1MDU2QjE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNp
c1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU2QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmggKi8sCiAJCQkJMEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0xvbmdMaXZlZFN0YXRlLmNwcCAqLywKIAkJCQkwRkI0QjUxRDE2QjYyNzcyMDAzRjY5NkIgLyog
REZHTG9uZ0xpdmVkU3RhdGUuaCAqLywKIAkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyog
REZHTWluaWZpZWRHcmFwaC5oICovLApAQCAtMzA0MSw2ICszMDgyLDggQEAKIAkJCQkwRkE1ODFC
OTE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCAqLywKIAkJCQk4NkVDOURCRjEzMjhE
RjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJODZFQzlEQzAxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCAqLywKKwkJCQkwRkU1MDU2RDE3OEY1QjUzMDBC
MzVGOEMgLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgKi8sCisJCQkJMEZF
NTA1NkUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aCAqLywKIAkJCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwICov
LAogCQkJCTBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovLAogCQkJ
CTBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCAqLywKQEAgLTMwNzgs
NiArMzEyMSw4IEBACiAJCQkJODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmggKi8sCiAJCQkJODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwICovLAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKKwkJCQkwRkU1MDU2RjE3OEY1QjUzMDBCMzVGOEMgLyog
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU3MDE3OEY1QjUzMDBCMzVG
OEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggKi8sCiAJCQkJMEY2Mzk0NzYxNURDRTM0NzAw
NkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLywKIAkJCQkwRkMwOTc5RjE0
NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3
MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCkBAIC0zMjk4LDYgKzMzNDMsNyBAQAogCQkJCTg2
MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjNDMDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQSUNhc3QuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRTUwNTc5MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVz
c0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NUY0MDg4MTBFN0Q1NjMwMDk0
NzM2MSAvKiBBUElTaGltcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGNjA1MTQwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjU3REU4MEUxRjUxQzUw
MDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzQwNyw2ICszNDUzLDcg
QEAKIAkJCQkwRkVBMEExRDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9y
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0Rv
dWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3RDE3OEY1QjUzMDBC
MzVGOEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQz
QzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAq
LywKQEAgLTM0MjgsNiArMzQ3NSw3IEBACiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8q
IERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0
MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4
MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkU1MDU3NzE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEUxQTEyMTczQUYwN0IwMDdFRTJEMyAv
KiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1
QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZD
OTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNDQ0LDYgKzM0OTIsNyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIw
MDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDcxNTIy
ODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkU1MDU1RDE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8q
IERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2
OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRE
QkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zNTkxLDYgKzM2NDAsOCBAQAogCQkJCTBGNzY2RDM1MTVBRTI1M0IwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRTUwNTc1MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NTkxNzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzJGRkQ2NDEzOTk4NUE4MDBFNTM2NUEg
LyogS2V5d29yZExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3MkEwRUQxQ0U2OTAw
RjFGNjgxIC8qIExhYmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjAwOTdBNjBFQkFCQjU4MDA3
QTcyOTcgLyogTGFiZWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzA4LDYgKzM3NTksNyBA
QAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGREIyQ0RFMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3QjE3OEY1QjUzMDBCMzVGOEMgLyog
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
Q0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyMzVCREIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBI
ZWFkZXJzICovLApAQCAtNDE5NCw2ICs0MjQ2LDcgQEAKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4
ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREIyQ0Q5MTc0
MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRTUwNTc4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3M0Q3QUUxNjVBMTQyRDAwQUNBQjcx
IC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTY5QTA3
OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjhGOTQ0MDE2Njc2MzMwMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTQyMjUsOSArNDI3OCwxMSBAQAogCQkJCTBGQzA5NzZFMTQ2OEFCNTEwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzQxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMjM1QkQ4MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9y
bWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAw
QzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0
NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRTUwNTcxMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
Q0FyZ3VtZW50R2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkM1NTcwMTQ3MzhGMzUw
MDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlE
MTZCNzJBMDgwMDVERjk1QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MzQ2
LDYgKzQ0MDEsNyBAQAogCQkJCTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRS
ZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc4ODAxNDAxNDcxQUQ5MjAwNDFCMDE2IC8qIEpT
RGF0ZU1hdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDYxMDdFQzI3MTAwNURCQzhE
IC8qIEpTRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzYxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDM4Myw2ICs0NDM5LDcgQEAKIAkJCQlC
Q0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5NUFCODM0MjBEQTQzMjI1MDBCQzgzRjMgLyogTGVnYWN5
UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1N0MxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFC
MDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3
NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC00NDA1LDcgKzQ0NjIsOSBAQAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAv
KiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBC
MDJFODYgLyogTWFya1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3
RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTdB
MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNEMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0
aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTVDMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RDI4MTI3MTc3OTNCRTUwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQkYyRkYxNTYwRjA2QTAwOEU5MjIy
IC8qIE5hbWVDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0MTcsNiArNDQ3Niw3
IEBACiAJCQkJNjU1RUIyOUIxMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVzQ29kZWdlbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQ2OURFMjEwN0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTMxMDdFQzdFNzAwNjUwNDQ2IC8q
IE51bWJlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU2MzE3OEY1QjA1MDBC
MzVGOEMgLyogREZHQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFNDEw
N0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg2RjNFRUJFMTY4Q0RFOTMwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTE0NDY5REU1MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RDb25zdHJ1
Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDEyICsyMDksMjUg
QEAgcHVibGljOgogICAgICAgICBzZXRMb2NhbEZpcnN0VGltZShvcGVyYW5kLCB2YWx1ZSk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgY2xlYXIoKQorICAgIHZvaWQgZmlsbChUIHZhbHVlKQogICAg
IHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsK
KyAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gdmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2xvY2Fsc1tp
XSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IHZh
bHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGZpbGwo
VHJhaXRzOjpkZWZhdWx0VmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBPcGVyYW5kcyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobnVt
YmVyT2ZBcmd1bWVudHMoKSA9PSBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAg
QVNTRVJUKG51bWJlck9mTG9jYWxzKCkgPT0gb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMgPT0gb3RoZXIubV9hcmd1bWVudHMgJiYg
bV9sb2NhbHMgPT0gb3RoZXIubV9sb2NhbHM7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzQsNiArNzQsMTYgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQog
ICAgICAgICB9CiAgICAgfQogICAgIAorICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsK
KyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSBi
YXNpY0Jsb2NrLT5zc2EtPnZhbHVlc0F0SGVhZC5iZWdpbigpOworICAgICAgICBIYXNoTWFwPE5v
ZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgZW5kID0gYmFzaWNCbG9jay0+c3NhLT52YWx1
ZXNBdEhlYWQuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Cisg
ICAgICAgICAgICBmb3JOb2RlKGl0ZXItPmtleSkgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAg
IGlmIChpdGVyLT52YWx1ZS5oYXNDbG9iYmVyYWJsZVN0YXRlKCkpCisgICAgICAgICAgICAgICAg
bV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgYmFz
aWNCbG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZhbHNlOwogICAgIGJhc2ljQmxvY2stPmNmYUhh
c1Zpc2l0ZWQgPSB0cnVlOwogICAgIG1fYmxvY2sgPSBiYXNpY0Jsb2NrOwpAQCAtODMsOSArOTMs
MTkgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogICAgIG1fY3Vy
cmVudE5vZGUgPSAwOwogfQogCi12b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgm
IGdyYXBoKQorc3RhdGljIHZvaWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUqLCBBYnN0cmFj
dFZhbHVlPiYgdmFsdWVzLCBIYXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3sKKyAgICB2YWx1ZXMuY2xl
YXIoKTsKKyAgICAKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGxpdmUuYmVn
aW4oKTsKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbGl2ZS5lbmQoKTsKKyAg
ICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgdmFsdWVzLmFkZCgqaXRlciwg
QWJzdHJhY3RWYWx1ZSgpKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkK
IHsKLSAgICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxvY2soMCk7CisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7CiAgICAgcm9vdC0+Y2ZhU2hvdWxkUmV2aXNpdCA9
IHRydWU7CiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwogICAgIHJvb3QtPmNmYUZv
dW5kQ29uc3RhbnRzID0gZmFsc2U7CkBAIC0xMTgsOCArMTM4LDggQEAgdm9pZCBBYnN0cmFjdFN0
YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFk
LmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5j
bGVhcigpOwogICAgIH0KLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9j
a0luZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQpAQCAtMTM3LDEyICsxNTcsMTIgQEAg
dm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICB9CiAgICAg
ICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRl
Y29kZUluZGV4KQorICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5t
X3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1f
cGxhbi5tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBBYnN0cmFj
dFZhbHVlIHZhbHVlOwotICAgICAgICAgICAgdmFsdWUuc2V0TW9zdFNwZWNpZmljKGdyYXBoLCBn
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7Ci0gICAgICAgICAgICBpbnQgb3BlcmFu
ZCA9IGdyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgICAgIHZhbHVlLnNldE1vc3RTcGVjaWZpYyhtX2dyYXBoLCBtX2dyYXBoLm1fcGxhbi5t
dXN0SGFuZGxlVmFsdWVzW2ldKTsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5t
X3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBi
bG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCkubWVyZ2UodmFsdWUpOwogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgSW5pdGlhbGl6aW5nIEJsb2NrICMldSwgb3BlcmFuZCByJWQsIHRvICIsIGJsb2NrSW5k
ZXgsIG9wZXJhbmQpOwpAQCAtMTUxLDYgKzE3MSwxMCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6Omlu
aXRpYWxpemUoR3JhcGgmIGdyCiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICBibG9jay0+Y2Zh
U2hvdWxkUmV2aXNpdCA9IHRydWU7CisgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
IHsKKyAgICAgICAgICAgIHNldExpdmVWYWx1ZXMoYmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLCBi
bG9jay0+c3NhLT5saXZlQXRIZWFkKTsKKyAgICAgICAgICAgIHNldExpdmVWYWx1ZXMoYmxvY2st
PnNzYS0+dmFsdWVzQXRUYWlsLCBibG9jay0+c3NhLT5saXZlQXRUYWlsKTsKKyAgICAgICAgfQog
ICAgIH0KIH0KIApAQCAtMTcyLDIwICsxOTYsNDEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjplbmRC
YXNpY0Jsb2NrKE1lcmdlTQogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIAogICAgIGlm
IChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8ICFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAg
Zm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAgICAgICBzd2l0Y2ggKG1f
Z3JhcGgubV9mb3JtKSB7CisgICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6IHsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBN
ZXJnaW5nIHN0YXRlIGZvciBhcmd1bWVudCAlenUuXG4iLCBhcmd1bWVudCk7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBzdGF0ZSBmb3IgYXJndW1lbnQgJXp1Llxu
IiwgYXJndW1lbnQpOwogI2VuZGlmCi0gICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiA9IGJsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5h
cmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1l
bnQpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAw
OyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2Nh
bCkgeworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2st
PnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChh
cmd1bWVudCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgbG9jYWwg
PSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKyts
b2NhbCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIs
IGxvY2FsKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRl
IGZvciBsb2NhbCAlenUuXG4iLCBsb2NhbCk7CiAjZW5kaWYKLSAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7Ci0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFy
aWFibGVzLmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkp
OworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZh
bHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5sb2NhbChsb2NhbCksIGJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTU0E6IHsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0VGFpbC5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGJsb2NrLT52YWx1ZXNBdFRh
aWxbaV0ubWVyZ2UobV92YXJpYWJsZXNbaV0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuYmVn
aW4oKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBibG9jay0+
c3NhLT5saXZlQXRUYWlsLmVuZCgpOworICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuZmluZChub2RlKS0+dmFs
dWUubWVyZ2UoZm9yTm9kZShub2RlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApA
QCAtMzIzLDEzICszNjgsMTMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1
bnNpZwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgTW92SGludDoK
ICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewogICAgICAgICAvLyBEb24ndCBuZWVkIHRvIGRv
IGFueXRoaW5nLiBBIE1vdkhpbnQgaXMgZWZmZWN0aXZlbHkgYSBwcm9taXNlIHRoYXQgdGhlIFNl
dExvY2FsCiAgICAgICAgIC8vIHdhcyBkZWFkLgogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAotICAgIGNhc2UgTW92SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTg2LDYg
KzE2MzEsMTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgorICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAvLyBUaGUgc3RhdGUgb2Yg
dGhpcyBub2RlIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGRlY2lkZWQuCisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBjYXNlIFVwc2lsb246IHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgZm9yTm9kZShub2RlKSA9
IHZhbHVlOworICAgICAgICBmb3JOb2RlKG5vZGUtPnBoaSgpKSA9IHZhbHVlOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9t
TG9jYWw6CiAgICAgY2FzZSBCcmVha3BvaW50OgpAQCAtMTY3OCw3ICsxNzM0LDcgQEAgaW5saW5l
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdAogICAgIG1fZGlkQ2xvYmJlciA9IHRy
dWU7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwoQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGUq
IG5vZGUpCitib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGUqIG5vZGUpCiB7
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzY2LDIxICsxODIy
LDQ0IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbG9j
ayogZnJvbSwgQmFzaWNCbG9jayogdG8pCitib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2lj
QmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQogewogICAgIEFTU0VSVChmcm9tLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mQXJndW1lbnRzKCkpOwogICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZMb2NhbHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwogICAg
IAogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIAotICAgIGZvciAoc2l6ZV90IGFyZ3Vt
ZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgKythcmd1bWVudCkgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9
IHRvLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpLCB0by0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3Vt
ZW50KSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgc3dp
dGNoIChtX2dyYXBoLm1fZm9ybSkgeworICAgIGNhc2UgVGhyZWFkZWRDUFM6IHsKKyAgICAgICAg
Zm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGZyb20tPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICBBYnN0cmFj
dFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhkZXN0
aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlh
Ymxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1
bWVudChhcmd1bWVudCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVf
dCBsb2NhbCA9IDA7IGxvY2FsIDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCk7ICsrbG9jYWwpIHsKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0g
dG8tPnZhbHVlc0F0SGVhZC5sb2NhbChsb2NhbCk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRhaWwu
bG9jYWwobG9jYWwpLCB0by0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKSwgZnJvbS0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIAotICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9tLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewotICAgICAgICBBYnN0cmFj
dFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9jYWwpOwotICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBm
cm9tLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpLCB0by0+dmFyaWFibGVzQXRIZWFkLmxvY2Fs
KGxvY2FsKSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgIAor
ICAgIGNhc2UgU1NBOiB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmcm9tLT52YWx1ZXNBdFRh
aWwuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+dmFsdWVzQXRIZWFk
W2ldLm1lcmdlKGZyb20tPnZhbHVlc0F0VGFpbFtpXSk7CisgICAgICAgIAorICAgICAgICBIYXNo
U2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IHRvLT5zc2EtPmxpdmVBdEhlYWQuYmVnaW4oKTsK
KyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHRvLT5zc2EtPmxpdmVBdEhl
YWQuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHRvLT5zc2Et
PnZhbHVlc0F0SGVhZC5maW5kKG5vZGUpLT52YWx1ZS5tZXJnZSgKKyAgICAgICAgICAgICAgICBm
cm9tLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKG5vZGUpLT52YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBp
ZiAoIXRvLT5jZmFIYXNWaXNpdGVkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyAr
MTMwLDcgQEAgcHVibGljOgogICAgIC8vIENhbGwgdGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0
byBpbml0aWFsaXplIHRoZSBhYnN0cmFjdCB2YWx1ZXMgb2YKICAgICAvLyBhcmd1bWVudHMsIGFu
ZCB0byBpbmRpY2F0ZSB3aGljaCBibG9ja3Mgc2hvdWxkIGJlIGxpc3RlZCBmb3IgQ0ZBCiAgICAg
Ly8gZXhlY3V0aW9uLgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoR3JhcGgmKTsKKyAgICB2
b2lkIGluaXRpYWxpemUoKTsKIAogICAgIC8vIFN0YXJ0IGFic3RyYWN0bHkgZXhlY3V0aW5nIHRo
ZSBnaXZlbiBiYXNpYyBibG9jay4gSW5pdGlhbGl6ZXMgdGhlCiAgICAgLy8gbm90aW9uIG9mIGFi
c3RyYWN0IHN0YXRlIHRvIHdoYXQgd2UgYmVsaWV2ZSBpdCB0byBiZSBhdCB0aGUgaGVhZApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlz
aW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
RWRnZSBjaGlsZDFVbmNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX3dvcmRzWzBdOyB9CiAgICAg
CisgICAgRWRnZSBqdXN0T25lQ2hpbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEhY2hp
bGQxKCkgJiYgIWNoaWxkMigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNoaWxkMygpKTsKKyAg
ICAgICAgICAgIHJldHVybiBjaGlsZDEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRWRn
ZSgpOworICAgIH0KKyAgICAKICAgICB2b2lkIGluaXRpYWxpemUoRWRnZSBjaGlsZDEsIEVkZ2Ug
Y2hpbGQyLCBFZGdlIGNoaWxkMykKICAgICB7CiAgICAgICAgIGNoaWxkKDApID0gY2hpbGQxOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdC
YXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2Rl
QmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQorICAgIDog
Ynl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQorICAgICwgaW5kZXgoTm9CbG9jaykKKyAgICAs
IGlzT1NSVGFyZ2V0KGZhbHNlKQorICAgICwgY2ZhSGFzVmlzaXRlZChmYWxzZSkKKyAgICAsIGNm
YVNob3VsZFJldmlzaXQoZmFsc2UpCisgICAgLCBjZmFGb3VuZENvbnN0YW50cyhmYWxzZSkKKyAg
ICAsIGNmYURpZEZpbmlzaCh0cnVlKQorICAgICwgY2ZhQnJhbmNoRGlyZWN0aW9uKEludmFsaWRC
cmFuY2hEaXJlY3Rpb24pCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICwgaXNMaW5rZWQoZmFs
c2UpCisjZW5kaWYKKyAgICAsIGlzUmVhY2hhYmxlKGZhbHNlKQorICAgICwgdmFyaWFibGVzQXRI
ZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorewor
fQorCitCYXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygpIHsgfQorCit2b2lkIEJhc2ljQmxvY2s6OmVu
c3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCit7CisgICAgdmFyaWFibGVzQXRIZWFk
LmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVM
b2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051
bUxvY2Fscyk7CisgICAgdmFsdWVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwor
fQorCitib29sIEJhc2ljQmxvY2s6OmlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChw
aGlzW2ldID09IG5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEJhc2ljQmxvY2s6OmlzSW5CbG9jayhOb2RlKiBteU5vZGUp
IGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Ob2RlcygpOyArK2kpIHsK
KyAgICAgICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOworfQor
CitCYXNpY0Jsb2NrOjpTU0FEYXRhOjpTU0FEYXRhKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIDog
Zmx1c2hGb3JtYXRBdEhlYWQoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQor
ICAgICwgZmx1c2hGb3JtYXRBdFRhaWwoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkKQorICAgICwgYXZhaWxhYmlsaXR5QXRIZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZCkKKyAgICAsIGF2YWlsYWJpbGl0eUF0VGFpbChPcGVyYW5kc0xpa2UsIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQpCit7Cit9CisKK0Jhc2ljQmxvY2s6OlNTQURhdGE6On5TU0FEYXRh
KCkgeyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJERkdO
b2RlLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFkaWNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9wZXJh
bmRzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAg
LTQ0LDQyICs0NiwxNiBAQCBjbGFzcyBJbnNlcnRpb25TZXQ7CiB0eXBlZGVmIFZlY3RvcjxCYXNp
Y0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OwogCiBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNv
dW50ZWQ8QmFzaWNCbG9jaz4gewotICAgIEJhc2ljQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVCZWdp
biwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCi0gICAgICAgIDog
Ynl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQotICAgICAgICAsIGluZGV4KE5vQmxvY2spCi0g
ICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCi0gICAgICAgICwgY2ZhSGFzVmlzaXRlZChmYWxz
ZSkKLSAgICAgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQotICAgICAgICAsIGNmYUZvdW5k
Q29uc3RhbnRzKGZhbHNlKQotICAgICAgICAsIGNmYURpZEZpbmlzaCh0cnVlKQotICAgICAgICAs
IGNmYUJyYW5jaERpcmVjdGlvbihJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKQotI2lmICFBU1NFUlRf
RElTQUJMRUQKLSAgICAgICAgLCBpc0xpbmtlZChmYWxzZSkKLSNlbmRpZgotICAgICAgICAsIGlz
UmVhY2hhYmxlKGZhbHNlKQotICAgICAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMs
IG51bUxvY2FscykKLSAgICAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMpCi0gICAgICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQot
ICAgICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICB7Ci0g
ICAgfQorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVt
QXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpOworICAgIH5CYXNpY0Jsb2NrKCk7CiAgICAg
Ci0gICAgfkJhc2ljQmxvY2soKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBlbnN1cmVM
b2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQotICAgIHsKLSAgICAgICAgdmFyaWFibGVzQXRI
ZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAgICAgICB2YXJpYWJsZXNBdFRhaWwu
ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgICAgIHZhbHVlc0F0SGVhZC5lbnN1cmVM
b2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICAgICAgdmFsdWVzQXRUYWlsLmVuc3VyZUxvY2Fscyhu
ZXdOdW1Mb2NhbHMpOwotICAgIH0KKyAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdO
dW1Mb2NhbHMpOwogICAgIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
cy5zaXplKCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9
CiAgICAgTm9kZSomIGF0KHNpemVfdCBpKSB7IHJldHVybiBtX25vZGVzW2ldOyB9CiAgICAgTm9k
ZSogYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KKyAgICBOb2RlKiYg
b3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gYXQoaSk7IH0KICAgICBOb2RlKiBvcGVyYXRv
cltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIGxhc3QoKSBj
b25zdCB7IHJldHVybiBhdChzaXplKCkgLSAxKTsgfQogICAgIHZvaWQgcmVzaXplKHNpemVfdCBz
aXplKSB7IG1fbm9kZXMucmVzaXplKHNpemUpOyB9CkBAIC05NiwzMSArNzIsMTYgQEAgc3RydWN0
IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIH0KICAgICBib29sIGlzUGhp
SW5kZXgoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGkgPCBwaGlzLnNpemUoKTsgfQogICAgIAot
ICAgIGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKHBo
aXNbaV0gPT0gbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNJbkJsb2NrKE5v
ZGUqIG15Tm9kZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtTm9kZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZShpKSA9PSBteU5vZGUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KKyAgICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OworICAgIGJv
b2wgaXNJbkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCiAgICAgdW5zaWduZWQgbnVt
U3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAgCi0g
ICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQorICAgIEJhc2ljQmxvY2sq
JiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICByZXR1cm4gbGFzdCgp
LT5zdWNjZXNzb3IoaW5kZXgpOwogICAgIH0KLSAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JGb3JD
b25kaXRpb24oYm9vbCBjb25kaXRpb24pCisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvckZvckNv
bmRpdGlvbihib29sIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBsYXN0KCktPnN1
Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0KQEAgLTEzMCwxMCArOTEsMTIg
QEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIERGR19WQVJJ
QURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERG
R19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIG91dC5wcmludCgiIyIsIGluZGV4KTsKLSAgICB9Cisj
ZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwg
dHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAor
ICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFwcGVuZE5vblRl
cm1pbmFsKEdyYXBoJiwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFt
cyk7CisgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5E
X05PREUpCisjdW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQorICAgIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVz
ZWQgaW50ZXJuYWxseSBmb3IgYmxvY2sgbGlua2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0
bHkgbWVhbmluZ2xlc3MKICAgICAvLyBmb3Igb3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5n
LgpAQCAtMTYwLDYgKzEyMywyMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFz
aWNCbG9jCiAgICAgCiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwog
ICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKKyAgICAKKyAgICBzdHJ1
Y3QgU1NBRGF0YSB7CisgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBmbHVzaEZvcm1hdEF0
SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGZsdXNoRm9ybWF0QXRUYWlsOwor
ICAgICAgICBPcGVyYW5kczxOb2RlKj4gYXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICBPcGVy
YW5kczxOb2RlKj4gYXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICBIYXNoU2V0PE5vZGUqPiBs
aXZlQXRIZWFkOworICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRUYWlsOworICAgICAgICBI
YXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CisgICAgICAgIEhhc2hN
YXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKKyAgICAgICAgCisgICAgICAg
IFNTQURhdGEoQmFzaWNCbG9jayopOworICAgICAgICB+U1NBRGF0YSgpOworICAgIH07CisgICAg
T3duUHRyPFNTQURhdGE+IHNzYTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0
aW9uU2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9ja0lubGluZXMuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Mywx
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgREZHX1ZBUklBRElDX1RF
TVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5kZWYgREZHX0RFRklO
RV9BUFBFTkRfTk9ERQogCisjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQ
cmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJh
bXMsIHZhbHVlQXJncykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0
IGlubGluZSBOb2RlKiBCYXNpY0Jsb2NrOjphcHBlbmROb25UZXJtaW5hbChHcmFwaCYgZ3JhcGgs
IFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAg
IHsgXAorICAgICAgICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHR5cGUgdmFsdWVQYXJh
bXNDb21tYSB2YWx1ZUFyZ3MpOyBcCisgICAgICAgIGFwcGVuZChsYXN0KCkpOyBcCisgICAgICAg
IGF0KHNpemUoKSAtIDIpID0gcmVzdWx0OyBcCisgICAgICAgIHJldHVybiByZXN1bHQ7IFwKKyAg
ICB9CisgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5E
X05PREUpCisjdW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitCbG9ja0luc2VydGlvblNldDo6QmxvY2tJbnNl
cnRpb25TZXQoR3JhcGgmIGdyYXBoKQorICAgIDogbV9ncmFwaChncmFwaCkKK3sKK30KKworQmxv
Y2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQorCit2b2lkIEJsb2NrSW5z
ZXJ0aW9uU2V0OjppbnNlcnQoY29uc3QgQmxvY2tJbnNlcnRpb24mIGluc2VydGlvbikKK3sKKyAg
ICBtX2luc2VydGlvbnMuYXBwZW5kKGluc2VydGlvbik7Cit9CisKK3ZvaWQgQmxvY2tJbnNlcnRp
b25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2sp
Cit7CisgICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBibG9jaykpOworfQorCitCYXNp
Y0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCkKK3sKKyAgICBS
ZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZihuZXcgQmFzaWNCbG9jaygKKyAgICAg
ICAgVUlOVF9NQVgsCisgICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgIGluc2VydChpbmRleCwgYmxvY2spOworICAg
IHJldHVybiBibG9jay5nZXQoKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6
Omluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpCit7CisgICAgcmV0dXJuIGluc2VydChi
ZWZvcmUtPmluZGV4KTsKK30KKworYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCit7
CisgICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFu
eSBvcmRlci4gU28sIHdlIG5lZWQgdG8KKyAgICAvLyBzb3J0IHRoZW0gYmVmb3JlIHJ1bm5pbmcg
V1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4KKyAgICBzdGQ6OnNvcnQobV9pbnNlcnRpb25zLmJlZ2lu
KCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CisKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2dyYXBo
Lm1fYmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAorICAgIC8vIFBydW5lIG91dCBlbXB0eSBl
bnRyaWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgIC8vIGhl
YWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgdW5zaWduZWQg
dGFyZ2V0SW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgc291cmNlSW5kZXggPSAwOyBzb3Vy
Y2VJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOykgeworICAgICAgICBSZWZQdHI8QmFz
aWNCbG9jaz4gYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3NvdXJjZUluZGV4KytdOworICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fZ3JhcGgubV9i
bG9ja3NbdGFyZ2V0SW5kZXgrK10gPSBibG9jazsKKyAgICB9CisgICAgbV9ncmFwaC5tX2Jsb2Nr
cy5yZXNpemUodGFyZ2V0SW5kZXgpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBi
bG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nr
c1tpXS0+aW5kZXggPSBpOworICAgIAorICAgIC8vIEFuZCBmaW5hbGx5LCBpbnZhbGlkYXRlIGFs
bCBhbmFseXNlcyB0aGF0IHJlbHkgb24gdGhlIENGRy4KKyAgICBtX2dyYXBoLmludmFsaWRhdGVD
RkcoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUg
REZHQmxvY2tJbnNlcnRpb25TZXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSA8d3Rm
L0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPFJlZlB0cjxCYXNpY0Js
b2NrPiA+IEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitwdWJs
aWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoR3JhcGgmIGdyYXBoKTsKKyAgICB+QmxvY2tJbnNl
cnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGluc2VydChjb25zdCBCbG9ja0luc2VydGlvbiYg
aW5zZXJ0aW9uKTsKKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFz
aWNCbG9jaz4gYmxvY2spOworICAgIEJhc2ljQmxvY2sqIGluc2VydChzaXplX3QgaW5kZXgpOwor
ICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpOworICAgIAor
ICAgIGJvb2wgZXhlY3V0ZSgpOworCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAg
IFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdCbG9ja0luc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBA
QCBwdWJsaWM6CiAgICAgICAgIC8vIGFmdGVyIGFsbCBwcmVkZWNlc3NvcnMgaGF2ZSBiZWVuIHZp
c2l0ZWQuIE9ubHkgbG9vcHMgd2lsbCBjYXVzZSB0aGlzIGFuYWx5c2lzIHRvCiAgICAgICAgIC8v
IHJldmlzaXQgYmxvY2tzLCBhbmQgdGhlIGFtb3VudCBvZiByZXZpc2l0aW5nIGlzIHByb3BvcnRp
b25hbCB0byBsb29wIGRlcHRoLgogICAgICAgICAKLSAgICAgICAgQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZShtX2dyYXBoKTsKKyAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplKCk7CiAgICAgICAg
IAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjEy
LDcgKzIxMiwxMCBAQCBlbnVtIEdyYXBoRm9ybSB7CiAgICAgLy8KICAgICAvLyBUaHJlYWRlZENQ
UyBmb3JtIGlzIHN1aXRhYmxlIGZvciBkYXRhIGZsb3cgYW5hbHlzaXMgKENGQSwgcHJlZGljdGlv
bgogICAgIC8vIHByb3BhZ2F0aW9uKSwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgYW5kIGNvZGUgZ2Vu
ZXJhdGlvbi4KLSAgICBUaHJlYWRlZENQUworICAgIFRocmVhZGVkQ1BTLAorICAgIAorICAgIC8v
IFNTQSBmb3JtLiBTZWUgREZHU1NBQ29udmVyc2lvblBoYXNlLmggZm9yIGEgZGVzY3JpcHRpb24u
CisgICAgU1NBCiB9OwogCiAvLyBEZXNjcmliZXMgdGhlIHN0YXRlIG9mIHRoZSBVbmlvbkZpbmQg
c3RydWN0dXJlIG9mIFZhcmlhYmxlQWNjZXNzRGF0YSdzLgpAQCAtMjUwLDYgKzI1MywxOSBAQCBp
bmxpbmUgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXNGb3JJc1Byb3ZlCiAgICAgcmV0dXJuIGlzUHJv
dmVkID8gSXNQcm92ZWQgOiBOZWVkc0NoZWNrOwogfQogCitlbnVtIEtpbGxTdGF0dXMgeyBEb2Vz
Tm90S2lsbCwgRG9lc0tpbGwgfTsKKworaW5saW5lIGJvb2wgZG9lc0tpbGwoS2lsbFN0YXR1cyBr
aWxsU3RhdHVzKQoreworICAgIEFTU0VSVChraWxsU3RhdHVzID09IERvZXNOb3RLaWxsIHx8IGtp
bGxTdGF0dXMgPT0gRG9lc0tpbGwpOworICAgIHJldHVybiBraWxsU3RhdHVzID09IERvZXNLaWxs
OworfQorCitpbmxpbmUgS2lsbFN0YXR1cyBraWxsU3RhdHVzRm9yRG9lc0tpbGwoYm9vbCBkb2Vz
S2lsbCkKK3sKKyAgICByZXR1cm4gZG9lc0tpbGwgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsOwor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogYm9vbCBjaGVja0FuZFNldChU
JiBsZWZ0LCBVIHJpZ2h0KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb250cmFkaWN0aW9uUHJ1bmluZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHQ29udHJhZGljdGlvblBydW5pbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIENvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGlj
OgorICAgIENvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6
IFBoYXNlKGdyYXBoLCAiY29udHJhZGljdGlvbiBwcnVuaW5nIikKKyAgICB7CisgICAgfQorICAg
IAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgZmluZCB0aGUgYmxvY2tzIHRoYXQgYXJlIGFscmVh
ZHkgY29udHJhZGljdG9yeSwgYW5kIG1ha2UgdGhlbSBtb3JlCisgICAgICAgIC8vIG9idmlvdXNs
eSBjb250cmFkaWN0b3J5IGJ5IGhvaXN0aW5nIHRoZSBGb3JjZU9TUkV4aXQgdG8gdGhlIHRvcC4K
KyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGlzQ29udHJhZGljdG9yeShibG9jaykpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgaXNDb250cmFkaWN0
aW9uID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBUaHJv
dzoKKyAgICAgICAgICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CisgICAgICAgICAg
ICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkRm9y
Y2VPU1JFeGl0OgorICAgICAgICAgICAgICAgICAgICBpc0NvbnRyYWRpY3Rpb24gPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghaXNDb250cmFkaWN0aW9uKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtYWtlQ29udHJhZGljdG9yeShi
bG9jayk7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gSWYgYWxsIG9mIGEgYmxvY2sncyBzdWNjZXNzb3JzIGFyZSBjb250cmFkaWN0
b3J5IHRoZW4gbWFrZSB0aGF0IGJsb2NrCisgICAgICAgIC8vIGNvbnRyYWRpY3RvcnksIHdpdGgg
dGhlIGNhdmVhdCB0aGF0IGEgYmxvY2sgd2l0aCBubyBzdWNjZXNzb3JzIHdvbid0IGJlCisgICAg
ICAgIC8vIG1hZGUgY29udHJhZGljdG9yeS4gUnVuIHRoaXMgcnVsZSB0byBmaXhwb2ludC4KKyAg
ICAgICAgYm9vbCByZXJ1bkZpeHBvaW50OworICAgICAgICBkbyB7CisgICAgICAgICAgICByZXJ1
bkZpeHBvaW50ID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKGlzQ29udHJhZGljdG9yeShibG9jaykpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29y
cyA9IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhibG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFu
dW1TdWNjZXNzb3JzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBib29sIGFsbEFyZUNvbnRyYWRpY3RvcnkgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVN1Y2Nlc3NvcnM7IGktLTspIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbnRyYWRpY3RvcnkobV9ncmFwaC5tX2Jsb2Nr
c1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgaSldLmdldCgpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYWxsQXJlQ29udHJhZGljdG9yeSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFhbGxBcmVDb250cmFkaWN0b3J5
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBtYWtlQ29udHJhZGljdG9yeShibG9jayk7CisgICAgICAgICAgICAgICAgcmVy
dW5GaXhwb2ludCA9IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IHdo
aWxlIChyZXJ1bkZpeHBvaW50KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBjaGFuZ2VkOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGlzQ29udHJhZGljdG9yeShCYXNpY0Jsb2NrKiBi
bG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBibG9jay0+YXQoMCktPm9wKCkgPT0gRm9yY2VP
U1JFeGl0OworICAgIH0KKyAgICAKKyAgICB2b2lkIG1ha2VDb250cmFkaWN0b3J5KEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgTm9kZSogb2xkRmlyc3QgPSBibG9jay0+YXQoMCk7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIEZvcmNlT1NS
RXhpdCwgb2xkRmlyc3QtPmNvZGVPcmlnaW4pOworICAgICAgICBibG9jay0+cHJlcGVuZChub2Rl
KTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1Db250cmFkaWN0aW9uUHJ1bmluZyhHcmFwaCYg
Z3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDb250cmFk
aWN0aW9uIFBydW5pbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q29udHJhZGljdGlv
blBydW5pbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVu
aW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ29udHJhZGljdGlv
blBydW5pbmdQaGFzZV9oCisjZGVmaW5lIERGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2VfaAor
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29udHJh
ZGljdGlvbiBwcnVuaW5nLiBNYWtlcyBhbnkgYmxvY2sgdGhhdCBpcyBndWFyYW50ZWVkIHRvIEZv
cmNlT1NSRXhpdAorLy8gZG8gc28gYXMgdGhlIHZlcnkgZmlyc3Qgbm9kZS4gQW55dGltZSBhbGwg
b2YgYSBibG9jaydzIHN1Y2Nlc3NvcnMgYXJlCisvLyBjb250cmFkaWN0aW9ucywgbWFrZXMgdGhh
dCBibG9jayBhIGNvbnRyYWRpY3Rpb24gYXMgd2VsbC4KKworYm9vbCBwZXJmb3JtQ29udHJhZGlj
dGlvblBydW5pbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDb250cmFkaWN0aW9uUHJ1bmlu
Z1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlv
blNldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImNyaXRpY2FsIGVkZ2Ug
YnJlYWtpbmciKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0lu
ZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBBbiBlZGdlIEEtPkIgaXMgY3JpdGlj
YWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29yIGFuZCBCIGhhcyBtdWx0aXBsZQorICAgICAg
ICAgICAgLy8gcHJlZGVjZXNzb3JzLiBUaHVzIHdlIGZhaWwgZWFybHkgaWYgd2UgZG9uJ3QgaGF2
ZSBtdWx0aXBsZSBzdWNjZXNzb3JzLgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxv
Y2stPm51bVN1Y2Nlc3NvcnMoKSA8PSAxKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vz
c29ycygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayoqIHN1Y2Nlc3NvciA9
ICZibG9jay0+c3VjY2Vzc29yKGkpOworICAgICAgICAgICAgICAgIGlmICgoKnN1Y2Nlc3Nvcikt
PnByZWRlY2Vzc29ycy5zaXplKCkgPD0gMSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYnJlYWtDcml0aWNhbEVkZ2Uoc3Vj
Y2Vzc29yKTsgCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBtX2luc2VydGlvblNldC5leGVjdXRlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZv
aWQgYnJlYWtDcml0aWNhbEVkZ2UoQmFzaWNCbG9jayoqIHN1Y2Nlc3NvcikKKyAgICB7CisgICAg
ICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHBh
ZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZSgqc3VjY2Vzc29yKTsKKyAgICAgICAgcGFk
LT5hcHBlbmROb2RlKAorICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsICgqc3Vj
Y2Vzc29yKS0+YXQoMCktPmNvZGVPcmlnaW4sIE9wSW5mbygqc3VjY2Vzc29yKSk7CisgICAgICAg
IAorICAgICAgICAqc3VjY2Vzc29yID0gcGFkOworICAgIH0KKyAgICAKKyAgICBCbG9ja0luc2Vy
dGlvblNldCBtX2luc2VydGlvblNldDsKK307CisKK2Jvb2wgcGVyZm9ybUNyaXRpY2FsRWRnZUJy
ZWFraW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lv
bigiREZHIENyaXRpY2FsIEVkZ2UgQnJlYWtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhh
c2U8Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFr
aW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKyNkZWZpbmUgREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdy
YXBoOworCisvLyBJbnNlcnRzIGR1bW15IGJhc2ljIGJsb2NrcyB0byBicmVhayBjcml0aWNhbCBl
ZGdlcy4gQW4gZWRnZSBBLT5CIGlzCisvLyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0aXBsZSBzdWNj
ZXNzb3JzIGFuZCBCIGhhcyBtdWx0aXBsZSBwcmVkZXNzb3JzLgorCitib29sIHBlcmZvcm1Dcml0
aWNhbEVkZ2VCcmVha2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBo
YXNlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgcHVibGljOgog
ICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9y
bSA9PSBUaHJlYWRlZENQUyB8fCBtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKICAg
ICAgICAgLy8gRmlyc3QgcmVzZXQgdGhlIGNvdW50cyB0byAwIGZvciBhbGwgbm9kZXMuCiAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpAQCAtNzUsMTAgKzc3LDI5IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgd2hpbGUgKCFtX3dvcmtsaXN0LmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fd29ya2xpc3QubGFzdCgpOwotICAg
ICAgICAgICAgbV93b3JrbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICBBU1NFUlQobm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSk7IC8vIEl0IHNob3VsZCBub3QgYmUgb24gdGhlIHdvcmtsaXN0
IHVubGVzcyBpdCdzIHJlZidlZC4KLSAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVO
KG1fZ3JhcGgsIG5vZGUsIGNvdW50RWRnZSk7CisgICAgICAgICAgICB3aGlsZSAoIW1fd29ya2xp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fd29ya2xpc3Qu
bGFzdCgpOworICAgICAgICAgICAgICAgIG1fd29ya2xpc3QucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5v
dCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgorICAgICAgICAgICAgICAg
IERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGNvdW50RWRnZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpIHsKKyAgICAgICAgICAgICAgICAvLyBGaW5kIFBoaS0+VXBzaWxvbiBlZGdlcywgd2hp
Y2ggYXJlIHJlcHJlc2VudGVkIGFzIG1ldGEtZGF0YSBpbiB0aGUKKyAgICAgICAgICAgICAgICAv
LyBVcHNpbG9uLgorICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+
c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpICE9IFVwc2lsb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+cGhpKCktPnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnROb2RlKG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKQEAgLTk0
LDggKzExNSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAg
ICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLmlzUHJvdmVkKCkgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVu
dHlwZWRVc2UpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAg
ICAgIGNhc2UgTW92SGludDogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoKG5vZGUtPm9w
KCkgPT0gU2V0TG9jYWwpID09IChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykpOworICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkud2lsbE5vdEhhdmVDaGVjaygpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhh
dCBVSW50MzJUb051bWJlciBpcyBkZWFkIGJ1dCBpdHMKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGNoaWxkIGlzbid0OyBpZiBzbyB0aGVuIHdlIHNob3VsZCBNb3ZIaW50IHRoZSBjaGlsZC4K
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZEdlbmVy
YXRlKCkKQEAgLTExNyw4ICsxNDAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgIGNhc2UgU2V0
QXJndW1lbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTGVhdmUgdGhlbSBhcyBub3Qgc2hv
dWxkR2VuZXJhdGUuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7CkBAIC0xMjYsNyArMTUxLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2Rl
LT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSB8fCBlZGdlLmlzUHJvdmVkKCkgfHwg
ZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWVkZ2UgfHwgZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwg
bm9kZS0+Y29kZU9yaWdpbiwgZWRnZSk7CkBAIC0xNTgsMjEgKzE4MywyNSBAQCBwcml2YXRlOgog
ICAgIHsKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgYW4gInVucHJvdmVkIiB1bnR5cGVkIHVzZSBm
b3IgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlLiBUaGUgQ0ZBCiAgICAgICAgIC8vIHdpbGwganVz
dCBub3QgaGF2ZSBnb3R0ZW4gYXJvdW5kIHRvIGl0LgotICAgICAgICBpZiAoZWRnZS5pc1Byb3Zl
ZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgIGlmIChlZGdlLndp
bGxOb3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFlZGdl
LT5wb3N0Zml4UmVmKCkpCiAgICAgICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChlZGdlLm5vZGUo
KSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY291bnROb2RlKE5vZGUqIG5vZGUpCisgICAgewor
ICAgICAgICBpZiAobm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBtX3dvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb3Vu
dEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIC8vIERvbid0IGNvdW50IGVk
Z2VzIHRoYXQgYXJlIGFscmVhZHkgY291bnRlZCBmb3IgdGhlaXIgdHlwZSBjaGVja3MuCi0gICAg
ICAgIGlmICghKGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmIChlZGdlLT5wb3N0
Zml4UmVmKCkpCisgICAgICAgIGlmIChlZGdlLndpbGxIYXZlQ2hlY2soKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgbV93b3JrbGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkpOworICAgICAg
ICBjb3VudE5vZGUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGVsaW1pbmF0
ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTE4MSw3ICsyMTAsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQo
aSk7CiAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBpZiAoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlw
ZWRVc2UpCisgICAgICAgICAgICBpZiAoZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCiAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0pOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShyZXZpc2lvbiAxNTI1
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw2ICszOSw4IEBAIHZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogICAgICAgICAgICAgb3V0LnByaW50KCJDaGVjazoiKTsKICAgICAgICAgb3V0LnByaW50
KHVzZUtpbmQoKSwgIjoiKTsKICAgICB9CisgICAgaWYgKGRvZXNLaWxsKCkpCisgICAgICAgIG91
dC5wcmludCgiS2lsbDoiKTsKICAgICBvdXQucHJpbnQobm9kZSgpKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzks
MTIgQEAgY2xhc3MgQWRqYWNlbmN5TGlzdDsKIAogY2xhc3MgRWRnZSB7CiBwdWJsaWM6Ci0gICAg
ZXhwbGljaXQgRWRnZShOb2RlKiBub2RlID0gMCwgVXNlS2luZCB1c2VLaW5kID0gVW50eXBlZFVz
ZSwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMgPSBOZWVkc0NoZWNrKQorICAgIGV4cGxpY2l0IEVk
Z2UoTm9kZSogbm9kZSA9IDAsIFVzZUtpbmQgdXNlS2luZCA9IFVudHlwZWRVc2UsIFByb29mU3Rh
dHVzIHByb29mU3RhdHVzID0gTmVlZHNDaGVjaywgS2lsbFN0YXR1cyBraWxsU3RhdHVzID0gRG9l
c05vdEtpbGwpCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1h
a2VXb3JkKG5vZGUsIHVzZUtpbmQsIHByb29mU3RhdHVzKSkKKyAgICAgICAgOiBtX2VuY29kZWRX
b3JkKG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQsIHByb29mU3RhdHVzLCBraWxsU3RhdHVzKSkKICNl
bHNlCiAgICAgICAgIDogbV9ub2RlKG5vZGUpCi0gICAgICAgICwgbV9lbmNvZGVkV29yZChtYWtl
V29yZCh1c2VLaW5kLCBwcm9vZlN0YXR1cykpCisgICAgICAgICwgbV9lbmNvZGVkV29yZChtYWtl
V29yZCh1c2VLaW5kLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cykpCiAjZW5kaWYKICAgICB7CiAg
ICAgfQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROb2RlKE5vZGUqIG5v
ZGUpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBt
YWtlV29yZChub2RlLCB1c2VLaW5kKCksIHByb29mU3RhdHVzKCkpOworICAgICAgICBtX2VuY29k
ZWRXb3JkID0gbWFrZVdvcmQobm9kZSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cygpLCBraWxsU3Rh
dHVzKCkpOwogI2Vsc2UKICAgICAgICAgbV9ub2RlID0gbm9kZTsKICNlbmRpZgpAQCAtODksNyAr
ODksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobm9kZSgpKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VL
aW5kLCBwcm9vZlN0YXR1cygpKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5v
ZGUoKSwgdXNlS2luZCwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1cygpKTsKICNlbHNlCiAgICAg
ICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZCh1c2VLaW5kLCBwcm9vZlN0YXR1cygpKTsKICNl
bmRpZgpAQCAtMTA4LDkgKzEwOCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChu
b2RlKCkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtl
V29yZChub2RlKCksIHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMpOworICAgICAgICBtX2VuY29kZWRX
b3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kKCksIHByb29mU3RhdHVzLCBraWxsU3RhdHVz
KCkpOwogI2Vsc2UKLSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQoKSwg
cHJvb2ZTdGF0dXMpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQodXNlS2luZCgp
LCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cygpKTsKICNlbmRpZgogICAgIH0KICAgICBib29sIGlz
UHJvdmVkKCkgY29uc3QKQEAgLTEyMiw2ICsxMjIsMzYgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gcHJvb2ZTdGF0dXMoKSA9PSBOZWVkc0NoZWNrOwogICAgIH0KICAgICAKKyAgICBib29sIHdp
bGxOb3RIYXZlQ2hlY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzUHJvdmVkKCkg
fHwgdXNlS2luZCgpID09IFVudHlwZWRVc2U7CisgICAgfQorICAgIGJvb2wgd2lsbEhhdmVDaGVj
aygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIXdpbGxOb3RIYXZlQ2hlY2soKTsKKyAg
ICB9CisgICAgCisgICAgS2lsbFN0YXR1cyBraWxsU3RhdHVzVW5jaGVja2VkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraWxsU3RhdHVzRm9yRG9lc0tpbGwobV9lbmNvZGVkV29yZCAm
IDIpOworICAgIH0KKyAgICBLaWxsU3RhdHVzIGtpbGxTdGF0dXMoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG5vZGUoKSk7CisgICAgICAgIHJldHVybiBraWxsU3RhdHVzVW5jaGVja2Vk
KCk7CisgICAgfQorICAgIHZvaWQgc2V0S2lsbFN0YXR1cyhLaWxsU3RhdHVzIGtpbGxTdGF0dXMp
CisgICAgeworICAgICAgICBBU1NFUlQobm9kZSgpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kKCksIHByb29mU3Rh
dHVzKCksIGtpbGxTdGF0dXMpOworI2Vsc2UKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VX
b3JkKHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1cyk7CisjZW5kaWYKKyAgICB9
CisgICAgYm9vbCBkb2VzS2lsbCgpIGNvbnN0IHsgcmV0dXJuIERGRzo6ZG9lc0tpbGwoa2lsbFN0
YXR1cygpKTsgfQorICAgIGJvb2wgZG9lc05vdEtpbGwoKSBjb25zdCB7IHJldHVybiAhZG9lc0tp
bGwoKTsgfQorICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW5vZGUoKTsg
fQogICAgIAogICAgIHR5cGVkZWYgdm9pZCogRWRnZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGU7CkBA
IC0xNTAsMjAgKzE4MCwyMCBAQCBwcml2YXRlOgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgc3Rh
dGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNjsgfQogICAgIAotICAgIHN0YXRpYyB1aW50
cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBw
cm9vZlN0YXR1cykKKyAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKE5vZGUqIG5vZGUsIFVz
ZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMsIEtpbGxTdGF0dXMga2lsbFN0
YXR1cykKICAgICB7CiAgICAgICAgIEFTU0VSVChzaXplb2Yobm9kZSkgPT0gOCk7CiAgICAgICAg
IHVpbnRwdHJfdCBzaGlmdGVkVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSA8
PCBzaGlmdCgpOwogICAgICAgICBBU1NFUlQoKHNoaWZ0ZWRWYWx1ZSA+PiBzaGlmdCgpKSA9PSBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSk7CiAgICAgICAgIEFTU0VSVCh1c2VLaW5kID49
IDAgJiYgdXNlS2luZCA8IExhc3RVc2VLaW5kKTsKLSAgICAgICAgQVNTRVJUKChzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KExhc3RVc2VLaW5kKSA8PCAxKSA8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90
PigxKSA8PCBzaGlmdCgpKSk7Ci0gICAgICAgIHJldHVybiBzaGlmdGVkVmFsdWUgfCAoc3RhdGlj
X2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAxKSB8IERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0
dXMpOworICAgICAgICBBU1NFUlQoKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTGFzdFVzZUtpbmQp
IDw8IDIpIDw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDIpIDw8IHNoaWZ0KCkpKTsKKyAgICAg
ICAgcmV0dXJuIHNoaWZ0ZWRWYWx1ZSB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQp
IDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1cykgPDwgMSkgfCBERkc6OmlzUHJvdmVk
KHByb29mU3RhdHVzKTsKICAgICB9CiAgICAgCiAjZWxzZQotICAgIHN0YXRpYyB1aW50cHRyX3Qg
bWFrZVdvcmQoVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKKyAgICBz
dGF0aWMgdWludHB0cl90IG1ha2VXb3JkKFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJv
b2ZTdGF0dXMsIEtpbGxTdGF0dXMga2lsbFN0YXR1cykKICAgICB7Ci0gICAgICAgIHJldHVybiAo
c3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAxKSB8IERGRzo6aXNQcm92ZWQocHJv
b2ZTdGF0dXMpOworICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2lu
ZCkgPDwgMikgfCAoREZHOjpkb2VzS2lsbChraWxsU3RhdHVzKSA8PCAxKSB8IERGRzo6aXNQcm92
ZWQocHJvb2ZTdGF0dXMpOwogICAgIH0KICAgICAKICAgICBOb2RlKiBtX25vZGU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1
MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkwMSw2ICs5MDEsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGNhc2Ug
R2V0QXJyYXlMZW5ndGg6CiAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIFVwc2lsb246
CiAgICAgICAgIGNhc2UgRm9yd2FyZEludDMyVG9Eb3VibGU6CiAgICAgICAgIGNhc2UgUGhhbnRv
bVB1dFN0cnVjdHVyZToKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdGbHVzaEZvcm1hdC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBXVEYg
eworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBGbHVzaEZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQp
IHsKKyAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgb3V0LnByaW50KCJEZWFkRmx1c2giKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICBvdXQucHJp
bnQoIkZsdXNoZWRJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGbHVzaGVkRG91
YmxlOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWREb3VibGUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZENlbGwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgIG91
dC5wcmludCgiRmx1c2hlZEJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1
c2hlZEpTVmFsdWU6CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZEpTVmFsdWUiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdGbHVzaEZvcm1hdF9oCisjZGVmaW5lIERGR0ZsdXNo
Rm9ybWF0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitlbnVtIEZsdXNoRm9ybWF0IHsKKyAgICBEZWFkRmx1c2gsCisgICAg
Rmx1c2hlZEludDMyLAorICAgIEZsdXNoZWREb3VibGUsCisgICAgRmx1c2hlZENlbGwsCisgICAg
Rmx1c2hlZEJvb2xlYW4sCisgICAgRmx1c2hlZEpTVmFsdWUKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6REZHOjpGbHVzaEZvcm1hdCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdGbHVzaEZvcm1hdF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0ZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6Cisg
ICAgRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBo
YXNlKGdyYXBoLCAiZmx1c2gtbGl2ZW5lc3MgYW5hbHlzaXMiKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09
IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBMaXZlbmVzcyBpcyBhIGJhY2t3YXJkcyBhbmFs
eXNpczsgdGhlIHJvb3RzIGFyZSB0aGUgYmxvY2tzIHRoYXQKKyAgICAgICAgLy8gZW5kIGluIGEg
dGVybWluYWwgKFJldHVybi9UaHJvdy9UaHJvd1JlZmVyZW5jZUVycm9yKS4gRm9yIG5vdywgd2UK
KyAgICAgICAgLy8gdXNlIGEgZml4cG9pbnQgZm9ybXVsYXRpb24gc2luY2UgbGl2ZW5lc3MgaXMg
YSByYXBpZCBhbmFseXNpcyB3aXRoCisgICAgICAgIC8vIGNvbnZlcmdlbmNlIGd1YXJhbnRlZWQg
YWZ0ZXIgTyhjb25uZWN0aXZpdHkpLgorICAgICAgICAKKyAgICAgICAgLy8gU3RhcnQgYnkgYXNz
dW1pbmcgdGhhdCBldmVyeXRoaW5nIGlzIGRlYWQuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkLmZpbGwoRGVhZEZsdXNoKTsKKyAgICAg
ICAgICAgIGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRUYWlsLmZpbGwoRGVhZEZsdXNoKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0g
ZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9j
a0luZGV4KTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoQmxvY2tJ
bmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+Zmx1c2hGb3Jt
YXRBdFRhaWw7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJs
b2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCB2YXJpYWJsZS0+bG9jYWwoKSwg
dmFyaWFibGUtPmZsdXNoRm9ybWF0KCksIERlYWRGbHVzaCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZs
dXNoOgorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAg
ICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQo
KTsKKyAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhcmlhYmxlLT5sb2NhbCgpLCBm
b3JtYXQsIGZvcm1hdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9s
aXZlID09IGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgYmxvY2stPnNz
YS0+Zmx1c2hGb3JtYXRBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBtX2xpdmUuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAg
Rmx1c2hGb3JtYXQmIHByZWRlY2Vzc29yRm9ybWF0ID0gcHJlZGVjZXNzb3ItPnNzYS0+Zmx1c2hG
b3JtYXRBdFRhaWxbal07CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgbXlGb3JtYXQgPSBt
X2xpdmVbal07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGhyZWUgcG9z
c2liaWxpdGllczoKKyAgICAgICAgICAgICAgICAvLyAxKSBQcmVkZWNlc3NvciBmb3JtYXQgaXMg
RGVhZCwgaW4gd2hpY2ggY2FzZSBpdCBhY3F1aXJlcyBvdXIgZm9ybWF0LgorICAgICAgICAgICAg
ICAgIC8vIDIpIFByZWRlY2Vzc29yIGZvcm1hdCBpcyBpZGVudGljYWwgdG8gb3VyIGZvcm1hdCwg
aW4gd2hpY2ggY2FzZSB3ZQorICAgICAgICAgICAgICAgIC8vICAgIGRvIG5vdGhpbmcuCisgICAg
ICAgICAgICAgICAgLy8gMykgUHJlZGVjZXNzb3IgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIG91
ciBmb3JtYXQgYW5kIGl0J3Mgbm90IERlYWQsCisgICAgICAgICAgICAgICAgLy8gICAgaW4gd2hp
Y2ggY2FzZSB3ZSBoYXZlIGFuIGVycm9uZW91cyBzZXQgb2YgRmx1c2hlcyBhbmQgU2V0TG9jYWxz
LgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvckZvcm1h
dCA9PSBEZWFkRmx1c2gpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JGb3JtYXQg
PSBteUZvcm1hdDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvckZv
cm1hdCA9PSBteUZvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAg
IkJhZCBGbHVzaCBtZXJnZSBhdCBlZGdlICIsICpwcmVkZWNlc3NvciwgIiAtPiAiLCAqYmxvY2ss
CisgICAgICAgICAgICAgICAgICAgICIsIGxvY2FsIHZhcmlhYmxlIHIiLCBtX2xpdmUub3BlcmFu
ZEZvckluZGV4KGopLCAiOiAiLCAqcHJlZGVjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICIg
aGFzICIsIHByZWRlY2Vzc29yRm9ybWF0LCAiIGFuZCAiLCAqYmxvY2ssICIgaGFzICIsIG15Rm9y
bWF0LCAiLlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSVIgYXQgdGltZSBvZiBlcnJv
cjpcbiIpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBzZXRGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBub2RlRm9y
bWF0LCBGbHVzaEZvcm1hdCBuZXdGb3JtYXQpCisgICAgeworICAgICAgICBGbHVzaEZvcm1hdCYg
Y3VycmVudEZvcm1hdCA9IG1fbGl2ZS5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAg
ICAgLy8gRG8gc29tZSB1c2VmdWwgdmVyaWZpY2F0aW9uIGhlcmUuIEl0J3MgT0sgaWYgd2UgdGhp
bmsgdGhhdCB0aGUKKyAgICAgICAgLy8gZmx1c2ggZm9ybWF0IGlzIGRlYWQgYXQgdGhlIHRpbWUg
dGhhdCB3ZSBzZWUgdGhlIG5vZGUuIEJ1dCBpdCdzCisgICAgICAgIC8vIG5vdCBPSyBpZiBib3Ro
IHRoZSBub2RlIGFuZCBtX2xpdmUgc2VlIGEgRmx1c2hGb3JtYXQgYW5kIHRoZXkgZG8KKyAgICAg
ICAgLy8gbm90IGFncmVlIG9uIGl0LgorICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnRGb3Jt
YXQgPT0gRGVhZEZsdXNoIHx8IGN1cnJlbnRGb3JtYXQgPT0gbm9kZUZvcm1hdCkgeworICAgICAg
ICAgICAgY3VycmVudEZvcm1hdCA9IG5ld0Zvcm1hdDsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJCYWQgRmx1
c2ggbWVyZ2UgYXQgbm9kZSAiLCBub2RlLCAiLCByIiwgb3BlcmFuZCwgIjogbm9kZSBjbGFpbXMg
Iiwgbm9kZUZvcm1hdCwKKyAgICAgICAgICAgICIgYnV0IGJhY2t3YXJkcyBmbG93IGNsYWltcyAi
LCBjdXJyZW50Rm9ybWF0LCAiLlxuIik7CisgICAgICAgIGRhdGFMb2coIklSIGF0IHRpbWUgb2Yg
ZXJyb3I6XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIENSQVNIKCk7Cisg
ICAgfQorICAgIAorICAgIEZsdXNoRm9ybWF0IGZsdXNoRm9ybWF0KE5vZGUqIG5vZGUpCisgICAg
eworICAgICAgICByZXR1cm4gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0
KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgbV9jaGFuZ2VkOworICAgIE9wZXJhbmRzPEZsdXNo
Rm9ybWF0PiBtX2xpdmU7Cit9OworCitib29sIHBlcmZvcm1GbHVzaExpdmVuZXNzQW5hbHlzaXMo
R3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcg
Rmx1c2gtTGl2ZW5lc3MgQW5hbHlzaXMgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Rmx1
c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKyNkZWZpbmUgREZHRmx1c2hMaXZlbmVzc0Fu
YWx5c2lzUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpz
c2EtPmZsdXNoRm9ybWF0QXRIZWFkCisKK2Jvb2wgcGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNp
cyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1
MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzUsNiArMjM1LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0LCBjb25zdAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzSW5kZXhpbmdUeXBlKCkpCiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgSW5kZXhpbmdUeXBlRHVtcChub2RlLT5pbmRleGluZ1R5cGUo
KSkpOworICAgIGlmIChub2RlLT5oYXNQaGkoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
XiIsIG5vZGUtPnBoaSgpLT5pbmRleCgpKTsKICAgICBpZiAobm9kZS0+aGFzRXhlY3V0aW9uQ291
bnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+ZXhlY3V0
aW9uQ291bnRlcigpKSk7CiAgICAgaWYgKG9wID09IEpTQ29uc3RhbnQpIHsKQEAgLTMxMywyMSAr
MzE1LDIzIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKICAgICAg
ICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICBvdXQucHJpbnQo
cHJlZml4LCAiICBQaGkgTm9kZXM6Iik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9j
ay0+cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBo
aXNbaV07Ci0gICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2Rl
RHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5yZWZD
b3VudCgpLCAiPi0+KCIpOwotICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKLSAgICAg
ICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKLSAgICAg
ICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQyKCktPmluZGV4KCkpOwotICAgICAgICAgICAgICAgIGlm
IChwaGlOb2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAi
LCBwaGlOb2RlLT5jaGlsZDMoKS0+aW5kZXgoKSk7CisgICAgaWYgKCFibG9jay0+cGhpcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBoaXNbaV07CisgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2RlID09IER1bXBM
aXZlUGhpc09ubHkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBvdXQu
cHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAi
Pi0+KCIpOworICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7CisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOworICAgICAg
ICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMigpLT5pbmRleCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpKQorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDMoKS0+aW5kZXgoKSk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCIpIiwgaSArIDEg
PCBibG9jay0+cGhpcy5zaXplKCkgPyAiLCIgOiAiIik7CiAgICAgICAgIH0KLSAgICAgICAgb3V0
LnByaW50KCIpIiwgaSArIDEgPCBibG9jay0+cGhpcy5zaXplKCkgPyAiLCIgOiAiIik7CiAgICAg
fQogICAgIG91dC5wcmludCgiXG4iKTsKIH0KQEAgLTM0NSw3ICszNDksNyBAQCB2b2lkIEdyYXBo
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgIGR1bXBCbG9ja0hlYWRlcihvdXQsICIi
LCBibG9jaywgRHVtcEFsbFBoaXMpOwogICAgICAgICBvdXQucHJpbnQoIiAgdmFycyBiZWZvcmU6
ICIpOwogICAgICAgICBpZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCi0gICAgICAgICAgICBkdW1w
T3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgb3V0KTsKKyAgICAgICAgICAgIG91dC5wcmlu
dChibG9jay0+dmFsdWVzQXRIZWFkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgb3V0LnBy
aW50KCI8ZW1wdHk+Iik7CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKQEAgLTM1OSw3ICszNjMs
NyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgIH0KICAgICAg
ICAgb3V0LnByaW50KCIgIHZhcnMgYWZ0ZXI6ICIpOwogICAgICAgICBpZiAoYmxvY2stPmNmYUhh
c1Zpc2l0ZWQpCi0gICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0VGFpbCwg
b3V0KTsKKyAgICAgICAgICAgIG91dC5wcmludChibG9jay0+dmFsdWVzQXRUYWlsKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAgICAgICAgIG91dC5w
cmludCgiXG4iKTsKQEAgLTQ3OCw2ICs0ODIsMjggQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdl
dExvY2FsKEJhc2ljQmxvYwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQorCit2b2lkIEdy
YXBoOjphZGRGb3JEZXB0aEZpcnN0U29ydChWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQsIFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgSGFzaFNldDxCYXNpY0Jsb2NrKj4mIHNl
ZW4sIEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGlmIChzZWVuLmNvbnRhaW5zKGJsb2NrKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOworICAgIHdv
cmtsaXN0LmFwcGVuZChibG9jayk7CisgICAgc2Vlbi5hZGQoYmxvY2spOworfQorCit2b2lkIEdy
YXBoOjpnZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1
bHQpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gd29ya2xpc3Q7CisgICAgSGFzaFNl
dDxCYXNpY0Jsb2NrKj4gc2VlbjsKKyAgICBhZGRGb3JEZXB0aEZpcnN0U29ydChyZXN1bHQsIHdv
cmtsaXN0LCBzZWVuLCBibG9jaygwKSk7CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAg
ICAgICAgICAgYWRkRm9yRGVwdGhGaXJzdFNvcnQocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxv
Y2stPnN1Y2Nlc3NvcihpKSk7CisgICAgfQorfQogICAgIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
NTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY0MSw2ICs2NDEsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBpbnZhbGlk
YXRlQ0ZHKCk7CiAgICAgCisgICAgdm9pZCBnZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihWZWN0
b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpOworICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlv
biogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAg
ICAKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFu
LmlkZW50aWZpZXJzOyB9CkBAIC02NzksNiArNjgxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29y
a2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IpOworICAgIHZvaWQgYWRk
Rm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0b3I8QmFz
aWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEhhc2hTZXQ8QmFzaWNCbG9jayo+JiBzZWVuLCBCYXNp
Y0Jsb2NrKik7CiAgICAgCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRl
SW50ZWdlciwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMjYgKzMxLDEyIEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdHcmFw
aC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotY2xhc3MgSW5zZXJ0aW9uIHsK
LXB1YmxpYzoKLSAgICBJbnNlcnRpb24oKSB7IH0KLSAgICAKLSAgICBJbnNlcnRpb24oc2l6ZV90
IGluZGV4LCBOb2RlKiBlbGVtZW50KQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAg
ICwgbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgaW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Ci0gICAgTm9kZSogZWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZWxlbWVudDsgfQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9pbmRleDsKLSAg
ICBOb2RlKiBtX2VsZW1lbnQ7Ci19OwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxOb2RlKj4gSW5z
ZXJ0aW9uOwogCiBjbGFzcyBJbnNlcnRpb25TZXQgewogcHVibGljOgpAQCAtODEsMjAgKzY3LDcg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKICAg
ICB7Ci0gICAgICAgIGlmICghbV9pbnNlcnRpb25zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgYmxvY2stPmdyb3coYmxvY2stPnNpemUoKSArIG1faW5zZXJ0aW9ucy5zaXpl
KCkpOwotICAgICAgICBzaXplX3QgbGFzdEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaW5kZXhJbkluc2VydGlvbnMgPSBtX2luc2VydGlvbnMuc2l6ZSgpOyBpbmRl
eEluSW5zZXJ0aW9ucy0tOykgewotICAgICAgICAgICAgSW5zZXJ0aW9uJiBpbnNlcnRpb24gPSBt
X2luc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdOwotICAgICAgICAgICAgc2l6ZV90IGZpcnN0
SW5kZXggPSBpbnNlcnRpb24uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOwotICAgICAgICAg
ICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IGxhc3RJbmRleDsgLS1pID4gZmlyc3RJbmRleDspCi0gICAgICAg
ICAgICAgICAgYmxvY2stPmF0KGkpID0gYmxvY2stPmF0KGkgLSBpbmRleE9mZnNldCk7Ci0gICAg
ICAgICAgICBibG9jay0+YXQoZmlyc3RJbmRleCkgPSBpbnNlcnRpb24uZWxlbWVudCgpOwotICAg
ICAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleDsKLSAgICAgICAgfQotICAgICAgICBtX2lu
c2VydGlvbnMucmVzaXplKDApOworICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucygqYmxvY2ssIG1f
aW5zZXJ0aW9ucyk7CiAgICAgfQogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlz
aXNQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgor
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTGl2ZW5lc3NBbmFseXNpc1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdy
YXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAibGl2ZW5lc3MgYW5hbHlzaXMiKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBMaXZlbmVzcyBpcyBhIGJh
Y2t3YXJkcyBhbmFseXNpczsgdGhlIHJvb3RzIGFyZSB0aGUgYmxvY2tzIHRoYXQKKyAgICAgICAg
Ly8gZW5kIGluIGEgdGVybWluYWwgKFJldHVybi9UaHJvdy9UaHJvd1JlZmVyZW5jZUVycm9yKS4g
Rm9yIG5vdywgd2UKKyAgICAgICAgLy8gdXNlIGEgZml4cG9pbnQgZm9ybXVsYXRpb24gc2luY2Ug
bGl2ZW5lc3MgaXMgYSByYXBpZCBhbmFseXNpcyB3aXRoCisgICAgICAgIC8vIGNvbnZlcmdlbmNl
IGd1YXJhbnRlZWQgYWZ0ZXIgTyhjb25uZWN0aXZpdHkpLgorICAgICAgICAKKyAgICAgICAgLy8g
U3RhcnQgYnkgYXNzdW1pbmcgdGhhdCBldmVyeXRoaW5nIGlzIGRlYWQuCisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9ja0luZGV4KTsKKyAgICAgICAg
fSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoQmxvY2tJbmRleCBibG9ja0luZGV4KQor
ICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQs
IGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKKyAgICAgICAgbV9saXZl
ID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gICAgbjogVXBzaWxvbigkcCwgQHgpCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
V2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFuZCB1c2VzIEB4LgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhpOgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vICAgIHA6IFBoaSgpCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Ugc2F5
IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVzZSBub3IgYSBkZWYuCisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2RlOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwgQGMuCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2Fz
ZSBVcHNpbG9uOiB7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+cGhpKCk7Cisg
ICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkpOworICAgICAgICAgICAgICAgIG1fbGl2
ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICAgICAgbV9saXZlLmFkZChub2RlLT5jaGlsZDEo
KS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAgICAgICAgICAgICBE
RkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRDaGlsZFVzZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgIGJs
b2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgYmxvY2stPnNz
YS0+bGl2ZUF0VGFpbC5hZGQobV9saXZlLmJlZ2luKCksIG1fbGl2ZS5lbmQoKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UmIGVkZ2UpCisgICAgeworICAg
ICAgICBhZGRDaGlsZFVzZShlZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRDaGlsZFVz
ZShFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgZWRnZS5zZXRLaWxsU3RhdHVzKG1fbGl2ZS5h
ZGQoZWRnZS5ub2RlKCkpLmlzTmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7CisgICAgSGFzaFNldDxOb2RlKj4gbV9saXZl
OworfTsKKworYm9vbCBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYgZ3JhcGgpCit7Cisg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBMaXZlbmVzcyBBbmFseXNpcyBQ
aGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxMaXZlbmVzc0FuYWx5c2lzUGhhc2U+KGdyYXBo
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisjZGVmaW5lIERGR0xpdmVuZXNz
QW5hbHlzaXNQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6
OnNzYS0+bGl2ZUF0SGVhZC9saXZlQXRUYWlsLgorCitib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5
c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1MjU4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MzgsNiArNTM4LDE3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc1Bo
aSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBVcHNpbG9uOworICAgIH0KKyAgICAK
KyAgICBOb2RlKiBwaGkoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1BoaSgpKTsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxOb2RlKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKICAg
ICBib29sIGhhc0lkZW50aWZpZXIoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CkBA
IC03NzMsMTYgKzc4NCwxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3BJbmZvMiA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9j
ayogdGFrZW5CbG9jaygpCisgICAgQmFzaWNCbG9jayomIHRha2VuQmxvY2soKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOwotICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbyk7CisgICAgICAgIHJldHVybiAqYml0d2lz
ZV9jYXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZvKTsKICAgICB9CiAgICAgCi0gICAgQmFzaWNC
bG9jayogbm90VGFrZW5CbG9jaygpCisgICAgQmFzaWNCbG9jayomIG5vdFRha2VuQmxvY2soKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwotICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbzIpOworICAgICAgICByZXR1cm4gKmJpdHdpc2Vf
Y2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbzIpOwogICAgIH0KICAgICAKICAgICBTd2l0Y2hE
YXRhKiBzd2l0Y2hEYXRhKCkKQEAgLTgwNSw3ICs4MTYsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCiAgICAgewog
ICAgICAgICBpZiAoaXNTd2l0Y2goKSkgewogICAgICAgICAgICAgaWYgKGluZGV4IDwgc3dpdGNo
RGF0YSgpLT5jYXNlcy5zaXplKCkpCkBAIC04MjAsMTEgKzgzMSwxMSBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgICAgICByZXR1cm4gbm90VGFrZW5CbG9jaygpOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHRha2VuQmxvY2soKTsKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JGb3JDb25kaXRpb24oYm9vbCBjb25k
aXRpb24pCisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvckZvckNvbmRpdGlvbihib29sIGNvbmRp
dGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKICAgICAgICAgcmV0dXJu
IGNvbmRpdGlvbiA/IHRha2VuQmxvY2soKSA6IG5vdFRha2VuQmxvY2soKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NjMsNiArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8o
TW92SGludCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oWm9tYmllSGludCwgTm9kZURv
ZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
IG1hY3JvKFVwc2lsb24sIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCiAg
ICAgbWFjcm8oUGhpLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikgXAogICAg
IG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAg
bWFjcm8oUGhhbnRvbUxvY2FsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIK
KyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitjbGFzcyBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1
YmxpYzoKKyAgICBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgOiBQaGFzZShncmFwaCwgIk9TUiBhdmFpbGFiaWxpdHkgYW5hbHlzaXMiKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+
IGRlcHRoRmlyc3Q7CisgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIo
ZGVwdGhGaXJzdCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGVwdGhGaXJzdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBkZXB0aEZpcnN0W2ldOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkLmZpbGwoMCk7CisgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWwu
ZmlsbCgwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gZGVwdGhGaXJzdFtpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2Ug
ZWRpdCBhdmFpbGFiaWxpdHlBdFRhaWwgaW4tcGxhY2UsIGJ1dCBmaXJzdCBpbml0aWFsaXplIGl0
IHRvCisgICAgICAgICAgICAvLyBhdmFpbGFiaWxpdHlBdEhlYWQuCisgICAgICAgICAgICBPcGVy
YW5kczxOb2RlKj4mIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFp
bDsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0
SGVhZDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgor
ICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICBjYXNlIE1vdkhp
bnRBbmRDaGVjazogeworICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaWxh
YmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSAwOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgai0tOykgeworICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioaik7CisgICAgICAgICAg
ICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBzdWNjZXNzb3JBdmFpbGFiaWxpdHkgPSBzdWNjZXNzb3It
PnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
ayA9IGF2YWlsYWJpbGl0eS5zaXplKCk7IGstLTspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogbXlOb2RlID0gYXZhaWxhYmlsaXR5W2tdOworICAgICAgICAgICAgICAgICAgICBpZiAoIW15
Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNv
bnRhaW5zKG15Tm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIG1h
eSBvdmVyd3JpdGUgYXZhaWxhYmlsaXR5IHdpdGggYSBib2d1cyBub2RlCisgICAgICAgICAgICAg
ICAgICAgIC8vIGF0IG1lcmdlIHBvaW50cy4gVGhpcyBpcyBmaW5lLCBzaW5jZSBtZXJnZSBwb2lu
dHMgaGF2ZQorICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50KFBoaSkncyB0byB3b3JrIGFy
b3VuZCB0aGlzLiBUaGUgb3V0Y29tZSBvZiB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgIC8v
IHlvdSBtaWdodCBoYXZlIGEgcHJvZ3JhbSBpbiB3aGljaCBhIG5vZGUgaGFwcGVucyB0byByZW1h
aW4KKyAgICAgICAgICAgICAgICAgICAgLy8gbGl2ZSBpbnRvIHNvbWUgYmxvY2sgQiwgYW5kIHNl
cGFyYXRlbHkgKGR1ZSB0byBjb3B5CisgICAgICAgICAgICAgICAgICAgIC8vIHByb3BhZ2F0aW9u
KSBqdXN0IG9uZSBvZiB0aGUgcHJlZGVjZXNzb3JzIG9mIEIgaXNzdWVkIGEKKyAgICAgICAgICAg
ICAgICAgICAgLy8gTW92SGludCBwdXR0aW5nIHRoYXQgbm9kZSBpbnRvIHNvbWUgbG9jYWwuIFRo
ZW4gaW4gQiB3ZSBtaWdodAorICAgICAgICAgICAgICAgICAgICAvLyB0aGluayB0aGF0IHRoYXQg
bm9kZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGxvY2FsLiBPZgorICAgICAgICAgICAgICAg
ICAgICAvLyBjb3Vyc2UgaWYgdGhhdCBsb2NhbCB3YXMgYWN0dWFsbHkgbGl2ZSBpbiBCLCBCIHdv
dWxkIGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAvLyBQaGkgZm9yIGl0LiBTbyBlc3NlbnRp
YWxseSB3ZSdsbCBoYXZlIE9TUiBleGl0IGRyb3BwaW5nIHRoaXMKKyAgICAgICAgICAgICAgICAg
ICAgLy8gbm9kZSdzIHZhbHVlIGludG8gdGhlIGxvY2FsIHdoZW4gd2Ugb3RoZXJ3aXNlIChpbiB0
aGUgREZHKQorICAgICAgICAgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIGRyb3BwZWQgdW5kZWZp
bmVkIGludG8gdGhlIGxvY2FsLiBUaGlzIHNlZW1zCisgICAgICAgICAgICAgICAgICAgIC8vIGhh
cm1sZXNzLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vz
c29yQXZhaWxhYmlsaXR5W2tdID0gbXlOb2RlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
fTsKKworYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgmIGdyYXBoKQor
eworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgT1NSIEF2YWlsYWJpbGl0
eSBBbmFseXNpcyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlX2gKKyNkZWZpbmUgREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNz
YS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgcmVsaWVzIG9uIGxpdmVuZXNzCisvLyBh
bmFseXNpcyBwaGFzZSBoYXZpbmcgYmVlbiBydW4gYW5kIHRoZSBncmFwaCBub3QgaGF2aW5nIGJl
ZW4gdHJhbnNmb3JtZWQKKy8vIGFmdGVyIHRoYXQuCisKK2Jvb2wgcGVyZm9ybU9TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
cmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE3IEBACiAjaW5jbHVkZSAiREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NTRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuaCIKKyNpbmNsdWRlICJERkdDcml0aWNhbEVkZ2VCcmVha2lu
Z1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRENFUGhhc2UuaCIKICNpbmNsdWRlICJERkdGYWlsZWRG
aW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgog
I2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgor
I2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgorI2luY2x1ZGUgIkRGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgor
I2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5j
bHVkZSAiREZHVmFsaWRhdGUuaCIKQEAgLTE4MywyMSArMTg4LDIxIEBAIFBsYW46OkNvbXBpbGF0
aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKIAogICAgIHBlcmZvcm1TdG9yZUVsaW1pbmF0aW9u
KGRmZyk7CiAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7Ci0gICAgCi0gICAgLy8gTm90
ZSB0aGF0IERDRSBpcyBuZWNlc3NhcnkgZXZlbiBpbiB0aGUgRlRMLCBiZWNhdXNlIG9ubHkgd2Ug
a25vdyB3aGF0IGlzCi0gICAgLy8gbGl2ZS1pbi1ieXRlY29kZS4gVGhlIEZUTCB1c2VzIHRoaXMg
aW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHdoZW4gT1NSIGV4aXQKLSAgICAvLyB2YWx1ZXMgc2hv
dWxkIGJlIHdpcmVkIHRvIExWYWx1ZXMsIHZlcnN1cyBiZWluZyB3aXJlZCB0byBFeGl0VmFsdWU6
OmRlYWQoKS4KLSAgICAvLyBUaGlzIGlzIGRpc3RpbmN0IGZyb20gd2hhdCBab21iaWVIaW50IGdp
dmVzIHVzOiBab21iaWVIaW50IHNheXMgdGhhdCB0aGUKLSAgICAvLyB2YWx1ZSBpbiB0aGUgZ2l2
ZW4gYnl0ZWNvZGUgbG9jYWwgaXMgYWx3YXlzIGRlYWQ7IHRoZSByZWZlcmVuY2UgY291bnRzIHRo
YXQKLSAgICAvLyBEQ0UgcHJvZHVjZXMgdGVsbCB1cyB0aGF0IHRoZSB2YWx1ZSBpcyBsaXZlIGZv
ciBhIHdoaWxlIGJ1dCBldmVudHVhbGx5Ci0gICAgLy8gZGllcywgYW5kIGl0IHRlbGxzIHVzIGV4
YWN0bHkgd2hlbiB0aGUgZGVhdGggcG9pbnQgaXMuCi0gICAgcGVyZm9ybURDRShkZmcpOwogCiAj
aWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUV4cGVyaW1lbnRhbEZUTCgp
CiAgICAgICAgICYmIGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgogICAgICAgICAmJiBG
VEw6OmNhbkNvbXBpbGUoZGZnKSkgewogICAgICAgICAKKyAgICAgICAgcGVyZm9ybUNyaXRpY2Fs
RWRnZUJyZWFraW5nKGRmZyk7CisgICAgICAgIHBlcmZvcm1TU0FDb252ZXJzaW9uKGRmZyk7Cisg
ICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1DRkEo
ZGZnKTsKKyAgICAgICAgcGVyZm9ybURDRShkZmcpOyAvLyBXZSByZWx5IG9uIHRoaXMgdG8gY29u
dmVydCBkZWFkIFNldExvY2FscyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBoaW50LCBhbmQgdG8ga2ls
bCBkZWFkIGNvZGUgdGhhdCB3b24ndCBiZSByZWNvZ25pemVkIGFzIGRlYWQgYnkgTExWTS4KKyAg
ICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKKyAgICAgICAgcGVyZm9ybUZsdXNo
TGl2ZW5lc3NBbmFseXNpcyhkZmcpOworICAgICAgICBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXMoZGZnKTsKKyAgICAgICAgCiAgICAgICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJH
cmFwaCBqdXN0IGJlZm9yZSBGVEwgbG93ZXJpbmc6Iik7CiAgICAgICAgIAogICAgICAgICAvLyBG
SVhNRTogU3VwcG9ydCBPU1IgZW50cnkuCkBAIC0yMTUsNiArMjIwLDcgQEAgUGxhbjo6Q29tcGls
YXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKICAgICAKKyAgICBwZXJmb3JtRENFKGRmZyk7CiAgICAgcGVyZm9ybVZpcnR1YWxSZWdp
c3RlckFsbG9jYXRpb24oZGZnKTsKICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGgg
YWZ0ZXIgb3B0aW1pemF0aW9uOiIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MiwxNCArNDcyLDE5IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDogewogICAgICAgICAgICAgLy8gVGhp
cyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRp
b24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xs
b3dzIHRoaXMgcGhhc2UuCi0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgICAgIC8vIFBoaXMgc2hvdWxkIG5v
dCBiZSB2aXNpYmxlIGhlcmUgc2luY2Ugd2UncmUgaXRlcmF0aW5nIHRoZSBhbGwtYnV0LVBoaSdz
CiAgICAgICAgICAgICAvLyBwYXJ0IG9mIGJhc2ljIGJsb2Nrcy4KLSAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVcHNpbG9uOgorICAgICAgICAg
ICAgLy8gVGhlc2UgZG9uJ3QgZ2V0IGluc2VydGVkIHVudGlsIHdlIGdvIGludG8gU1NBLgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgR2V0U2NvcGU6CkBAIC01NDAsNyArNTQ1LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTGFzdE5vZGVU
eXBlOgotICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzczIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNs
dWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUg
IkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFNTQUNvbnZlcnNpb25QaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CitwdWJsaWM6CisgICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAg
ICAgOiBQaGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikKKyAgICAgICAgLCBtX2luc2VydGlv
blNldChncmFwaCkKKyAgICAgICAgLCBtX2NoYW5nZWQoZmFsc2UpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBo
Lm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0
IHdoaWNoIFNldExvY2FsJ3MgbmVlZCBmbHVzaGluZy4gTmVlZCB0byBkbyB0aGlzIHdoaWxlIHRo
ZQorICAgICAgICAvLyBQaGkgZ3JhcGggaXMgc3RpbGwgaW50YWN0LgorICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5v
ZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGbHVzaCkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYWRkRmx1c2hlZExvY2Fs
T3Aobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKCFtX2Zs
dXNoZWRMb2NhbE9wV29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBBU1NF
UlQobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpOworICAgICAgICAgICAgREZHX05P
REVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkRmx1c2hlZExvY2FsRWRnZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEVsaW1pbmF0ZSBhbGwgZHVwbGljYXRlIG9y
IHNlbGYtcG9pbnRpbmcgUGhpIGVkZ2VzLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgLy8gd2Ug
dHJhbnNmb3JtOgorICAgICAgICAvLworICAgICAgICAvLyBwOiBQaGkoQG4xLCBAbjIsIEBuMykK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gaW50bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gcDog
UGhpKEB4KQorICAgICAgICAvLworICAgICAgICAvLyBpZiBlYWNoIEBuaSBpbiB7QG4xLCBAbjIs
IEBuM30gaXMgZWl0aGVyIGVxdWFsIHRvIEBwIHRvIGlzIGVxdWFsCisgICAgICAgIC8vIHRvIEB4
LCBmb3IgZXhhY3RseSBvbmUgb3RoZXIgQHguIEFkZGl0aW9uYWxseSwgdHJpdmlhbCBQaGlzIChp
LmUuCisgICAgICAgIC8vIHA6IFBoaShAeCkpIGFyZSBmb3J3YXJkZWQsIHNvIHRoYXQgaWYgaGF2
ZSBhbiBlZGdlIHRvIHN1Y2ggQHAsIHdlCisgICAgICAgIC8vIHJlcGxhY2UgaXQgd2l0aCBAeC4g
VGhpcyBsb29wIGRvZXMgdGhpcyBmb3IgUGhpcyBvbmx5OyBsYXRlciB3ZSBkbworICAgICAgICAv
LyBzdWNoIGZvcndhcmRpbmcgZm9yIFBoaSByZWZlcmVuY2VzIGZvdW5kIGluIG90aGVyIG5vZGVz
LgorICAgICAgICAvLworICAgICAgICAvLyBTZWUgQXljb2NrIGFuZCBIb3JzcG9vbCBpbiBDQycw
MCBmb3IgYSBiZXR0ZXIgZGVzY3JpcHRpb24gb2Ygd2hhdAorICAgICAgICAvLyB3ZSdyZSBkb2lu
ZyBoZXJlLgorICAgICAgICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yd2FyZFBoaUNoaWxkcmVuKHBoaSk7CisgICAgICAgICAgICAgICAgICAgIGRlZHVwbGljYXRl
Q2hpbGRyZW4ocGhpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBGb3IgZWFjaCBiYXNp
YyBibG9jaywgZm9yIGVhY2ggbG9jYWwgbGl2ZSBhdCB0aGUgaGVhZCBvZiB0aGF0IGJsb2NrLAor
ICAgICAgICAvLyBmaWd1cmUgb3V0IHdoYXQgbm9kZSB3ZSBzaG91bGQgYmUgcmVmZXJyaW5nIHRv
IGluc3RlYWQgb2YgdGhhdCBsb2NhbC4KKyAgICAgICAgLy8gSWYgaXQgdHVybnMgb3V0IHRvIGJl
IGEgbm9uLXRyaXZpYWwgUGhpLCBtYWtlIHN1cmUgdGhhdCB0byBjcmVhdGUgYW4KKyAgICAgICAg
Ly8gU1NBIFBoaSBhbmQgVXBzaWxvbnMgaW4gcHJlZGVjZXNzb3IgYmxvY2tzLiBXZSByZXVzZQor
ICAgICAgICAvLyBCYXNpY0Jsb2NrOjp2YXJpYWJsZXNBdEhlYWQgZm9yIHRyYWNraW5nIHdoaWNo
IG5vZGVzIHRvIHJlZmVyIHRvLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhl
YWRbaV07CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gUG9pc29uIHRoaXMgZW50cnkgaW4gdmFyaWFibGVzQXRIZWFkIGJlY2F1c2Ugd2UgZG9uJ3QK
KyAgICAgICAgICAgICAgICAgICAgLy8gd2FudCBhbnlvbmUgdG8gdHJ5IHRvIHJlZmVyIHRvIGl0
LCBpZiB0aGUgdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gY2FwdHVyZWQuCisg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSAwOworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAg
ICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgorICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGkgfHwgbm9kZS0+
b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9
IG5vZGUtPmNoaWxkcmVuLmp1c3RPbmVDaGlsZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
ZWRnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlZGdlLm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGEg
bm9uLXRyaXZpYWwgUGhpLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBzZXQgdGhlIFBoaSdzIHR5cGUgKGkuZS4gTm9kZVJlc3VsdE1hc2spIHRvCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyByZWZsZWN0IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEncyB1bmJv
eGluZy4gVGhpcyB3aWxsIG1ha2UgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhc2ll
ciBmb3IgdGhlIGJhY2tlbmQgdG8gZmlndXJlIG91dCB3aGljaCB2YWx1ZSB0byB1c2UgZm9yCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBVcHNpbG9ucywgYW5kIHdoYXQgdHlwZSB0byB1c2Ug
Zm9yIHRoZSBQaGkgaXRzZWxmLgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlRmxhZ3MgcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5vZGVSZXN1bHROdW1iZXI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRB
d2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
SW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IE5vZGVSZXN1bHRJbnQzMjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBOb2RlUmVzdWx0Qm9v
bGVhbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTm9kZVJlc3VsdEpTOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5vZGVSZXN1bHRKUzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIFBoaSwgbm9kZS0+Y29kZU9yaWdpbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoKG5vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykg
PT0gcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTsp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9
IGJsb2NrLT5wcmVkZWNlc3NvcnNbal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
ZGVjZXNzb3ItPmFwcGVuZE5vblRlcm1pbmFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgVXBzaWxvbiwgYmxvY2stPmxhc3QoKS0+Y29kZU9yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUpLCBFZGdlKHBy
ZWRlY2Vzc29yLT52YXJpYWJsZXNBdFRhaWxbaV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBT
cGVjTm9uZSwgTW92SGludCwgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gbm9kZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIENvbnZlcnQgb3BlcmF0aW9ucyBvdmVyIGxvY2FscyBpbnRvIG9wZXJh
dGlvbnMgb3ZlciBTU0Egbm9kZXMuCisgICAgICAgIC8vIC0gR2V0TG9jYWwgb3ZlciBjYXB0dXJl
ZCB2YXJpYWJsZXMgbG9zZSB0aGVpciBwaGlzLgorICAgICAgICAvLyAtIEdldExvY2FsIG92ZXIg
dW5jYXB0dXJlZCB2YXJpYWJsZXMgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2Vz
CisgICAgICAgIC8vICAgdG8gdGhlIG5vZGUgc3BlY2lmaWVkIGJ5IHZhcmlhYmxlc0F0SGVhZC4K
KyAgICAgICAgLy8gLSBTZXRMb2NhbCBnZXRzIE5vZGVNdXN0R2VuZXJhdGUgaWYgaXQncyBmbHVz
aGVkLCBvciB0dXJucyBpbnRvIGEKKyAgICAgICAgLy8gICBNb3ZIaW50IG90aGVyd2lzZS4KKyAg
ICAgICAgLy8gLSBGbHVzaCBsb3NlcyBpdHMgY2hpbGRyZW4gYnV0IHJlbWFpbnMsIGJlY2F1c2Ug
d2Ugd2FudCB0byBrbm93IHdoZW4gYQorICAgICAgICAvLyAgIGZsdXNoZWQgU2V0TG9jYWwncyB2
YWx1ZSBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGlzIGFsc28gbWFrZXMgaXQgc2ltcGxlcgorICAg
ICAgICAvLyAgIHRvIHJlYXNvbiBhYm91dCB0aGUgZm9ybWF0IG9mIGEgbG9jYWwsIHNpbmNlIHdl
IGNhbiBqdXN0IGZvbGQgaXQgaW50byB0aGUKKyAgICAgICAgLy8gICBiYWNrd2FyZHMgYW5hbHlz
aXMgdGhhdCBMaXZlbmVzc0FuYWx5c2lzUGhhc2UgZG9lcy4gQXMgcGFydCBvZiB0aGUKKyAgICAg
ICAgLy8gICBiYWNrd2FyZHMgYW5hbHlzaXMsIHdlIHNheSB0aGF0IHRoZSB0eXBlIG9mIGEgbG9j
YWwgY2FuIGJlIGVpdGhlcgorICAgICAgICAvLyAgIGludDMyLCBkb3VibGUsIHZhbHVlLCBvciBk
ZWFkLgorICAgICAgICAvLyAtIFBoYW50b21Mb2NhbCBiZWNvbWVzIFBoYW50b20sIGFuZCBpdHMg
Y2hpbGQgaXMgd2hhdGV2ZXIgaXMgc3BlY2lmaWVkCisgICAgICAgIC8vICAgYnkgdmFyaWFibGVz
QXRIZWFkLgorICAgICAgICAvLyAtIFNldEFyZ3VtZW50IHR1cm5zIGludG8gR2V0TG9jYWwuCisg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsg
YmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgICAgICAgICAg
YmxvY2stPmF0KG5vZGVJbmRleCktPnJlcGxhY2VtZW50ID0gMDsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+
c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRM
b2NhbDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2
YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUp
KQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTXVzdEdlbmVy
YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNhc2UgRmx1c2g6IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogeworICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXND
YXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldE5vZGUoYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZl
cnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3Vt
ZW50OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdl
dExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBGcmVlIGFsbCBwaGlzIGFuZCByZXNldCB2YXJpYWJsZXMgdmVjdG9ycy4KKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9j
a0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5w
aGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9j
YXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgICAgICBibG9jay0+cGhp
cy5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5jbGVhcigpOwor
ICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5jbGVhcigpOworICAgICAgICAgICAg
YmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0
SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnNzYSA9IGFkb3B0UHRyKG5ldyBCYXNp
Y0Jsb2NrOjpTU0FEYXRhKGJsb2NrKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1f
Z3JhcGgubV9mb3JtID0gU1NBOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdm9pZCBmb3J3YXJkUGhpQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsK
KyAgICAgICAgICAgIEVkZ2UmIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAg
ICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IG1fY2hhbmdlZCB8PSBmb3J3YXJkUGhpRWRnZShlZGdlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBOb2RlKiBmb3J3YXJkUGhpKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3Ig
KDs7KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgUGhpOiB7CisgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVz
dE9uZUNoaWxkKCk7CisgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWRnZS5ub2RlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgY2Fz
ZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBmb3J3YXJkUGhpRWRnZShFZGdlJiBlZGdlKQor
ICAgIHsKKyAgICAgICAgTm9kZSogbmV3Tm9kZSA9IGZvcndhcmRQaGkoZWRnZS5ub2RlKCkpOwor
ICAgICAgICBpZiAobmV3Tm9kZSA9PSBlZGdlLm5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWR1cGxpY2F0ZUNoaWxkcmVuKE5vZGUqIG5vZGUp
CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6
U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGls
ZChpKTsKKyAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmIChlZGdlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZHJlbi5yZW1vdmVFZGdlKGktLSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytqKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGopID09IGVkZ2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShqLS0pOworICAgICAg
ICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2Nh
bE9wKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29u
dGFpbnMobm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fZmx1c2hlZExvY2Fs
T3BzLmFkZChub2RlKTsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmFwcGVuZChu
b2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbEVkZ2UoTm9kZSosIEVkZ2Ug
ZWRnZSkKKyAgICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKGVkZ2Uubm9kZSgpKTsKKyAg
ICB9CisKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAgSGFzaFNldDxOb2Rl
Kj4gbV9mbHVzaGVkTG9jYWxPcHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9w
V29ya2xpc3Q7CisgICAgYm9vbCBtX2NoYW5nZWQ7Cit9OworCitib29sIHBlcmZvcm1TU0FDb252
ZXJzaW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lv
bigiREZHIFNTQSBDb252ZXJzaW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFNTQUNv
bnZlcnNpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisjZGVmaW5lIERG
R1NTQUNvbnZlcnNpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIEdyYXBoOworCisvLyBDb252ZXJ0IFRocmVhZGVkQ1BTIGZvcm0gaW50byBTU0EgZm9ybS4g
VGhpcyByZXN1bHRzIGluIGEgZm9ybSB0aGF0IGhhczoKKy8vCisvLyAtIFJvdWdobHkgbWluaW1h
bCBQaGkncy4gV2UgdXNlIHRoZSBBeWNvY2sgJiBIb3JzcG9vbCBmaXhwb2ludCBmb3IKKy8vICAg
Y29udmVydGluZyB0aGUgQ1BTIG1heGltYWwgUGhpcyBpbnRvIFNTQSBtaW5pbWFsIFBoaXMsIHdp
dGggdGhlIGNhdmVhdAorLy8gICB0aGF0IGlycmVkdWNpYmxlIGNvbnRyb2wgZmxvdyBtYXkgcmVz
dWx0IGluIHNvbWUgbWlzc2VkIG9wcG9ydHVuaXRpZXMKKy8vICAgZm9yIFBoaSByZWR1Y3Rpb24u
CisvLworLy8gLSBObyB1c2VzIG9mIEdldExvY2FsL1NldExvY2FsIGV4Y2VwdCBmb3IgY2FwdHVy
ZWQgdmFyaWFibGVzIGFuZCBmbHVzaGVzLgorLy8gICBBZnRlciB0aGlzLCBhbnkgcmVtYWluaW5n
IFNldExvY2FsIG1lYW5zIEZsdXNoLiBGbHVzaCBub2RlcyBhcmUKKy8vICAgZWxpbWluYXRlZC4g
UGhhbnRvbUxvY2FscyBiZWNvbWUgUGhhbnRvbXMuIE5vZGVzIG1heSBtYXkgaGF2ZSBjaGlsZHJl
bgorLy8gICB0aGF0IGFyZSBpbiBhbm90aGVyIGJhc2ljIGJsb2NrLgorLy8KKy8vIC0gTW92SGlu
dHMgYXJlIHVzZWQgZm9yIE9TUiBpbmZvcm1hdGlvbiwgYW5kIGFyZSB0aGVtc2VsdmVzIG1pbmlt
YWwuCisvLyAgIEEgTW92SGludCB3aWxsIG9jY3VyIGF0IHNvbWUgcG9pbnQgYWZ0ZXIgdGhlIGFz
c2lnbmluZywgYW5kIGF0IFBoaQorLy8gICBwb2ludHMuCisvLworLy8gLSBVbmxpa2UgY29udmVu
dGlvbmFsIFNTQSBpbiB3aGljaCBQaGkgZnVuY3Rpb25zIHJlZmVyIHRvIHByZWRlY2Vzc29ycwor
Ly8gICBhbmQgdmFsdWVzLCBvdXIgU1NBIHVzZXMgVXBzaWxvbiBmdW5jdGlvbnMgdG8gaW5kaWNh
dGUgdmFsdWVzIGluCisvLyAgIHByZWRlY2Vzc29ycy4gQSBtZXJnZSB3aWxsIGxvb2sgbGlrZToK
Ky8vCisvLyAgIGxhYmVsQToKKy8vICAgICAgIGE6IFRoaW5neSguLi4pCisvLyAgICAgICBiOiBV
cHNpbG9uKF5lLCBAYSkKKy8vICAgICAgIEp1bXAobGFiZWxDKQorLy8KKy8vICAgbGFiZWxCOgor
Ly8gICAgICAgYzogT3RoZXJUaGluZ3koLi4uKQorLy8gICAgICAgZDogVXBzaWxvbiheZSwgQGMp
CisvLyAgICAgICBKdW1wKGxhYmVsQykKKy8vCisvLyAgIGxhYmVsQzoKKy8vICAgICAgIGU6IFBo
aSgpCisvLworLy8gICBOb3RlIHRoYXQgdGhlIFBoaSBoYXMgbm8gY2hpbGRyZW4sIGJ1dCB0aGUg
cHJlZGVjZXNzb3JzIGhhdmUgVXBzaWxvbnMKKy8vICAgdGhhdCBoYXZlIGEgd2VhayByZWZlcmVu
Y2UgdG8gdGhlIFBoaSAoXmUgaW5zdGVhZCBvZiBAZTsgd2Ugc3RvcmUgaXQKKy8vICAgaW4gdGhl
IE9wSW5mbyByYXRoZXIgdGhhbiB0aGUgQWRqYWNlbmN5TGlzdCkuIFRoaW5rIG9mIHRoZSBVcHNp
bG9uCisvLyAgIGFzICJhc3NpZ25pbmciIHRvIHRoZSAidmFyaWFibGUiIGFzc29jaWF0ZWQgd2l0
aCB0aGUgUGhpLCBhbmQgdGhhdAorLy8gICB0aGlzIGlzIHRoZSBvbmUgcGxhY2UgaW4gU1NBIGZv
cm0gd2hlcmUgeW91IGNhbiBoYXZlIG11bHRpcGxlCisvLyAgIGFzc2lnbm1lbnRzLgorLy8KKy8v
ICAgVGhpcyBpbXBsaWVzIHNvbWUgb3RoZXIgbG9vc2VuaW5ncyBvZiBTU0EuIEZvciBleGFtcGxl
LCBhbiBVcHNpbG9uCisvLyAgIG1heSBwcmVjZWRlIGEgUGhpIGluIHRoZSBzYW1lIGJhc2ljIGJs
b2NrOyB0aGlzIG1heSBhcmlzZSBhZnRlciBDRkcKKy8vICAgc2ltcGxpZmljYXRpb24uIEFsdGhv
dWdoIGl0J3MgcHJvZml0YWJsZSBmb3IgQ0ZHIHNpbXBsaWZpY2F0aW9uIChvcgorLy8gICBzb21l
IG90aGVyIHBoYXNlKSB0byByZW1vdmUgdGhlc2UsIGl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2Fy
eS4gQXMKKy8vICAgd2VsbCwgdGhpcyBmb3JtIGFsbG93cyB0aGUgVXBzaWxvbiB0byBiZSBpbiBh
bnkgYmxvY2sgdGhhdCBkb21pbmF0ZXMKKy8vICAgdGhlIHByZWRlY2Vzc29yIGJsb2NrIG9mIHRo
ZSBQaGksIHdoaWNoIGFsbG93cyBmb3IgYmxvY2sgc3BsaXR0aW5nIHRvCisvLyAgIGlnbm9yZSB0
aGUgcG9zc2liaWxpdHkgb2YgaW50cm9kdWNpbmcgYW4gZXh0cmEgZWRnZSBiZXR3ZWVuIHRoZSBQ
aGkKKy8vICAgYW5kIHRoZSBwcmVkZWNlc3NvciAodGhvdWdoIG5vcm1hbCBTU0Egd291bGQgYWxs
b3cgdGhpcywgYWxzbywgd2l0aAorLy8gICB0aGUgY2F2ZWF0IHRoYXQgdGhlIFBoaSBwcmVkZWNl
c3NvciBibG9jayBsaXN0cyB3b3VsZCBoYXZlIHRvIGJlCisvLyAgIHVwZGF0ZWQpLgorLy8KKy8v
ICAgVGhlIGVhc2llc3Qgd2F5IHRvIGNvbnZlcnQgZnJvbSB0aGlzIFNTQSBmb3JtIGludG8gYSBk
aWZmZXJlbnQgU1NBCisvLyAgIGZvcm0gaXMgdG8gcmVkbyBTU0EgY29udmVyc2lvbiBmb3IgUGhp
IGZ1bmN0aW9ucy4gVGhhdCBpcywgdHJlYXQgZWFjaAorLy8gICBQaGkgaW4gb3VyIElSIGFzIGEg
bm9uLVNTQSB2YXJpYWJsZSBpbiB0aGUgZm9yZWlnbiBJUiAoc28sIGFzIGFuCisvLyAgIGFsbG9j
YSBpbiBMTFZNIElSLCBmb3IgZXhhbXBsZSk7IHRoZSBVcHNpbG9ucyB0aGF0IHJlZmVyIHRvIHRo
ZSBQaGkKKy8vICAgYmVjb21lIHN0b3JlcyBhbmQgdGhlIFBoaXMgdGhlbXNlbHZlcyBiZWNvbWUg
bG9hZHMuCisvLworLy8gICBGdW4gZmFjdDogVXBzaWxvbiBpcyBzbyBuYW1lZCBiZWNhdXNlIGl0
IGNvbWVzIGJlZm9yZSBQaGkgaW4gdGhlCisvLyAgIGFscGhhYmV0LiBJdCBjYW4gYmUgd3JpdHRl
biBhcyAiWSIuCisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNpb24oR3JhcGgmKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1
MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOTUsNyArNDM5NSw2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
Y2FzZSBQaGk6CiAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgYnJlYWs7CiAKQEAgLTQ4MjksNiAr
NDgyOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICBjYXNlIFBoaToKKyAgICBj
YXNlIFVwc2lsb246CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDI5Niw3ICs0Mjk2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgIH0KIAogICAgIGNhc2UgRmx1c2g6Ci0gICAgY2FzZSBQaGk6CiAgICAgICAgIGJy
ZWFrOwogCiAgICAgY2FzZSBCcmVha3BvaW50OgpAQCAtNDY5MCw2ICs0Njg5LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CisgICAgY2FzZSBQaGk6CisgICAgY2FzZSBVcHNp
bG9uOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVh
azsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNw
cAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDIyICs4MSwyMSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBWX0VRVUFMKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAwKSwgc3Rh
dGljX2Nhc3Q8Tm9kZSo+KDApLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkpOwogICAg
ICAgICAKICAgICAgICAgLy8gVmFsaWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4KLSAgICAgICAg
SGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG15UmVmQ291bnRzOwogICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1Jl
YWNoYWJsZSkKKyAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBWQUxJREFURSgoYmxvY2spLCBibG9jay0+aXNSZWFjaGFibGUpOwog
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytp
KQotICAgICAgICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShpKSwgMCk7Cisg
ICAgICAgICAgICAgICAgbV9teVJlZkNvdW50cy5hZGQoYmxvY2stPm5vZGUoaSksIDApOwogICAg
ICAgICB9Ci0gICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGFjY2VwdGFibGVOb2RlczsKICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrIHx8ICFi
bG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
bnVtTm9kZXMoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5u
b2RlKGkpOwotICAgICAgICAgICAgICAgIGFjY2VwdGFibGVOb2Rlcy5hZGQobm9kZSk7CisgICAg
ICAgICAgICAgICAgbV9hY2NlcHRhYmxlTm9kZXMuYWRkKG5vZGUpOwogICAgICAgICAgICAgICAg
IGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVt
Q2hpbGRyZW4obm9kZSk7ICsraikgewpAQCAtMTA4LDcgKzEwNywxMyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbXlSZWZDb3Vu
dHMuZmluZChlZGdlLm5vZGUoKSktPnZhbHVlKys7CisgICAgICAgICAgICAgICAgICAgIG1fbXlS
ZWZDb3VudHMuZmluZChlZGdlLm5vZGUoKSktPnZhbHVlKys7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJbiBTU0EsIGFsbCBlZGdlcyBtdXN0IGhhc1Jlc3VsdCgp
LgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5o
YXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFudG9tLCBHZXRMb2NhbCwgb3IgUGhpLCBteSBjaGls
ZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewpAQCAtMTQ4LDYgKzE1Myw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTQToKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CkBAIC0xNTcsOSArMTY1LDQ0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsr
YmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51
bU5vZGVzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bm9k
ZShpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhh
Y3RSZWZDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG1fbXlSZWZD
b3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5vZGUtPnJlZkNv
dW50KCksIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBz
d2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7CisgICAgICAgIGNhc2UgTG9hZFN0b3JlOgorICAgICAg
ICBjYXNlIFRocmVhZGVkQ1BTOgorICAgICAgICAgICAgdmFsaWRhdGVDUFMoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU1NBOgorICAgICAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBTU0EgdmVyaWZpY2F0aW9uLgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOwor
ICAgIEdyYXBoRHVtcE1vZGUgbV9ncmFwaER1bXBNb2RlOworICAgIAorICAgIEhhc2hNYXA8Tm9k
ZSosIHVuc2lnbmVkPiBtX215UmVmQ291bnRzOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fYWNjZXB0
YWJsZU5vZGVzOworICAgIAorICAgIHZvaWQgdmFsaWRhdGVDUFMoKQorICAgIHsKICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrIHx8ICFi
bG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBw
aGlzSW5UaGlzQmxvY2s7CkBAIC0xNzAsMTUgKzIxMywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgbm9kZXNJblRoaXNCbG9jay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKGJs
b2NrLT5pc1BoaUluZGV4KGkpKQogICAgICAgICAgICAgICAgICAgICBwaGlzSW5UaGlzQmxvY2su
YWRkKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcmVmQ291bnRTdGF0ZSA9
PSBFeGFjdFJlZkNvdW50KQotICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbXlS
ZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5vZGUtPnJl
ZkNvdW50KCksIDEpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBt
X2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRn
ZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVzLmNvbnRhaW5zKGVk
Z2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwg
bV9hY2NlcHRhYmxlTm9kZXMuY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIyOCw3ICsyNjcsNiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+
cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBwcmV2QmxvY2sgPSBibG9jay0+cHJlZGVjZXNzb3JzW2tdOwogICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2sp
OwotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNb
a10pLCBwcmV2QmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90
IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFibGUuCkBAIC0z
MjEsNyArMzU5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBHZXRMb2NhbCdzIHRoYXQgd2Uga25vdyB0byBi
ZSBkZWFkLCBidXQgdGhhdCB0aGUgZ3JhcGgKICAgICAgICAgICAgICAgICAgICAgLy8gZG9lc24n
dCB5ZXQga25vdyB0byBiZSBkZWFkLgotICAgICAgICAgICAgICAgICAgICBpZiAoIW15UmVmQ291
bnRzLmdldChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX215UmVmQ291bnRzLmdl
dChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CkBAIC0zNTUsMTAgKzM5Myw2IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogICAgIH0KICAgICAKLXByaXZhdGU6Ci0gICAgR3JhcGgmIG1fZ3JhcGg7Ci0g
ICAgR3JhcGhEdW1wTW9kZSBtX2dyYXBoRHVtcE1vZGU7Ci0gICAgCiAgICAgdm9pZCBjaGVja09w
ZXJhbmQoCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrLCBPcGVyYW5kczxzaXplX3Q+JiBnZXRM
b2NhbFBvc2l0aW9ucywKICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiYgc2V0TG9jYWxQb3NpdGlv
bnMsIGludCBvcGVyYW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCiAKICNpbmNs
dWRlICJERkdEb3VibGVGb3JtYXRTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0ZsdXNoRm9ybWF0Lmgi
CiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNs
dWRlICJTcGVjdWxhdGVkVHlwZS5oIgpAQCAtMzE4LDYgKzMxOSwyOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBjaGVja0FuZFNldChtX2ZsYWdzLCBtX2ZsYWdzIHwgbmV3RmxhZ3MpOwogICAg
IH0KICAgICAKKyAgICBGbHVzaEZvcm1hdCBmbHVzaEZvcm1hdCgpCisgICAgeworICAgICAgICBB
U1NFUlQoZmluZCgpID09IHRoaXMpOworICAgICAgICAKKyAgICAgICAgaWYgKCFzaG91bGRVbmJv
eElmUG9zc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkSlNWYWx1ZTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChzaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBGbHVzaGVkRG91YmxlOworICAgICAgICAKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiA9IGFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CisgICAgICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gRmx1c2hlZEludDMy
OworICAgICAgICAKKyAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQor
ICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRDZWxsOworICAgICAgICAKKyAgICAgICAgaWYgKGlz
Qm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNo
ZWRCb29sZWFuOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIEZsdXNoZWRKU1ZhbHVlOworICAg
IH0KKyAgICAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyBzbGlnaHRseSBzcGFjZS1pbmVmZmlj
aWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRoCiAgICAgLy8gd2lsbCBoYXZl
IHRoZSBzYW1lIG9wZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRoZSBzYW1lIHByZWRpY3Rpb24uIEJ1
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIGlubGluZSBib29s
IGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBGb3JjZU9T
UkV4aXQ6CiAgICAgY2FzZSBGb3J3YXJkRm9yY2VPU1JFeGl0OgorICAgIGNhc2UgUGhpOgorICAg
IGNhc2UgVXBzaWxvbjoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAtMTc0LDYgKzE3Niw4IEBAIGlubGluZSBib29s
IGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKIAogYm9vbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkK
IHsKKyAgICBSRUxFQVNFX0FTU0VSVChncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAKICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CiAgICAgICAgIGlmICghYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmgi
CiAjaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0
dGVkVmFsdWUuaCIKKyNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCiAjaW5jbHVkZSAi
RlRMT3V0cHV0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiRlRMVmFsdWVT
b3VyY2UuaCIKQEAgLTYxLDEwICs2Miw2IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Z0bFN0YXRl
KHN0YXRlKQogICAgICAgICAsIG1faGVhcHMoc3RhdGUuY29udGV4dCkKICAgICAgICAgLCBtX291
dChzdGF0ZS5jb250ZXh0KQotICAgICAgICAsIG1fbG9jYWxzQm9vbGVhbihPcGVyYW5kc0xpa2Us
IHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwgbV9sb2Nh
bHMzMihPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQp
Ci0gICAgICAgICwgbV9sb2NhbHM2NChPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDAp
LT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwgbV9sb2NhbHNEb3VibGUoT3BlcmFuZHNMaWtl
LCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fdmFs
dWVTb3VyY2VzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0
SGVhZCkKICAgICAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCkpCiAgICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCkBAIC03NCw2
ICs3MSw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGxvd2VyKCkKICAgICB7CisgICAgICAg
IG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAg
ICAgCiAgICAgICAgIG1fZnRsU3RhdGUubW9kdWxlID0KICAgICAgICAgICAgIExMVk1Nb2R1bGVD
cmVhdGVXaXRoTmFtZUluQ29udGV4dCgianNCb2R5IiwgbV9mdGxTdGF0ZS5jb250ZXh0KTsKICAg
ICAgICAgCkBAIC04NSwxMiArODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX3By
b2xvZ3VlID0gYXBwZW5kQmFzaWNCbG9jayhtX2Z0bFN0YXRlLmNvbnRleHQsIG1fZnRsU3RhdGUu
ZnVuY3Rpb24pOwogICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IG1fbG9jYWxzQm9vbGVhbi5zaXplKCk7IGluZGV4LS07KSB7
Ci0gICAgICAgICAgICBtX2xvY2Fsc0Jvb2xlYW5baW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQu
bV9idWlsZGVyLCBtX291dC5ib29sZWFuKTsKLSAgICAgICAgICAgIG1fbG9jYWxzMzJbaW5kZXhd
ID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291dC5pbnQzMik7Ci0gICAgICAgICAg
ICBtX2xvY2FsczY0W2luZGV4XSA9IGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgbV9vdXQu
aW50NjQpOwotICAgICAgICAgICAgbV9sb2NhbHNEb3VibGVbaW5kZXhdID0gYnVpbGRBbGxvY2Eo
bV9vdXQubV9idWlsZGVyLCBtX291dC5kb3VibGVUeXBlKTsKLSAgICAgICAgfQorICAgICAgICBj
cmVhdGVQaGlWYXJpYWJsZXMoKTsKICAgICAgICAgCiAgICAgICAgIG1faW5pdGlhbGl6YXRpb24g
PSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuY29udGV4dCwgbV9mdGxTdGF0ZS5mdW5jdGlv
bik7CiAgICAgICAgIG1fYXJndW1lbnRDaGVja3MgPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3Rh
dGUuY29udGV4dCwgbV9mdGxTdGF0ZS5mdW5jdGlvbik7CkBAIC0xMDQsMTkgKzk4LDE4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBtX2Jsb2Nrcy5hZGQobV9oaWdoQmxvY2ssIEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQmxvY2sgIiwgKm1faGlnaEJsb2NrKSkpOwotICAgICAgICAgICAgYWRkRmx1
c2hlZExvY2FsT3BSb290cygpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjbG9zZU92
ZXJGbHVzaGVkTG9jYWxPcHMoKTsKLSAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1f
YXJndW1lbnRDaGVja3MsIGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsKIAotICAgICAgICB0
cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKCk7CisgICAgICAgIGNoZWNrQXJndW1lbnRzKCk7CiAg
ICAgICAgIAogICAgICAgICBtX291dC5qdW1wKGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsK
ICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkKLSAgICAgICAgICAgIGNv
bXBpbGVCbG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0
aEZpcnN0OworICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRo
Rmlyc3QpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIGNvbXBpbGVCbG9jayhkZXB0aEZpcnN0W2ldKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIEFuZCBub3cgY29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIGJsb2Nr
LgogICAgICAgICBsaW5rT1NSRXhpdHNBbmRDb21wbGV0ZUluaXRpYWxpemF0aW9uQmxvY2tzKCk7
CkBAIC0xMjksNDEgKzEyMiw0MCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgCi0gICAgdm9p
ZCBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCkKKyAgICB2b2lkIGNyZWF0ZVBoaVZhcmlhYmxlcygp
CiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IG1faGlnaEJsb2NrLT5z
aXplKCk7IG5vZGVJbmRleC0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJs
b2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gRmx1c2gp
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKG5vZGUpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xvc2VPdmVyRmx1c2hlZExvY2FsT3Bz
KCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICghbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlz
dC5sYXN0KCk7Ci0gICAgICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QucmVtb3ZlTGFz
dCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9mbHVzaGVkTG9jYWxPcHMu
Y29udGFpbnMobm9kZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBERkdfTk9ERV9ET19U
T19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFBoaSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgTFR5cGUgdHlwZTsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgeworICAgICAgICAgICAg
ICAgIGNhc2UgTm9kZVJlc3VsdE51bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1f
b3V0LmRvdWJsZVR5cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gbV9v
dXQuaW50MzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtX291dC5i
b29sZWFuOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IE5vZGVSZXN1bHRKUzoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmludDY0Owor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9w
aGlzLmFkZChub2RlLCBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIHR5cGUpKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEZsdXNoZWRMb2Nh
bE9wKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29u
dGFpbnMobm9kZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZmx1c2hlZExvY2Fs
T3BzLmFkZChub2RlKTsKLSAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmFwcGVuZChu
b2RlKTsKLSAgICB9Ci0gICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxFZGdlKE5vZGUqLCBFZGdlIGVk
Z2UpCi0gICAgewotICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChlZGdlLm5vZGUoKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgdHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50cygpCisgICAgdm9pZCBj
aGVja0FyZ3VtZW50cygpCiAgICAgewogICAgICAgICAvLyBXaGlsZSBjaGVja2luZyBhcmd1bWVu
dHMsIGV2ZXJ5dGhpbmcgaXMgaW4gdGhlIHN0YWNrLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX3ZhbHVlU291cmNlcy5zaXplKCk7IGktLTspCkBAIC0xNzIsNTYgKzE2NCw1NCBAQCBwcml2
YXRlOgogICAgICAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKDApOwogICAgICAgICBtX25v
ZGUgPSAwOwogICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2dyYXBoLm1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBtX2dyYXBoLmJsb2NrKDApLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gbV9ncmFwaC5ibG9jaygw
KS0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZFtpXTsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0g
bV9ncmFwaC5ibG9jaygwKS0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZC5vcGVyYW5kRm9ySW5kZXgo
aSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIC8vIElmIGl0J3Mg
Y2FwdHVyZWQgdGhlbiB3ZSdsbCBiZSBhY2Nlc3NpbmcgaXQgdGhyb3VnaCBsb2FkcyBhbmQgc3Rv
cmVzCi0gICAgICAgICAgICAvLyBhbnl3YXkgLSB0aGVyZSdzIG5vIHBvaW50IGluIHRyYW5zZmVy
aW5nIGl0IG91dC4KLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQorICAg
ICAgICAgICAgaWYgKGZvcm1hdCA9PSBEZWFkRmx1c2ggfHwgZm9ybWF0ID09IEZsdXNoZWRKU1Zh
bHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChmb3JtYXQgIT0gRmx1c2hlZERvdWJs
ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUgcHJvZmlsZSA9IAorICAgICAgICAgICAgICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGU6OmZyb21MYXp5T3BlcmFuZCgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Byb2Zp
bGVkQmxvY2ssCisgICAgICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5
KDAsIG9wZXJhbmQpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5z
aG91bGRVbmJveElmUG9zc2libGUoKSkgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCF2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpOworICAgICAgICAgICAgTFZhbHVl
IGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAg
ICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6IHsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNW
YWx1ZSksIHByb2ZpbGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rp
b24oKTsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6IHsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIHByb2ZpbGUs
IGlzTm90Q2VsbChqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2Fy
ZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1
ZSkpOwotICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hJbnQzMihqc1ZhbHVlKSwg
bV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRmx1c2hl
ZEJvb2xlYW46IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBq
c1ZhbHVlVmFsdWUoanNWYWx1ZSksIHByb2ZpbGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShq
c1ZhbHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9vdXQuc2V0KGpzVmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkp
OwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShq
c1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuc2V0KHVuYm94Qm9vbGVhbihqc1ZhbHVlKSwgbV9sb2NhbHNCb29sZWFuLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwg
bV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgdm9pZCBjb21waWxlQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAg
IHZvaWQgY29tcGlsZUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgbV9o
aWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBtX2hpZ2hCbG9j
ayA9IGJsb2NrOwogICAgICAgICBpZiAoIW1faGlnaEJsb2NrKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbG93QmxvY2sgPSBtX2Jsb2Nrcy5nZXQo
bV9oaWdoQmxvY2spOwogICAgICAgICAKICAgICAgICAgbV9uZXh0SGlnaEJsb2NrID0gMDsKLSAg
ICAgICAgZm9yIChCbG9ja0luZGV4IG5leHRCbG9ja0luZGV4ID0gYmxvY2tJbmRleCArIDE7IG5l
eHRCbG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytuZXh0QmxvY2tJbmRleCkgewor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBtX2hpZ2hCbG9jay0+aW5k
ZXggKyAxOyBuZXh0QmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrbmV4dEJsb2Nr
SW5kZXgpIHsKICAgICAgICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9IG1fZ3JhcGguYmxvY2sobmV4
dEJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKG1fbmV4dEhpZ2hCbG9jaykKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTI0MSwxMSArMjMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JCbG9jaygpOwogICAgICAgICAKLSAgICAg
ICAgbV9pbnQzMlZhbHVlcy5jbGVhcigpOwotICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuY2xlYXIo
KTsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmNsZWFyKCk7Ci0gICAgICAgIG1fc3RvcmFnZVZh
bHVlcy5jbGVhcigpOwotICAgICAgICBtX3RpbWVUb0xpdmUuY2xlYXIoKTsKKyAgICAgICAgbV9s
aXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKICAgICAgICAgCiAgICAgICAgIG1fc3RhdGUu
cmVzZXQoKTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxvY2spOwpA
QCAtMjc0LDYgKzI2MCwxMiBAQCBwcml2YXRlOgogICAgICAgICBtX2RpcmVjdGlvbiA9IChtX25v
ZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6IEJh
Y2t3YXJkU3BlY3VsYXRpb247CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+b3Ao
KSkgeworICAgICAgICBjYXNlIFVwc2lsb246CisgICAgICAgICAgICBjb21waWxlVXBzaWxvbigp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgY29t
cGlsZVBoaSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoK
ICAgICAgICAgICAgIGNvbXBpbGVKU0NvbnN0YW50KCk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTQ0NSw4ICs0MzcsOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQogICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbV9u
b2RlLCB1c2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aGFzUmVzdWx0KCkpCi0g
ICAgICAgICAgICBtX3RpbWVUb0xpdmUuYWRkKG1fbm9kZSwgbV9ub2RlLT5hZGp1c3RlZFJlZkNv
dW50KCkpOworICAgICAgICBpZiAobV9ub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpCisgICAgICAg
ICAgICBtX2xpdmUuYWRkKG1fbm9kZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRXhl
Y3V0ZUVmZmVjdHMpCiAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRl
eCk7CkBAIC00NTQsNzMgKzQ0Niw3OSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgCisgICAgdm9pZCBjb21waWxlVXBzaWxvbigpCisgICAgeworICAgICAgICBM
VmFsdWUgZGVzdGluYXRpb24gPSBtX3BoaXMuZ2V0KG1fbm9kZS0+cGhpKCkpOworICAgICAgICAK
KyAgICAgICAgc3dpdGNoIChtX25vZGUtPnBoaSgpLT5mbGFncygpICYgTm9kZVJlc3VsdE1hc2sp
IHsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0TnVtYmVyOgorICAgICAgICAgICAgbV9vdXQuc2V0
KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgbV9vdXQu
c2V0KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKKyAgICAgICAgICAgIG1f
b3V0LnNldChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0SlM6CisgICAgICAgICAgICBt
X291dC5zZXQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlUGhpKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBzb3Vy
Y2UgPSBtX3BoaXMuZ2V0KG1fbm9kZSk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNrKSB7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdE51
bWJlcjoKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5nZXQoc291cmNlKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50MzI6CisgICAgICAgICAgICBz
ZXRJbnQzMihtX291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKKyAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQuZ2V0
KHNvdXJjZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEpT
OgorICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
ICAgICB2b2lkIGNvbXBpbGVKU0NvbnN0YW50KCkKICAgICB7CiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZSk7CiAgICAgICAgIGlmICh2YWx1
ZS5pc0RvdWJsZSgpKQotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9v
dXQuY29uc3REb3VibGUodmFsdWUuYXNEb3VibGUoKSkpOworICAgICAgICAgICAgc2V0RG91Ymxl
KG1fb3V0LmNvbnN0RG91YmxlKHZhbHVlLmFzRG91YmxlKCkpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmNvbnN0SW50NjQoSlNW
YWx1ZTo6ZW5jb2RlKHZhbHVlKSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5jb25z
dEludDY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlV2Vha0pTQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFk
ZChtX25vZGUsIHdlYWtQb2ludGVyKG1fbm9kZS0+d2Vha0NvbnN0YW50KCkpKTsKKyAgICAgICAg
c2V0SlNWYWx1ZSh3ZWFrUG9pbnRlcihtX25vZGUtPndlYWtDb25zdGFudCgpKSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgY29tcGlsZUdldExvY2FsKCkKICAgICB7Ci0gICAgICAgIC8vIEdldExv
Y2FsIGlzIG9uZSBvZiB0aGUgZmV3IG5vZGVzIHRoYXQgbWF5IGJlIGxlZnQgYmVoaW5kLCB3aXRo
ICFzaG91bGRHZW5lcmF0ZSgpLgotICAgICAgICBpZiAoIW1fbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gR2V0TG9jYWxzIGFyaXNlIG9ubHkg
aW4gdHdvIGNhc2VzOiBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGFyZ3VtZW50cy4KICAgICAgICAg
CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFi
bGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKSB7Ci0gICAgICAgICAg
ICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkgewotICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cmFwIGluc3RlYWQuCi0gICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzgzCi0gICAgICAgICAg
ICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsK
LSAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24odmFsdWUubV92YWx1ZSkpCi0gICAg
ICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5sb2FkMzIocGF5bG9h
ZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Io
dmFyaWFibGUtPmxvY2FsKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIXZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSk7
CiAgICAgICAgIAotICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgp
KSB7Ci0gICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7
Ci0gICAgICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZ2V0KG1f
bG9jYWxzRG91YmxlLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBM
b2NhbHMgdGhhdCBhcmUgbWFya2VkIHNob3VsZFVuYm94SWZQb3NzaWJsZSgpIHRoYXQgYXJlbid0
IGFsc28gZm9yY2VkIHRvCi0gICAgICAgICAgICAvLyB1c2UgZG91YmxlIGZvcm1hdCwgYW5kIHRo
YXQgaGF2ZSB0aGUgcmlnaHQgcHJlZGljdGlvbiwgd2lsbCBhbHdheXMgYmUKLSAgICAgICAgICAg
IC8vIHNwZWN1bGF0ZWQgb24gU2V0TG9jYWwgYW5kIHdpbGwgYWx3YXlzIGJlIHN0b3JlZCBpbnRv
IGFuIGFwcHJvcHJpYXRlbHkKLSAgICAgICAgICAgIC8vIHR5cGVkIHJlZmVyZW5jZSBMVmFsdWUu
Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAg
ICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHMz
Mi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVk
aWN0aW9uKSkgewotICAgICAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQobV9ub2RlLCBt
X291dC5nZXQobV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gV2Ug
c2tpcCB0aGUgQ2VsbCBjYXNlIGhlcmUgYmVjYXVzZSB0aGF0IGdldHMgdHJlYXRlZCBpZGVudGlj
YWxseSB0bwotICAgICAgICAgICAgLy8gSlNWYWx1ZXMsIHNpbmNlIGNlbGxzIGFyZSBzdG9yZWQg
dW50YWdnZWQuCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fanNWYWx1ZVZhbHVlcy5h
ZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSkpOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdmFsdWUpKQorICAg
ICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IodmFyaWFibGUtPmxvY2Fs
KCkpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0
KGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZVNldExvY2FsKCkKQEAgLTUyOSw2NCArNTI3LDQwIEBAIHByaXZhdGU6CiAgICAgICAg
IAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlh
YmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwotICAgICAgICBib29sIG5lZWRzRmx1c2hp
bmcgPSBtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhtX25vZGUpOwogICAgICAgICAKICAgICAg
ICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewogICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewogICAgICAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAg
ICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzRG91YmxlLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewotICAgICAgICAg
ICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+
bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjayk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoRG91YmxlSW5Mb2NhbHMpOworICAg
ICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxl
LT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAg
IG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwot
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICBt
X291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAg
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBW
YWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5n
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3Io
dmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkxvY2Fs
cyk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJp
YWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0Jvb2xl
YW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgIG1fb3V0LnNldChs
b3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpKSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNl
KFZhbHVlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNv
dXJjZShWYWx1ZUluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKG1f
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCisgICAgICAg
ICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9j
YWwoKSkpOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKHZh
cmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUs
IGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3Rh
Y2spOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBt
X291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwot
ICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2
YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUlu
SlNTdGFjayk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsKKyAg
ICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkp
OworICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZh
bHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
TW92SGludCgpCkBAIC02MjAsMTkgKzU5NCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZh
bHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG1fbm9kZS0+YXJpdGhOb2RlRmxh
Z3MoKSkpIHsKLSAgICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0
LmFkZChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmFkZChs
ZWZ0LCByaWdodCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuYWRkV2l0aE92ZXJm
bG93MzIobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1Zh
bHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKLSAgICAgICAgICAgIG1f
aW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwor
ICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE51
bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAgICAgICAg
ICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAgICBtX291
dC5kb3VibGVBZGQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2Rl
LT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02NTEsMTkg
KzYyNCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIo
bV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChub2RlQ2Fu
VHJ1bmNhdGVJbnRlZ2VyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAg
ICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnN1YihsZWZ0LCByaWdodCkpOwor
ICAgICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LnN1YihsZWZ0LCByaWdodCkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuc3ViV2l0aE92ZXJmbG93MzIobGVmdCwgcmlnaHQpOwog
ICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJh
Y3RWYWx1ZShyZXN1bHQsIDEpKTsKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9k
ZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOworICAgICAgICAgICAgc2V0SW50MzIo
bV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAg
ICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAg
ICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVTdWIobG93RG91Ymxl
KG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03MDMsMTMgKzY3NSwxMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFk
ZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE51bWJl
clVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAg
IG1fbm9kZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAgICBtX291dC5k
b3VibGVNdWwobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04MDAsMTMgKzc3
MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhkb25lLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJWYWx1
ZXMuYWRkKG1fbm9kZSwgbV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7CisgICAgICAg
ICAgICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJV
c2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBt
X25vZGUsCisgICAgICAgICAgICBzZXREb3VibGUoCiAgICAgICAgICAgICAgICAgbV9vdXQuZG91
YmxlRGl2KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hp
bGQyKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtODkxLDEzICs4NjEs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
ZG9uZSwgbGFzdE5leHQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMyVmFsdWVz
LmFkZChtX25vZGUsIG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cykpOworICAgICAgICAg
ICAgc2V0SW50MzIobV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNl
OiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9u
b2RlLAorICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJs
ZVJlbShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTkxNSw4ICs4ODQsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQyKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAg
ICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRJbnQzMigKICAgICAgICAgICAg
ICAgICBtX291dC5zZWxlY3QoCiAgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBB
cml0aE1pbgogICAgICAgICAgICAgICAgICAgICAgICAgPyBtX291dC5sZXNzVGhhbihsZWZ0LCBy
aWdodCkKQEAgLTk1MCw3ICs5MTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFk
ZChtX25vZGUsIG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCByZXN1bHRzKSk7CisgICAgICAg
ICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIHJlc3VsdHMpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTk3MSwxMiArOTM5
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVy
Zmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5lcXVhbChyZXN1bHQsIG1fb3V0LmNvbnN0SW50MzIo
MSA8PCAzMSkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQo
bV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJV
c2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmRvdWJs
ZUFicyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNldERvdWJs
ZShtX291dC5kb3VibGVBYnMobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMDAzLDEyICs5NzEsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5leHRyYWN0VmFsdWUo
b3ZlcmZsb3dSZXN1bHQsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRJ
bnQzMihyZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMu
YWRkKG1fbm9kZSwgbV9vdXQuZG91YmxlTmVnKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkp
OworICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmRvdWJsZU5lZyhsb3dEb3VibGUobV9ub2Rl
LT5jaGlsZDEoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTEwMjAsNDcgKzk4OCwzOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGls
ZUJpdEFuZCgpCiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAg
IG1fbm9kZSwgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQobG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdE9yKCkKICAgICB7Ci0gICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLCBtX291dC5iaXRPcihsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAg
c2V0SW50MzIobV9vdXQuYml0T3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdFhv
cigpCiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9k
ZSwgbV9vdXQuYml0WG9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMigpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRYb3IobG93SW50MzIo
bV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgY29tcGlsZUJpdFJTaGlmdCgpCiAgICAgewotICAgICAgICBtX2ludDMy
VmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKLSAgICAgICAgICAgIG1fb3V0LmFTaHIo
Ci0gICAgICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAg
ICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25z
dEludDMyKDMxKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQuYVNocigKKyAgICAgICAgICAg
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0TFNoaWZ0KCkKICAgICB7Ci0gICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLAotICAgICAgICAgICAgbV9vdXQuc2hs
KAotICAgICAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAg
ICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29u
c3RJbnQzMigzMSkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnNobCgKKyAgICAgICAgICAg
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0VVJTaGlmdCgpCiAgICAgewotICAgICAgICBtX2lu
dDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKLSAgICAgICAgICAgIG1fb3V0LmxT
aHIoCi0gICAgICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAg
ICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5j
b25zdEludDMyKDMxKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQubFNocigKKyAgICAgICAg
ICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQuYml0QW5k
KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlVUludDMyVG9OdW1iZXIoKQpAQCAtMTA2OCwxNCAr
MTAyNywxNCBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBpZiAoIW5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG1f
bm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFk
ZChtX25vZGUsIG1fb3V0LnVuc2lnbmVkVG9Eb3VibGUodmFsdWUpKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShtX291dC51bnNpZ25lZFRvRG91YmxlKHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZUZvcndhcmQoCiAgICAg
ICAgICAgICBPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbih2YWx1ZSwgbV9v
dXQuaW50MzJaZXJvKSwKICAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0VUlu
dDMyLCB2YWx1ZSkpOwotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHZhbHVlKTsK
KyAgICAgICAgc2V0SW50MzIodmFsdWUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVJ
bnQzMlRvRG91YmxlKCkKQEAgLTEwODcsNyArMTA0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8v
IGNvbnRlbXBvcmFuZW91cyBsb3ctbGV2ZWwgcmVwcmVzZW50YXRpb25zLiBTbywgdGhpcyBnaXZl
cyBjaGlsZDEgYSBkb3VibGUKICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gYW5kIHRoZW4gZm9y
d2FyZHMgdGhhdCByZXByZXNlbnRhdGlvbiB0byBtX25vZGUuCiAgICAgICAgIAotICAgICAgICBt
X2RvdWJsZVZhbHVlcy5hZGQobV9ub2RlLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpOwor
ICAgICAgICBzZXREb3VibGUobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQpAQCAtMTIxNSw4ICsxMTc0LDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKQogICAgIHsK
LSAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwgbV9vdXQu
bG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRl
cmZseSkpOworICAgICAgICBzZXRTdG9yYWdlKG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlR2V0QXJyYXlMZW5ndGgoKQpAQCAtMTIyNSw4ICsxMTgzLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgbV9p
bnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLCBtX291dC5sb2FkMzIobG93
U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3Ro
KSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIobG93U3RvcmFnZShtX25vZGUt
PmNoaWxkMigpKSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMjU2LDcgKzEyMTMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLCBtX291dC56ZXJvRXh0KGluZGV4
LCBtX291dC5pbnRQdHIpLAogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmZvck5vZGUobV9u
b2RlLT5jaGlsZDIoKSkubV92YWx1ZSkpOwogICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShMb2Fk
RnJvbUhvbGUsIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7Ci0gICAgICAg
ICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTI4OCw3ICsxMjQ1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCAwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChyZXN1bHQs
IHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2RvdWJsZVZh
bHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1
bHQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CkBAIC0xMzg4LDggKzEzNDUsNyBAQCBwcml2YXRlOgogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0
YSYgZGF0YSA9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbV9ub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOwogICAgICAgICAKLSAgICAgICAgbV9qc1ZhbHVl
VmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgc2V0SlNWYWx1ZSgKICAg
ICAgICAgICAgIG1fb3V0LmxvYWQ2NCgKICAgICAgICAgICAgICAgICBtX291dC5hZGRyZXNzKAog
ICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLnByb3BlcnRpZXNbZGF0YS5pZGVudGlmaWVyTnVt
YmVyXSwKQEAgLTE0MTIsNyArMTM2OCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlR2V0R2xvYmFsVmFyKCkKICAgICB7Ci0gICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9u
b2RlLCBtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUobV9ub2RlLT5yZWdpc3RlclBvaW50ZXIo
KSkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUobV9u
b2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
UHV0R2xvYmFsVmFyKCkKQEAgLTE0MzcsMzAgKzEzOTMsMjcgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZS0+Y2hpbGQyKCku
bm9kZSgpKS5pc051bGwoKSk7CiAgICAgICAgIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SWZJc1N0aWxsVmFsaWQoKTsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAg
ICAgICAgIG1fbm9kZSwgZXF1YWxOdWxsT3JVbmRlZmluZWQoCisgICAgICAgIHNldEJvb2xlYW4o
CisgICAgICAgICAgICBlcXVhbE51bGxPclVuZGVmaW5lZCgKICAgICAgICAgICAgICAgICBtX25v
ZGUtPmNoaWxkMSgpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGxPclVuZGVmaW5lZCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEoKQogICAgIHsKICAg
ICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgewotICAgICAgICAg
ICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAg
ICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5pc0Jp
bmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFk
ZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAg
ICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgp
KSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKSB7CiAgICAgICAg
ICAgICBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElmSXNTdGlsbFZhbGlkKCk7Ci0g
ICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwK
KyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoCiAg
ICAgICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDEoKSksCiAg
ICAgICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDIoKSkpKTsK
QEAgLTE0NzcsMTkgKzE0MzAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGNvbnN0YW50Lmlz
VW5kZWZpbmVkT3JOdWxsKCkKICAgICAgICAgICAgICYmICFtYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludElmSXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIGlmIChjb25zdGFudC5p
c051bGwoKSkgewotICAgICAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAg
ICAgICAgICAgICAgIG1fbm9kZSwgZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDEo
KSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxOdWxsKSk7CisgICAgICAgICAgICAgICAgc2V0Qm9v
bGVhbihlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxsc0FyZUZh
bHNlLCBFcXVhbE51bGwpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50LmlzVW5kZWZpbmVkKCkpOwot
ICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUs
IGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2Us
IEVxdWFsVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVxdWFsTnVsbE9yVW5k
ZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsVW5kZWZpbmVk
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1f
Ym9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsCisgICAgICAgIHNldEJvb2xl
YW4oCiAgICAgICAgICAgICBtX291dC5lcXVhbCgKICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpLAogICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoSlNW
YWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpKTsKQEAgLTE0OTgsMTUgKzE0NDgsMTMgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlTGVzcygpCiAgICAgewogICAgICAgICBpZiAobV9u
b2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5W
YWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xl
YW4oCiAgICAgICAgICAgICAgICAgbV9vdXQubGVzc1RoYW4obG93SW50MzIobV9ub2RlLT5jaGls
ZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2lu
ZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAg
ICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAg
ICAgbV9vdXQuZG91YmxlTGVzc1RoYW4obG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dE
b3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtMTUxNywxNSArMTQ2NSwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUNvbXBh
cmVMZXNzRXEoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKElu
dDMyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAg
ICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1f
b3V0Lmxlc3NUaGFuT3JFcXVhbChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIo
bV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpIHsK
LSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2Rl
LAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVM
ZXNzVGhhbk9yRXF1YWwoCiAgICAgICAgICAgICAgICAgICAgIGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1
cm47CkBAIC0xNTM3LDE1ICsxNDgzLDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlQ29t
cGFyZUdyZWF0ZXIoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5k
KEludDMyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAg
ICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAg
IG1fb3V0LmdyZWF0ZXJUaGFuKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewot
ICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUs
CisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUdy
ZWF0ZXJUaGFuKAogICAgICAgICAgICAgICAgICAgICBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTU1NywxNiArMTUwMSwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVH
cmVhdGVyRXEoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKElu
dDMyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAg
ICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1f
b3V0LmdyZWF0ZXJUaGFuT3JFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgbG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRk
KAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAg
ICAgICAgICAgICAgbV9vdXQuZG91YmxlR3JlYXRlclRoYW5PckVxdWFsKAogICAgICAgICAgICAg
ICAgICAgICBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Nyw3ICsxNTE5LDcgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KCkKICAgICB7Ci0gICAgICAg
IG1fYm9vbGVhblZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5iaXROb3QoYm9vbGlmeShtX25vZGUt
PmNoaWxkMSgpKSkpOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmJpdE5vdChib29saWZ5KG1f
bm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUp1bXAoKQpA
QCAtMTkzMSw2ICsxODczLDE0IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIHZvaWQgc3Bl
Y3VsYXRlQmFja3dhcmQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxv
d1ZhbHVlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUsCisgICAgICAgIExW
YWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgKKyAgICAg
ICAgICAgIGtpbmQsIGxvd1ZhbHVlLCBwcm9maWxlLCBmYWlsQ29uZGl0aW9uLCBCYWNrd2FyZFNw
ZWN1bGF0aW9uLCBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVj
dWxhdGVCYWNrd2FyZCgKICAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93
VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewogICAg
ICAgICBhcHBlbmRPU1JFeGl0KApAQCAtMTk5OSwxNCArMTk0OSwxNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VLaW5kKCkg
PT0gS25vd25JbnQzMlVzZSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQg
PSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSBib3hlZFJlc3VsdCA9IG1fanNWYWx1
ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFs
dWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlk
KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAg
ICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAg
aWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgYm94ZWRSZXN1bHQgPSB2
YWx1ZS52YWx1ZSgpOwogICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICAg
ICAganNWYWx1ZVZhbHVlKGJveGVkUmVzdWx0KSwgZWRnZSwgU3BlY0ludDMyLCBpc05vdEludDMy
KGJveGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hJbnQzMihi
b3hlZFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHNldEludDMyKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCkBAIC0yMDE5LDEwICsxOTcyLDEy
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0g
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzQ2VsbChlZGdlLnVzZUtpbmQoKSkpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmNoZWNrZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0g
bV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHVuY2hlY2tlZFZhbHVlID0gdmFsdWUudmFsdWUo
KTsKICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgIGpzVmFsdWVW
YWx1ZSh1bmNoZWNrZWRSZXN1bHQpLCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKHVuY2hlY2tl
ZFJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFJlc3VsdDsKKyAgICAgICAg
ICAgICAgICBqc1ZhbHVlVmFsdWUodW5jaGVja2VkVmFsdWUpLCBlZGdlLCBTcGVjQ2VsbCwgaXNO
b3RDZWxsKHVuY2hlY2tlZFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdW5jaGVja2VkVmFs
dWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9zdGF0
ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNDZWxsKSk7CkBAIC0yMDYxLDE0ICsyMDE2LDE3
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0g
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEJvb2xlYW5Vc2Up
OwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMu
Z2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVk
Z2Uubm9kZSgpKSkgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9ib29sZWFu
VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgdmFsdWUg
PSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQo
dmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IHZhbHVlLnZhbHVl
KCk7CiAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKICAgICAgICAgICAgICAgICBqc1ZhbHVl
VmFsdWUodW5ib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNCb29sZWFuLCBpc05vdEJvb2xlYW4odW5i
b3hlZFJlc3VsdCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94Qm9vbGVhbih1
bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoZWRnZS5ub2Rl
KCksIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVkZ2Uubm9kZSgpLCByZXN1bHQp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIw
ODEsMTYgKzIwMzksMjEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQo
bW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgaXNEb3VibGUoZWRnZS51
c2VLaW5kKCkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9kb3Vi
bGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIGludFJlc3VsdCA9IG1faW50MzJWYWx1ZXMuZ2V0
KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmludFRv
RG91YmxlKGludFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoZWRnZS5u
b2RlKCksIHJlc3VsdCk7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2RvdWJs
ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIHZhbHVl
ID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2
YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5pbnRUb0RvdWJsZSh2
YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShlZGdlLm5vZGUoKSwgcmVzdWx0
KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmIChMVmFsdWUgYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9k
ZSgpKSkgeworICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkp
OworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSBib3hl
ZFJlc3VsdCA9IHZhbHVlLnZhbHVlKCk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJsZSB1bmJveGluZyBp
bnQgY2FzZSIpKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkRvdWJsZSB1bmJveGluZyBkb3VibGUgY2FzZSIpKTsKICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRG91
YmxlIHVuYm94aW5nIGNvbnRpbnVhdGlvbiIpKTsKQEAgLTIxMTUsNyArMjA3OCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGko
bV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7
CisgICAgICAgICAgICBzZXREb3VibGUoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjEyOCwyNCArMjA5MSwy
OCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVz
LmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAK
LSAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRn
ZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94SW50MzIodW5ib3hl
ZFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCBy
ZXN1bHQpOworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVz
LmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2lu
dDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkg
eworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEludDMyKHZhbHVlLnZhbHVlKCkpOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUg
dW5ib3hlZFJlc3VsdCA9IG1fYm9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAg
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsKLSAgICAg
ICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAg
IHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChp
c1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEJvb2xlYW4o
dmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9kZSgpLCByZXN1
bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveERvdWJsZSh1bmJveGVk
UmVzdWx0KTsKLSAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJl
c3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gYm94RG91YmxlKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShlZGdl
Lm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0K
ICAgICAgICAgCkBAIC0yMTU1LDExICsyMTIyLDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgTFZh
bHVlIGxvd1N0b3JhZ2UoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1
bHQgPSBtX3N0b3JhZ2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX3N0b3JhZ2VWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gbG93Q2VsbChlZGdlKTsKLSAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmFkZChlZGdlLm5v
ZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0yMjQyLDYgKzIyMTAsOSBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIE51bWJlclVzZToKICAgICAgICAgICAgIHNwZWN1bGF0
ZU51bWJlcihlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJvb2xlYW5V
c2U6CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGVkZ2UpOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CkBAIC0yMzQyLDYgKzIzMTMsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGRvdWJsZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY1JlYWxOdW1iZXIsCiAgICAgICAg
ICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHZhbHVlLCB2YWx1ZSkpOwogICAg
IH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSBlZGdlKQorICAgIHsKKyAg
ICAgICAgbG93Qm9vbGVhbihlZGdlKTsKKyAgICB9CiAKICAgICBib29sIG1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkKICAgICB7CkBAIC0yNDMwLDIyICsyNDA2
LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBpc0xpdmUoTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fdGlt
ZVRvTGl2ZS5maW5kKG5vZGUpOwotICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3RpbWVUb0xpdmUu
ZW5kKCkpOwotICAgICAgICByZXR1cm4gISFpdGVyLT52YWx1ZTsKKyAgICAgICAgcmV0dXJuIG1f
bGl2ZS5jb250YWlucyhub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoRWRnZSBlZGdl
KQogICAgIHsKLSAgICAgICAgaWYgKCFlZGdlLT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAg
QVNTRVJUKGVkZ2UtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgQVNTRVJUKGVk
Z2UtPmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgaWYgKCFlZGdlLmRvZXNLaWxsKCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEhhc2hNYXA8Tm9kZSos
IHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fdGltZVRvTGl2ZS5maW5kKGVkZ2Uubm9kZSgp
KTsKLSAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV90aW1lVG9MaXZlLmVuZCgpKTsKLSAgICAgICAg
QVNTRVJUKGl0ZXItPnZhbHVlKTsKLSAgICAgICAgaXRlci0+dmFsdWUtLTsKKyAgICAgICAgbV9s
aXZlLnJlbW92ZShlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAogICAgIC8vIFdyYXBwZXIgdXNl
ZCBvbmx5IGZvciBERkdfTk9ERV9ET19UT19DSElMRFJFTgpAQCAtMjQ2Miw2MyArMjQzMSwzNCBA
QCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKCkKICAg
ICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT52YXJpYWJsZXNBdEhl
YWRbaV07Ci0gICAgICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVl
U291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRB
d2FyZVByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxl
LT5pc0FyZ3VtZW50c0FsaWFzKCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tp
XSA9IFZhbHVlU291cmNlKEFyZ3VtZW50c1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0g
VmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fZmx1c2hlZExvY2Fs
T3BzLmNvbnRhaW5zKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyB2YWx1ZSB3aWxs
IGhhdmUgYmVlbiBmbHVzaGVkIHRvIHRoZSBKU1N0YWNrIGluIHNvbWUgZm9ybSBvcgotICAgICAg
ICAgICAgICAgIC8vIGFub3RoZXIuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNT
dGFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlz
SW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gbV9oaWdoQmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRB
dEhlYWRbaV07CisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAgICAgY2Fz
ZSBEZWFkRmx1c2g6IHsKKyAgICAgICAgICAgICAgICAvLyBNdXN0IGNvbnNpZGVyIGF2YWlsYWJs
ZSBub2RlcyBpbnN0ZWFkLgorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV07CisgICAgICAgICAgICAgICAgaWYgKCFub2Rl
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2Uo
U291cmNlSXNEZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2Uobm9kZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoRG91YmxlSW5M
b2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKEludDMySW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAg
ICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0
YWNrKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShCb29sZWFuSW5Mb2Nh
bHMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoK
KyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICBjYXNlIEZsdXNo
ZWRKU1ZhbHVlOgorICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291
cmNlKFZhbHVlSW5Mb2NhbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMjUyNiw2ICsy
NDY2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVl
IGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uLAogICAgICAg
ICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVlIHJlY292ZXJ5
KQogICAgIHsKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgICAgIGtpbmQsIGxvd1Zh
bHVlLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwK
KyAgICAgICAgICAgIGZhaWxDb25kaXRpb24sIGRpcmVjdGlvbiwgcmVjb3ZlcnkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZv
cm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2Zp
bGUsCisgICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVlIHJlY292ZXJ5KQorICAgIHsKICAgICAgICAgaWYgKE9w
dGlvbnM6OmZ0bFRyYXBzT25PU1JFeGl0KCkpIHsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZh
aWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPU1IgZXhpdCBmYWlsQ2FzZSIpKTsKICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiT1NSIGV4aXQgY29udGludWF0aW9uIikpOwpAQCAtMjU0NiwxMSArMjQ5NSw5IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpID09
IG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCkpOwogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IG1f
ZnRsU3RhdGUub3NyRXhpdC5zaXplKCk7CiAgICAgICAgIAotICAgICAgICBtX2Z0bFN0YXRlLmpp
dENvZGUtPm9zckV4aXQuYXBwZW5kKAotICAgICAgICAgICAgT1NSRXhpdCgKLSAgICAgICAgICAg
ICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCi0gICAgICAgICAgICAgICAgbV9jb2RlT3JpZ2luLCBt
X2xhc3RTZXRPcGVyYW5kLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFyZ3VtZW50cygpLAotICAg
ICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAg
bV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAorICAgICAgICAgICAg
a2luZCwgbG93VmFsdWUuZm9ybWF0KCksIHByb2ZpbGUsIG1fY29kZU9yaWdpbiwgbV9sYXN0U2V0
T3BlcmFuZCwKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mQXJndW1lbnRzKCks
IG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5v
c3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKICAgICAg
ICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CkBA
IC0yNjAyLDI3ICsyNTQ5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgRG91YmxlSW5K
U1N0YWNrOgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6Omlu
SlNTdGFja0FzRG91YmxlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFZhbHVlSW5Mb2NhbHM6Ci0gICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAotICAg
ICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SlNWYWx1ZSwg
bV9vdXQuZ2V0KG1fbG9jYWxzNjRbaV0pKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSW50MzJJbkxvY2FsczoKLSAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1l
bnQoCi0gICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRJ
bnQzMiwgbV9vdXQuZ2V0KG1fbG9jYWxzMzJbaV0pKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgQm9vbGVhbkluTG9jYWxzOgotICAgICAgICAgICAgICAgIGFkZEV4
aXRBcmd1bWVudCgKLSAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1
ZUZvcm1hdEJvb2xlYW4sIG1fb3V0LmdldChtX2xvY2Fsc0Jvb2xlYW5baV0pKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRG91YmxlSW5Mb2NhbHM6Ci0gICAgICAg
ICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAotICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1
bWVudHMsIGksIFZhbHVlRm9ybWF0RG91YmxlLCBtX291dC5nZXQobV9sb2NhbHNEb3VibGVbaV0p
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJndW1lbnRzU291
cmNlOgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgUGhhbnRvbUFyZ3VtZW50
cy4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTEzOTg2Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU291cmNlSXNEZWFk
OgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI2ODIsMTIgKzI2MDgsMTAgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBOb2RlKiB1aW50MzJUb051bWJlciA9IDA7CiAgICAgICAgICAgICAg
ICAgTm9kZSogZG91YmxlQXNJbnQzMiA9IDA7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV90aW1lVG9M
aXZlLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+Ojpp
dGVyYXRvciBlbmQgPSBtX3RpbWVUb0xpdmUuZW5kKCk7CisgICAgICAgICAgICAgICAgSGFzaFNl
dDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xpdmUuYmVnaW4oKTsKKyAgICAgICAgICAgICAg
ICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9saXZlLmVuZCgpOwogICAgICAgICAg
ICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghaXRlci0+dmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gaXRlci0+a2V5OworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSAqaXRlcjsKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFjYW5kaWRhdGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmNoaWxkMSgpICE9IG5vZGUp
CkBAIC0yNzMyLDI0ICsyNjU2LDI4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIEFTU0VSVChpc0xpdmUobm9kZSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1
ZSByZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChub2RlKSkgewotICAgICAgICAgICAgYWRkRXhp
dEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SW50MzIsIHJlc3Vs
dCk7CisKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0
KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGFkZEV4
aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEludDMyLCB2YWx1
ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KG5vZGUpKSB7Ci0g
ICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVG
b3JtYXRCb29sZWFuLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5n
ZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgYWRk
RXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0Qm9vbGVhbiwg
dmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChub2RlKSkg
ewotICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZh
bHVlRm9ybWF0SlNWYWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1
ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAg
IGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEpTVmFs
dWUsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fZG91YmxlVmFsdWVzLmdldChub2Rl
KSkgewotICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgs
IFZhbHVlRm9ybWF0RG91YmxlLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1fZG91YmxlVmFs
dWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAg
ICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXREb3Vi
bGUsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAg
LTI4MzQsNiArMjc2Miw1NyBAQCBwcml2YXRlOgogICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVy
YW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICB9
CiAgICAgCisgICAgdm9pZCBzZXRJbnQzMihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBtX2ludDMyVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVl
LCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldEpTVmFsdWUoTm9kZSogbm9kZSwg
TFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLnNldChub2RlLCBM
b3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNl
dEJvb2xlYW4oTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9ib29s
ZWFuVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykp
OworICAgIH0KKyAgICB2b2lkIHNldFN0b3JhZ2UoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgbV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVl
KHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldERvdWJsZShOb2RlKiBu
b2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2RvdWJsZVZhbHVlcy5zZXQobm9k
ZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldEludDMyKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEludDMyKG1fbm9k
ZSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIHNldEpTVmFsdWUoTFZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBz
ZXRCb29sZWFuKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEJvb2xlYW4obV9ub2Rl
LCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0U3RvcmFnZShMVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBzZXRTdG9yYWdlKG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIHNl
dERvdWJsZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXREb3VibGUobV9ub2RlLCB2
YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZChjb25zdCBMb3dlcmVkTm9kZVZh
bHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICghbV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKG1f
aGlnaEJsb2NrLCB2YWx1ZS5ibG9jaygpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5j
ZShKU0NlbGwqIHRhcmdldCkKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29t
bW9uLndlYWtSZWZlcmVuY2VzLmFwcGVuZCgKQEAgLTI4ODgsMjAgKzI4NjcsMTQgQEAgcHJpdmF0
ZToKICAgICBMVmFsdWUgbV90YWdUeXBlTnVtYmVyOwogICAgIExWYWx1ZSBtX3RhZ01hc2s7CiAg
ICAgCi0gICAgSGFzaFNldDxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7Ci0gICAgVmVjdG9yPE5v
ZGUqPiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJl
ZE5vZGVWYWx1ZT4gbV9pbnQzMlZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9k
ZVZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVW
YWx1ZT4gbV9ib29sZWFuVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFs
dWU+IG1fc3RvcmFnZVZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVl
PiBtX2RvdWJsZVZhbHVlczsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7CiAgICAgCi0gICAg
SGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2ludDMyVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSos
IExWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9i
b29sZWFuVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9zdG9yYWdlVmFsdWVz
OwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7Ci0gICAgSGFzaE1h
cDxOb2RlKiwgdW5zaWduZWQ+IG1fdGltZVRvTGl2ZTsKLSAgICAKLSAgICBPcGVyYW5kczxMVmFs
dWU+IG1fbG9jYWxzQm9vbGVhbjsKLSAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzMzI7Ci0g
ICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2FsczY0OwotICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9s
b2NhbHNEb3VibGU7CisgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7CiAgICAgCiAg
ICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG1fdmFsdWVTb3VyY2VzOwogICAgIGludCBtX2xhc3RT
ZXRPcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlcmVkTm9k
ZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
cmVkTm9kZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyZWROb2RlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRM
TG93ZXJlZE5vZGVWYWx1ZV9oCisjZGVmaW5lIEZUTExvd2VyZWROb2RlVmFsdWVfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUg
IkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gUmVwcmVzZW50cyB0aGUgYWN0IG9m
IGhhdmluZyBsb3dlcmVkIGEgREZHOjpOb2RlIHRvIGFuIExWYWx1ZSwgYW5kIHJlY29yZHMgdGhl
CisvLyBERkc6OkJhc2ljQmxvY2sgdGhhdCBkaWQgdGhlIGxvd2VyaW5nLiBUaGUgTFZhbHVlIGlz
IHdoYXQgd2UgdXNlIG1vc3Qgb2Z0ZW4sIGJ1dAorLy8gd2UgbmVlZCB0byB2ZXJpZnkgdGhhdCB3
ZSdyZSBpbiBhIGJsb2NrIHRoYXQgaXMgZG9taW5hdGVkIGJ5IHRoZSBvbmUgdGhhdCBkaWQKKy8v
IHRoZSBsb3dlcmluZy4gV2UncmUgZ3VhcmFudGVlZCB0aGF0IGZvciBlYWNoIERGRzo6Tm9kZSwg
dGhlcmUgd2lsbCBiZSBvbmUKKy8vIExvd2VyZWROb2RlVmFsdWUgdGhhdCBhbHdheXMgZG9taW5h
dGVzIGFsbCB1c2VzIG9mIHRoZSBERkc6Ok5vZGU7IGJ1dCB0aGVyZSBtYXkKKy8vIGJlIG90aGVy
cyB0aGF0IGRvbid0IGRvbWluYXRlIGFuZCB3ZSdyZSBlZmZlY3RpdmVseSBkb2luZyBvcHBvcnR1
bmlzdGljIEdWTiBvbgorLy8gdGhlIGxvd2VyaW5nIGNvZGUuCisKK2NsYXNzIExvd2VyZWROb2Rl
VmFsdWUgeworcHVibGljOgorICAgIExvd2VyZWROb2RlVmFsdWUoKQorICAgICAgICA6IG1fdmFs
dWUoMCkKKyAgICAgICAgLCBtX2Jsb2NrKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBMb3dl
cmVkTm9kZVZhbHVlKExWYWx1ZSB2YWx1ZSwgREZHOjpCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAg
ICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fYmxvY2soYmxvY2spCisgICAgeworICAg
ICAgICBBU1NFUlQobV92YWx1ZSk7CisgICAgICAgIEFTU0VSVChtX2Jsb2NrKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBMVmFs
dWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgREZHOjpCYXNpY0Jsb2Nr
KiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICAKK3ByaXZhdGU6CisgICAg
TFZhbHVlIG1fdmFsdWU7CisgICAgREZHOjpCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNl
bmRpZiAvLyBGVExMb3dlcmVkTm9kZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExWYWx1ZUZyb21CbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZyb21CbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIGNs
YXNzIFZhbHVlRnJvbUJsb2NrIHsKIHB1YmxpYzoKKyAgICBWYWx1ZUZyb21CbG9jaygpCisgICAg
ICAgIDogbV92YWx1ZSgwKQorICAgICAgICAsIG1fYmxvY2soMCkKKyAgICB7CisgICAgfQorICAg
IAogICAgIFZhbHVlRnJvbUJsb2NrKExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxvY2sgYmxvY2spCiAg
ICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgLCBtX2Jsb2NrKGJsb2NrKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHJldmlzaW9u
IDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSwyMSArNDUsNiBAQCB2b2lkIFZhbHVlU291cmNlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpCiAgICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6CiAgICAgICAgIG91
dC5wcmludCgiRG91YmxlSW5KU1N0YWNrIik7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIFZh
bHVlSW5Mb2NhbHM6Ci0gICAgICAgIG91dC5wcmludCgiVmFsdWVJbkxvY2FscyIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBJbnQzMkluTG9jYWxzOgotICAgICAgICBvdXQucHJpbnQoIklu
dDMySW5Mb2NhbHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQm9vbGVhbkluTG9jYWxz
OgotICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW5JbkxvY2FscyIpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBEb3VibGVJbkxvY2FsczoKLSAgICAgICAgb3V0LnByaW50KCJEb3VibGVJbkxv
Y2FscyIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBBcmd1bWVudHNTb3VyY2U6Ci0gICAg
ICAgIG91dC5wcmludCgiQXJndW1lbnRzU291cmNlIik7Ci0gICAgICAgIHJldHVybjsKICAgICBj
YXNlIFNvdXJjZUlzRGVhZDoKICAgICAgICAgb3V0LnByaW50KCJTb3VyY2VJc0RlYWQiKTsKICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVT
b3VyY2UuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExWYWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsNiBAQCBlbnVtIFZh
bHVlU291cmNlS2luZCB7CiAgICAgVmFsdWVJbkpTU3RhY2ssCiAgICAgSW50MzJJbkpTU3RhY2ss
CiAgICAgRG91YmxlSW5KU1N0YWNrLAotICAgIFZhbHVlSW5Mb2NhbHMsCi0gICAgSW50MzJJbkxv
Y2FscywKLSAgICBCb29sZWFuSW5Mb2NhbHMsCi0gICAgRG91YmxlSW5Mb2NhbHMsCi0gICAgQXJn
dW1lbnRzU291cmNlLAogICAgIFNvdXJjZUlzRGVhZCwKICAgICBIYXZlTm9kZQogfTsKSW5kZXg6
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDI4IEBACisyMDEzLTA3LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAg
ICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChIYXNoU2V0KToKKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXVEY6Ojo6YWRkKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgICog
d3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjo6Okhhc2hUYWJsZSk6CisgICAgICAgIChX
VEY6Oj0pOgorICAgICAgICAqIHd0Zi9JbnNlcnRpb24uaDogQWRkZWQuCisgICAgICAgIChXVEYp
OgorICAgICAgICAoSW5zZXJ0aW9uKToKKyAgICAgICAgKFdURjo6SW5zZXJ0aW9uOjpJbnNlcnRp
b24pOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246OmluZGV4KToKKyAgICAgICAgKFdURjo6SW5z
ZXJ0aW9uOjplbGVtZW50KToKKyAgICAgICAgKFdURjo6SW5zZXJ0aW9uOjpvcGVyYXRvcjwpOgor
ICAgICAgICAoV1RGOjpleGVjdXRlSW5zZXJ0aW9ucyk6CisKIDIwMTMtMDctMDIgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggMzItYml0
IGJ1aWxkLgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAJCTBGRDgxQUM1MTU0RkIyMkUw
MDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTBGRERCRkE3MTY2
NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyog
U3RyaW5nUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRkREQkZBODE2NjZERkEzMDBDNTVGRUYg
LyogU3RyaW5nUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVh
bS5oICovOyB9OworCQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU1NjE3ODdB
ODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi87IH07CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsK
IAkJMTQzRjYxMjAxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAv
KiBSQU1TaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMTQ2
OTQxOTIxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2OTQxOTAxNkVBQUY2RDAwMjRFMTQ2IC8q
IFJ1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0zNTIsNiArMzUzLDcgQEAKIAkJMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8q
IEZhc3RCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdEJp
dFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZBNTE2NjZERkEz
MDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3RyaW5nUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nUHJpbnRTdHJlYW0uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8q
IEluc2VydGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNlcnRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFQzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCeXRlU3BpbkxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTc4NSw2ICs3ODcsNyBAQAogCQkJCUE4QTQ3MkJBMTUxQTgyNUEwMDQxMjNG
RiAvKiBIYXNoVHJhaXRzLmggKi8sCiAJCQkJQThBNDcyQkIxNTFBODI1QTAwNDEyM0ZGIC8qIEhl
eE51bWJlci5oICovLAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxpbmVBU00u
aCAqLywKKwkJCQkwRkU1MDU1NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi8sCiAJ
CQkJQThBNDcyQkUxNTFBODI1QTAwNDEyM0ZGIC8qIEludDE2QXJyYXkuaCAqLywKIAkJCQlBOEE0
NzJCRjE1MUE4MjVBMDA0MTIzRkYgLyogSW50MzJBcnJheS5oICovLAogCQkJCUE4QTQ3MkJEMTUx
QTgyNUEwMDQxMjNGRiAvKiBJbnQ4QXJyYXkuaCAqLywKQEAgLTExODEsNiArMTE4NCw3IEBACiAJ
CQkJQThBNDczRTgxNTFBODI1QjAwNDEyM0ZGIC8qIE1hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3M0VBMTUxQTgyNUIwMDQxMjNGRiAvKiBNRDUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUNENTQ5N0FEMTU4NTdEMDMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRTUwNTU3MTc4N0E4MDYwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRGMUQxMTU0MTVGRjExQkUwMDI2RTkwOCAvKiBNZW1vcnlJbnN0cnVtZW50YXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRGRDg1NTQ3MTYxMzNFMEUwMEM1QjcwNCAvKiBNZW1v
cnlJbnN0cnVtZW50YXRpb25BcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUYz
RkJDNzFFMTYxQUY3QkYwMEJCNEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoQ291bnRl
ZFNldC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGF0YUxvZy5oCShyZXZpc2lvbiAxNTI1ODIpCisr
KyBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgs
MTggQEAgdm9pZCBkYXRhTG9nKGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJgogICAgIGRhdGFG
aWxlKCkucHJpbnQodmFsdWUxLCB2YWx1ZTIsIHZhbHVlMywgdmFsdWU0LCB2YWx1ZTUsIHZhbHVl
NiwgdmFsdWU3LCB2YWx1ZTgsIHZhbHVlOSwgdmFsdWUxMCwgdmFsdWUxMSwgdmFsdWUxMiwgdmFs
dWUxMyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUg
VDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0
eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0eXBl
bmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0Pgordm9pZCBkYXRhTG9nKGNvbnN0
IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJiB2YWx1ZTIsIGNvbnN0IFQzJiB2YWx1ZTMsIGNvbnN0IFQ0
JiB2YWx1ZTQsIGNvbnN0IFQ1JiB2YWx1ZTUsIGNvbnN0IFQ2JiB2YWx1ZTYsIGNvbnN0IFQ3JiB2
YWx1ZTcsIGNvbnN0IFQ4JiB2YWx1ZTgsIGNvbnN0IFQ5JiB2YWx1ZTksIGNvbnN0IFQxMCYgdmFs
dWUxMCwgY29uc3QgVDExJiB2YWx1ZTExLCBjb25zdCBUMTImIHZhbHVlMTIsIGNvbnN0IFQxMyYg
dmFsdWUxMywgY29uc3QgVDE0JiB2YWx1ZTE0KQoreworICAgIGRhdGFGaWxlKCkucHJpbnQodmFs
dWUxLCB2YWx1ZTIsIHZhbHVlMywgdmFsdWU0LCB2YWx1ZTUsIHZhbHVlNiwgdmFsdWU3LCB2YWx1
ZTgsIHZhbHVlOSwgdmFsdWUxMCwgdmFsdWUxMSwgdmFsdWUxMiwgdmFsdWUxMywgdmFsdWUxNCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5
cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFt
ZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBU
MTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTU+Cit2b2lkIGRhdGFM
b2coY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwgY29uc3QgVDMmIHZhbHVlMywg
Y29uc3QgVDQmIHZhbHVlNCwgY29uc3QgVDUmIHZhbHVlNSwgY29uc3QgVDYmIHZhbHVlNiwgY29u
c3QgVDcmIHZhbHVlNywgY29uc3QgVDgmIHZhbHVlOCwgY29uc3QgVDkmIHZhbHVlOSwgY29uc3Qg
VDEwJiB2YWx1ZTEwLCBjb25zdCBUMTEmIHZhbHVlMTEsIGNvbnN0IFQxMiYgdmFsdWUxMiwgY29u
c3QgVDEzJiB2YWx1ZTEzLCBjb25zdCBUMTQmIHZhbHVlMTQsIGNvbnN0IFQxNSYgdmFsdWUxNSkK
K3sKKyAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlMSwgdmFsdWUyLCB2YWx1ZTMsIHZhbHVlNCwg
dmFsdWU1LCB2YWx1ZTYsIHZhbHVlNywgdmFsdWU4LCB2YWx1ZTksIHZhbHVlMTAsIHZhbHVlMTEs
IHZhbHVlMTIsIHZhbHVlMTMsIHZhbHVlMTQsIHZhbHVlMTUpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAogdXNpbmcgV1RGOjpkYXRhTG9nOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gMTUy
NTgyKQorKysgU291cmNlL1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niwx
MiArODYsMTkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
cmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBzbyB0aGF0IGNhbGxl
cnMKICAgICAgICAgLy8gY2FuIGp1c3QgcGFzcyB0aGUgdHJhbnNsYXRvciBhbmQgbGV0IHRoZSBj
b21waWxlciBkZWR1Y2UgVC4KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
SGFzaFRyYW5zbGF0b3I+IEFkZFJlc3VsdCBhZGQoY29uc3QgVCYpOworICAgICAgICAKKyAgICAg
ICAgLy8gQXR0ZW1wdHMgdG8gYWRkIGEgbGlzdCBvZiB0aGluZ3MgdG8gdGhlIHNldC4gUmV0dXJu
cyB0cnVlIGlmIGFueSBvZgorICAgICAgICAvLyB0aGVtIGFyZSBuZXcgdG8gdGhlIHNldC4gUmV0
dXJucyBmYWxzZSBpZiB0aGUgc2V0IGlzIHVuY2hhbmdlZC4KKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSXRlcmF0b3JUeXBlPgorICAgICAgICBib29sIGFkZChJdGVyYXRvclR5cGUgYmVnaW4s
IEl0ZXJhdG9yVHlwZSBlbmQpOwogCiAgICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFZhbHVlVHlw
ZSYpOwogICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvcik7CiAgICAgICAgIHZvaWQgY2xlYXIo
KTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJik7
CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaFNldCYpIGNvbnN0
OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIHZvaWQgZGVsZXRlQWxsVmFsdWVzPD4o
Y29uc3QgSGFzaFNldCYpOwpAQCAtMTkxLDYgKzE5OCwxNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKyAgICBpbmxpbmUgYm9vbCBIYXNo
U2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQor
ICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoSXRlcmF0
b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gYWRkKCppdGVyKS5pc05ld0VudHJ5OworICAgICAgICByZXR1cm4gY2hhbmdlZDsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgogICAgIGlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkK
ICAgICB7CiAgICAgICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQpAQCAtMjU2LDYg
KzI3MywxOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHZlY3RvcltpXSA9ICppdDsK
ICAgICB9ICAKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+CisgICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBI
YXNoU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChzaXplKCkgIT0gb3RoZXIu
c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKGNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAg
ICAgIGlmICghb3RoZXIuY29udGFpbnMoKml0ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKIH0gLy8gbmFt
ZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Okhhc2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9I
YXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2
aXNpb24gMTUyNTgyKQorKysgU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNzAsNiArMTE3MCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHsKICAgICAgICAg
Ly8gQ29weSB0aGUgaGFzaCB0YWJsZSB0aGUgZHVtYiB3YXksIGJ5IGFkZGluZyBlYWNoIGVsZW1l
bnQgdG8gdGhlIG5ldyB0YWJsZS4KICAgICAgICAgLy8gSXQgbWlnaHQgYmUgbW9yZSBlZmZpY2ll
bnQgdG8gY29weSB0aGUgdGFibGUgc2xvdHMsIGJ1dCBpdCdzIG5vdCBjbGVhciB0aGF0IGVmZmlj
aWVuY3kgaXMgbmVlZGVkLgorICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlz
IGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAv
LyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1
NQogICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKICAgICAgICAgZm9y
IChjb25zdF9pdGVyYXRvciBpdCA9IG90aGVyLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAg
ICAgICAgICAgIGFkZCgqaXQpOwpAQCAtMTIwOSw2ICsxMjExLDggQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0
cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1l
IEtleVRyYWl0cz4KICAgICBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVu
Y3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4mIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6b3BlcmF0b3I9KGNvbnN0IEhh
c2hUYWJsZSYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhh
dCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQorICAg
ICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExODQ1NQogICAgICAgICBIYXNoVGFibGUgdG1wKG90aGVyKTsKICAgICAgICAgc3dhcCh0bXAp
OwogICAgICAgICByZXR1cm4gKnRoaXM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBJbnNlcnRpb25faAorI2RlZmluZSBJbnNlcnRpb25faAorCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluc2VydGlvbiB7CitwdWJsaWM6CisgICAg
SW5zZXJ0aW9uKCkgeyB9CisgICAgCisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgVCBlbGVt
ZW50KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9lbGVtZW50KGVsZW1l
bnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX2luZGV4OyB9CisgICAgVCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSW5zZXJ0aW9uJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2luZGV4IDwgb3RoZXIubV9pbmRleDsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIHNpemVfdCBtX2luZGV4OworICAgIFQgbV9lbGVtZW50OworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0VmVjdG9yVHlwZSwgdHlwZW5hbWUgSW5zZXJ0aW9u
VmVjdG9yVHlwZT4KK3ZvaWQgZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYgdGFy
Z2V0LCBJbnNlcnRpb25WZWN0b3JUeXBlJiBpbnNlcnRpb25zKQoreworICAgIGlmICghaW5zZXJ0
aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKyAgICB0YXJnZXQuZ3Jvdyh0YXJnZXQuc2l6
ZSgpICsgaW5zZXJ0aW9ucy5zaXplKCkpOworICAgIHNpemVfdCBsYXN0SW5kZXggPSB0YXJnZXQu
c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gaW5zZXJ0aW9ucy5z
aXplKCk7IGluZGV4SW5JbnNlcnRpb25zLS07KSB7CisgICAgICAgIHNpemVfdCBmaXJzdEluZGV4
ID0gaW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRp
b25zOworICAgICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQor
ICAgICAgICAgICAgdGFyZ2V0W2ldID0gdGFyZ2V0W2kgLSBpbmRleE9mZnNldF07CisgICAgICAg
IHRhcmdldFtmaXJzdEluZGV4XSA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmVsZW1l
bnQoKTsKKyAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleDsKKyAgICB9CisgICAgaW5zZXJ0
aW9ucy5yZXNpemUoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Oklu
c2VydGlvbjsKK3VzaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnM7CisKKyNlbmRpZiAvLyBJbnNl
cnRpb25faApJbmRleDogU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNiArMjA3LDQ1
IEBAIHB1YmxpYzoKICAgICAgICAgcHJpbnQodmFsdWUxMik7CiAgICAgICAgIHByaW50KHZhbHVl
MTMpOwogICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIs
IHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBl
bmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1l
IFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxND4KKyAgICB2b2lk
IHByaW50KGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJiB2YWx1ZTIsIGNvbnN0IFQzJiB2YWx1
ZTMsIGNvbnN0IFQ0JiB2YWx1ZTQsIGNvbnN0IFQ1JiB2YWx1ZTUsIGNvbnN0IFQ2JiB2YWx1ZTYs
IGNvbnN0IFQ3JiB2YWx1ZTcsIGNvbnN0IFQ4JiB2YWx1ZTgsIGNvbnN0IFQ5JiB2YWx1ZTksIGNv
bnN0IFQxMCYgdmFsdWUxMCwgY29uc3QgVDExJiB2YWx1ZTExLCBjb25zdCBUMTImIHZhbHVlMTIs
IGNvbnN0IFQxMyYgdmFsdWUxMywgY29uc3QgVDE0JiB2YWx1ZTE0KQorICAgIHsKKyAgICAgICAg
cHJpbnQodmFsdWUxKTsKKyAgICAgICAgcHJpbnQodmFsdWUyKTsKKyAgICAgICAgcHJpbnQodmFs
dWUzKTsKKyAgICAgICAgcHJpbnQodmFsdWU0KTsKKyAgICAgICAgcHJpbnQodmFsdWU1KTsKKyAg
ICAgICAgcHJpbnQodmFsdWU2KTsKKyAgICAgICAgcHJpbnQodmFsdWU3KTsKKyAgICAgICAgcHJp
bnQodmFsdWU4KTsKKyAgICAgICAgcHJpbnQodmFsdWU5KTsKKyAgICAgICAgcHJpbnQodmFsdWUx
MCk7CisgICAgICAgIHByaW50KHZhbHVlMTEpOworICAgICAgICBwcmludCh2YWx1ZTEyKTsKKyAg
ICAgICAgcHJpbnQodmFsdWUxMyk7CisgICAgICAgIHByaW50KHZhbHVlMTQpOworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0
eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5h
bWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUg
VDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1PgorICAgIHZvaWQg
cHJpbnQoY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwgY29uc3QgVDMmIHZhbHVl
MywgY29uc3QgVDQmIHZhbHVlNCwgY29uc3QgVDUmIHZhbHVlNSwgY29uc3QgVDYmIHZhbHVlNiwg
Y29uc3QgVDcmIHZhbHVlNywgY29uc3QgVDgmIHZhbHVlOCwgY29uc3QgVDkmIHZhbHVlOSwgY29u
c3QgVDEwJiB2YWx1ZTEwLCBjb25zdCBUMTEmIHZhbHVlMTEsIGNvbnN0IFQxMiYgdmFsdWUxMiwg
Y29uc3QgVDEzJiB2YWx1ZTEzLCBjb25zdCBUMTQmIHZhbHVlMTQsIGNvbnN0IFQxNSYgdmFsdWUx
NSkKKyAgICB7CisgICAgICAgIHByaW50KHZhbHVlMSk7CisgICAgICAgIHByaW50KHZhbHVlMik7
CisgICAgICAgIHByaW50KHZhbHVlMyk7CisgICAgICAgIHByaW50KHZhbHVlNCk7CisgICAgICAg
IHByaW50KHZhbHVlNSk7CisgICAgICAgIHByaW50KHZhbHVlNik7CisgICAgICAgIHByaW50KHZh
bHVlNyk7CisgICAgICAgIHByaW50KHZhbHVlOCk7CisgICAgICAgIHByaW50KHZhbHVlOSk7Cisg
ICAgICAgIHByaW50KHZhbHVlMTApOworICAgICAgICBwcmludCh2YWx1ZTExKTsKKyAgICAgICAg
cHJpbnQodmFsdWUxMik7CisgICAgICAgIHByaW50KHZhbHVlMTMpOworICAgICAgICBwcmludCh2
YWx1ZTE0KTsKKyAgICAgICAgcHJpbnQodmFsdWUxNSk7CisgICAgfQogfTsKIAogV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206505</attachid>
            <date>2013-07-11 21:57:51 -0700</date>
            <delta_ts>2013-07-12 12:20:48 -0700</delta_ts>
            <desc>removed a file I accidentally added</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>225957</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NiBA
QAorMjAxMy0wNy0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcg
VVJMIChPT1BTISkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpmaWxsKToK
KyAgICAgICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmNsZWFyKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpzZXRMaXZl
VmFsdWVzKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZW5kQmFz
aWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKiBk
ZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6
Omp1c3RPbmVDaGlsZCk6CisgICAgICAgIChBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKiBkZmcv
REZHQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Js
b2NrOjp+QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6ZW5zdXJl
TG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjppc0luUGhpcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6aXNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FE
YXRhOjpTU0FEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+
U1NBRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKEJhc2lj
QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Om9wZXJhdG9yW10pOgorICAg
ICAgICAoU1NBRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja0luc2VydGlvblNl
dDo6QmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9u
U2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnRCZWZvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0OjpleGVj
dXRlKToKKyAgICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAoQmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAqIGRmZy9E
RkdDb21tb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzS2lsbCk6CisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6OmtpbGxTdGF0dXNGb3JEb2VzS2lsbCk6CisgICAgICAgICog
ZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2U6OmlzQ29udHJhZGlj
dG9yeSk6CisgICAgICAgIChKU0M6OkRGRzo6Q29udHJhZGljdGlvblBydW5pbmdQaGFzZTo6bWFr
ZUNvbnRyYWRpY3RvcnkpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1Db250cmFkaWN0aW9u
UHJ1bmluZyk6CisgICAgICAgICogZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZTo6Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlOjpicmVha0NyaXRpY2FsRWRnZSk6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKToKKyAgICAgICAgKiBkZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
ICogZGZnL0RGR0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6ZmluZFR5cGVDaGVja1Jvb3QpOgorICAg
ICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpjb3VudE5vZGUpOgorICAgICAgICAoRENFUGhhc2Up
OgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpjb3VudEVkZ2UpOgorICAgICAgICAoSlND
OjpERkc6OkRDRVBoYXNlOjplbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKToKKyAg
ICAgICAgKiBkZmcvREZHRWRnZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0VkZ2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpFZGdl
KToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXROb2RlKToKKyAgICAgICAgKEpTQzo6REZH
OjpFZGdlOjpzZXRVc2VLaW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRQcm9vZlN0
YXR1cyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6d2lsbE5vdEhhdmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkRGRzo6RWRnZTo6d2lsbEhhdmVDaGVjayk6CisgICAgICAgIChFZGdlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpFZGdlOjpraWxsU3RhdHVzVW5jaGVja2VkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpFZGdlOjpraWxsU3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRL
aWxsU3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpkb2VzS2lsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6RWRnZTo6ZG9lc05vdEtpbGwpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6
Om1ha2VXb3JkKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hGb3JtYXQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRm
Zy9ERkdGbHVzaEZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChXVEYp
OgorICAgICAgICAqIGRmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZTo6Rmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZW5lc3NBbmFseXNp
c1BoYXNlOjpwcm9jZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVuZXNzQW5hbHlz
aXNQaGFzZTo6c2V0Rm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hMaXZlbmVzc0Fu
YWx5c2lzUGhhc2U6OmZsdXNoRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZv
cm1GbHVzaExpdmVuZXNzQW5hbHlzaXMpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaExpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgIChERkcpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjphZGRGb3JEZXB0aEZpcnN0U29ydCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmRlcHRoRmlyc3RTb3J0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Okluc2VydGlvblNldDo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKExpdmVuZXNzQW5hbHlzaXNQaGFzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnByb2Nlc3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OnBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKToKKyAgICAgICAgKiBkZmcvREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUGhpKToKKyAgICAgICAgKE5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnBoaSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dGFrZW5CbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bm90VGFrZW5CbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyk6CisgICAg
ICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChTU0FDb252ZXJzaW9u
UGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6U1NBQ29udmVy
c2lvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpQ2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2FyZFBoaSk6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpRWRnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpkZWR1cGxpY2F0ZUNoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmROb2Rl
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2Fy
ZE5vZGVFZGdlKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmg6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpmbHVzaEZvcm1hdCk6Cisg
ICAgICAgIChWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93
ZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjcmVhdGVQaGlWYXJpYWJs
ZXMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjaGVja0FyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVVwc2lsb24pOgorICAgICAgICAoTG93ZXJE
RkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUGhp
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUpTQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlV2Vha0pTQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQWRkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoU3ViKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTXVsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoRGl2KToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTW9kKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTWluT3JNYXgpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhBYnMpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhOZWdhdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQml0QW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZUJpdE9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUJpdFhvcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVCaXRSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlQml0TFNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUJpdFVSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
VUludDMyVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlSW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVHZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZUNvbXBhcmVFcUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVDb21wYXJlU3RyaWN0RXFDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzcyk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzc0VxKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVHcmVhdGVyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVHcmVhdGVyRXEpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0ludDMyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Q2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06Omxvd0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpsb3dEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dKU1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc0xpdmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjp1c2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppbml0
aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjplbWl0T1NSRXhpdENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjphZGRFeGl0QXJndW1lbnRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6c2V0SW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpz
ZXRKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c2V0Qm9vbGVh
bik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNldFN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzZXREb3VibGUpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc1ZhbGlkKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJl
ZE5vZGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChMb3dlcmVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjpMb3dlcmVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJlZE5vZGVWYWx1ZTo6b3BlcmF0b3IhKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJlZE5vZGVWYWx1ZTo6YmxvY2spOgorICAgICAgICAqIGZ0bC9GVExWYWx1ZUZyb21CbG9j
ay5oOgorICAgICAgICAoSlNDOjpGVEw6OlZhbHVlRnJvbUJsb2NrOjpWYWx1ZUZyb21CbG9jayk6
CisgICAgICAgIChWYWx1ZUZyb21CbG9jayk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlU291cmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgICog
ZnRsL0ZUTFZhbHVlU291cmNlLmg6CisKIDIwMTMtMDctMTEgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlc3VycmVjdCB0aGUgQ0xvb3AgTExJTlQgb24gdGhlIEZU
TCBicmFuY2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUy
NTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMyArMTcwLDEzIEBACiAJCTBG
NDZFNkI5MTc2Rjg5REIwMEUxRjc1NSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUg
LyogRlRMU3dpdGNoQ2FzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNDZFNkM1MTc2RjhBNUUwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZD
MjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovOyB9OwogCQkwRjQ2RTZD
NjE3NkY4QTYwMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBE
RkdMYXp5SlNWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGNDZFNkVGMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1
QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi87IH07Ci0JCTBGNDZFNkYzMTc3Q0YwRDIwMEUx
Rjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxM
b29wcy5jcHAgKi87IH07Ci0JCTBGNDZFNkY0MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFs
TG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ2RTZEOTE3N0NCOTAwMDBF
MUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZENzE3N0NCOEZDMDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5jcHAgKi87IH07CiAJCTBGNDZFNkUzMTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlz
YXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkU0MTc3Q0Mz
NjYwMEUxRjc1NSAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUxMTc3Q0MzNjYwMEUxRjc1NSAvKiBVRGlz
ODZEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ2RTZFNTE3N0NDMzY2MDBFMUY3NTUgLyogWDg2RGlzYXNzZW1ibGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUy
MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwICovOyB9OworCQkwRjQ2RTZF
RjE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkVFMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdB
bmFseXNpcy5oICovOyB9OworCQkwRjQ2RTZGMzE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJh
bExvb3BzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDZFNkYxMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovOyB9Owor
CQkwRjQ2RTZGNDE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZGMjE3N0NGMEQyMDBF
MUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJ
CTBGNEUxQTBFMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTBDMTcz
QUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLzsgfTsKIAkJMEY0
RTFBMEYxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTBEMTczQUVEREMw
MDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1Myw2ICszNTMsMjEgQEAKIAkJMEZEREJG
QjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4
IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2
QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9Owor
CQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTU4MTc4N0FB
ODgwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTVDMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1NUQxNzg3QjBDRjAw
QjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1NjMxNzhGNUIwNTAwQjM1RjhDIC8qIERG
R0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhDIC8qIERGR0Jhc2ljQmxvY2suY3BwICovOyB9
OworCQkwRkU1MDU3MTE3OEY1QjUzMDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NjQx
NzhGNUI1MzAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEZF
NTA1NzQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTY3MTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdGbHVzaEZvcm1hdC5jcHAgKi87IH07CisJCTBGRTUwNTc1MTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNTA1NjgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1
NzYxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTY5MTc4
RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi87IH07
CisJCTBGRTUwNTc3MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
NTA1NkExNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1
NzgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2QjE3OEY1QjUz
MDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1
NzkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NkMxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTdBMTc4RjVCNTMwMEIzNUY4QyAv
KiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZEMTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1N0IxNzhG
NUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZFMTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1N0MxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2RjE3OEY1QjUzMDBCMzVGOEMgLyogREZH
U1NBQ29udmVyc2lvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1N0QxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NzAxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZl
cnNpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUz
NDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi87IH07CiAJ
CTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzRBMTcyM0NE
QTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE4
NiwxMyArMTIwMSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyogRlRMU3dpdGNo
Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0Y2hDYXNlLmg7
IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3BwOyBwYXRoID0g
ZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcvREZHTGF6eUpT
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUxNzdDRTk1QTAw
RTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29w
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9v
cHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBh
dGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIuY3BwOyBwYXRo
ID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1ibGVyLmg7IHBh
dGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlzYXNzZW1ibGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5o
OyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2RGlzYXNzZW1i
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4NkRpc2Fzc2Vt
Ymxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0Fu
YWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7
IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3BwOyBwYXRoID0g
ZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBkZmcvREZHTmF0
dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkzQUY4MTZEMENB
RDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRFMUEwRDE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzOTksMjEgQEAKIAkJMEZEREJGQjMxNjY2RUVENTAw
QzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBkZmcvREZHQmxv
Y2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUEx
Nzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTUwNTYyMTc4RjVCMDUwMEIzNUY4QyAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Jhc2ljQmxvY2suY3BwOyBwYXRoID0gZGZnL0RG
R0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2NDE3
OEY1QjUzMDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0g
ZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNTA1NjcxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZsdXNoRm9ybWF0LmNwcDsgcGF0aCA9
IGRmZy9ERkdGbHVzaEZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTUwNTY4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbHVzaEZvcm1hdC5oOyBwYXRoID0gZGZnL0RGR0ZsdXNo
Rm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTY5MTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2QTE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1
c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1
MDU2QjE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkMxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkQxNzhGNUI1MzAwQjM1
RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTZFMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU3MDE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29u
dmVyc2lvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NTQUNv
bnZlcnNpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RB
NTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTA5RkQx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0aW9ucy5oOyBwYXRoID0gZnRsL0ZUTEFiYnJldmlh
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NjIsMTAgKzI5OTIsMTMg
QEAKIAkJCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmgg
Ki8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCisJCQkJMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhD
IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLAogCQkJCTBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERG
R0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCiAJCQkJMEZEMjgxMjUxNzc5M0JFMzAwQkJCMEYzIC8q
IERGR0JpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEZEMjgxMjYxNzc5M0JFMzAwQkJCMEYzIC8q
IERGR0JpbmFyeVN3aXRjaC5oICovLAorCQkJCTBGRTUwNTY0MTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhD
IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEY4MzY0QjUxNjRCMEMwRTAwNTMz
MjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oICovLAogCQkJCTg2RUM5REI0MTMyOERGODIwMDJC
MkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yOTg1LDYgKzMwMTgsOCBAQAog
CQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5o
ICovLAogCQkJCTBGQkUwRjZCMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5oICovLAorCQkJCTBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU1QjE3ODdCMENGMDBCMzVG
OEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRF
RjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5
NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEYyRkM3NzAxNkUxMkY2RjAwMzhE
OTc2IC8qIERGR0RDRVBoYXNlLmNwcCAqLywKQEAgLTMwMTEsNiArMzA0NiwxMCBAQAogCQkJCTBG
REIyQ0Q0MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjJCREMx
MjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi8sCiAJCQkJMEYyQkRDMTMx
NTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLywKKwkJCQkwRkU1MDU2NzE3OEY1
QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuY3BwICovLAorCQkJCTBGRTUwNTY4MTc4RjVC
NTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oICovLAorCQkJCTBGRTUwNTY5MTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8sCisJCQkJMEZF
NTA1NkExNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
Ki8sCiAJCQkJODZBRTZDNEIxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCAqLywKIAkJ
CQk4NkVDOURCNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCAqLywKIAkJ
CQk4NkFFNkM0QzEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oICovLApAQCAtMzAyNSw2
ICszMDY0LDggQEAKIAkJCQkwRkRCMkNENjE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxp
emVyLmggKi8sCiAJCQkJMEY0NkU2QzIxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVl
LmNwcCAqLywKIAkJCQkwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUu
aCAqLywKKwkJCQkwRkU1MDU2QjE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNp
c1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU2QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmggKi8sCiAJCQkJMEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0xvbmdMaXZlZFN0YXRlLmNwcCAqLywKIAkJCQkwRkI0QjUxRDE2QjYyNzcyMDAzRjY5NkIgLyog
REZHTG9uZ0xpdmVkU3RhdGUuaCAqLywKIAkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyog
REZHTWluaWZpZWRHcmFwaC5oICovLApAQCAtMzA0MSw2ICszMDgyLDggQEAKIAkJCQkwRkE1ODFC
OTE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCAqLywKIAkJCQk4NkVDOURCRjEzMjhE
RjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJODZFQzlEQzAxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCAqLywKKwkJCQkwRkU1MDU2RDE3OEY1QjUzMDBC
MzVGOEMgLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgKi8sCisJCQkJMEZF
NTA1NkUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aCAqLywKIAkJCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwICov
LAogCQkJCTBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovLAogCQkJ
CTBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCAqLywKQEAgLTMwNzgs
NiArMzEyMSw4IEBACiAJCQkJODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmggKi8sCiAJCQkJODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwICovLAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKKwkJCQkwRkU1MDU2RjE3OEY1QjUzMDBCMzVGOEMgLyog
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU3MDE3OEY1QjUzMDBCMzVG
OEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggKi8sCiAJCQkJMEY2Mzk0NzYxNURDRTM0NzAw
NkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLywKIAkJCQkwRkMwOTc5RjE0
NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3
MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCkBAIC0zMjk4LDYgKzMzNDMsNyBAQAogCQkJCTg2
MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjNDMDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQSUNhc3QuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRTUwNTc5MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVz
c0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NUY0MDg4MTBFN0Q1NjMwMDk0
NzM2MSAvKiBBUElTaGltcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGNjA1MTQwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjU3REU4MEUxRjUxQzUw
MDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzQwNyw2ICszNDUzLDcg
QEAKIAkJCQkwRkVBMEExRDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9y
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0Rv
dWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3RDE3OEY1QjUzMDBC
MzVGOEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQz
QzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAq
LywKQEAgLTM0MjgsNiArMzQ3NSw3IEBACiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8q
IERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0
MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4
MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkU1MDU3NzE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEUxQTEyMTczQUYwN0IwMDdFRTJEMyAv
KiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1
QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZD
OTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNDQ0LDYgKzM0OTIsNyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIw
MDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDcxNTIy
ODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkU1MDU1RDE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8q
IERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2
OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRE
QkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zNTkxLDYgKzM2NDAsOCBAQAogCQkJCTBGNzY2RDM1MTVBRTI1M0IwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRTUwNTc1MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NTkxNzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzJGRkQ2NDEzOTk4NUE4MDBFNTM2NUEg
LyogS2V5d29yZExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3MkEwRUQxQ0U2OTAw
RjFGNjgxIC8qIExhYmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjAwOTdBNjBFQkFCQjU4MDA3
QTcyOTcgLyogTGFiZWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzA4LDYgKzM3NTksNyBA
QAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGREIyQ0RFMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3QjE3OEY1QjUzMDBCMzVGOEMgLyog
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
Q0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyMzVCREIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBI
ZWFkZXJzICovLApAQCAtNDE5NCw2ICs0MjQ2LDcgQEAKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4
ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREIyQ0Q5MTc0
MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRTUwNTc4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3M0Q3QUUxNjVBMTQyRDAwQUNBQjcx
IC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTY5QTA3
OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjhGOTQ0MDE2Njc2MzMwMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTQyMjUsOSArNDI3OCwxMSBAQAogCQkJCTBGQzA5NzZFMTQ2OEFCNTEwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzQxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMjM1QkQ4MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9y
bWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAw
QzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0
NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRTUwNTcxMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
Q0FyZ3VtZW50R2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkM1NTcwMTQ3MzhGMzUw
MDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlE
MTZCNzJBMDgwMDVERjk1QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MzQ2
LDYgKzQ0MDEsNyBAQAogCQkJCTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRS
ZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc4ODAxNDAxNDcxQUQ5MjAwNDFCMDE2IC8qIEpT
RGF0ZU1hdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDYxMDdFQzI3MTAwNURCQzhE
IC8qIEpTRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzYxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDM4Myw2ICs0NDM5LDcgQEAKIAkJCQlC
Q0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5NUFCODM0MjBEQTQzMjI1MDBCQzgzRjMgLyogTGVnYWN5
UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1N0MxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFC
MDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3
NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC00NDA1LDcgKzQ0NjIsOSBAQAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAv
KiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBC
MDJFODYgLyogTWFya1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3
RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTdB
MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNEMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0
aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTVDMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RDI4MTI3MTc3OTNCRTUwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQkYyRkYxNTYwRjA2QTAwOEU5MjIy
IC8qIE5hbWVDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0MTcsNiArNDQ3Niw3
IEBACiAJCQkJNjU1RUIyOUIxMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVzQ29kZWdlbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQ2OURFMjEwN0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTMxMDdFQzdFNzAwNjUwNDQ2IC8q
IE51bWJlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU2MzE3OEY1QjA1MDBC
MzVGOEMgLyogREZHQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFNDEw
N0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg2RjNFRUJFMTY4Q0RFOTMwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTE0NDY5REU1MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RDb25zdHJ1
Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDEyICsyMDksMjUg
QEAgcHVibGljOgogICAgICAgICBzZXRMb2NhbEZpcnN0VGltZShvcGVyYW5kLCB2YWx1ZSk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgY2xlYXIoKQorICAgIHZvaWQgZmlsbChUIHZhbHVlKQogICAg
IHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsK
KyAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gdmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2xvY2Fsc1tp
XSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IHZh
bHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGZpbGwo
VHJhaXRzOjpkZWZhdWx0VmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBPcGVyYW5kcyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobnVt
YmVyT2ZBcmd1bWVudHMoKSA9PSBvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAg
QVNTRVJUKG51bWJlck9mTG9jYWxzKCkgPT0gb3RoZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gbV9hcmd1bWVudHMgPT0gb3RoZXIubV9hcmd1bWVudHMgJiYg
bV9sb2NhbHMgPT0gb3RoZXIubV9sb2NhbHM7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzQsNiArNzQsMTYgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQog
ICAgICAgICB9CiAgICAgfQogICAgIAorICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsK
KyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSBi
YXNpY0Jsb2NrLT5zc2EtPnZhbHVlc0F0SGVhZC5iZWdpbigpOworICAgICAgICBIYXNoTWFwPE5v
ZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgZW5kID0gYmFzaWNCbG9jay0+c3NhLT52YWx1
ZXNBdEhlYWQuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Cisg
ICAgICAgICAgICBmb3JOb2RlKGl0ZXItPmtleSkgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAg
IGlmIChpdGVyLT52YWx1ZS5oYXNDbG9iYmVyYWJsZVN0YXRlKCkpCisgICAgICAgICAgICAgICAg
bV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgYmFz
aWNCbG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZhbHNlOwogICAgIGJhc2ljQmxvY2stPmNmYUhh
c1Zpc2l0ZWQgPSB0cnVlOwogICAgIG1fYmxvY2sgPSBiYXNpY0Jsb2NrOwpAQCAtODMsOSArOTMs
MTkgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogICAgIG1fY3Vy
cmVudE5vZGUgPSAwOwogfQogCi12b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgm
IGdyYXBoKQorc3RhdGljIHZvaWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUqLCBBYnN0cmFj
dFZhbHVlPiYgdmFsdWVzLCBIYXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3sKKyAgICB2YWx1ZXMuY2xl
YXIoKTsKKyAgICAKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGxpdmUuYmVn
aW4oKTsKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbGl2ZS5lbmQoKTsKKyAg
ICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgdmFsdWVzLmFkZCgqaXRlciwg
QWJzdHJhY3RWYWx1ZSgpKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkK
IHsKLSAgICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxvY2soMCk7CisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7CiAgICAgcm9vdC0+Y2ZhU2hvdWxkUmV2aXNpdCA9
IHRydWU7CiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwogICAgIHJvb3QtPmNmYUZv
dW5kQ29uc3RhbnRzID0gZmFsc2U7CkBAIC0xMTgsOCArMTM4LDggQEAgdm9pZCBBYnN0cmFjdFN0
YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFk
LmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5j
bGVhcigpOwogICAgIH0KLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9j
a0luZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQpAQCAtMTM3LDEyICsxNTcsMTIgQEAg
dm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICB9CiAgICAg
ICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRl
Y29kZUluZGV4KQorICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5t
X3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1f
cGxhbi5tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBBYnN0cmFj
dFZhbHVlIHZhbHVlOwotICAgICAgICAgICAgdmFsdWUuc2V0TW9zdFNwZWNpZmljKGdyYXBoLCBn
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7Ci0gICAgICAgICAgICBpbnQgb3BlcmFu
ZCA9IGdyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgICAgIHZhbHVlLnNldE1vc3RTcGVjaWZpYyhtX2dyYXBoLCBtX2dyYXBoLm1fcGxhbi5t
dXN0SGFuZGxlVmFsdWVzW2ldKTsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5t
X3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBi
bG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCkubWVyZ2UodmFsdWUpOwogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgSW5pdGlhbGl6aW5nIEJsb2NrICMldSwgb3BlcmFuZCByJWQsIHRvICIsIGJsb2NrSW5k
ZXgsIG9wZXJhbmQpOwpAQCAtMTUxLDYgKzE3MSwxMCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6Omlu
aXRpYWxpemUoR3JhcGgmIGdyCiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICBibG9jay0+Y2Zh
U2hvdWxkUmV2aXNpdCA9IHRydWU7CisgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
IHsKKyAgICAgICAgICAgIHNldExpdmVWYWx1ZXMoYmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLCBi
bG9jay0+c3NhLT5saXZlQXRIZWFkKTsKKyAgICAgICAgICAgIHNldExpdmVWYWx1ZXMoYmxvY2st
PnNzYS0+dmFsdWVzQXRUYWlsLCBibG9jay0+c3NhLT5saXZlQXRUYWlsKTsKKyAgICAgICAgfQog
ICAgIH0KIH0KIApAQCAtMTcyLDIwICsxOTYsNDEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjplbmRC
YXNpY0Jsb2NrKE1lcmdlTQogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIAogICAgIGlm
IChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8ICFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAg
Zm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAgICAgICBzd2l0Y2ggKG1f
Z3JhcGgubV9mb3JtKSB7CisgICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6IHsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBN
ZXJnaW5nIHN0YXRlIGZvciBhcmd1bWVudCAlenUuXG4iLCBhcmd1bWVudCk7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBzdGF0ZSBmb3IgYXJndW1lbnQgJXp1Llxu
IiwgYXJndW1lbnQpOwogI2VuZGlmCi0gICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiA9IGJsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5h
cmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1l
bnQpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAw
OyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2Nh
bCkgeworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2st
PnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChh
cmd1bWVudCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgbG9jYWwg
PSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKyts
b2NhbCkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIs
IGxvY2FsKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRl
IGZvciBsb2NhbCAlenUuXG4iLCBsb2NhbCk7CiAjZW5kaWYKLSAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7Ci0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFy
aWFibGVzLmxvY2FsKGxvY2FsKSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkp
OworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZh
bHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5sb2NhbChsb2NhbCksIGJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTU0E6IHsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0VGFpbC5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGJsb2NrLT52YWx1ZXNBdFRh
aWxbaV0ubWVyZ2UobV92YXJpYWJsZXNbaV0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuYmVn
aW4oKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBibG9jay0+
c3NhLT5saXZlQXRUYWlsLmVuZCgpOworICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuZmluZChub2RlKS0+dmFs
dWUubWVyZ2UoZm9yTm9kZShub2RlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApA
QCAtMzIzLDEzICszNjgsMTMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1
bnNpZwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgTW92SGludDoK
ICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewogICAgICAgICAvLyBEb24ndCBuZWVkIHRvIGRv
IGFueXRoaW5nLiBBIE1vdkhpbnQgaXMgZWZmZWN0aXZlbHkgYSBwcm9taXNlIHRoYXQgdGhlIFNl
dExvY2FsCiAgICAgICAgIC8vIHdhcyBkZWFkLgogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAotICAgIGNhc2UgTW92SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTg2LDYg
KzE2MzEsMTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgorICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAvLyBUaGUgc3RhdGUgb2Yg
dGhpcyBub2RlIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGRlY2lkZWQuCisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBjYXNlIFVwc2lsb246IHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgZm9yTm9kZShub2RlKSA9
IHZhbHVlOworICAgICAgICBmb3JOb2RlKG5vZGUtPnBoaSgpKSA9IHZhbHVlOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9t
TG9jYWw6CiAgICAgY2FzZSBCcmVha3BvaW50OgpAQCAtMTY3OCw3ICsxNzM0LDcgQEAgaW5saW5l
IHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdAogICAgIG1fZGlkQ2xvYmJlciA9IHRy
dWU7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwoQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGUq
IG5vZGUpCitib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGUqIG5vZGUpCiB7
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzY2LDIxICsxODIy
LDQ0IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbG9j
ayogZnJvbSwgQmFzaWNCbG9jayogdG8pCitib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2lj
QmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQogewogICAgIEFTU0VSVChmcm9tLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mQXJndW1lbnRzKCkpOwogICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZMb2NhbHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwogICAg
IAogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIAotICAgIGZvciAoc2l6ZV90IGFyZ3Vt
ZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgKythcmd1bWVudCkgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9
IHRvLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpLCB0by0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3Vt
ZW50KSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgc3dp
dGNoIChtX2dyYXBoLm1fZm9ybSkgeworICAgIGNhc2UgVGhyZWFkZWRDUFM6IHsKKyAgICAgICAg
Zm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGZyb20tPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICBBYnN0cmFj
dFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhkZXN0
aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlh
Ymxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1
bWVudChhcmd1bWVudCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVf
dCBsb2NhbCA9IDA7IGxvY2FsIDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCk7ICsrbG9jYWwpIHsKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0g
dG8tPnZhbHVlc0F0SGVhZC5sb2NhbChsb2NhbCk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRhaWwu
bG9jYWwobG9jYWwpLCB0by0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKSwgZnJvbS0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIAotICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9tLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewotICAgICAgICBBYnN0cmFj
dFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9jYWwpOwotICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBm
cm9tLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpLCB0by0+dmFyaWFibGVzQXRIZWFkLmxvY2Fs
KGxvY2FsKSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgIAor
ICAgIGNhc2UgU1NBOiB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmcm9tLT52YWx1ZXNBdFRh
aWwuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+dmFsdWVzQXRIZWFk
W2ldLm1lcmdlKGZyb20tPnZhbHVlc0F0VGFpbFtpXSk7CisgICAgICAgIAorICAgICAgICBIYXNo
U2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IHRvLT5zc2EtPmxpdmVBdEhlYWQuYmVnaW4oKTsK
KyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHRvLT5zc2EtPmxpdmVBdEhl
YWQuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAg
ICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHRvLT5zc2Et
PnZhbHVlc0F0SGVhZC5maW5kKG5vZGUpLT52YWx1ZS5tZXJnZSgKKyAgICAgICAgICAgICAgICBm
cm9tLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKG5vZGUpLT52YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBp
ZiAoIXRvLT5jZmFIYXNWaXNpdGVkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyAr
MTMwLDcgQEAgcHVibGljOgogICAgIC8vIENhbGwgdGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0
byBpbml0aWFsaXplIHRoZSBhYnN0cmFjdCB2YWx1ZXMgb2YKICAgICAvLyBhcmd1bWVudHMsIGFu
ZCB0byBpbmRpY2F0ZSB3aGljaCBibG9ja3Mgc2hvdWxkIGJlIGxpc3RlZCBmb3IgQ0ZBCiAgICAg
Ly8gZXhlY3V0aW9uLgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoR3JhcGgmKTsKKyAgICB2
b2lkIGluaXRpYWxpemUoKTsKIAogICAgIC8vIFN0YXJ0IGFic3RyYWN0bHkgZXhlY3V0aW5nIHRo
ZSBnaXZlbiBiYXNpYyBibG9jay4gSW5pdGlhbGl6ZXMgdGhlCiAgICAgLy8gbm90aW9uIG9mIGFi
c3RyYWN0IHN0YXRlIHRvIHdoYXQgd2UgYmVsaWV2ZSBpdCB0byBiZSBhdCB0aGUgaGVhZApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlz
aW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
RWRnZSBjaGlsZDFVbmNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX3dvcmRzWzBdOyB9CiAgICAg
CisgICAgRWRnZSBqdXN0T25lQ2hpbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEhY2hp
bGQxKCkgJiYgIWNoaWxkMigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWNoaWxkMygpKTsKKyAg
ICAgICAgICAgIHJldHVybiBjaGlsZDEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRWRn
ZSgpOworICAgIH0KKyAgICAKICAgICB2b2lkIGluaXRpYWxpemUoRWRnZSBjaGlsZDEsIEVkZ2Ug
Y2hpbGQyLCBFZGdlIGNoaWxkMykKICAgICB7CiAgICAgICAgIGNoaWxkKDApID0gY2hpbGQxOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdC
YXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2Rl
QmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQorICAgIDog
Ynl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQorICAgICwgaW5kZXgoTm9CbG9jaykKKyAgICAs
IGlzT1NSVGFyZ2V0KGZhbHNlKQorICAgICwgY2ZhSGFzVmlzaXRlZChmYWxzZSkKKyAgICAsIGNm
YVNob3VsZFJldmlzaXQoZmFsc2UpCisgICAgLCBjZmFGb3VuZENvbnN0YW50cyhmYWxzZSkKKyAg
ICAsIGNmYURpZEZpbmlzaCh0cnVlKQorICAgICwgY2ZhQnJhbmNoRGlyZWN0aW9uKEludmFsaWRC
cmFuY2hEaXJlY3Rpb24pCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICwgaXNMaW5rZWQoZmFs
c2UpCisjZW5kaWYKKyAgICAsIGlzUmVhY2hhYmxlKGZhbHNlKQorICAgICwgdmFyaWFibGVzQXRI
ZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFy
Z3VtZW50cywgbnVtTG9jYWxzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorewor
fQorCitCYXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygpIHsgfQorCit2b2lkIEJhc2ljQmxvY2s6OmVu
c3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCit7CisgICAgdmFyaWFibGVzQXRIZWFk
LmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVM
b2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051
bUxvY2Fscyk7CisgICAgdmFsdWVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwor
fQorCitib29sIEJhc2ljQmxvY2s6OmlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChw
aGlzW2ldID09IG5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEJhc2ljQmxvY2s6OmlzSW5CbG9jayhOb2RlKiBteU5vZGUp
IGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Ob2RlcygpOyArK2kpIHsK
KyAgICAgICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOworfQor
CitCYXNpY0Jsb2NrOjpTU0FEYXRhOjpTU0FEYXRhKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIDog
Zmx1c2hGb3JtYXRBdEhlYWQoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQor
ICAgICwgZmx1c2hGb3JtYXRBdFRhaWwoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkKQorICAgICwgYXZhaWxhYmlsaXR5QXRIZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZCkKKyAgICAsIGF2YWlsYWJpbGl0eUF0VGFpbChPcGVyYW5kc0xpa2UsIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQpCit7Cit9CisKK0Jhc2ljQmxvY2s6OlNTQURhdGE6On5TU0FEYXRh
KCkgeyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJERkdO
b2RlLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFkaWNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9wZXJh
bmRzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAg
LTQ0LDQyICs0NiwxNiBAQCBjbGFzcyBJbnNlcnRpb25TZXQ7CiB0eXBlZGVmIFZlY3RvcjxCYXNp
Y0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OwogCiBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNv
dW50ZWQ8QmFzaWNCbG9jaz4gewotICAgIEJhc2ljQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVCZWdp
biwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCi0gICAgICAgIDog
Ynl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQotICAgICAgICAsIGluZGV4KE5vQmxvY2spCi0g
ICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCi0gICAgICAgICwgY2ZhSGFzVmlzaXRlZChmYWxz
ZSkKLSAgICAgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQotICAgICAgICAsIGNmYUZvdW5k
Q29uc3RhbnRzKGZhbHNlKQotICAgICAgICAsIGNmYURpZEZpbmlzaCh0cnVlKQotICAgICAgICAs
IGNmYUJyYW5jaERpcmVjdGlvbihJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKQotI2lmICFBU1NFUlRf
RElTQUJMRUQKLSAgICAgICAgLCBpc0xpbmtlZChmYWxzZSkKLSNlbmRpZgotICAgICAgICAsIGlz
UmVhY2hhYmxlKGZhbHNlKQotICAgICAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMs
IG51bUxvY2FscykKLSAgICAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1M
b2NhbHMpCi0gICAgICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQot
ICAgICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICB7Ci0g
ICAgfQorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVt
QXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpOworICAgIH5CYXNpY0Jsb2NrKCk7CiAgICAg
Ci0gICAgfkJhc2ljQmxvY2soKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBlbnN1cmVM
b2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQotICAgIHsKLSAgICAgICAgdmFyaWFibGVzQXRI
ZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAgICAgICB2YXJpYWJsZXNBdFRhaWwu
ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgICAgIHZhbHVlc0F0SGVhZC5lbnN1cmVM
b2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICAgICAgdmFsdWVzQXRUYWlsLmVuc3VyZUxvY2Fscyhu
ZXdOdW1Mb2NhbHMpOwotICAgIH0KKyAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdO
dW1Mb2NhbHMpOwogICAgIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
cy5zaXplKCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgpOyB9
CiAgICAgTm9kZSomIGF0KHNpemVfdCBpKSB7IHJldHVybiBtX25vZGVzW2ldOyB9CiAgICAgTm9k
ZSogYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KKyAgICBOb2RlKiYg
b3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gYXQoaSk7IH0KICAgICBOb2RlKiBvcGVyYXRv
cltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIGxhc3QoKSBj
b25zdCB7IHJldHVybiBhdChzaXplKCkgLSAxKTsgfQogICAgIHZvaWQgcmVzaXplKHNpemVfdCBz
aXplKSB7IG1fbm9kZXMucmVzaXplKHNpemUpOyB9CkBAIC05NiwzMSArNzIsMTYgQEAgc3RydWN0
IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIH0KICAgICBib29sIGlzUGhp
SW5kZXgoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGkgPCBwaGlzLnNpemUoKTsgfQogICAgIAot
ICAgIGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKHBo
aXNbaV0gPT0gbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNJbkJsb2NrKE5v
ZGUqIG15Tm9kZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtTm9kZXMoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZShpKSA9PSBteU5vZGUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KKyAgICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0OworICAgIGJv
b2wgaXNJbkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3Q7CiAgICAgCiAgICAgdW5zaWduZWQgbnVt
U3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAgCi0g
ICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQorICAgIEJhc2ljQmxvY2sq
JiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICByZXR1cm4gbGFzdCgp
LT5zdWNjZXNzb3IoaW5kZXgpOwogICAgIH0KLSAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JGb3JD
b25kaXRpb24oYm9vbCBjb25kaXRpb24pCisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvckZvckNv
bmRpdGlvbihib29sIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBsYXN0KCktPnN1
Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0KQEAgLTEzMCwxMCArOTEsMTIg
QEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIERGR19WQVJJ
QURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERG
R19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIG91dC5wcmludCgiIyIsIGluZGV4KTsKLSAgICB9Cisj
ZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwg
dHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAor
ICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFwcGVuZE5vblRl
cm1pbmFsKEdyYXBoJiwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFt
cyk7CisgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5E
X05PREUpCisjdW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQorICAgIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVz
ZWQgaW50ZXJuYWxseSBmb3IgYmxvY2sgbGlua2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0
bHkgbWVhbmluZ2xlc3MKICAgICAvLyBmb3Igb3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5n
LgpAQCAtMTYwLDYgKzEyMywyMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFz
aWNCbG9jCiAgICAgCiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwog
ICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKKyAgICAKKyAgICBzdHJ1
Y3QgU1NBRGF0YSB7CisgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBmbHVzaEZvcm1hdEF0
SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGZsdXNoRm9ybWF0QXRUYWlsOwor
ICAgICAgICBPcGVyYW5kczxOb2RlKj4gYXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICBPcGVy
YW5kczxOb2RlKj4gYXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICBIYXNoU2V0PE5vZGUqPiBs
aXZlQXRIZWFkOworICAgICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRUYWlsOworICAgICAgICBI
YXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CisgICAgICAgIEhhc2hN
YXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKKyAgICAgICAgCisgICAgICAg
IFNTQURhdGEoQmFzaWNCbG9jayopOworICAgICAgICB+U1NBRGF0YSgpOworICAgIH07CisgICAg
T3duUHRyPFNTQURhdGE+IHNzYTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zZXJ0
aW9uU2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9ja0lubGluZXMuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Mywx
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgREZHX1ZBUklBRElDX1RF
TVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5kZWYgREZHX0RFRklO
RV9BUFBFTkRfTk9ERQogCisjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQ
cmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJh
bXMsIHZhbHVlQXJncykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0
IGlubGluZSBOb2RlKiBCYXNpY0Jsb2NrOjphcHBlbmROb25UZXJtaW5hbChHcmFwaCYgZ3JhcGgs
IFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAg
IHsgXAorICAgICAgICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHR5cGUgdmFsdWVQYXJh
bXNDb21tYSB2YWx1ZUFyZ3MpOyBcCisgICAgICAgIGFwcGVuZChsYXN0KCkpOyBcCisgICAgICAg
IGF0KHNpemUoKSAtIDIpID0gcmVzdWx0OyBcCisgICAgICAgIHJldHVybiByZXN1bHQ7IFwKKyAg
ICB9CisgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5E
X05PREUpCisjdW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitCbG9ja0luc2VydGlvblNldDo6QmxvY2tJbnNl
cnRpb25TZXQoR3JhcGgmIGdyYXBoKQorICAgIDogbV9ncmFwaChncmFwaCkKK3sKK30KKworQmxv
Y2tJbnNlcnRpb25TZXQ6On5CbG9ja0luc2VydGlvblNldCgpIHsgfQorCit2b2lkIEJsb2NrSW5z
ZXJ0aW9uU2V0OjppbnNlcnQoY29uc3QgQmxvY2tJbnNlcnRpb24mIGluc2VydGlvbikKK3sKKyAg
ICBtX2luc2VydGlvbnMuYXBwZW5kKGluc2VydGlvbik7Cit9CisKK3ZvaWQgQmxvY2tJbnNlcnRp
b25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2sp
Cit7CisgICAgaW5zZXJ0KEJsb2NrSW5zZXJ0aW9uKGluZGV4LCBibG9jaykpOworfQorCitCYXNp
Y0Jsb2NrKiBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCkKK3sKKyAgICBS
ZWZQdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZihuZXcgQmFzaWNCbG9jaygKKyAgICAg
ICAgVUlOVF9NQVgsCisgICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgIGluc2VydChpbmRleCwgYmxvY2spOworICAg
IHJldHVybiBibG9jay5nZXQoKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6
Omluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpCit7CisgICAgcmV0dXJuIGluc2VydChi
ZWZvcmUtPmluZGV4KTsKK30KKworYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCit7
CisgICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFu
eSBvcmRlci4gU28sIHdlIG5lZWQgdG8KKyAgICAvLyBzb3J0IHRoZW0gYmVmb3JlIHJ1bm5pbmcg
V1RGOjpleGVjdXRlSW5zZXJ0aW9ucy4KKyAgICBzdGQ6OnNvcnQobV9pbnNlcnRpb25zLmJlZ2lu
KCksIG1faW5zZXJ0aW9ucy5lbmQoKSk7CisKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2dyYXBo
Lm1fYmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAorICAgIC8vIFBydW5lIG91dCBlbXB0eSBl
bnRyaWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgIC8vIGhl
YWx0aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgdW5zaWduZWQg
dGFyZ2V0SW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgc291cmNlSW5kZXggPSAwOyBzb3Vy
Y2VJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOykgeworICAgICAgICBSZWZQdHI8QmFz
aWNCbG9jaz4gYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3NvdXJjZUluZGV4KytdOworICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fZ3JhcGgubV9i
bG9ja3NbdGFyZ2V0SW5kZXgrK10gPSBibG9jazsKKyAgICB9CisgICAgbV9ncmFwaC5tX2Jsb2Nr
cy5yZXNpemUodGFyZ2V0SW5kZXgpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBi
bG9ja3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nr
c1tpXS0+aW5kZXggPSBpOworICAgIAorICAgIC8vIEFuZCBmaW5hbGx5LCBpbnZhbGlkYXRlIGFs
bCBhbmFseXNlcyB0aGF0IHJlbHkgb24gdGhlIENGRy4KKyAgICBtX2dyYXBoLmludmFsaWRhdGVD
RkcoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUg
REZHQmxvY2tJbnNlcnRpb25TZXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSA8d3Rm
L0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPFJlZlB0cjxCYXNpY0Js
b2NrPiA+IEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitwdWJs
aWM6CisgICAgQmxvY2tJbnNlcnRpb25TZXQoR3JhcGgmIGdyYXBoKTsKKyAgICB+QmxvY2tJbnNl
cnRpb25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGluc2VydChjb25zdCBCbG9ja0luc2VydGlvbiYg
aW5zZXJ0aW9uKTsKKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFz
aWNCbG9jaz4gYmxvY2spOworICAgIEJhc2ljQmxvY2sqIGluc2VydChzaXplX3QgaW5kZXgpOwor
ICAgIEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpOworICAgIAor
ICAgIGJvb2wgZXhlY3V0ZSgpOworCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAg
IFZlY3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdCbG9ja0luc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBA
QCBwdWJsaWM6CiAgICAgICAgIC8vIGFmdGVyIGFsbCBwcmVkZWNlc3NvcnMgaGF2ZSBiZWVuIHZp
c2l0ZWQuIE9ubHkgbG9vcHMgd2lsbCBjYXVzZSB0aGlzIGFuYWx5c2lzIHRvCiAgICAgICAgIC8v
IHJldmlzaXQgYmxvY2tzLCBhbmQgdGhlIGFtb3VudCBvZiByZXZpc2l0aW5nIGlzIHByb3BvcnRp
b25hbCB0byBsb29wIGRlcHRoLgogICAgICAgICAKLSAgICAgICAgQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZShtX2dyYXBoKTsKKyAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplKCk7CiAgICAgICAg
IAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjEy
LDcgKzIxMiwxMCBAQCBlbnVtIEdyYXBoRm9ybSB7CiAgICAgLy8KICAgICAvLyBUaHJlYWRlZENQ
UyBmb3JtIGlzIHN1aXRhYmxlIGZvciBkYXRhIGZsb3cgYW5hbHlzaXMgKENGQSwgcHJlZGljdGlv
bgogICAgIC8vIHByb3BhZ2F0aW9uKSwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgYW5kIGNvZGUgZ2Vu
ZXJhdGlvbi4KLSAgICBUaHJlYWRlZENQUworICAgIFRocmVhZGVkQ1BTLAorICAgIAorICAgIC8v
IFNTQSBmb3JtLiBTZWUgREZHU1NBQ29udmVyc2lvblBoYXNlLmggZm9yIGEgZGVzY3JpcHRpb24u
CisgICAgU1NBCiB9OwogCiAvLyBEZXNjcmliZXMgdGhlIHN0YXRlIG9mIHRoZSBVbmlvbkZpbmQg
c3RydWN0dXJlIG9mIFZhcmlhYmxlQWNjZXNzRGF0YSdzLgpAQCAtMjUwLDYgKzI1MywxOSBAQCBp
bmxpbmUgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXNGb3JJc1Byb3ZlCiAgICAgcmV0dXJuIGlzUHJv
dmVkID8gSXNQcm92ZWQgOiBOZWVkc0NoZWNrOwogfQogCitlbnVtIEtpbGxTdGF0dXMgeyBEb2Vz
Tm90S2lsbCwgRG9lc0tpbGwgfTsKKworaW5saW5lIGJvb2wgZG9lc0tpbGwoS2lsbFN0YXR1cyBr
aWxsU3RhdHVzKQoreworICAgIEFTU0VSVChraWxsU3RhdHVzID09IERvZXNOb3RLaWxsIHx8IGtp
bGxTdGF0dXMgPT0gRG9lc0tpbGwpOworICAgIHJldHVybiBraWxsU3RhdHVzID09IERvZXNLaWxs
OworfQorCitpbmxpbmUgS2lsbFN0YXR1cyBraWxsU3RhdHVzRm9yRG9lc0tpbGwoYm9vbCBkb2Vz
S2lsbCkKK3sKKyAgICByZXR1cm4gZG9lc0tpbGwgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsOwor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgogYm9vbCBjaGVja0FuZFNldChU
JiBsZWZ0LCBVIHJpZ2h0KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9j
a0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhh
c2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBDcml0aWNhbEVkZ2VC
cmVha2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImNyaXRp
Y2FsIGVkZ2UgYnJlYWtpbmciKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsg
KytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBBbiBlZGdlIEEtPkIg
aXMgY3JpdGljYWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29yIGFuZCBCIGhhcyBtdWx0aXBs
ZQorICAgICAgICAgICAgLy8gcHJlZGVjZXNzb3JzLiBUaHVzIHdlIGZhaWwgZWFybHkgaWYgd2Ug
ZG9uJ3QgaGF2ZSBtdWx0aXBsZSBzdWNjZXNzb3JzLgorICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA8PSAxKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+
bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayoqIHN1
Y2Nlc3NvciA9ICZibG9jay0+c3VjY2Vzc29yKGkpOworICAgICAgICAgICAgICAgIGlmICgoKnN1
Y2Nlc3NvciktPnByZWRlY2Vzc29ycy5zaXplKCkgPD0gMSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYnJlYWtDcml0aWNh
bEVkZ2Uoc3VjY2Vzc29yKTsgCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5leGVjdXRlKCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIHZvaWQgYnJlYWtDcml0aWNhbEVkZ2UoQmFzaWNCbG9jayoqIHN1Y2Nlc3NvcikKKyAg
ICB7CisgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKKyAgICAgICAgCisgICAgICAgIEJhc2lj
QmxvY2sqIHBhZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZSgqc3VjY2Vzc29yKTsKKyAg
ICAgICAgcGFkLT5hcHBlbmROb2RlKAorICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1
bXAsICgqc3VjY2Vzc29yKS0+YXQoMCktPmNvZGVPcmlnaW4sIE9wSW5mbygqc3VjY2Vzc29yKSk7
CisgICAgICAgIAorICAgICAgICAqc3VjY2Vzc29yID0gcGFkOworICAgIH0KKyAgICAKKyAgICBC
bG9ja0luc2VydGlvblNldCBtX2luc2VydGlvblNldDsKK307CisKK2Jvb2wgcGVyZm9ybUNyaXRp
Y2FsRWRnZUJyZWFraW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIENyaXRpY2FsIEVkZ2UgQnJlYWtpbmcgUGhhc2UiKTsKKyAgICByZXR1
cm4gcnVuUGhhc2U8Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2Fs
RWRnZUJyZWFraW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKyNkZWZpbmUgREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOworCisvLyBJbnNlcnRzIGR1bW15IGJhc2ljIGJsb2NrcyB0byBicmVhayBj
cml0aWNhbCBlZGdlcy4gQW4gZWRnZSBBLT5CIGlzCisvLyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0
aXBsZSBzdWNjZXNzb3JzIGFuZCBCIGhhcyBtdWx0aXBsZSBwcmVkZXNzb3JzLgorCitib29sIHBl
cmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAg
cHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAgIEFTU0VSVChtX2dy
YXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyB8fCBtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAg
ICAgICAKICAgICAgICAgLy8gRmlyc3QgcmVzZXQgdGhlIGNvdW50cyB0byAwIGZvciBhbGwgbm9k
ZXMuCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpAQCAtNzUsMTAgKzc3LDI5
IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgd2hpbGUgKCFtX3dvcmts
aXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fd29ya2xpc3QubGFz
dCgpOwotICAgICAgICAgICAgbV93b3JrbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICBB
U1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7IC8vIEl0IHNob3VsZCBub3QgYmUgb24gdGhl
IHdvcmtsaXN0IHVubGVzcyBpdCdzIHJlZidlZC4KLSAgICAgICAgICAgIERGR19OT0RFX0RPX1RP
X0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGNvdW50RWRnZSk7CisgICAgICAgICAgICB3aGlsZSAo
IW1fd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1f
d29ya2xpc3QubGFzdCgpOworICAgICAgICAgICAgICAgIG1fd29ya2xpc3QucmVtb3ZlTGFzdCgp
OworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQg
c2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgorICAgICAg
ICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGNvdW50RWRn
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgICAgICAgICAvLyBGaW5kIFBoaS0+VXBzaWxvbiBl
ZGdlcywgd2hpY2ggYXJlIHJlcHJlc2VudGVkIGFzIG1ldGEtZGF0YSBpbiB0aGUKKyAgICAgICAg
ICAgICAgICAvLyBVcHNpbG9uLgorICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpICE9IFVwc2lsb24pCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+cGhpKCktPnNo
b3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnROb2RlKG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
IHsKQEAgLTk0LDggKzExNSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLmlzUHJvdmVkKCkgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IFVudHlwZWRVc2UpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAg
ICAgICAgICAgICAgIGNhc2UgTW92SGludDogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpID09IChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQ
UykpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkud2lsbE5vdEhhdmVD
aGVjaygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2li
aWxpdHkgdGhhdCBVSW50MzJUb051bWJlciBpcyBkZWFkIGJ1dCBpdHMKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGNoaWxkIGlzbid0OyBpZiBzbyB0aGVuIHdlIHNob3VsZCBNb3ZIaW50IHRo
ZSBjaGlsZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNo
b3VsZEdlbmVyYXRlKCkKQEAgLTExNyw4ICsxNDAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAg
IGNhc2UgU2V0QXJndW1lbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTGVhdmUgdGhlbSBh
cyBub3Qgc2hvdWxkR2VuZXJhdGUuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7CkBAIC0xMjYsNyAr
MTUxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
aGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxk
KCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSB8fCBlZGdlLmlzUHJv
dmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWVkZ2UgfHwgZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
UGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgZWRnZSk7CkBAIC0xNTgsMjEgKzE4MywyNSBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgYW4gInVucHJvdmVkIiB1bnR5
cGVkIHVzZSBmb3IgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlLiBUaGUgQ0ZBCiAgICAgICAgIC8v
IHdpbGwganVzdCBub3QgaGF2ZSBnb3R0ZW4gYXJvdW5kIHRvIGl0LgotICAgICAgICBpZiAoZWRn
ZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgIGlm
IChlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
aWYgKCFlZGdlLT5wb3N0Zml4UmVmKCkpCiAgICAgICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChl
ZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY291bnROb2RlKE5vZGUqIG5vZGUp
CisgICAgeworICAgICAgICBpZiAobm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICB9CisgICAgCiAgICAg
dm9pZCBjb3VudEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIC8vIERvbid0
IGNvdW50IGVkZ2VzIHRoYXQgYXJlIGFscmVhZHkgY291bnRlZCBmb3IgdGhlaXIgdHlwZSBjaGVj
a3MuCi0gICAgICAgIGlmICghKGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmIChl
ZGdlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgIGlmIChlZGdlLndpbGxIYXZlQ2hlY2soKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV93b3JrbGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkp
OworICAgICAgICBjb3VudE5vZGUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTE4MSw3
ICsyMTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRy
ZW4uY2hpbGQoaSk7CiAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgp
ID09IFVudHlwZWRVc2UpCisgICAgICAgICAgICBpZiAoZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkp
CiAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0pOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShyZXZp
c2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBAIHZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgICAgICAgICAgb3V0LnByaW50KCJDaGVjazoiKTsKICAgICAgICAg
b3V0LnByaW50KHVzZUtpbmQoKSwgIjoiKTsKICAgICB9CisgICAgaWYgKGRvZXNLaWxsKCkpCisg
ICAgICAgIG91dC5wcmludCgiS2lsbDoiKTsKICAgICBvdXQucHJpbnQobm9kZSgpKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDE1MjU4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSwxMiArMzksMTIgQEAgY2xhc3MgQWRqYWNlbmN5TGlzdDsKIAogY2xhc3MgRWRnZSB7CiBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgRWRnZShOb2RlKiBub2RlID0gMCwgVXNlS2luZCB1c2VLaW5kID0g
VW50eXBlZFVzZSwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMgPSBOZWVkc0NoZWNrKQorICAgIGV4
cGxpY2l0IEVkZ2UoTm9kZSogbm9kZSA9IDAsIFVzZUtpbmQgdXNlS2luZCA9IFVudHlwZWRVc2Us
IFByb29mU3RhdHVzIHByb29mU3RhdHVzID0gTmVlZHNDaGVjaywgS2lsbFN0YXR1cyBraWxsU3Rh
dHVzID0gRG9lc05vdEtpbGwpCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgOiBtX2VuY29k
ZWRXb3JkKG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQsIHByb29mU3RhdHVzKSkKKyAgICAgICAgOiBt
X2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQsIHByb29mU3RhdHVzLCBraWxsU3Rh
dHVzKSkKICNlbHNlCiAgICAgICAgIDogbV9ub2RlKG5vZGUpCi0gICAgICAgICwgbV9lbmNvZGVk
V29yZChtYWtlV29yZCh1c2VLaW5kLCBwcm9vZlN0YXR1cykpCisgICAgICAgICwgbV9lbmNvZGVk
V29yZChtYWtlV29yZCh1c2VLaW5kLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cykpCiAjZW5kaWYK
ICAgICB7CiAgICAgfQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROb2Rl
KE5vZGUqIG5vZGUpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1fZW5jb2Rl
ZFdvcmQgPSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCksIHByb29mU3RhdHVzKCkpOworICAgICAg
ICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cygp
LCBraWxsU3RhdHVzKCkpOwogI2Vsc2UKICAgICAgICAgbV9ub2RlID0gbm9kZTsKICNlbmRpZgpA
QCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobm9kZSgpKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9k
ZSgpLCB1c2VLaW5kLCBwcm9vZlN0YXR1cygpKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1h
a2VXb3JkKG5vZGUoKSwgdXNlS2luZCwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1cygpKTsKICNl
bHNlCiAgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZCh1c2VLaW5kLCBwcm9vZlN0YXR1
cygpKTsKICNlbmRpZgpAQCAtMTA4LDkgKzEwOCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IEFTU0VSVChub2RlKCkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1fZW5jb2RlZFdv
cmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMpOworICAgICAgICBt
X2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kKCksIHByb29mU3RhdHVzLCBr
aWxsU3RhdHVzKCkpOwogI2Vsc2UKLSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKHVz
ZUtpbmQoKSwgcHJvb2ZTdGF0dXMpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQo
dXNlS2luZCgpLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cygpKTsKICNlbmRpZgogICAgIH0KICAg
ICBib29sIGlzUHJvdmVkKCkgY29uc3QKQEAgLTEyMiw2ICsxMjIsMzYgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gcHJvb2ZTdGF0dXMoKSA9PSBOZWVkc0NoZWNrOwogICAgIH0KICAgICAKKyAg
ICBib29sIHdpbGxOb3RIYXZlQ2hlY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
UHJvdmVkKCkgfHwgdXNlS2luZCgpID09IFVudHlwZWRVc2U7CisgICAgfQorICAgIGJvb2wgd2ls
bEhhdmVDaGVjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIXdpbGxOb3RIYXZlQ2hl
Y2soKTsKKyAgICB9CisgICAgCisgICAgS2lsbFN0YXR1cyBraWxsU3RhdHVzVW5jaGVja2VkKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraWxsU3RhdHVzRm9yRG9lc0tpbGwobV9lbmNv
ZGVkV29yZCAmIDIpOworICAgIH0KKyAgICBLaWxsU3RhdHVzIGtpbGxTdGF0dXMoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7CisgICAgICAgIHJldHVybiBraWxsU3RhdHVz
VW5jaGVja2VkKCk7CisgICAgfQorICAgIHZvaWQgc2V0S2lsbFN0YXR1cyhLaWxsU3RhdHVzIGtp
bGxTdGF0dXMpCisgICAgeworICAgICAgICBBU1NFUlQobm9kZSgpKTsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kKCks
IHByb29mU3RhdHVzKCksIGtpbGxTdGF0dXMpOworI2Vsc2UKKyAgICAgICAgbV9lbmNvZGVkV29y
ZCA9IG1ha2VXb3JkKHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1cyk7CisjZW5k
aWYKKyAgICB9CisgICAgYm9vbCBkb2VzS2lsbCgpIGNvbnN0IHsgcmV0dXJuIERGRzo6ZG9lc0tp
bGwoa2lsbFN0YXR1cygpKTsgfQorICAgIGJvb2wgZG9lc05vdEtpbGwoKSBjb25zdCB7IHJldHVy
biAhZG9lc0tpbGwoKTsgfQorICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAh
IW5vZGUoKTsgfQogICAgIAogICAgIHR5cGVkZWYgdm9pZCogRWRnZTo6KlVuc3BlY2lmaWVkQm9v
bFR5cGU7CkBAIC0xNTAsMjAgKzE4MCwyMCBAQCBwcml2YXRlOgogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNjsgfQogICAgIAotICAgIHN0
YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kLCBQcm9v
ZlN0YXR1cyBwcm9vZlN0YXR1cykKKyAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKE5vZGUq
IG5vZGUsIFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMsIEtpbGxTdGF0
dXMga2lsbFN0YXR1cykKICAgICB7CiAgICAgICAgIEFTU0VSVChzaXplb2Yobm9kZSkgPT0gOCk7
CiAgICAgICAgIHVpbnRwdHJfdCBzaGlmdGVkVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pihub2RlKSA8PCBzaGlmdCgpOwogICAgICAgICBBU1NFUlQoKHNoaWZ0ZWRWYWx1ZSA+PiBzaGlm
dCgpKSA9PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSk7CiAgICAgICAgIEFTU0VSVCh1
c2VLaW5kID49IDAgJiYgdXNlS2luZCA8IExhc3RVc2VLaW5kKTsKLSAgICAgICAgQVNTRVJUKChz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KExhc3RVc2VLaW5kKSA8PCAxKSA8PSAoc3RhdGljX2Nhc3Q8
dWludHB0cl90PigxKSA8PCBzaGlmdCgpKSk7Ci0gICAgICAgIHJldHVybiBzaGlmdGVkVmFsdWUg
fCAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAxKSB8IERGRzo6aXNQcm92ZWQo
cHJvb2ZTdGF0dXMpOworICAgICAgICBBU1NFUlQoKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTGFz
dFVzZUtpbmQpIDw8IDIpIDw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDIpIDw8IHNoaWZ0KCkp
KTsKKyAgICAgICAgcmV0dXJuIHNoaWZ0ZWRWYWx1ZSB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1cykgPDwgMSkgfCBERkc6
OmlzUHJvdmVkKHByb29mU3RhdHVzKTsKICAgICB9CiAgICAgCiAjZWxzZQotICAgIHN0YXRpYyB1
aW50cHRyX3QgbWFrZVdvcmQoVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1
cykKKyAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZT
dGF0dXMgcHJvb2ZTdGF0dXMsIEtpbGxTdGF0dXMga2lsbFN0YXR1cykKICAgICB7Ci0gICAgICAg
IHJldHVybiAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAxKSB8IERGRzo6aXNQ
cm92ZWQocHJvb2ZTdGF0dXMpOworICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpkb2VzS2lsbChraWxsU3RhdHVzKSA8PCAxKSB8IERG
Rzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpOwogICAgIH0KICAgICAKICAgICBOb2RlKiBtX25vZGU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwMSw2ICs5MDEsNyBAQCBwcml2YXRlOgogCiAgICAg
ICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNl
IFVwc2lsb246CiAgICAgICAgIGNhc2UgRm9yd2FyZEludDMyVG9Eb3VibGU6CiAgICAgICAgIGNh
c2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1h
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
Rm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdGbHVzaEZvcm1hdC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVz
cGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBGbHVzaEZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNo
IChmb3JtYXQpIHsKKyAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgb3V0LnByaW50KCJEZWFk
Rmx1c2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAg
ICBvdXQucHJpbnQoIkZsdXNoZWRJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBG
bHVzaGVkRG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWREb3VibGUiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIG91dC5wcmludCgiRmx1
c2hlZENlbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Cisg
ICAgICAgIG91dC5wcmludCgiRmx1c2hlZEJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZEpTVmFsdWUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdGbHVzaEZvcm1hdF9oCisjZGVmaW5l
IERGR0ZsdXNoRm9ybWF0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIEZsdXNoRm9ybWF0IHsKKyAgICBEZWFkRmx1
c2gsCisgICAgRmx1c2hlZEludDMyLAorICAgIEZsdXNoZWREb3VibGUsCisgICAgRmx1c2hlZENl
bGwsCisgICAgRmx1c2hlZEJvb2xlYW4sCisgICAgRmx1c2hlZEpTVmFsdWUKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpGbHVzaEZvcm1hdCk7CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdGbHVz
aEZvcm1hdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgor
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7Citw
dWJsaWM6CisgICAgRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQorICAg
ICAgICA6IFBoYXNlKGdyYXBoLCAiZmx1c2gtbGl2ZW5lc3MgYW5hbHlzaXMiKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgu
bV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBMaXZlbmVzcyBpcyBhIGJhY2t3
YXJkcyBhbmFseXNpczsgdGhlIHJvb3RzIGFyZSB0aGUgYmxvY2tzIHRoYXQKKyAgICAgICAgLy8g
ZW5kIGluIGEgdGVybWluYWwgKFJldHVybi9UaHJvdy9UaHJvd1JlZmVyZW5jZUVycm9yKS4gRm9y
IG5vdywgd2UKKyAgICAgICAgLy8gdXNlIGEgZml4cG9pbnQgZm9ybXVsYXRpb24gc2luY2UgbGl2
ZW5lc3MgaXMgYSByYXBpZCBhbmFseXNpcyB3aXRoCisgICAgICAgIC8vIGNvbnZlcmdlbmNlIGd1
YXJhbnRlZWQgYWZ0ZXIgTyhjb25uZWN0aXZpdHkpLgorICAgICAgICAKKyAgICAgICAgLy8gU3Rh
cnQgYnkgYXNzdW1pbmcgdGhhdCBldmVyeXRoaW5nIGlzIGRlYWQuCisgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkLmZpbGwoRGVhZEZsdXNo
KTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRUYWlsLmZpbGwoRGVhZEZs
dXNoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9j
aGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJv
Y2VzcyhibG9ja0luZGV4KTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nl
c3MoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+
Zmx1c2hGb3JtYXRBdFRhaWw7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCB2YXJpYWJsZS0+
bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCksIERlYWRGbHVzaCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1
c2hGb3JtYXQoKTsKKyAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhcmlhYmxlLT5s
b2NhbCgpLCBmb3JtYXQsIGZvcm1hdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAobV9saXZlID09IGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
YmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbaV07CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2xpdmUuc2l6ZSgpOyBqLS07KSB7CisgICAgICAg
ICAgICAgICAgRmx1c2hGb3JtYXQmIHByZWRlY2Vzc29yRm9ybWF0ID0gcHJlZGVjZXNzb3ItPnNz
YS0+Zmx1c2hGb3JtYXRBdFRhaWxbal07CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgbXlG
b3JtYXQgPSBtX2xpdmVbal07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
VGhyZWUgcG9zc2liaWxpdGllczoKKyAgICAgICAgICAgICAgICAvLyAxKSBQcmVkZWNlc3NvciBm
b3JtYXQgaXMgRGVhZCwgaW4gd2hpY2ggY2FzZSBpdCBhY3F1aXJlcyBvdXIgZm9ybWF0LgorICAg
ICAgICAgICAgICAgIC8vIDIpIFByZWRlY2Vzc29yIGZvcm1hdCBpcyBpZGVudGljYWwgdG8gb3Vy
IGZvcm1hdCwgaW4gd2hpY2ggY2FzZSB3ZQorICAgICAgICAgICAgICAgIC8vICAgIGRvIG5vdGhp
bmcuCisgICAgICAgICAgICAgICAgLy8gMykgUHJlZGVjZXNzb3IgZm9ybWF0IGlzIGRpZmZlcmVu
dCBmcm9tIG91ciBmb3JtYXQgYW5kIGl0J3Mgbm90IERlYWQsCisgICAgICAgICAgICAgICAgLy8g
ICAgaW4gd2hpY2ggY2FzZSB3ZSBoYXZlIGFuIGVycm9uZW91cyBzZXQgb2YgRmx1c2hlcyBhbmQg
U2V0TG9jYWxzLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVkZWNl
c3NvckZvcm1hdCA9PSBEZWFkRmx1c2gpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNz
b3JGb3JtYXQgPSBteUZvcm1hdDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVk
ZWNlc3NvckZvcm1hdCA9PSBteUZvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAg
ICAgICAgICAgIkJhZCBGbHVzaCBtZXJnZSBhdCBlZGdlICIsICpwcmVkZWNlc3NvciwgIiAtPiAi
LCAqYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICIsIGxvY2FsIHZhcmlhYmxlIHIiLCBtX2xp
dmUub3BlcmFuZEZvckluZGV4KGopLCAiOiAiLCAqcHJlZGVjZXNzb3IsCisgICAgICAgICAgICAg
ICAgICAgICIgaGFzICIsIHByZWRlY2Vzc29yRm9ybWF0LCAiIGFuZCAiLCAqYmxvY2ssICIgaGFz
ICIsIG15Rm9ybWF0LCAiLlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSVIgYXQgdGlt
ZSBvZiBlcnJvcjpcbiIpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAg
ICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgdm9pZCBzZXRGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBvcGVyYW5kLCBGbHVzaEZvcm1h
dCBub2RlRm9ybWF0LCBGbHVzaEZvcm1hdCBuZXdGb3JtYXQpCisgICAgeworICAgICAgICBGbHVz
aEZvcm1hdCYgY3VycmVudEZvcm1hdCA9IG1fbGl2ZS5vcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICAKKyAgICAgICAgLy8gRG8gc29tZSB1c2VmdWwgdmVyaWZpY2F0aW9uIGhlcmUuIEl0J3MgT0sg
aWYgd2UgdGhpbmsgdGhhdCB0aGUKKyAgICAgICAgLy8gZmx1c2ggZm9ybWF0IGlzIGRlYWQgYXQg
dGhlIHRpbWUgdGhhdCB3ZSBzZWUgdGhlIG5vZGUuIEJ1dCBpdCdzCisgICAgICAgIC8vIG5vdCBP
SyBpZiBib3RoIHRoZSBub2RlIGFuZCBtX2xpdmUgc2VlIGEgRmx1c2hGb3JtYXQgYW5kIHRoZXkg
ZG8KKyAgICAgICAgLy8gbm90IGFncmVlIG9uIGl0LgorICAgICAgICAKKyAgICAgICAgaWYgKGN1
cnJlbnRGb3JtYXQgPT0gRGVhZEZsdXNoIHx8IGN1cnJlbnRGb3JtYXQgPT0gbm9kZUZvcm1hdCkg
eworICAgICAgICAgICAgY3VycmVudEZvcm1hdCA9IG5ld0Zvcm1hdDsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAg
ICJCYWQgRmx1c2ggbWVyZ2UgYXQgbm9kZSAiLCBub2RlLCAiLCByIiwgb3BlcmFuZCwgIjogbm9k
ZSBjbGFpbXMgIiwgbm9kZUZvcm1hdCwKKyAgICAgICAgICAgICIgYnV0IGJhY2t3YXJkcyBmbG93
IGNsYWltcyAiLCBjdXJyZW50Rm9ybWF0LCAiLlxuIik7CisgICAgICAgIGRhdGFMb2coIklSIGF0
IHRpbWUgb2YgZXJyb3I6XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIENS
QVNIKCk7CisgICAgfQorICAgIAorICAgIEZsdXNoRm9ybWF0IGZsdXNoRm9ybWF0KE5vZGUqIG5v
ZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZs
dXNoRm9ybWF0KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgbV9jaGFuZ2VkOworICAgIE9wZXJh
bmRzPEZsdXNoRm9ybWF0PiBtX2xpdmU7Cit9OworCitib29sIHBlcmZvcm1GbHVzaExpdmVuZXNz
QW5hbHlzaXMoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVn
aW9uKCJERkcgRmx1c2gtTGl2ZW5lc3MgQW5hbHlzaXMgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVu
UGhhc2U8Rmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKyNkZWZpbmUgREZHRmx1c2hM
aXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb21wdXRlcyBCYXNp
Y0Jsb2NrOjpzc2EtPmZsdXNoRm9ybWF0QXRIZWFkCisKK2Jvb2wgcGVyZm9ybUZsdXNoTGl2ZW5l
c3NBbmFseXNpcyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNp
c1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzSW5kZXhpbmdUeXBl
KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgSW5kZXhpbmdUeXBlRHVtcChub2RlLT5pbmRl
eGluZ1R5cGUoKSkpOworICAgIGlmIChub2RlLT5oYXNQaGkoKSkKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiXiIsIG5vZGUtPnBoaSgpLT5pbmRleCgpKTsKICAgICBpZiAobm9kZS0+aGFzRXhl
Y3V0aW9uQ291bnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9k
ZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7CiAgICAgaWYgKG9wID09IEpTQ29uc3RhbnQpIHsKQEAg
LTMxMywyMSArMzE1LDIzIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVh
bSYKICAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICBv
dXQucHJpbnQocHJlZml4LCAiICBQaGkgTm9kZXM6Iik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlKiBwaGlOb2RlID0g
YmxvY2stPnBoaXNbaV07Ci0gICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAm
JiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlO
b2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOwotICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkp
IHsKLSAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgp
KTsKLSAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAg
IG91dC5wcmludCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQyKCktPmluZGV4KCkpOwotICAgICAgICAg
ICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDMoKS0+aW5kZXgoKSk7CisgICAgaWYgKCFibG9jay0+
cGhpcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgUGhpIE5vZGVz
OiIpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBoaXNbaV07CisgICAg
ICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2Rl
ID09IER1bXBMaXZlUGhpc09ubHkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5yZWZD
b3VudCgpLCAiPi0+KCIpOworICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7Cisg
ICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4KCkp
OworICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgeworICAgICAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMigpLT5pbmRleCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDMoKS0+aW5kZXgoKSk7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCIp
IiwgaSArIDEgPCBibG9jay0+cGhpcy5zaXplKCkgPyAiLCIgOiAiIik7CiAgICAgICAgIH0KLSAg
ICAgICAgb3V0LnByaW50KCIpIiwgaSArIDEgPCBibG9jay0+cGhpcy5zaXplKCkgPyAiLCIgOiAi
Iik7CiAgICAgfQogICAgIG91dC5wcmludCgiXG4iKTsKIH0KQEAgLTM0NSw3ICszNDksNyBAQCB2
b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgIGR1bXBCbG9ja0hlYWRl
cihvdXQsICIiLCBibG9jaywgRHVtcEFsbFBoaXMpOwogICAgICAgICBvdXQucHJpbnQoIiAgdmFy
cyBiZWZvcmU6ICIpOwogICAgICAgICBpZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCi0gICAgICAg
ICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgb3V0KTsKKyAgICAgICAgICAg
IG91dC5wcmludChibG9jay0+dmFsdWVzQXRIZWFkKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKQEAgLTM1
OSw3ICszNjMsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAg
IH0KICAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYWZ0ZXI6ICIpOwogICAgICAgICBpZiAoYmxv
Y2stPmNmYUhhc1Zpc2l0ZWQpCi0gICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVl
c0F0VGFpbCwgb3V0KTsKKyAgICAgICAgICAgIG91dC5wcmludChibG9jay0+dmFsdWVzQXRUYWls
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAgICAg
ICAgIG91dC5wcmludCgiXG4iKTsKQEAgLTQ3OCw2ICs0ODIsMjggQEAgdm9pZCBHcmFwaDo6c3Vi
c3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvYwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQor
Cit2b2lkIEdyYXBoOjphZGRGb3JEZXB0aEZpcnN0U29ydChWZWN0b3I8QmFzaWNCbG9jayo+JiBy
ZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgSGFzaFNldDxCYXNpY0Js
b2NrKj4mIHNlZW4sIEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGlmIChzZWVuLmNvbnRhaW5z
KGJsb2NrKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJlc3VsdC5hcHBlbmQoYmxvY2sp
OworICAgIHdvcmtsaXN0LmFwcGVuZChibG9jayk7CisgICAgc2Vlbi5hZGQoYmxvY2spOworfQor
Cit2b2lkIEdyYXBoOjpnZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9j
ayo+JiByZXN1bHQpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gd29ya2xpc3Q7Cisg
ICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gc2VlbjsKKyAgICBhZGRGb3JEZXB0aEZpcnN0U29ydChy
ZXN1bHQsIHdvcmtsaXN0LCBzZWVuLCBibG9jaygwKSk7CisgICAgd2hpbGUgKCF3b3JrbGlzdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFz
dCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBp
LS07KQorICAgICAgICAgICAgYWRkRm9yRGVwdGhGaXJzdFNvcnQocmVzdWx0LCB3b3JrbGlzdCwg
c2VlbiwgYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgfQorfQogICAgIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShy
ZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0MSw2ICs2NDEsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBpbnZhbGlkYXRlQ0ZHKCk7CiAgICAgCisgICAgdm9pZCBnZXRCbG9ja3NJbkRlcHRoRmlyc3RP
cmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpOworICAgIAogICAgIFByb2ZpbGVyOjpD
b21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0
KCk7IH0KICAgICAKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1
cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9CkBAIC02NzksNiArNjgxLDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9jayos
IDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IpOworICAg
IHZvaWQgYWRkRm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBW
ZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEhhc2hTZXQ8QmFzaWNCbG9jayo+JiBz
ZWVuLCBCYXNpY0Jsb2NrKik7CiAgICAgCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVk
aWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxk
U3BlY3VsYXRlSW50ZWdlciwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTUyNTgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsMjYgKzMxLDEyIEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
ICJERkdHcmFwaC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotY2xhc3MgSW5z
ZXJ0aW9uIHsKLXB1YmxpYzoKLSAgICBJbnNlcnRpb24oKSB7IH0KLSAgICAKLSAgICBJbnNlcnRp
b24oc2l6ZV90IGluZGV4LCBOb2RlKiBlbGVtZW50KQotICAgICAgICA6IG1faW5kZXgoaW5kZXgp
Ci0gICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBz
aXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Ci0gICAgTm9kZSogZWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9p
bmRleDsKLSAgICBOb2RlKiBtX2VsZW1lbnQ7Ci19OwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxO
b2RlKj4gSW5zZXJ0aW9uOwogCiBjbGFzcyBJbnNlcnRpb25TZXQgewogcHVibGljOgpAQCAtODEs
MjAgKzY3LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKiBi
bG9jaykKICAgICB7Ci0gICAgICAgIGlmICghbV9pbnNlcnRpb25zLnNpemUoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgYmxvY2stPmdyb3coYmxvY2stPnNpemUoKSArIG1faW5zZXJ0
aW9ucy5zaXplKCkpOwotICAgICAgICBzaXplX3QgbGFzdEluZGV4ID0gYmxvY2stPnNpemUoKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaW5kZXhJbkluc2VydGlvbnMgPSBtX2luc2VydGlvbnMuc2l6
ZSgpOyBpbmRleEluSW5zZXJ0aW9ucy0tOykgewotICAgICAgICAgICAgSW5zZXJ0aW9uJiBpbnNl
cnRpb24gPSBtX2luc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdOwotICAgICAgICAgICAgc2l6
ZV90IGZpcnN0SW5kZXggPSBpbnNlcnRpb24uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOwot
ICAgICAgICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwot
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGxhc3RJbmRleDsgLS1pID4gZmlyc3RJbmRleDsp
Ci0gICAgICAgICAgICAgICAgYmxvY2stPmF0KGkpID0gYmxvY2stPmF0KGkgLSBpbmRleE9mZnNl
dCk7Ci0gICAgICAgICAgICBibG9jay0+YXQoZmlyc3RJbmRleCkgPSBpbnNlcnRpb24uZWxlbWVu
dCgpOwotICAgICAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleDsKLSAgICAgICAgfQotICAg
ICAgICBtX2luc2VydGlvbnMucmVzaXplKDApOworICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucygq
YmxvY2ssIG1faW5zZXJ0aW9ucyk7CiAgICAgfQogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFw
aDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0
LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVzc0FuYWx5c2lzUGhhc2Uo
R3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAibGl2ZW5lc3MgYW5hbHlzaXMi
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBMaXZlbmVz
cyBpcyBhIGJhY2t3YXJkcyBhbmFseXNpczsgdGhlIHJvb3RzIGFyZSB0aGUgYmxvY2tzIHRoYXQK
KyAgICAgICAgLy8gZW5kIGluIGEgdGVybWluYWwgKFJldHVybi9UaHJvdy9UaHJvd1JlZmVyZW5j
ZUVycm9yKS4gRm9yIG5vdywgd2UKKyAgICAgICAgLy8gdXNlIGEgZml4cG9pbnQgZm9ybXVsYXRp
b24gc2luY2UgbGl2ZW5lc3MgaXMgYSByYXBpZCBhbmFseXNpcyB3aXRoCisgICAgICAgIC8vIGNv
bnZlcmdlbmNlIGd1YXJhbnRlZWQgYWZ0ZXIgTyhjb25uZWN0aXZpdHkpLgorICAgICAgICAKKyAg
ICAgICAgLy8gU3RhcnQgYnkgYXNzdW1pbmcgdGhhdCBldmVyeXRoaW5nIGlzIGRlYWQuCisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY2xlYXIoKTsK
KyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY2xlYXIoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9ja0luZGV4KTsK
KyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoQmxvY2tJbmRleCBibG9j
a0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUg
aW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAgICAgICAgLy8gSGFzaFNl
dHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKKyAgICAg
ICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7Cisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246CisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgLy8gICAgbjogVXBzaWxvbigkcCwgQHgpCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFuZCB1c2VzIEB4LgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhpOgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVzZSBub3IgYSBkZWYuCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2RlOgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwgQGMu
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgY2FzZSBVcHNpbG9uOiB7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+
cGhpKCk7CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkpOworICAgICAgICAgICAg
ICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICAgICAgbV9saXZlLmFkZChub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAgICAg
ICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRDaGlsZFVz
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAg
YmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5hZGQobV9saXZlLmJlZ2luKCksIG1fbGl2ZS5lbmQoKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UmIGVkZ2UpCisg
ICAgeworICAgICAgICBhZGRDaGlsZFVzZShlZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
ZGRDaGlsZFVzZShFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgZWRnZS5zZXRLaWxsU3RhdHVz
KG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkpLmlzTmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RL
aWxsKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7CisgICAgSGFzaFNldDxOb2Rl
Kj4gbV9saXZlOworfTsKKworYm9vbCBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYgZ3Jh
cGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBMaXZlbmVzcyBB
bmFseXNpcyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxMaXZlbmVzc0FuYWx5c2lzUGhh
c2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2
ZW5lc3NBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisjZGVmaW5lIERG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbXB1dGVzIEJh
c2ljQmxvY2s6OnNzYS0+bGl2ZUF0SGVhZC9saXZlQXRUYWlsLgorCitib29sIHBlcmZvcm1MaXZl
bmVzc0FuYWx5c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1
MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MzgsNiArNTM4LDE3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAgICBi
b29sIGhhc1BoaSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBVcHNpbG9uOworICAg
IH0KKyAgICAKKyAgICBOb2RlKiBwaGkoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1BoaSgp
KTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxOb2RlKj4obV9vcEluZm8pOworICAgIH0K
KyAgICAKICAgICBib29sIGhhc0lkZW50aWZpZXIoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChv
cCgpKSB7CkBAIC03NzMsMTYgKzc4NCwxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3BJ
bmZvMiA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAg
QmFzaWNCbG9jayogdGFrZW5CbG9jaygpCisgICAgQmFzaWNCbG9jayomIHRha2VuQmxvY2soKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOwotICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbyk7CisgICAgICAgIHJldHVy
biAqYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZvKTsKICAgICB9CiAgICAgCi0g
ICAgQmFzaWNCbG9jayogbm90VGFrZW5CbG9jaygpCisgICAgQmFzaWNCbG9jayomIG5vdFRha2Vu
QmxvY2soKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwotICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbzIpOworICAgICAgICByZXR1cm4g
KmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbzIpOwogICAgIH0KICAgICAKICAg
ICBTd2l0Y2hEYXRhKiBzd2l0Y2hEYXRhKCkKQEAgLTgwNSw3ICs4MTYsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVu
c2lnbmVkIGluZGV4KQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgp
CiAgICAgewogICAgICAgICBpZiAoaXNTd2l0Y2goKSkgewogICAgICAgICAgICAgaWYgKGluZGV4
IDwgc3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkpCkBAIC04MjAsMTEgKzgzMSwxMSBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgICAgICByZXR1cm4gbm90VGFrZW5CbG9jaygpOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHRha2VuQmxvY2soKTsKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JGb3JDb25kaXRpb24o
Ym9vbCBjb25kaXRpb24pCisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvckZvckNvbmRpdGlvbihi
b29sIGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKICAgICAg
ICAgcmV0dXJuIGNvbmRpdGlvbiA/IHRha2VuQmxvY2soKSA6IG5vdFRha2VuQmxvY2soKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1MjU4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNiArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAg
ICAgbWFjcm8oTW92SGludCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oWm9tYmllSGlu
dCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0
ZSkgXAorICAgIG1hY3JvKFVwc2lsb24sIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRv
T1NSKSBcCiAgICAgbWFjcm8oUGhpLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09T
UikgXAogICAgIG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0
KSBcCiAgICAgbWFjcm8oUGhhbnRvbUxvY2FsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNO
b3RFeGl0KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFz
ZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBo
YXNlIHsKK3B1YmxpYzoKKyAgICBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKEdyYXBoJiBn
cmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIk9TUiBhdmFpbGFiaWxpdHkgYW5hbHlzaXMi
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8QmFz
aWNCbG9jayo+IGRlcHRoRmlyc3Q7CisgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZp
cnN0T3JkZXIoZGVwdGhGaXJzdCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBkZXB0aEZpcnN0W2ldOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxh
YmlsaXR5QXRIZWFkLmZpbGwoMCk7CisgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxp
dHlBdFRhaWwuZmlsbCgwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtpXTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gV2UgZWRpdCBhdmFpbGFiaWxpdHlBdFRhaWwgaW4tcGxhY2UsIGJ1dCBmaXJzdCBpbml0
aWFsaXplIGl0IHRvCisgICAgICAgICAgICAvLyBhdmFpbGFiaWxpdHlBdEhlYWQuCisgICAgICAg
ICAgICBPcGVyYW5kczxOb2RlKj4mIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWlsYWJp
bGl0eUF0VGFpbDsKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eSA9IGJsb2NrLT5zc2EtPmF2YWls
YWJpbGl0eUF0SGVhZDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewor
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNl
dExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICBj
YXNlIE1vdkhpbnRBbmRDaGVjazogeworICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHku
b3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSAwOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgai0tOykgeworICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3Ioaik7Cisg
ICAgICAgICAgICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBzdWNjZXNzb3JBdmFpbGFiaWxpdHkgPSBz
dWNjZXNzb3ItPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgayA9IGF2YWlsYWJpbGl0eS5zaXplKCk7IGstLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZSogbXlOb2RlID0gYXZhaWxhYmlsaXR5W2tdOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIW15Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZl
QXRIZWFkLmNvbnRhaW5zKG15Tm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCB0aGlzIG1heSBvdmVyd3JpdGUgYXZhaWxhYmlsaXR5IHdpdGggYSBib2d1cyBub2RlCisgICAg
ICAgICAgICAgICAgICAgIC8vIGF0IG1lcmdlIHBvaW50cy4gVGhpcyBpcyBmaW5lLCBzaW5jZSBt
ZXJnZSBwb2ludHMgaGF2ZQorICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50KFBoaSkncyB0
byB3b3JrIGFyb3VuZCB0aGlzLiBUaGUgb3V0Y29tZSBvZiB0aGlzIGlzCisgICAgICAgICAgICAg
ICAgICAgIC8vIHlvdSBtaWdodCBoYXZlIGEgcHJvZ3JhbSBpbiB3aGljaCBhIG5vZGUgaGFwcGVu
cyB0byByZW1haW4KKyAgICAgICAgICAgICAgICAgICAgLy8gbGl2ZSBpbnRvIHNvbWUgYmxvY2sg
QiwgYW5kIHNlcGFyYXRlbHkgKGR1ZSB0byBjb3B5CisgICAgICAgICAgICAgICAgICAgIC8vIHBy
b3BhZ2F0aW9uKSBqdXN0IG9uZSBvZiB0aGUgcHJlZGVjZXNzb3JzIG9mIEIgaXNzdWVkIGEKKyAg
ICAgICAgICAgICAgICAgICAgLy8gTW92SGludCBwdXR0aW5nIHRoYXQgbm9kZSBpbnRvIHNvbWUg
bG9jYWwuIFRoZW4gaW4gQiB3ZSBtaWdodAorICAgICAgICAgICAgICAgICAgICAvLyB0aGluayB0
aGF0IHRoYXQgbm9kZSBpcyBhIHZhbGlkIHZhbHVlIGZvciB0aGF0IGxvY2FsLiBPZgorICAgICAg
ICAgICAgICAgICAgICAvLyBjb3Vyc2UgaWYgdGhhdCBsb2NhbCB3YXMgYWN0dWFsbHkgbGl2ZSBp
biBCLCBCIHdvdWxkIGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAvLyBQaGkgZm9yIGl0LiBT
byBlc3NlbnRpYWxseSB3ZSdsbCBoYXZlIE9TUiBleGl0IGRyb3BwaW5nIHRoaXMKKyAgICAgICAg
ICAgICAgICAgICAgLy8gbm9kZSdzIHZhbHVlIGludG8gdGhlIGxvY2FsIHdoZW4gd2Ugb3RoZXJ3
aXNlIChpbiB0aGUgREZHKQorICAgICAgICAgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIGRyb3Bw
ZWQgdW5kZWZpbmVkIGludG8gdGhlIGxvY2FsLiBUaGlzIHNlZW1zCisgICAgICAgICAgICAgICAg
ICAgIC8vIGhhcm1sZXNzLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgc3VjY2Vzc29yQXZhaWxhYmlsaXR5W2tdID0gbXlOb2RlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgm
IGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgT1NSIEF2
YWlsYWJpbGl0eSBBbmFseXNpcyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlX2gKKyNkZWZpbmUgREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbXB1dGVzIEJhc2lj
QmxvY2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgcmVsaWVzIG9uIGxpdmVu
ZXNzCisvLyBhbmFseXNpcyBwaGFzZSBoYXZpbmcgYmVlbiBydW4gYW5kIHRoZSBncmFwaCBub3Qg
aGF2aW5nIGJlZW4gdHJhbnNmb3JtZWQKKy8vIGFmdGVyIHRoYXQuCisKK2Jvb2wgcGVyZm9ybU9T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE3IEBACiAjaW5jbHVkZSAi
REZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NTRVBoYXNlLmgiCiAjaW5j
bHVkZSAiREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCIKKyNpbmNsdWRlICJERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRENFUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdGYWlsZWRGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKICNpbmNsdWRlICJERkdKSVRDb21w
aWxlci5oIgorI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgorI2luY2x1ZGUg
IkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5oIgorI2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRG
R1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKQEAgLTE4MywyMSArMTg4LDIxIEBAIFBsYW46
OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKIAogICAgIHBlcmZvcm1TdG9yZUVs
aW1pbmF0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7Ci0gICAgCi0g
ICAgLy8gTm90ZSB0aGF0IERDRSBpcyBuZWNlc3NhcnkgZXZlbiBpbiB0aGUgRlRMLCBiZWNhdXNl
IG9ubHkgd2Uga25vdyB3aGF0IGlzCi0gICAgLy8gbGl2ZS1pbi1ieXRlY29kZS4gVGhlIEZUTCB1
c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHdoZW4gT1NSIGV4aXQKLSAgICAvLyB2
YWx1ZXMgc2hvdWxkIGJlIHdpcmVkIHRvIExWYWx1ZXMsIHZlcnN1cyBiZWluZyB3aXJlZCB0byBF
eGl0VmFsdWU6OmRlYWQoKS4KLSAgICAvLyBUaGlzIGlzIGRpc3RpbmN0IGZyb20gd2hhdCBab21i
aWVIaW50IGdpdmVzIHVzOiBab21iaWVIaW50IHNheXMgdGhhdCB0aGUKLSAgICAvLyB2YWx1ZSBp
biB0aGUgZ2l2ZW4gYnl0ZWNvZGUgbG9jYWwgaXMgYWx3YXlzIGRlYWQ7IHRoZSByZWZlcmVuY2Ug
Y291bnRzIHRoYXQKLSAgICAvLyBEQ0UgcHJvZHVjZXMgdGVsbCB1cyB0aGF0IHRoZSB2YWx1ZSBp
cyBsaXZlIGZvciBhIHdoaWxlIGJ1dCBldmVudHVhbGx5Ci0gICAgLy8gZGllcywgYW5kIGl0IHRl
bGxzIHVzIGV4YWN0bHkgd2hlbiB0aGUgZGVhdGggcG9pbnQgaXMuCi0gICAgcGVyZm9ybURDRShk
ZmcpOwogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUV4cGVyaW1l
bnRhbEZUTCgpCiAgICAgICAgICYmIGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgogICAg
ICAgICAmJiBGVEw6OmNhbkNvbXBpbGUoZGZnKSkgewogICAgICAgICAKKyAgICAgICAgcGVyZm9y
bUNyaXRpY2FsRWRnZUJyZWFraW5nKGRmZyk7CisgICAgICAgIHBlcmZvcm1TU0FDb252ZXJzaW9u
KGRmZyk7CisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CisgICAgICAgIHBl
cmZvcm1DRkEoZGZnKTsKKyAgICAgICAgcGVyZm9ybURDRShkZmcpOyAvLyBXZSByZWx5IG9uIHRo
aXMgdG8gY29udmVydCBkZWFkIFNldExvY2FscyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBoaW50LCBh
bmQgdG8ga2lsbCBkZWFkIGNvZGUgdGhhdCB3b24ndCBiZSByZWNvZ25pemVkIGFzIGRlYWQgYnkg
TExWTS4KKyAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKKyAgICAgICAgcGVy
Zm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyhkZmcpOworICAgICAgICBwZXJmb3JtT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXMoZGZnKTsKKyAgICAgICAgCiAgICAgICAgIGR1bXBBbmRWZXJpZnlHcmFw
aChkZmcsICJHcmFwaCBqdXN0IGJlZm9yZSBGVEwgbG93ZXJpbmc6Iik7CiAgICAgICAgIAogICAg
ICAgICAvLyBGSVhNRTogU3VwcG9ydCBPU1IgZW50cnkuCkBAIC0yMTUsNiArMjIwLDcgQEAgUGxh
bjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIH0KICNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKICAgICAKKyAgICBwZXJmb3JtRENFKGRmZyk7CiAgICAgcGVyZm9ybVZp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZn
LCAiR3JhcGggYWZ0ZXIgb3B0aW1pemF0aW9uOiIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MiwxNCAr
NDcyLDE5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDogewogICAgICAgICAg
ICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2Yg
Y29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3
aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCi0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgICAgIC8vIFBoaXMg
c2hvdWxkIG5vdCBiZSB2aXNpYmxlIGhlcmUgc2luY2Ugd2UncmUgaXRlcmF0aW5nIHRoZSBhbGwt
YnV0LVBoaSdzCiAgICAgICAgICAgICAvLyBwYXJ0IG9mIGJhc2ljIGJsb2Nrcy4KLSAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVcHNpbG9uOgor
ICAgICAgICAgICAgLy8gVGhlc2UgZG9uJ3QgZ2V0IGluc2VydGVkIHVudGlsIHdlIGdvIGludG8g
U1NBLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0U2NvcGU6CkBAIC01NDAsNyArNTQ1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
TGFzdE5vZGVUeXBlOgotICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAg
IGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMu
aCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgor
I2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFNTQUNvbnZlcnNpb25QaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBoJiBncmFw
aCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikKKyAgICAgICAgLCBt
X2luc2VydGlvblNldChncmFwaCkKKyAgICAgICAgLCBtX2NoYW5nZWQoZmFsc2UpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAorICAgICAgICAvLyBG
aWd1cmUgb3V0IHdoaWNoIFNldExvY2FsJ3MgbmVlZCBmbHVzaGluZy4gTmVlZCB0byBkbyB0aGlz
IHdoaWxlIHRoZQorICAgICAgICAvLyBQaGkgZ3JhcGggaXMgc3RpbGwgaW50YWN0LgorICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5z
aXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGbHVz
aCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYWRkRmx1
c2hlZExvY2FsT3Aobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hp
bGUgKCFtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAg
ICAgICBBU1NFUlQobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpOworICAgICAgICAg
ICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkRmx1c2hlZExvY2Fs
RWRnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEVsaW1pbmF0ZSBhbGwgZHVw
bGljYXRlIG9yIHNlbGYtcG9pbnRpbmcgUGhpIGVkZ2VzLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAg
ICAgLy8gd2UgdHJhbnNmb3JtOgorICAgICAgICAvLworICAgICAgICAvLyBwOiBQaGkoQG4xLCBA
bjIsIEBuMykKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaW50bzoKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gcDogUGhpKEB4KQorICAgICAgICAvLworICAgICAgICAvLyBpZiBlYWNoIEBuaSBpbiB7
QG4xLCBAbjIsIEBuM30gaXMgZWl0aGVyIGVxdWFsIHRvIEBwIHRvIGlzIGVxdWFsCisgICAgICAg
IC8vIHRvIEB4LCBmb3IgZXhhY3RseSBvbmUgb3RoZXIgQHguIEFkZGl0aW9uYWxseSwgdHJpdmlh
bCBQaGlzIChpLmUuCisgICAgICAgIC8vIHA6IFBoaShAeCkpIGFyZSBmb3J3YXJkZWQsIHNvIHRo
YXQgaWYgaGF2ZSBhbiBlZGdlIHRvIHN1Y2ggQHAsIHdlCisgICAgICAgIC8vIHJlcGxhY2UgaXQg
d2l0aCBAeC4gVGhpcyBsb29wIGRvZXMgdGhpcyBmb3IgUGhpcyBvbmx5OyBsYXRlciB3ZSBkbwor
ICAgICAgICAvLyBzdWNoIGZvcndhcmRpbmcgZm9yIFBoaSByZWZlcmVuY2VzIGZvdW5kIGluIG90
aGVyIG5vZGVzLgorICAgICAgICAvLworICAgICAgICAvLyBTZWUgQXljb2NrIGFuZCBIb3JzcG9v
bCBpbiBDQycwMCBmb3IgYSBiZXR0ZXIgZGVzY3JpcHRpb24gb2Ygd2hhdAorICAgICAgICAvLyB3
ZSdyZSBkb2luZyBoZXJlLgorICAgICAgICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5u
dW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykg
eworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07
CisgICAgICAgICAgICAgICAgICAgIGlmIChwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0Nh
cHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yd2FyZFBoaUNoaWxkcmVuKHBoaSk7CisgICAgICAgICAgICAgICAgICAgIGRl
ZHVwbGljYXRlQ2hpbGRyZW4ocGhpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBGb3Ig
ZWFjaCBiYXNpYyBibG9jaywgZm9yIGVhY2ggbG9jYWwgbGl2ZSBhdCB0aGUgaGVhZCBvZiB0aGF0
IGJsb2NrLAorICAgICAgICAvLyBmaWd1cmUgb3V0IHdoYXQgbm9kZSB3ZSBzaG91bGQgYmUgcmVm
ZXJyaW5nIHRvIGluc3RlYWQgb2YgdGhhdCBsb2NhbC4KKyAgICAgICAgLy8gSWYgaXQgdHVybnMg
b3V0IHRvIGJlIGEgbm9uLXRyaXZpYWwgUGhpLCBtYWtlIHN1cmUgdGhhdCB0byBjcmVhdGUgYW4K
KyAgICAgICAgLy8gU1NBIFBoaSBhbmQgVXBzaWxvbnMgaW4gcHJlZGVjZXNzb3IgYmxvY2tzLiBX
ZSByZXVzZQorICAgICAgICAvLyBCYXNpY0Jsb2NrOjp2YXJpYWJsZXNBdEhlYWQgZm9yIHRyYWNr
aW5nIHdoaWNoIG5vZGVzIHRvIHJlZmVyIHRvLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAg
ICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJp
YWJsZXNBdEhlYWRbaV07CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gUG9pc29uIHRoaXMgZW50cnkgaW4gdmFyaWFibGVzQXRIZWFkIGJlY2F1c2Ug
d2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAgICAgLy8gd2FudCBhbnlvbmUgdG8gdHJ5IHRvIHJl
ZmVyIHRvIGl0LCBpZiB0aGUgdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gY2Fw
dHVyZWQuCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSAw
OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoK
KyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgUGhh
bnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGkg
fHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIEVk
Z2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmp1c3RPbmVDaGlsZCgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoZWRnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlZGdlLm5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJdCdzIGEgbm9uLXRyaXZpYWwgUGhpLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBzZXQgdGhlIFBoaSdzIHR5cGUgKGkuZS4gTm9kZVJlc3VsdE1hc2spIHRv
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZsZWN0IHRoZSBWYXJpYWJsZUFjY2Vzc0Rh
dGEncyB1bmJveGluZy4gVGhpcyB3aWxsIG1ha2UgaXQKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGVhc2llciBmb3IgdGhlIGJhY2tlbmQgdG8gZmlndXJlIG91dCB3aGljaCB2YWx1ZSB0byB1
c2UgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcHNpbG9ucywgYW5kIHdoYXQgdHlw
ZSB0byB1c2UgZm9yIHRoZSBQaGkgaXRzZWxmLgorICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlRmxhZ3MgcmVzdWx0OworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5vZGVSZXN1bHRO
dW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+
YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5vZGVSZXN1bHRJbnQzMjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBOb2Rl
UmVzdWx0Qm9vbGVhbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTm9kZVJlc3VsdEpTOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5vZGVSZXN1bHRKUzsK
KyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIFBoaSwgbm9kZS0+Y29kZU9y
aWdpbik7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoKG5vZGUtPmZsYWdzKCkgJiBOb2RlUmVz
dWx0TWFzaykgPT0gcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXpl
KCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVk
ZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbal07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJlZGVjZXNzb3ItPmFwcGVuZE5vblRlcm1pbmFsKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgVXBzaWxvbiwgYmxvY2stPmxhc3QoKS0+
Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUp
LCBFZGdlKHByZWRlY2Vzc29yLT52YXJpYWJsZXNBdFRhaWxbaV0pKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKHZhcmlh
YmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gbm9kZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnQgb3BlcmF0aW9ucyBvdmVyIGxvY2FscyBp
bnRvIG9wZXJhdGlvbnMgb3ZlciBTU0Egbm9kZXMuCisgICAgICAgIC8vIC0gR2V0TG9jYWwgb3Zl
ciBjYXB0dXJlZCB2YXJpYWJsZXMgbG9zZSB0aGVpciBwaGlzLgorICAgICAgICAvLyAtIEdldExv
Y2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCBy
ZWZlcmVuY2VzCisgICAgICAgIC8vICAgdG8gdGhlIG5vZGUgc3BlY2lmaWVkIGJ5IHZhcmlhYmxl
c0F0SGVhZC4KKyAgICAgICAgLy8gLSBTZXRMb2NhbCBnZXRzIE5vZGVNdXN0R2VuZXJhdGUgaWYg
aXQncyBmbHVzaGVkLCBvciB0dXJucyBpbnRvIGEKKyAgICAgICAgLy8gICBNb3ZIaW50IG90aGVy
d2lzZS4KKyAgICAgICAgLy8gLSBGbHVzaCBsb3NlcyBpdHMgY2hpbGRyZW4gYnV0IHJlbWFpbnMs
IGJlY2F1c2Ugd2Ugd2FudCB0byBrbm93IHdoZW4gYQorICAgICAgICAvLyAgIGZsdXNoZWQgU2V0
TG9jYWwncyB2YWx1ZSBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGlzIGFsc28gbWFrZXMgaXQgc2lt
cGxlcgorICAgICAgICAvLyAgIHRvIHJlYXNvbiBhYm91dCB0aGUgZm9ybWF0IG9mIGEgbG9jYWws
IHNpbmNlIHdlIGNhbiBqdXN0IGZvbGQgaXQgaW50byB0aGUKKyAgICAgICAgLy8gICBiYWNrd2Fy
ZHMgYW5hbHlzaXMgdGhhdCBMaXZlbmVzc0FuYWx5c2lzUGhhc2UgZG9lcy4gQXMgcGFydCBvZiB0
aGUKKyAgICAgICAgLy8gICBiYWNrd2FyZHMgYW5hbHlzaXMsIHdlIHNheSB0aGF0IHRoZSB0eXBl
IG9mIGEgbG9jYWwgY2FuIGJlIGVpdGhlcgorICAgICAgICAvLyAgIGludDMyLCBkb3VibGUsIHZh
bHVlLCBvciBkZWFkLgorICAgICAgICAvLyAtIFBoYW50b21Mb2NhbCBiZWNvbWVzIFBoYW50b20s
IGFuZCBpdHMgY2hpbGQgaXMgd2hhdGV2ZXIgaXMgc3BlY2lmaWVkCisgICAgICAgIC8vICAgYnkg
dmFyaWFibGVzQXRIZWFkLgorICAgICAgICAvLyAtIFNldEFyZ3VtZW50IHR1cm5zIGludG8gR2V0
TG9jYWwuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAg
ICAgICAgICAgYmxvY2stPmF0KG5vZGVJbmRleCktPnJlcGxhY2VtZW50ID0gMDsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IG1fZmx1c2hlZExvY2FsT3BzLmNvbnRh
aW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2Rl
TXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20o
KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgRmx1c2g6IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4ucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldE5vZGUoYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IFNldEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVs
dEZsYWdzKEdldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBGcmVlIGFsbCBwaGlzIGFuZCByZXNldCB2YXJpYWJsZXMgdmVjdG9y
cy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9
IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICAgICAgbV9ncmFw
aC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgICAgICBi
bG9jay0+cGhpcy5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5j
bGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5jbGVhcigpOworICAg
ICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2st
PnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnNzYSA9IGFkb3B0UHRy
KG5ldyBCYXNpY0Jsb2NrOjpTU0FEYXRhKGJsb2NrKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1fZ3JhcGgubV9mb3JtID0gU1NBOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCBmb3J3YXJkUGhpQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXpl
OyArK2kpIHsKKyAgICAgICAgICAgIEVkZ2UmIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChp
KTsKKyAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIG1fY2hhbmdlZCB8PSBmb3J3YXJkUGhpRWRnZShlZGdlKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBOb2RlKiBmb3J3YXJkUGhpKE5vZGUqIG5vZGUpCisgICAgeworICAg
ICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hp
bGRyZW4uanVzdE9uZUNoaWxkKCk7CisgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWRnZS5u
b2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAg
ICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBmb3J3YXJkUGhpRWRnZShFZGdl
JiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSogbmV3Tm9kZSA9IGZvcndhcmRQaGkoZWRnZS5u
b2RlKCkpOworICAgICAgICBpZiAobmV3Tm9kZSA9PSBlZGdlLm5vZGUoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWR1cGxpY2F0ZUNoaWxkcmVuKE5v
ZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNl
bmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGls
ZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGlmIChlZGdlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGktLSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsg
KytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGopID09IGVk
Z2UpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShqLS0p
OworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEZs
dXNoZWRMb2NhbE9wKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobV9mbHVzaGVkTG9j
YWxPcHMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fZmx1
c2hlZExvY2FsT3BzLmFkZChub2RlKTsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0
LmFwcGVuZChub2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbEVkZ2UoTm9k
ZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKGVkZ2Uubm9k
ZSgpKTsKKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CisgICAgSGFz
aFNldDxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7CisgICAgVmVjdG9yPE5vZGUqPiBtX2ZsdXNo
ZWRMb2NhbE9wV29ya2xpc3Q7CisgICAgYm9vbCBtX2NoYW5nZWQ7Cit9OworCitib29sIHBlcmZv
cm1TU0FDb252ZXJzaW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIFNTQSBDb252ZXJzaW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBo
YXNlPFNTQUNvbnZlcnNpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisj
ZGVmaW5lIERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb252ZXJ0IFRocmVhZGVkQ1BTIGZvcm0gaW50byBT
U0EgZm9ybS4gVGhpcyByZXN1bHRzIGluIGEgZm9ybSB0aGF0IGhhczoKKy8vCisvLyAtIFJvdWdo
bHkgbWluaW1hbCBQaGkncy4gV2UgdXNlIHRoZSBBeWNvY2sgJiBIb3JzcG9vbCBmaXhwb2ludCBm
b3IKKy8vICAgY29udmVydGluZyB0aGUgQ1BTIG1heGltYWwgUGhpcyBpbnRvIFNTQSBtaW5pbWFs
IFBoaXMsIHdpdGggdGhlIGNhdmVhdAorLy8gICB0aGF0IGlycmVkdWNpYmxlIGNvbnRyb2wgZmxv
dyBtYXkgcmVzdWx0IGluIHNvbWUgbWlzc2VkIG9wcG9ydHVuaXRpZXMKKy8vICAgZm9yIFBoaSBy
ZWR1Y3Rpb24uCisvLworLy8gLSBObyB1c2VzIG9mIEdldExvY2FsL1NldExvY2FsIGV4Y2VwdCBm
b3IgY2FwdHVyZWQgdmFyaWFibGVzIGFuZCBmbHVzaGVzLgorLy8gICBBZnRlciB0aGlzLCBhbnkg
cmVtYWluaW5nIFNldExvY2FsIG1lYW5zIEZsdXNoLiBGbHVzaCBub2RlcyBhcmUKKy8vICAgZWxp
bWluYXRlZC4gUGhhbnRvbUxvY2FscyBiZWNvbWUgUGhhbnRvbXMuIE5vZGVzIG1heSBtYXkgaGF2
ZSBjaGlsZHJlbgorLy8gICB0aGF0IGFyZSBpbiBhbm90aGVyIGJhc2ljIGJsb2NrLgorLy8KKy8v
IC0gTW92SGludHMgYXJlIHVzZWQgZm9yIE9TUiBpbmZvcm1hdGlvbiwgYW5kIGFyZSB0aGVtc2Vs
dmVzIG1pbmltYWwuCisvLyAgIEEgTW92SGludCB3aWxsIG9jY3VyIGF0IHNvbWUgcG9pbnQgYWZ0
ZXIgdGhlIGFzc2lnbmluZywgYW5kIGF0IFBoaQorLy8gICBwb2ludHMuCisvLworLy8gLSBVbmxp
a2UgY29udmVudGlvbmFsIFNTQSBpbiB3aGljaCBQaGkgZnVuY3Rpb25zIHJlZmVyIHRvIHByZWRl
Y2Vzc29ycworLy8gICBhbmQgdmFsdWVzLCBvdXIgU1NBIHVzZXMgVXBzaWxvbiBmdW5jdGlvbnMg
dG8gaW5kaWNhdGUgdmFsdWVzIGluCisvLyAgIHByZWRlY2Vzc29ycy4gQSBtZXJnZSB3aWxsIGxv
b2sgbGlrZToKKy8vCisvLyAgIGxhYmVsQToKKy8vICAgICAgIGE6IFRoaW5neSguLi4pCisvLyAg
ICAgICBiOiBVcHNpbG9uKF5lLCBAYSkKKy8vICAgICAgIEp1bXAobGFiZWxDKQorLy8KKy8vICAg
bGFiZWxCOgorLy8gICAgICAgYzogT3RoZXJUaGluZ3koLi4uKQorLy8gICAgICAgZDogVXBzaWxv
biheZSwgQGMpCisvLyAgICAgICBKdW1wKGxhYmVsQykKKy8vCisvLyAgIGxhYmVsQzoKKy8vICAg
ICAgIGU6IFBoaSgpCisvLworLy8gICBOb3RlIHRoYXQgdGhlIFBoaSBoYXMgbm8gY2hpbGRyZW4s
IGJ1dCB0aGUgcHJlZGVjZXNzb3JzIGhhdmUgVXBzaWxvbnMKKy8vICAgdGhhdCBoYXZlIGEgd2Vh
ayByZWZlcmVuY2UgdG8gdGhlIFBoaSAoXmUgaW5zdGVhZCBvZiBAZTsgd2Ugc3RvcmUgaXQKKy8v
ICAgaW4gdGhlIE9wSW5mbyByYXRoZXIgdGhhbiB0aGUgQWRqYWNlbmN5TGlzdCkuIFRoaW5rIG9m
IHRoZSBVcHNpbG9uCisvLyAgIGFzICJhc3NpZ25pbmciIHRvIHRoZSAidmFyaWFibGUiIGFzc29j
aWF0ZWQgd2l0aCB0aGUgUGhpLCBhbmQgdGhhdAorLy8gICB0aGlzIGlzIHRoZSBvbmUgcGxhY2Ug
aW4gU1NBIGZvcm0gd2hlcmUgeW91IGNhbiBoYXZlIG11bHRpcGxlCisvLyAgIGFzc2lnbm1lbnRz
LgorLy8KKy8vICAgVGhpcyBpbXBsaWVzIHNvbWUgb3RoZXIgbG9vc2VuaW5ncyBvZiBTU0EuIEZv
ciBleGFtcGxlLCBhbiBVcHNpbG9uCisvLyAgIG1heSBwcmVjZWRlIGEgUGhpIGluIHRoZSBzYW1l
IGJhc2ljIGJsb2NrOyB0aGlzIG1heSBhcmlzZSBhZnRlciBDRkcKKy8vICAgc2ltcGxpZmljYXRp
b24uIEFsdGhvdWdoIGl0J3MgcHJvZml0YWJsZSBmb3IgQ0ZHIHNpbXBsaWZpY2F0aW9uIChvcgor
Ly8gICBzb21lIG90aGVyIHBoYXNlKSB0byByZW1vdmUgdGhlc2UsIGl0J3Mgbm90IHN0cmljdGx5
IG5lY2Vzc2FyeS4gQXMKKy8vICAgd2VsbCwgdGhpcyBmb3JtIGFsbG93cyB0aGUgVXBzaWxvbiB0
byBiZSBpbiBhbnkgYmxvY2sgdGhhdCBkb21pbmF0ZXMKKy8vICAgdGhlIHByZWRlY2Vzc29yIGJs
b2NrIG9mIHRoZSBQaGksIHdoaWNoIGFsbG93cyBmb3IgYmxvY2sgc3BsaXR0aW5nIHRvCisvLyAg
IGlnbm9yZSB0aGUgcG9zc2liaWxpdHkgb2YgaW50cm9kdWNpbmcgYW4gZXh0cmEgZWRnZSBiZXR3
ZWVuIHRoZSBQaGkKKy8vICAgYW5kIHRoZSBwcmVkZWNlc3NvciAodGhvdWdoIG5vcm1hbCBTU0Eg
d291bGQgYWxsb3cgdGhpcywgYWxzbywgd2l0aAorLy8gICB0aGUgY2F2ZWF0IHRoYXQgdGhlIFBo
aSBwcmVkZWNlc3NvciBibG9jayBsaXN0cyB3b3VsZCBoYXZlIHRvIGJlCisvLyAgIHVwZGF0ZWQp
LgorLy8KKy8vICAgVGhlIGVhc2llc3Qgd2F5IHRvIGNvbnZlcnQgZnJvbSB0aGlzIFNTQSBmb3Jt
IGludG8gYSBkaWZmZXJlbnQgU1NBCisvLyAgIGZvcm0gaXMgdG8gcmVkbyBTU0EgY29udmVyc2lv
biBmb3IgUGhpIGZ1bmN0aW9ucy4gVGhhdCBpcywgdHJlYXQgZWFjaAorLy8gICBQaGkgaW4gb3Vy
IElSIGFzIGEgbm9uLVNTQSB2YXJpYWJsZSBpbiB0aGUgZm9yZWlnbiBJUiAoc28sIGFzIGFuCisv
LyAgIGFsbG9jYSBpbiBMTFZNIElSLCBmb3IgZXhhbXBsZSk7IHRoZSBVcHNpbG9ucyB0aGF0IHJl
ZmVyIHRvIHRoZSBQaGkKKy8vICAgYmVjb21lIHN0b3JlcyBhbmQgdGhlIFBoaXMgdGhlbXNlbHZl
cyBiZWNvbWUgbG9hZHMuCisvLworLy8gICBGdW4gZmFjdDogVXBzaWxvbiBpcyBzbyBuYW1lZCBi
ZWNhdXNlIGl0IGNvbWVzIGJlZm9yZSBQaGkgaW4gdGhlCisvLyAgIGFscGhhYmV0LiBJdCBjYW4g
YmUgd3JpdHRlbiBhcyAiWSIuCisKK2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNpb24oR3JhcGgmKTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJl
dmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOTUsNyArNDM5NSw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgY2FzZSBQaGk6CiAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgYnJlYWs7CiAKQEAg
LTQ4MjksNiArNDgyOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICBjYXNlIFBo
aToKKyAgICBjYXNlIFVwc2lsb246CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDI5Niw3ICs0Mjk2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgRmx1c2g6Ci0gICAgY2FzZSBQaGk6CiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBCcmVha3BvaW50OgpAQCAtNDY5MCw2ICs0Njg5LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVh
azsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CisgICAgY2FzZSBQaGk6CisgICAg
Y2FzZSBVcHNpbG9uOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDIyICs4MSwyMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBWX0VRVUFMKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkp
LCAwKSwgc3RhdGljX2Nhc3Q8Tm9kZSo+KDApLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwo
aSkpOwogICAgICAgICAKICAgICAgICAgLy8gVmFsaWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4K
LSAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG15UmVmQ291bnRzOwogICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJs
b2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJs
b2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBWQUxJREFURSgoYmxvY2spLCBibG9jay0+aXNSZWFj
aGFibGUpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9k
ZXMoKTsgKytpKQotICAgICAgICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShp
KSwgMCk7CisgICAgICAgICAgICAgICAgbV9teVJlZkNvdW50cy5hZGQoYmxvY2stPm5vZGUoaSks
IDApOwogICAgICAgICB9Ci0gICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGFjY2VwdGFibGVOb2RlczsK
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJs
b2NrIHx8ICFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5ub2RlKGkpOwotICAgICAgICAgICAgICAgIGFjY2VwdGFibGVOb2Rlcy5hZGQobm9k
ZSk7CisgICAgICAgICAgICAgICAgbV9hY2NlcHRhYmxlTm9kZXMuYWRkKG5vZGUpOwogICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1f
Z3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewpAQCAtMTA4LDcgKzEwNywxMyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
bXlSZWZDb3VudHMuZmluZChlZGdlLm5vZGUoKSktPnZhbHVlKys7CisgICAgICAgICAgICAgICAg
ICAgIG1fbXlSZWZDb3VudHMuZmluZChlZGdlLm5vZGUoKSktPnZhbHVlKys7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NB
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBTU0EsIGFsbCBlZGdlcyBtdXN0IGhh
c1Jlc3VsdCgpLgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2Up
LCBlZGdlLT5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgLy8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFudG9tLCBHZXRMb2NhbCwgb3IgUGhp
LCBteSBjaGlsZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCiAgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewpAQCAtMTQ4LDYgKzE1Myw5IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFNTQToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNTcsOSArMTY1LDQ0IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YmxvY2stPm51bU5vZGVzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+bm9kZShpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3JlZkNvdW50U3Rh
dGUgPT0gRXhhY3RSZWZDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSks
IG1fbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5v
ZGUtPnJlZkNvdW50KCksIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7CisgICAgICAgIGNhc2UgTG9hZFN0b3Jl
OgorICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOgorICAgICAgICAgICAgdmFsaWRhdGVDUFMoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU1NBOgorICAg
ICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBTU0EgdmVyaWZpY2F0aW9uLgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEdyYXBoJiBt
X2dyYXBoOworICAgIEdyYXBoRHVtcE1vZGUgbV9ncmFwaER1bXBNb2RlOworICAgIAorICAgIEhh
c2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBtX215UmVmQ291bnRzOworICAgIEhhc2hTZXQ8Tm9kZSo+
IG1fYWNjZXB0YWJsZU5vZGVzOworICAgIAorICAgIHZvaWQgdmFsaWRhdGVDUFMoKQorICAgIHsK
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJs
b2NrIHx8ICFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBIYXNoU2V0
PE5vZGUqPiBwaGlzSW5UaGlzQmxvY2s7CkBAIC0xNzAsMTUgKzIxMywxMSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5hZGQobm9kZSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGJsb2NrLT5pc1BoaUluZGV4KGkpKQogICAgICAgICAgICAgICAgICAgICBwaGlzSW5U
aGlzQmxvY2suYWRkKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcmVmQ291
bnRTdGF0ZSA9PSBFeGFjdFJlZkNvdW50KQotICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChu
b2RlKSwgbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSks
IG5vZGUtPnJlZkNvdW50KCksIDEpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAg
ICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVzLmNv
bnRhaW5zKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBlZGdlKSwgbV9hY2NlcHRhYmxlTm9kZXMuY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIyOCw3ICsyNjcs
NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsg
PCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBibG9jay0+cHJlZGVjZXNzb3JzW2tdOwogICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBw
cmV2QmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5wcmVk
ZWNlc3NvcnNba10pLCBwcmV2QmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChsb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRo
YXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3Jz
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFi
bGUuCkBAIC0zMjEsNyArMzU5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBHZXRMb2NhbCdzIHRoYXQgd2Ug
a25vdyB0byBiZSBkZWFkLCBidXQgdGhhdCB0aGUgZ3JhcGgKICAgICAgICAgICAgICAgICAgICAg
Ly8gZG9lc24ndCB5ZXQga25vdyB0byBiZSBkZWFkLgotICAgICAgICAgICAgICAgICAgICBpZiAo
IW15UmVmQ291bnRzLmdldChub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX215UmVm
Q291bnRzLmdldChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CkBAIC0zNTUsMTAgKzM5Myw2IEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLXByaXZhdGU6Ci0gICAgR3JhcGgmIG1f
Z3JhcGg7Ci0gICAgR3JhcGhEdW1wTW9kZSBtX2dyYXBoRHVtcE1vZGU7Ci0gICAgCiAgICAgdm9p
ZCBjaGVja09wZXJhbmQoCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrLCBPcGVyYW5kczxzaXpl
X3Q+JiBnZXRMb2NhbFBvc2l0aW9ucywKICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiYgc2V0TG9j
YWxQb3NpdGlvbnMsIGludCBvcGVyYW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9o
CiAKICNpbmNsdWRlICJERkdEb3VibGVGb3JtYXRTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0ZsdXNo
Rm9ybWF0LmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMu
aCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgpAQCAtMzE4LDYgKzMxOSwyOSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBjaGVja0FuZFNldChtX2ZsYWdzLCBtX2ZsYWdzIHwgbmV3Rmxh
Z3MpOwogICAgIH0KICAgICAKKyAgICBGbHVzaEZvcm1hdCBmbHVzaEZvcm1hdCgpCisgICAgewor
ICAgICAgICBBU1NFUlQoZmluZCgpID09IHRoaXMpOworICAgICAgICAKKyAgICAgICAgaWYgKCFz
aG91bGRVbmJveElmUG9zc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkSlNWYWx1
ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRVc2VEb3VibGVGb3JtYXQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBGbHVzaGVkRG91YmxlOworICAgICAgICAKKyAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiA9IGFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CisgICAgICAgIGlm
IChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gRmx1
c2hlZEludDMyOworICAgICAgICAKKyAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRDZWxsOworICAgICAgICAKKyAgICAg
ICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0
dXJuIEZsdXNoZWRCb29sZWFuOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIEZsdXNoZWRKU1Zh
bHVlOworICAgIH0KKyAgICAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyBzbGlnaHRseSBzcGFj
ZS1pbmVmZmljaWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRoCiAgICAgLy8g
d2lsbCBoYXZlIHRoZSBzYW1lIG9wZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRoZSBzYW1lIHByZWRp
Y3Rpb24uIEJ1dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIGlu
bGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEp1bXA6CiAgICAgY2Fz
ZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBGb3J3YXJkRm9yY2VPU1JFeGl0OgorICAgIGNhc2Ug
UGhpOgorICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAtMTc0LDYgKzE3Niw4IEBAIGlu
bGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKIAogYm9vbCBjYW5Db21waWxlKEdyYXBo
JiBncmFwaCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAg
ICAKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBi
bG9ja0luZGV4LS07KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTUyNTgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5LmgiCiAjaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
RlRMRm9ybWF0dGVkVmFsdWUuaCIKKyNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCiAj
aW5jbHVkZSAiRlRMT3V0cHV0LmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAi
RlRMVmFsdWVTb3VyY2UuaCIKQEAgLTYxLDEwICs2Miw2IEBAIHB1YmxpYzoKICAgICAgICAgLCBt
X2Z0bFN0YXRlKHN0YXRlKQogICAgICAgICAsIG1faGVhcHMoc3RhdGUuY29udGV4dCkKICAgICAg
ICAgLCBtX291dChzdGF0ZS5jb250ZXh0KQotICAgICAgICAsIG1fbG9jYWxzQm9vbGVhbihPcGVy
YW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAg
ICwgbV9sb2NhbHMzMihPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJs
ZXNBdEhlYWQpCi0gICAgICAgICwgbV9sb2NhbHM2NChPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwgbV9sb2NhbHNEb3VibGUoT3Bl
cmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAg
ICAsIG1fdmFsdWVTb3VyY2VzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZCkKICAgICAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUp
CkBAIC03NCw2ICs3MSw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGxvd2VyKCkKICAgICB7
CisgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBo
KTsKKyAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUubW9kdWxlID0KICAgICAgICAgICAgIExM
Vk1Nb2R1bGVDcmVhdGVXaXRoTmFtZUluQ29udGV4dCgianNCb2R5IiwgbV9mdGxTdGF0ZS5jb250
ZXh0KTsKICAgICAgICAgCkBAIC04NSwxMiArODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAg
ICAgICBtX3Byb2xvZ3VlID0gYXBwZW5kQmFzaWNCbG9jayhtX2Z0bFN0YXRlLmNvbnRleHQsIG1f
ZnRsU3RhdGUuZnVuY3Rpb24pOwogICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IG1fbG9jYWxzQm9vbGVhbi5zaXplKCk7IGlu
ZGV4LS07KSB7Ci0gICAgICAgICAgICBtX2xvY2Fsc0Jvb2xlYW5baW5kZXhdID0gYnVpbGRBbGxv
Y2EobV9vdXQubV9idWlsZGVyLCBtX291dC5ib29sZWFuKTsKLSAgICAgICAgICAgIG1fbG9jYWxz
MzJbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291dC5pbnQzMik7Ci0g
ICAgICAgICAgICBtX2xvY2FsczY0W2luZGV4XSA9IGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRl
ciwgbV9vdXQuaW50NjQpOwotICAgICAgICAgICAgbV9sb2NhbHNEb3VibGVbaW5kZXhdID0gYnVp
bGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291dC5kb3VibGVUeXBlKTsKLSAgICAgICAgfQor
ICAgICAgICBjcmVhdGVQaGlWYXJpYWJsZXMoKTsKICAgICAgICAgCiAgICAgICAgIG1faW5pdGlh
bGl6YXRpb24gPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuY29udGV4dCwgbV9mdGxTdGF0
ZS5mdW5jdGlvbik7CiAgICAgICAgIG1fYXJndW1lbnRDaGVja3MgPSBhcHBlbmRCYXNpY0Jsb2Nr
KG1fZnRsU3RhdGUuY29udGV4dCwgbV9mdGxTdGF0ZS5mdW5jdGlvbik7CkBAIC0xMDQsMTkgKzk4
LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBtX2Jsb2Nrcy5hZGQobV9oaWdoQmxvY2ssIEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQmxvY2sgIiwgKm1faGlnaEJsb2NrKSkpOwotICAgICAgICAg
ICAgYWRkRmx1c2hlZExvY2FsT3BSb290cygpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBjbG9zZU92ZXJGbHVzaGVkTG9jYWxPcHMoKTsKLSAgICAgICAgCiAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG1fYXJndW1lbnRDaGVja3MsIGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsKIAot
ICAgICAgICB0cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKCk7CisgICAgICAgIGNoZWNrQXJndW1l
bnRzKCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5qdW1wKGxvd0Jsb2NrKG1fZ3JhcGguYmxv
Y2soMCkpKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkKLSAgICAg
ICAgICAgIGNvbXBpbGVCbG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxv
Y2sqPiBkZXB0aEZpcnN0OworICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9y
ZGVyKGRlcHRoRmlyc3QpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhG
aXJzdC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNvbXBpbGVCbG9jayhkZXB0aEZpcnN0W2ld
KTsKICAgICAgICAgCiAgICAgICAgIC8vIEFuZCBub3cgY29tcGxldGUgdGhlIGluaXRpYWxpemF0
aW9uIGJsb2NrLgogICAgICAgICBsaW5rT1NSRXhpdHNBbmRDb21wbGV0ZUluaXRpYWxpemF0aW9u
QmxvY2tzKCk7CkBAIC0xMjksNDEgKzEyMiw0MCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
Ci0gICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCkKKyAgICB2b2lkIGNyZWF0ZVBoaVZh
cmlhYmxlcygpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IG1faGln
aEJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
IT0gRmx1c2gpCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5u
dW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9w
KG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xvc2VPdmVyRmx1c2hl
ZExvY2FsT3BzKCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICghbV9mbHVzaGVkTG9jYWxPcFdvcmts
aXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZmx1c2hlZExvY2Fs
T3BXb3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Qu
cmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9mbHVzaGVk
TG9jYWxPcHMuY29udGFpbnMobm9kZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBERkdf
Tk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9k
ZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2Rl
SW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFBoaSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgTFR5cGUgdHlwZTsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgeworICAg
ICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdE51bWJlcjoKKyAgICAgICAgICAgICAgICAgICAg
dHlwZSA9IG1fb3V0LmRvdWJsZVR5cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgICAgICAgICB0
eXBlID0gbV9vdXQuaW50MzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIHR5cGUg
PSBtX291dC5ib29sZWFuOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0
LmludDY0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbV9waGlzLmFkZChub2RlLCBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIHR5cGUp
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEZs
dXNoZWRMb2NhbE9wKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAobV9mbHVzaGVkTG9j
YWxPcHMuY29udGFpbnMobm9kZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZmx1
c2hlZExvY2FsT3BzLmFkZChub2RlKTsKLSAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0
LmFwcGVuZChub2RlKTsKLSAgICB9Ci0gICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxFZGdlKE5vZGUq
LCBFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChlZGdlLm5vZGUo
KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50cygpCisg
ICAgdm9pZCBjaGVja0FyZ3VtZW50cygpCiAgICAgewogICAgICAgICAvLyBXaGlsZSBjaGVja2lu
ZyBhcmd1bWVudHMsIGV2ZXJ5dGhpbmcgaXMgaW4gdGhlIHN0YWNrLgogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3ZhbHVlU291cmNlcy5zaXplKCk7IGktLTspCkBAIC0xNzIsNTYgKzE2NCw1
NCBAQCBwcml2YXRlOgogICAgICAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKDApOwogICAg
ICAgICBtX25vZGUgPSAwOwogICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBt
X2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewotICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07Ci0gICAgICAgICAgICBpZiAoIW5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBtX2dyYXBoLmJsb2NrKDApLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFk
LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gbV9ncmFw
aC5ibG9jaygwKS0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZFtpXTsKKyAgICAgICAgICAgIGludCBv
cGVyYW5kID0gbV9ncmFwaC5ibG9jaygwKS0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZC5vcGVyYW5k
Rm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIC8v
IElmIGl0J3MgY2FwdHVyZWQgdGhlbiB3ZSdsbCBiZSBhY2Nlc3NpbmcgaXQgdGhyb3VnaCBsb2Fk
cyBhbmQgc3RvcmVzCi0gICAgICAgICAgICAvLyBhbnl3YXkgLSB0aGVyZSdzIG5vIHBvaW50IGlu
IHRyYW5zZmVyaW5nIGl0IG91dC4KLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJl
ZCgpKQorICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBEZWFkRmx1c2ggfHwgZm9ybWF0ID09IEZs
dXNoZWRKU1ZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKHZhcmlh
YmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChmb3JtYXQgIT0gRmx1
c2hlZERvdWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgcHJvZmlsZSA9IAorICAgICAgICAgICAgICAgIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGU6OmZyb21MYXp5T3BlcmFuZCgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5tX3Byb2ZpbGVkQmxvY2ssCisgICAgICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlS2V5KDAsIG9wZXJhbmQpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZh
cmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewotICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCF2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpOworICAgICAgICAg
ICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50
MzI6IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUoanNWYWx1ZSksIHByb2ZpbGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2Fy
ZVByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZENlbGw6IHsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSks
IHByb2ZpbGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW50
MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50
MzIoanNWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hJbnQzMihq
c1ZhbHVlKSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2UgRmx1c2hlZEJvb2xlYW46IHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChC
YWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIHByb2ZpbGUsIGlzTm90Qm9vbGVhbihqc1Zh
bHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuc2V0KHVuYm94Qm9vbGVhbihqc1ZhbHVlKSwgbV9sb2NhbHNCb29s
ZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5zZXQo
anNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlQmxvY2soQmxvY2tJbmRleCBibG9ja0lu
ZGV4KQorICAgIHZvaWQgY29tcGlsZUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAg
ICAgICAgbV9oaWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBt
X2hpZ2hCbG9jayA9IGJsb2NrOwogICAgICAgICBpZiAoIW1faGlnaEJsb2NrKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbG93QmxvY2sgPSBtX2Js
b2Nrcy5nZXQobV9oaWdoQmxvY2spOwogICAgICAgICAKICAgICAgICAgbV9uZXh0SGlnaEJsb2Nr
ID0gMDsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IG5leHRCbG9ja0luZGV4ID0gYmxvY2tJbmRl
eCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytuZXh0QmxvY2tJ
bmRleCkgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBtX2hpZ2hC
bG9jay0+aW5kZXggKyAxOyBuZXh0QmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsr
bmV4dEJsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9IG1fZ3JhcGgu
YmxvY2sobmV4dEJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKG1fbmV4dEhpZ2hCbG9jaykK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0MSwxMSArMjMxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgCiAgICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JCbG9jaygpOwogICAgICAg
ICAKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5jbGVhcigpOwotICAgICAgICBtX2pzVmFsdWVWYWx1
ZXMuY2xlYXIoKTsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmNsZWFyKCk7Ci0gICAgICAgIG1f
c3RvcmFnZVZhbHVlcy5jbGVhcigpOwotICAgICAgICBtX3RpbWVUb0xpdmUuY2xlYXIoKTsKKyAg
ICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKICAgICAgICAgCiAgICAgICAg
IG1fc3RhdGUucmVzZXQoKTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9oaWdo
QmxvY2spOwpAQCAtMjc0LDYgKzI2MCwxMiBAQCBwcml2YXRlOgogICAgICAgICBtX2RpcmVjdGlv
biA9IChtX25vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSA/IEZvcndhcmRTcGVjdWxh
dGlvbiA6IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1f
bm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIFVwc2lsb246CisgICAgICAgICAgICBjb21waWxl
VXBzaWxvbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGhpOgorICAgICAg
ICAgICAgY29tcGlsZVBoaSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSlND
b25zdGFudDoKICAgICAgICAgICAgIGNvbXBpbGVKU0NvbnN0YW50KCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTQ0NSw4ICs0MzcsOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV9ub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9n
cmFwaCwgbV9ub2RlLCB1c2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aGFzUmVz
dWx0KCkpCi0gICAgICAgICAgICBtX3RpbWVUb0xpdmUuYWRkKG1fbm9kZSwgbV9ub2RlLT5hZGp1
c3RlZFJlZkNvdW50KCkpOworICAgICAgICBpZiAobV9ub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkp
CisgICAgICAgICAgICBtX2xpdmUuYWRkKG1fbm9kZSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
c2hvdWxkRXhlY3V0ZUVmZmVjdHMpCiAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGVFZmZlY3Rz
KG5vZGVJbmRleCk7CkBAIC00NTQsNzMgKzQ0Niw3OSBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb21waWxlVXBzaWxvbigpCisgICAgewor
ICAgICAgICBMVmFsdWUgZGVzdGluYXRpb24gPSBtX3BoaXMuZ2V0KG1fbm9kZS0+cGhpKCkpOwor
ICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPnBoaSgpLT5mbGFncygpICYgTm9kZVJl
c3VsdE1hc2spIHsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0TnVtYmVyOgorICAgICAgICAgICAg
bV9vdXQuc2V0KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAg
ICAgbV9vdXQuc2V0KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKKyAgICAg
ICAgICAgIG1fb3V0LnNldChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlv
bik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0SlM6CisgICAg
ICAgICAgICBtX291dC5zZXQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRp
b24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlUGhpKCkKKyAgICB7CisgICAgICAgIExW
YWx1ZSBzb3VyY2UgPSBtX3BoaXMuZ2V0KG1fbm9kZSk7CisgICAgICAgIAorICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNrKSB7CisgICAgICAgIGNhc2UgTm9k
ZVJlc3VsdE51bWJlcjoKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5nZXQoc291cmNlKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50MzI6CisgICAg
ICAgICAgICBzZXRJbnQzMihtX291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKKyAgICAgICAgICAgIHNldEJvb2xlYW4o
bV9vdXQuZ2V0KHNvdXJjZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9k
ZVJlc3VsdEpTOgorICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5nZXQoc291cmNlKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKICAgICB2b2lkIGNvbXBpbGVKU0NvbnN0YW50KCkKICAgICB7CiAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZSk7CiAgICAgICAg
IGlmICh2YWx1ZS5pc0RvdWJsZSgpKQotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1f
bm9kZSwgbV9vdXQuY29uc3REb3VibGUodmFsdWUuYXNEb3VibGUoKSkpOworICAgICAgICAgICAg
c2V0RG91YmxlKG1fb3V0LmNvbnN0RG91YmxlKHZhbHVlLmFzRG91YmxlKCkpKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmNvbnN0
SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlV2Vha0pTQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgbV9qc1ZhbHVl
VmFsdWVzLmFkZChtX25vZGUsIHdlYWtQb2ludGVyKG1fbm9kZS0+d2Vha0NvbnN0YW50KCkpKTsK
KyAgICAgICAgc2V0SlNWYWx1ZSh3ZWFrUG9pbnRlcihtX25vZGUtPndlYWtDb25zdGFudCgpKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldExvY2FsKCkKICAgICB7Ci0gICAgICAg
IC8vIEdldExvY2FsIGlzIG9uZSBvZiB0aGUgZmV3IG5vZGVzIHRoYXQgbWF5IGJlIGxlZnQgYmVo
aW5kLCB3aXRoICFzaG91bGRHZW5lcmF0ZSgpLgotICAgICAgICBpZiAoIW1fbm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gR2V0TG9jYWxzIGFy
aXNlIG9ubHkgaW4gdHdvIGNhc2VzOiBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGFyZ3VtZW50cy4K
ICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKSB7Ci0g
ICAgICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkg
ewotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cmFwIGluc3RlYWQuCi0gICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzgzCi0g
ICAgICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1
cmVkKCkpIHsKLSAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24odmFsdWUubV92YWx1
ZSkpCi0gICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5sb2Fk
MzIocGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQubG9hZDY0KGFk
ZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVG
b3JtYXQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQ
b3NzaWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZv
cm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9v
dXQuZ2V0KG1fbG9jYWxzRG91YmxlLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBMb2NhbHMgdGhhdCBhcmUgbWFya2VkIHNob3VsZFVuYm94SWZQb3NzaWJsZSgpIHRo
YXQgYXJlbid0IGFsc28gZm9yY2VkIHRvCi0gICAgICAgICAgICAvLyB1c2UgZG91YmxlIGZvcm1h
dCwgYW5kIHRoYXQgaGF2ZSB0aGUgcmlnaHQgcHJlZGljdGlvbiwgd2lsbCBhbHdheXMgYmUKLSAg
ICAgICAgICAgIC8vIHNwZWN1bGF0ZWQgb24gU2V0TG9jYWwgYW5kIHdpbGwgYWx3YXlzIGJlIHN0
b3JlZCBpbnRvIGFuIGFwcHJvcHJpYXRlbHkKLSAgICAgICAgICAgIC8vIHR5cGVkIHJlZmVyZW5j
ZSBMVmFsdWUuCi0gICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KSB7Ci0gICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQo
bV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxh
dGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQo
bV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgLy8gV2Ugc2tpcCB0aGUgQ2VsbCBjYXNlIGhlcmUgYmVjYXVzZSB0aGF0IGdldHMgdHJlYXRl
ZCBpZGVudGljYWxseSB0bwotICAgICAgICAgICAgLy8gSlNWYWx1ZXMsIHNpbmNlIGNlbGxzIGFy
ZSBzdG9yZWQgdW50YWdnZWQuCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fanNWYWx1
ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSkpOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdmFs
dWUpKQorICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IodmFyaWFi
bGUtPmxvY2FsKCkpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9v
dXQubG9hZDY0KGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY29tcGlsZVNldExvY2FsKCkKQEAgLTUyOSw2NCArNTI3LDQwIEBAIHByaXZhdGU6
CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwotICAgICAgICBib29sIG5l
ZWRzRmx1c2hpbmcgPSBtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhtX25vZGUpOwogICAgICAg
ICAKICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewogICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewogICAgICAg
ICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzRG91YmxlLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewot
ICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0Zvcih2
YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjayk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoRG91YmxlSW5Mb2Nh
bHMpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9y
KHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+bG9j
YWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluTG9jYWxzKTsKKyAgICAgICAg
ICAgICAgICBtX291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgp
KSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxz
NjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVk
c0ZsdXNoaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFk
ZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUlu
SlNTdGFjayk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFs
dWVJbkxvY2Fscyk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVz
c0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2Vz
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2sp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgIG1f
b3V0LnNldChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2xvY2Fsc0Jvb2xlYW4ub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNo
aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQobG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZh
bHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVC
b29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQo
CisgICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc0Zvcih2YXJp
YWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgICAgIG1fb3V0LnN0b3Jl
NjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFs
dWVJbkpTU3RhY2spOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkpOwotICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewotICAgICAgICAgICAgbV9vdXQu
c3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAg
ICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJj
ZShWYWx1ZUluSlNTdGFjayk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9j
YWxzKTsKKyAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+
bG9jYWwoKSkpOworICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlTW92SGludCgpCkBAIC02MjAsMTkgKzU5NCwxOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG1fbm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25v
ZGUsIG1fb3V0LmFkZChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgICAgIHNldEludDMyKG1f
b3V0LmFkZChsZWZ0LCByaWdodCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuYWRk
V2l0aE92ZXJmbG93MzIobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJm
bG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKLSAgICAg
ICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3Vs
dCwgMCkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwg
MCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAg
ICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAg
ICAgICBtX291dC5kb3VibGVBZGQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3Vi
bGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC02NTEsMTkgKzYyNCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAg
ICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnN1YihsZWZ0LCBy
aWdodCkpOworICAgICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LnN1YihsZWZ0LCByaWdodCkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuc3ViV2l0aE92ZXJmbG93MzIobGVmdCwg
cmlnaHQpOwogICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1f
b3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMu
YWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOworICAgICAgICAgICAg
c2V0SW50MzIobV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewot
ICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwK
KyAgICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVTdWIo
bG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03MDMsMTMgKzY3NSwxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMy
VmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAg
ICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAg
ICBtX291dC5kb3VibGVNdWwobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04
MDAsMTMgKzc3MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhkb25lLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
aW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7
CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZCgKLSAgICAgICAg
ICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXREb3VibGUoCiAgICAgICAgICAgICAgICAg
bV9vdXQuZG91YmxlRGl2KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtODkx
LDEzICs4NjEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oZG9uZSwgbGFzdE5leHQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2lu
dDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cykpOwor
ICAgICAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
TnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAgICAg
ICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAgICAgIG1f
b3V0LmRvdWJsZVJlbShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTkxNSw4
ICs4ODQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMyVmFsdWVz
LmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRJbnQzMigKICAg
ICAgICAgICAgICAgICBtX291dC5zZWxlY3QoCiAgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+
b3AoKSA9PSBBcml0aE1pbgogICAgICAgICAgICAgICAgICAgICAgICAgPyBtX291dC5sZXNzVGhh
bihsZWZ0LCByaWdodCkKQEAgLTk1MCw3ICs5MTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIG1fZG91Ymxl
VmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCByZXN1bHRzKSk7
CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIHJlc3Vs
dHMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTk3
MSwxMiArOTM5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNwZWN1
bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5lcXVhbChyZXN1bHQsIG1fb3V0LmNv
bnN0SW50MzIoMSA8PCAzMSkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9pbnQzMlZh
bHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1f
b3V0LmRvdWJsZUFicyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAg
IHNldERvdWJsZShtX291dC5kb3VibGVBYnMobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMDAzLDEy
ICs5NzEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5leHRy
YWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAg
ICAgICBzZXRJbnQzMihyZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3Vi
bGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZG91YmxlTmVnKGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMSgpKSkpOworICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmRvdWJsZU5lZyhsb3dEb3Vi
bGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTEwMjAsNDcgKzk4OCwzOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgY29tcGlsZUJpdEFuZCgpCiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAg
ICAgICAgICAgIG1fbm9kZSwgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkp
LCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5i
aXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQy
KCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdE9yKCkKICAgICB7Ci0gICAg
ICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLCBtX291dC5iaXRPcihs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsK
KyAgICAgICAgc2V0SW50MzIobV9vdXQuYml0T3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSks
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29t
cGlsZUJpdFhvcigpCiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAg
ICAgIG1fbm9kZSwgbV9vdXQuYml0WG9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRYb3Io
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdFJTaGlmdCgpCiAgICAgewotICAgICAg
ICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKLSAgICAgICAgICAgIG1f
b3V0LmFTaHIoCi0gICAgICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCi0g
ICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBt
X291dC5jb25zdEludDMyKDMxKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQuYVNocigKKyAg
ICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQu
Yml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkp
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0TFNoaWZ0KCkKICAgICB7Ci0gICAg
ICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLAotICAgICAgICAgICAg
bV9vdXQuc2hsKAotICAgICAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAot
ICAgICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwg
bV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnNobCgKKyAg
ICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQu
Yml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkp
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0VVJTaGlmdCgpCiAgICAgewotICAg
ICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKLSAgICAgICAgICAg
IG1fb3V0LmxTaHIoCi0gICAgICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSks
Ci0gICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkp
LCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQubFNocigK
KyAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9v
dXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMx
KSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlVUludDMyVG9OdW1iZXIoKQpAQCAt
MTA2OCwxNCArMTAyNywxNCBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBpZiAoIW5vZGVDYW5TcGVjdWxhdGVJ
bnRlZ2VyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgIG1fZG91Ymxl
VmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnVuc2lnbmVkVG9Eb3VibGUodmFsdWUpKTsKKyAgICAg
ICAgICAgIHNldERvdWJsZShtX291dC51bnNpZ25lZFRvRG91YmxlKHZhbHVlKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZUZvcndh
cmQoCiAgICAgICAgICAgICBPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbih2
YWx1ZSwgbV9vdXQuaW50MzJaZXJvKSwKICAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKFZhbHVl
Rm9ybWF0VUludDMyLCB2YWx1ZSkpOwotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUs
IHZhbHVlKTsKKyAgICAgICAgc2V0SW50MzIodmFsdWUpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGNvbXBpbGVJbnQzMlRvRG91YmxlKCkKQEAgLTEwODcsNyArMTA0Niw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIGNvbnRlbXBvcmFuZW91cyBsb3ctbGV2ZWwgcmVwcmVzZW50YXRpb25zLiBTbywg
dGhpcyBnaXZlcyBjaGlsZDEgYSBkb3VibGUKICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gYW5k
IHRoZW4gZm9yd2FyZHMgdGhhdCByZXByZXNlbnRhdGlvbiB0byBtX25vZGUuCiAgICAgICAgIAot
ICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQobV9ub2RlLCBsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDEoKSkpOworICAgICAgICBzZXREb3VibGUobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQpAQCAtMTIxNSw4
ICsxMTc0LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHko
KQogICAgIHsKLSAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9k
ZSwgbV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTT2Jq
ZWN0X2J1dHRlcmZseSkpOworICAgICAgICBzZXRTdG9yYWdlKG1fb3V0LmxvYWRQdHIobG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0QXJyYXlMZW5ndGgoKQpAQCAtMTIyNSw4ICsxMTgz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAg
ICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLCBtX291dC5s
b2FkMzIobG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVi
bGljTGVuZ3RoKSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIobG93U3RvcmFn
ZShtX25vZGUtPmNoaWxkMigpKSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMjU2LDcgKzEy
MTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLCBtX291dC56ZXJv
RXh0KGluZGV4LCBtX291dC5pbnRQdHIpLAogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmZv
ck5vZGUobV9ub2RlLT5jaGlsZDIoKSkubV92YWx1ZSkpOwogICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7
Ci0gICAgICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTI4OCw3ICsxMjQ1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCAw
LAogICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZChyZXN1bHQsIHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBt
X2RvdWJsZVZhbHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHNldERv
dWJsZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCkBAIC0xMzg4LDggKzEzNDUsNyBAQCBwcml2YXRlOgogICAgICAgICBTdG9yYWdl
QWNjZXNzRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0Rh
dGFbbV9ub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOwogICAgICAgICAKLSAgICAgICAg
bV9qc1ZhbHVlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgc2V0SlNW
YWx1ZSgKICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NCgKICAgICAgICAgICAgICAgICBtX291dC5h
ZGRyZXNzKAogICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLnByb3BlcnRpZXNbZGF0YS5pZGVu
dGlmaWVyTnVtYmVyXSwKQEAgLTE0MTIsNyArMTM2OCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBjb21waWxlR2V0R2xvYmFsVmFyKCkKICAgICB7Ci0gICAgICAgIG1fanNWYWx1ZVZhbHVl
cy5hZGQobV9ub2RlLCBtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUobV9ub2RlLT5yZWdpc3Rl
clBvaW50ZXIoKSkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJz
b2x1dGUobV9ub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlUHV0R2xvYmFsVmFyKCkKQEAgLTE0MzcsMzAgKzEzOTMsMjcgQEAgcHJpdmF0ZToK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZS0+
Y2hpbGQyKCkubm9kZSgpKS5pc051bGwoKSk7CiAgICAgICAgIG1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50SWZJc1N0aWxsVmFsaWQoKTsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFk
ZCgKLSAgICAgICAgICAgIG1fbm9kZSwgZXF1YWxOdWxsT3JVbmRlZmluZWQoCisgICAgICAgIHNl
dEJvb2xlYW4oCisgICAgICAgICAgICBlcXVhbE51bGxPclVuZGVmaW5lZCgKICAgICAgICAgICAg
ICAgICBtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGxPclVuZGVm
aW5lZCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEoKQog
ICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgewot
ICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUs
CisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9u
b2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFu
VmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29s
ZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKGxvd0RvdWJsZShtX25vZGUt
PmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKSB7
CiAgICAgICAgICAgICBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElmSXNTdGlsbFZh
bGlkKCk7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAg
IG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQu
ZXF1YWwoCiAgICAgICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGls
ZDEoKSksCiAgICAgICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGls
ZDIoKSkpKTsKQEAgLTE0NzcsMTkgKzE0MzAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGNv
bnN0YW50LmlzVW5kZWZpbmVkT3JOdWxsKCkKICAgICAgICAgICAgICYmICFtYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludElmSXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIGlmIChj
b25zdGFudC5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQo
Ci0gICAgICAgICAgICAgICAgICAgIG1fbm9kZSwgZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2Rl
LT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxOdWxsKSk7CisgICAgICAgICAgICAg
ICAgc2V0Qm9vbGVhbihlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBBbGxD
ZWxsc0FyZUZhbHNlLCBFcXVhbE51bGwpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50LmlzVW5kZWZp
bmVkKCkpOwotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAg
ICBtX25vZGUsIGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxz
QXJlRmFsc2UsIEVxdWFsVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVxdWFs
TnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFs
VW5kZWZpbmVkKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsCisgICAgICAg
IHNldEJvb2xlYW4oCiAgICAgICAgICAgICBtX291dC5lcXVhbCgKICAgICAgICAgICAgICAgICBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLAogICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpKTsKQEAgLTE0OTgsMTUgKzE0NDgsMTMg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlTGVzcygpCiAgICAgewogICAgICAg
ICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBt
X2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAg
IHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQubGVzc1RoYW4obG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRk
KAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAg
ICAgICAgICAgICAgbV9vdXQuZG91YmxlTGVzc1RoYW4obG93RG91YmxlKG1fbm9kZS0+Y2hpbGQx
KCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMTUxNywxNSArMTQ2NSwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29t
cGlsZUNvbXBhcmVMZXNzRXEoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKEludDMyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAg
ICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAg
ICAgICAgIG1fb3V0Lmxlc3NUaGFuT3JFcXVhbChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwg
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJl
clVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAg
ICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291
dC5kb3VibGVMZXNzVGhhbk9yRXF1YWwoCiAgICAgICAgICAgICAgICAgICAgIGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0xNTM3LDE1ICsxNDgzLDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
b21waWxlQ29tcGFyZUdyZWF0ZXIoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5h
cnlVc2VLaW5kKEludDMyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgK
LSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAg
ICAgICAgICAgIG1fb3V0LmdyZWF0ZXJUaGFuKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVy
VXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAg
ICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0
LmRvdWJsZUdyZWF0ZXJUaGFuKAogICAgICAgICAgICAgICAgICAgICBsb3dEb3VibGUobV9ub2Rl
LT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTU1NywxNiArMTUwMSwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGls
ZUNvbXBhcmVHcmVhdGVyRXEoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKEludDMyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAg
ICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAg
ICAgICAgIG1fb3V0LmdyZWF0ZXJUaGFuT3JFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgbG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25v
ZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5W
YWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xl
YW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlR3JlYXRlclRoYW5PckVxdWFsKAogICAg
ICAgICAgICAgICAgICAgICBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Nyw3ICsxNTE5
LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KCkKICAgICB7
Ci0gICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5iaXROb3QoYm9vbGlm
eShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmJpdE5vdChi
b29saWZ5KG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGls
ZUp1bXAoKQpAQCAtMTkzMSw2ICsxODczLDE0IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAg
IHZvaWQgc3BlY3VsYXRlQmFja3dhcmQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUsCisg
ICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgYXBwZW5kT1NSRXhp
dCgKKyAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLCBwcm9maWxlLCBmYWlsQ29uZGl0aW9uLCBC
YWNrd2FyZFNwZWN1bGF0aW9uLCBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzcGVjdWxhdGVCYWNrd2FyZCgKICAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVk
VmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAg
ICAgewogICAgICAgICBhcHBlbmRPU1JFeGl0KApAQCAtMTk5OSwxNCArMTk0OSwxNyBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51
c2VLaW5kKCkgPT0gS25vd25JbnQzMlVzZSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1
ZSByZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSBib3hlZFJlc3VsdCA9
IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgIExvd2VyZWROb2Rl
VmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlm
IChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAg
ICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgYm94ZWRS
ZXN1bHQgPSB2YWx1ZS52YWx1ZSgpOwogICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCiAgICAg
ICAgICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkUmVzdWx0KSwgZWRnZSwgU3BlY0ludDMyLCBp
c05vdEludDMyKGJveGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5i
b3hJbnQzMihib3hlZFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChlZGdl
Lm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldEludDMyKGVkZ2Uubm9kZSgpLCByZXN1
bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCkBAIC0yMDE5LDEw
ICsxOTcyLDEyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUs
IG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzQ2VsbChlZGdlLnVzZUtpbmQo
KSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmNoZWNrZWRSZXN1bHQgPSBtX2pz
VmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVl
IHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChp
c1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHVuY2hlY2tlZFZhbHVlID0gdmFs
dWUudmFsdWUoKTsKICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAg
IGpzVmFsdWVWYWx1ZSh1bmNoZWNrZWRSZXN1bHQpLCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RDZWxs
KHVuY2hlY2tlZFJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFJlc3VsdDsK
KyAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodW5jaGVja2VkVmFsdWUpLCBlZGdlLCBTcGVj
Q2VsbCwgaXNOb3RDZWxsKHVuY2hlY2tlZFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdW5j
aGVja2VkVmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNDZWxsKSk7CkBAIC0yMDYxLDE0
ICsyMDE2LDE3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUs
IG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEJv
b2xlYW5Vc2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jvb2xl
YW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0g
bV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAg
ICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYg
KGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IHZh
bHVlLnZhbHVlKCk7CiAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKICAgICAgICAgICAgICAg
ICBqc1ZhbHVlVmFsdWUodW5ib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNCb29sZWFuLCBpc05vdEJv
b2xlYW4odW5ib3hlZFJlc3VsdCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94
Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQo
ZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVkZ2Uubm9kZSgp
LCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTIwODEsMTYgKzIwMzksMjEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VS
VF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgaXNEb3Vi
bGUoZWRnZS51c2VLaW5kKCkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0
ID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIGludFJlc3VsdCA9IG1faW50MzJW
YWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1f
b3V0LmludFRvRG91YmxlKGludFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5h
ZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUg
PSBtX2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2
YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgCisgICAg
ICAgIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAo
aXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5pbnRU
b0RvdWJsZSh2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShlZGdlLm5vZGUo
KSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGlmIChMVmFsdWUgYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0
KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRn
ZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExW
YWx1ZSBib3hlZFJlc3VsdCA9IHZhbHVlLnZhbHVlKCk7CisgICAgICAgICAgICAKICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJsZSB1
bmJveGluZyBpbnQgY2FzZSIpKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2Ug
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJsZSB1bmJveGluZyBkb3VibGUgY2FzZSIpKTsK
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiRG91YmxlIHVuYm94aW5nIGNvbnRpbnVhdGlvbiIpKTsKQEAgLTIxMTUsNyArMjA3OCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBt
X291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCks
IHJlc3VsdCk7CisgICAgICAgICAgICBzZXREb3VibGUoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjEyOCwy
NCArMjA5MSwyOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2Rl
LCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9qc1Zh
bHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9pbnQzMlZhbHVl
cy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94SW50
MzIodW5ib3hlZFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKGVkZ2Uu
bm9kZSgpLCByZXN1bHQpOworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9qc1Zh
bHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgdmFs
dWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlk
KHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEludDMyKHZhbHVlLnZh
bHVlKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlm
IChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fYm9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkp
KSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94Qm9vbGVhbih1bmJveGVkUmVzdWx0
KTsKLSAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7
CisgICAgICAgIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAg
ICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJv
eEJvb2xlYW4odmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9k
ZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9kb3VibGVWYWx1ZXMu
Z2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveERvdWJs
ZSh1bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5u
b2RlKCksIHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gYm94RG91YmxlKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgc2V0SlNW
YWx1ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC0yMTU1LDExICsyMTIyLDEyIEBAIHByaXZhdGU6CiAgICAg
CiAgICAgTFZhbHVlIGxvd1N0b3JhZ2UoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgaWYgKExW
YWx1ZSByZXN1bHQgPSBtX3N0b3JhZ2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX3N0
b3JhZ2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CiAgICAgICAgIAogICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlKTsKLSAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmFk
ZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwg
cmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0yMjQyLDYg
KzIyMTAsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE51bWJlclVzZToKICAgICAgICAgICAg
IHNwZWN1bGF0ZU51bWJlcihlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEJvb2xlYW5Vc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGVkZ2UpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CkBAIC0yMzQyLDYgKzIzMTMsMTEgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGRvdWJsZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY1JlYWxOdW1iZXIs
CiAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHZhbHVlLCB2YWx1
ZSkpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSBlZGdlKQor
ICAgIHsKKyAgICAgICAgbG93Qm9vbGVhbihlZGdlKTsKKyAgICB9CiAKICAgICBib29sIG1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkKICAgICB7CkBAIC0yNDMw
LDIyICsyNDA2LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBpc0xpdmUoTm9kZSogbm9k
ZSkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRl
ciA9IG1fdGltZVRvTGl2ZS5maW5kKG5vZGUpOwotICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3Rp
bWVUb0xpdmUuZW5kKCkpOwotICAgICAgICByZXR1cm4gISFpdGVyLT52YWx1ZTsKKyAgICAgICAg
cmV0dXJuIG1fbGl2ZS5jb250YWlucyhub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2Uo
RWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgaWYgKCFlZGdlLT5oYXNSZXN1bHQoKSkgewotICAg
ICAgICAgICAgQVNTRVJUKGVkZ2UtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAg
QVNTRVJUKGVkZ2UtPmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgaWYgKCFlZGdlLmRvZXNLaWxsKCkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEhhc2hN
YXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fdGltZVRvTGl2ZS5maW5kKGVk
Z2Uubm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV90aW1lVG9MaXZlLmVuZCgpKTsK
LSAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlKTsKLSAgICAgICAgaXRlci0+dmFsdWUtLTsKKyAg
ICAgICAgbV9saXZlLnJlbW92ZShlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAogICAgIC8vIFdy
YXBwZXIgdXNlZCBvbmx5IGZvciBERkdfTk9ERV9ET19UT19DSElMRFJFTgpAQCAtMjQ2Miw2MyAr
MjQzMSwzNCBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJs
b2NrKCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNp
emUoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT52YXJp
YWJsZXNBdEhlYWRbaV07Ci0gICAgICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgICAgICAg
ICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7Ci0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+
YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KHZhcmlhYmxlLT5pc0FyZ3VtZW50c0FsaWFzKCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVl
U291cmNlc1tpXSA9IFZhbHVlU291cmNlKEFyZ3VtZW50c1NvdXJjZSk7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fZmx1
c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyB2
YWx1ZSB3aWxsIGhhdmUgYmVlbiBmbHVzaGVkIHRvIHRoZSBKU1N0YWNrIGluIHNvbWUgZm9ybSBv
cgotICAgICAgICAgICAgICAgIC8vIGFub3RoZXIuCi0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKERv
dWJsZUluSlNTdGFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gbV9oaWdoQmxvY2stPnNzYS0+Zmx1
c2hGb3JtYXRBdEhlYWRbaV07CisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAg
ICAgICAgY2FzZSBEZWFkRmx1c2g6IHsKKyAgICAgICAgICAgICAgICAvLyBNdXN0IGNvbnNpZGVy
IGF2YWlsYWJsZSBub2RlcyBpbnN0ZWFkLgorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2hpZ2hCbG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV07CisgICAgICAgICAgICAgICAg
aWYgKCFub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFs
dWVTb3VyY2UoU291cmNlSXNEZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2Uobm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2Uo
RG91YmxlSW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291
cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRJ
bnQzMjoKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKElu
dDMySW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShCb29s
ZWFuSW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgICAgICAgICAg
bV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVz
aGVkQ2VsbDoKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICBj
YXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0g
VmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAt
MjUyNiw2ICsyNDY2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1h
dHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9u
LAogICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVl
IHJlY292ZXJ5KQogICAgIHsKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgICAgIGtp
bmQsIGxvd1ZhbHVlLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGln
aFZhbHVlKSwKKyAgICAgICAgICAgIGZhaWxDb25kaXRpb24sIGRpcmVjdGlvbiwgcmVjb3Zlcnkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCisgICAgICAgIEV4aXRLaW5k
IGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlIHByb2ZpbGUsCisgICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uLCBTcGVjdWxhdGlvbkRp
cmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVlIHJlY292ZXJ5KQorICAgIHsKICAgICAg
ICAgaWYgKE9wdGlvbnM6OmZ0bFRyYXBzT25PU1JFeGl0KCkpIHsKICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGZhaWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPU1IgZXhpdCBmYWlsQ2Fz
ZSIpKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiT1NSIGV4aXQgY29udGludWF0aW9uIikpOwpAQCAtMjU0NiwxMSArMjQ5NSw5
IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQu
c2l6ZSgpID09IG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCkpOwogICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCk7CiAgICAgICAgIAotICAgICAgICBtX2Z0
bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKAotICAgICAgICAgICAgT1NSRXhpdCgKLSAg
ICAgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCi0gICAgICAgICAgICAgICAgbV9jb2Rl
T3JpZ2luLCBtX2xhc3RTZXRPcGVyYW5kLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFyZ3VtZW50
cygpLAotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsK
KyAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAorICAg
ICAgICAgICAga2luZCwgbG93VmFsdWUuZm9ybWF0KCksIHByb2ZpbGUsIG1fY29kZU9yaWdpbiwg
bV9sYXN0U2V0T3BlcmFuZCwKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mQXJn
dW1lbnRzKCksIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9m
dGxTdGF0ZS5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAg
ICAKICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5s
YXN0KCk7CkBAIC0yNjAyLDI3ICsyNTQ5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2Ug
RG91YmxlSW5KU1N0YWNrOgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0
VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFZhbHVlSW5Mb2NhbHM6Ci0gICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3Vt
ZW50KAotICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0
SlNWYWx1ZSwgbV9vdXQuZ2V0KG1fbG9jYWxzNjRbaV0pKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgSW50MzJJbkxvY2FsczoKLSAgICAgICAgICAgICAgICBhZGRF
eGl0QXJndW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFs
dWVGb3JtYXRJbnQzMiwgbV9vdXQuZ2V0KG1fbG9jYWxzMzJbaV0pKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQm9vbGVhbkluTG9jYWxzOgotICAgICAgICAgICAg
ICAgIGFkZEV4aXRBcmd1bWVudCgKLSAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRz
LCBpLCBWYWx1ZUZvcm1hdEJvb2xlYW4sIG1fb3V0LmdldChtX2xvY2Fsc0Jvb2xlYW5baV0pKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRG91YmxlSW5Mb2NhbHM6
Ci0gICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAotICAgICAgICAgICAgICAgICAgICBl
eGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0RG91YmxlLCBtX291dC5nZXQobV9sb2NhbHNE
b3VibGVbaV0pKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJn
dW1lbnRzU291cmNlOgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgUGhhbnRv
bUFyZ3VtZW50cy4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTEzOTg2Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU291
cmNlSXNEZWFkOgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6
OmRlYWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI2ODIsMTIgKzI2MDgsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiB1aW50MzJUb051bWJlciA9IDA7CiAgICAg
ICAgICAgICAgICAgTm9kZSogZG91YmxlQXNJbnQzMiA9IDA7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0g
bV90aW1lVG9MaXZlLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5z
aWduZWQ+OjppdGVyYXRvciBlbmQgPSBtX3RpbWVUb0xpdmUuZW5kKCk7CisgICAgICAgICAgICAg
ICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xpdmUuYmVnaW4oKTsKKyAgICAg
ICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9saXZlLmVuZCgpOwog
ICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghaXRlci0+dmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gaXRlci0+a2V5Owor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSAqaXRlcjsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmNoaWxkMSgp
ICE9IG5vZGUpCkBAIC0yNzMyLDI0ICsyNjU2LDI4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIEFTU0VSVChpc0xpdmUobm9kZSkpOwotICAgICAgICAKLSAgICAgICAg
aWYgKExWYWx1ZSByZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChub2RlKSkgewotICAgICAgICAg
ICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SW50
MzIsIHJlc3VsdCk7CisKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50MzJW
YWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdElu
dDMyLCB2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KG5v
ZGUpKSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRl
eCwgVmFsdWVGb3JtYXRCb29sZWFuLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1fYm9vbGVh
blZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAg
ICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0
Qm9vbGVhbiwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdl
dChub2RlKSkgewotICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywg
aW5kZXgsIFZhbHVlRm9ybWF0SlNWYWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2pz
VmFsdWVWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZv
cm1hdEpTVmFsdWUsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fZG91YmxlVmFsdWVz
LmdldChub2RlKSkgewotICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50
cywgaW5kZXgsIFZhbHVlRm9ybWF0RG91YmxlLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1f
ZG91YmxlVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Cisg
ICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVG
b3JtYXREb3VibGUsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTI4MzQsNiArMjc2Miw1NyBAQCBwcml2YXRlOgogICAgICAgICBtX3ZhbHVlU291
cmNlcy5vcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRJbnQzMihOb2RlKiBub2RlLCBMVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBtX2ludDMyVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZh
bHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldEpTVmFsdWUoTm9k
ZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLnNl
dChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAg
ICB2b2lkIHNldEJvb2xlYW4oTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgbV9ib29sZWFuVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hp
Z2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldFN0b3JhZ2UoTm9kZSogbm9kZSwgTFZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBMb3dlcmVk
Tm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldERvdWJs
ZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2RvdWJsZVZhbHVl
cy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9
CisKKyAgICB2b2lkIHNldEludDMyKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldElu
dDMyKG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIHNldEpTVmFsdWUoTFZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX25vZGUsIHZhbHVlKTsKKyAgICB9Cisg
ICAgdm9pZCBzZXRCb29sZWFuKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEJvb2xl
YW4obV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0U3RvcmFnZShMVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBzZXRTdG9yYWdlKG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAg
ICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXREb3VibGUo
bV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZChjb25zdCBMb3dl
cmVkTm9kZVZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghbV9ncmFwaC5tX2RvbWluYXRvcnMuZG9t
aW5hdGVzKG1faGlnaEJsb2NrLCB2YWx1ZS5ibG9jaygpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRkV2Vh
a1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0
Q29kZS0+Y29tbW9uLndlYWtSZWZlcmVuY2VzLmFwcGVuZCgKQEAgLTI4ODgsMjAgKzI4NjcsMTQg
QEAgcHJpdmF0ZToKICAgICBMVmFsdWUgbV90YWdUeXBlTnVtYmVyOwogICAgIExWYWx1ZSBtX3Rh
Z01hc2s7CiAgICAgCi0gICAgSGFzaFNldDxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7Ci0gICAg
VmVjdG9yPE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7CisgICAgSGFzaE1hcDxOb2Rl
KiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9pbnQzMlZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBM
b3dlcmVkTm9kZVZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93
ZXJlZE5vZGVWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2Vy
ZWROb2RlVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVk
Tm9kZVZhbHVlPiBtX2RvdWJsZVZhbHVlczsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7CiAg
ICAgCi0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2ludDMyVmFsdWVzOwotICAgIEhhc2hN
YXA8Tm9kZSosIExWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExW
YWx1ZT4gbV9ib29sZWFuVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9zdG9y
YWdlVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7Ci0g
ICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG1fdGltZVRvTGl2ZTsKLSAgICAKLSAgICBPcGVy
YW5kczxMVmFsdWU+IG1fbG9jYWxzQm9vbGVhbjsKLSAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9j
YWxzMzI7Ci0gICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2FsczY0OwotICAgIE9wZXJhbmRzPExW
YWx1ZT4gbV9sb2NhbHNEb3VibGU7CisgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7
CiAgICAgCiAgICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG1fdmFsdWVTb3VyY2VzOwogICAgIGlu
dCBtX2xhc3RTZXRPcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlcmVkTm9kZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlcmVkTm9kZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyZWROb2RlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgRlRMTG93ZXJlZE5vZGVWYWx1ZV9oCisjZGVmaW5lIEZUTExvd2VyZWROb2RlVmFsdWVf
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gUmVwcmVzZW50cyB0
aGUgYWN0IG9mIGhhdmluZyBsb3dlcmVkIGEgREZHOjpOb2RlIHRvIGFuIExWYWx1ZSwgYW5kIHJl
Y29yZHMgdGhlCisvLyBERkc6OkJhc2ljQmxvY2sgdGhhdCBkaWQgdGhlIGxvd2VyaW5nLiBUaGUg
TFZhbHVlIGlzIHdoYXQgd2UgdXNlIG1vc3Qgb2Z0ZW4sIGJ1dAorLy8gd2UgbmVlZCB0byB2ZXJp
ZnkgdGhhdCB3ZSdyZSBpbiBhIGJsb2NrIHRoYXQgaXMgZG9taW5hdGVkIGJ5IHRoZSBvbmUgdGhh
dCBkaWQKKy8vIHRoZSBsb3dlcmluZy4gV2UncmUgZ3VhcmFudGVlZCB0aGF0IGZvciBlYWNoIERG
Rzo6Tm9kZSwgdGhlcmUgd2lsbCBiZSBvbmUKKy8vIExvd2VyZWROb2RlVmFsdWUgdGhhdCBhbHdh
eXMgZG9taW5hdGVzIGFsbCB1c2VzIG9mIHRoZSBERkc6Ok5vZGU7IGJ1dCB0aGVyZSBtYXkKKy8v
IGJlIG90aGVycyB0aGF0IGRvbid0IGRvbWluYXRlIGFuZCB3ZSdyZSBlZmZlY3RpdmVseSBkb2lu
ZyBvcHBvcnR1bmlzdGljIEdWTiBvbgorLy8gdGhlIGxvd2VyaW5nIGNvZGUuCisKK2NsYXNzIExv
d2VyZWROb2RlVmFsdWUgeworcHVibGljOgorICAgIExvd2VyZWROb2RlVmFsdWUoKQorICAgICAg
ICA6IG1fdmFsdWUoMCkKKyAgICAgICAgLCBtX2Jsb2NrKDApCisgICAgeworICAgIH0KKyAgICAK
KyAgICBMb3dlcmVkTm9kZVZhbHVlKExWYWx1ZSB2YWx1ZSwgREZHOjpCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fYmxvY2soYmxvY2spCisg
ICAgeworICAgICAgICBBU1NFUlQobV92YWx1ZSk7CisgICAgICAgIEFTU0VSVChtX2Jsb2NrKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsg
fQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAK
KyAgICBMVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgREZHOjpC
YXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICAKK3ByaXZh
dGU6CisgICAgTFZhbHVlIG1fdmFsdWU7CisgICAgREZHOjpCYXNpY0Jsb2NrKiBtX2Jsb2NrOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKKyNlbmRpZiAvLyBGVExMb3dlcmVkTm9kZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZyb21CbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaAkocmV2aXNpb24gMTUyNTgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZyb21CbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAKIGNsYXNzIFZhbHVlRnJvbUJsb2NrIHsKIHB1YmxpYzoKKyAgICBWYWx1ZUZyb21CbG9j
aygpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgICAgICAsIG1fYmxvY2soMCkKKyAgICB7Cisg
ICAgfQorICAgIAogICAgIFZhbHVlRnJvbUJsb2NrKExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxvY2sg
YmxvY2spCiAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgLCBtX2Jsb2NrKGJsb2Nr
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJ
KHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVT
b3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyMSArNDUsNiBAQCB2b2lkIFZhbHVlU291
cmNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6CiAg
ICAgICAgIG91dC5wcmludCgiRG91YmxlSW5KU1N0YWNrIik7CiAgICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIFZhbHVlSW5Mb2NhbHM6Ci0gICAgICAgIG91dC5wcmludCgiVmFsdWVJbkxvY2FscyIp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbnQzMkluTG9jYWxzOgotICAgICAgICBvdXQu
cHJpbnQoIkludDMySW5Mb2NhbHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQm9vbGVh
bkluTG9jYWxzOgotICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW5JbkxvY2FscyIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBEb3VibGVJbkxvY2FsczoKLSAgICAgICAgb3V0LnByaW50KCJE
b3VibGVJbkxvY2FscyIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBBcmd1bWVudHNTb3Vy
Y2U6Ci0gICAgICAgIG91dC5wcmludCgiQXJndW1lbnRzU291cmNlIik7Ci0gICAgICAgIHJldHVy
bjsKICAgICBjYXNlIFNvdXJjZUlzRGVhZDoKICAgICAgICAgb3V0LnByaW50KCJTb3VyY2VJc0Rl
YWQiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsNiBA
QCBlbnVtIFZhbHVlU291cmNlS2luZCB7CiAgICAgVmFsdWVJbkpTU3RhY2ssCiAgICAgSW50MzJJ
bkpTU3RhY2ssCiAgICAgRG91YmxlSW5KU1N0YWNrLAotICAgIFZhbHVlSW5Mb2NhbHMsCi0gICAg
SW50MzJJbkxvY2FscywKLSAgICBCb29sZWFuSW5Mb2NhbHMsCi0gICAgRG91YmxlSW5Mb2NhbHMs
Ci0gICAgQXJndW1lbnRzU291cmNlLAogICAgIFNvdXJjZUlzRGVhZCwKICAgICBIYXZlTm9kZQog
fTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEzLTA3LTExICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BT
ISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChIYXNoU2V0KToKKyAg
ICAgICAgKFdURik6CisgICAgICAgIChXVEY6Ojo6YWRkKToKKyAgICAgICAgKFdURjo6PSk6Cisg
ICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjo6Okhhc2hUYWJsZSk6Cisg
ICAgICAgIChXVEY6Oj0pOgorICAgICAgICAqIHd0Zi9JbnNlcnRpb24uaDogQWRkZWQuCisgICAg
ICAgIChXVEYpOgorICAgICAgICAoSW5zZXJ0aW9uKToKKyAgICAgICAgKFdURjo6SW5zZXJ0aW9u
OjpJbnNlcnRpb24pOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246OmluZGV4KToKKyAgICAgICAg
KFdURjo6SW5zZXJ0aW9uOjplbGVtZW50KToKKyAgICAgICAgKFdURjo6SW5zZXJ0aW9uOjpvcGVy
YXRvcjwpOgorICAgICAgICAoV1RGOjpleGVjdXRlSW5zZXJ0aW9ucyk6CisKIDIwMTMtMDctMDIg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBm
aXggMzItYml0IGJ1aWxkLgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAJCTBGRDgxQUM1
MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyogRmFz
dEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTBG
RERCRkE3MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNTE2NjZERkEzMDBD
NTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRkREQkZBODE2NjZERkEz
MDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQ
cmludFN0cmVhbS5oICovOyB9OworCQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1
MDU1NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi87IH07CiAJCTE0M0Y2MTFGMTU2
NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNw
cCAqLzsgfTsKIAkJMTQzRjYxMjAxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkw
MERCNTE0QSAvKiBSQU1TaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsg
fTsKIAkJMTQ2OTQxOTIxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2OTQxOTAxNkVBQUY2RDAw
MjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0zNTIsNiArMzUzLDcgQEAKIAkJMEZEODFBQzQxNTRGQjIyRTAw
OTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmFzdEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZB
NTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJp
bnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nUHJpbnRT
dHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NTYxNzg3QTgwMjAw
QjM1RjhDIC8qIEluc2VydGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNlcnRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVT
cGluTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlU3BpbkxvY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXpl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4NSw2ICs3ODcsNyBAQAogCQkJCUE4QTQ3MkJBMTUxQTgy
NUEwMDQxMjNGRiAvKiBIYXNoVHJhaXRzLmggKi8sCiAJCQkJQThBNDcyQkIxNTFBODI1QTAwNDEy
M0ZGIC8qIEhleE51bWJlci5oICovLAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJ
bmxpbmVBU00uaCAqLywKKwkJCQkwRkU1MDU1NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9u
LmggKi8sCiAJCQkJQThBNDcyQkUxNTFBODI1QTAwNDEyM0ZGIC8qIEludDE2QXJyYXkuaCAqLywK
IAkJCQlBOEE0NzJCRjE1MUE4MjVBMDA0MTIzRkYgLyogSW50MzJBcnJheS5oICovLAogCQkJCUE4
QTQ3MkJEMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQ4QXJyYXkuaCAqLywKQEAgLTExODEsNiArMTE4
NCw3IEBACiAJCQkJQThBNDczRTgxNTFBODI1QjAwNDEyM0ZGIC8qIE1hdGhFeHRyYXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3M0VBMTUxQTgyNUIwMDQxMjNGRiAvKiBNRDUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNENTQ5N0FEMTU4NTdEMDMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRTUwNTU3MTc4N0E4MDYwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTRGMUQxMTU0MTVGRjExQkUwMDI2RTkwOCAvKiBNZW1vcnlJbnN0
cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRGRDg1NTQ3MTYxMzNFMEUwMEM1Qjcw
NCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25BcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICov
LAogCQkJCUYzRkJDNzFFMTYxQUY3QkYwMEJCNEJENCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25I
YXNoQ291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EYXRh
TG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGF0YUxvZy5oCShyZXZpc2lvbiAx
NTI1ODIpCisrKyBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw2ICsxMTgsMTggQEAgdm9pZCBkYXRhTG9nKGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJgog
ICAgIGRhdGFGaWxlKCkucHJpbnQodmFsdWUxLCB2YWx1ZTIsIHZhbHVlMywgdmFsdWU0LCB2YWx1
ZTUsIHZhbHVlNiwgdmFsdWU3LCB2YWx1ZTgsIHZhbHVlOSwgdmFsdWUxMCwgdmFsdWUxMSwgdmFs
dWUxMiwgdmFsdWUxMyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwg
dHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVu
YW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUg
VDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0Pgordm9pZCBkYXRh
TG9nKGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJiB2YWx1ZTIsIGNvbnN0IFQzJiB2YWx1ZTMs
IGNvbnN0IFQ0JiB2YWx1ZTQsIGNvbnN0IFQ1JiB2YWx1ZTUsIGNvbnN0IFQ2JiB2YWx1ZTYsIGNv
bnN0IFQ3JiB2YWx1ZTcsIGNvbnN0IFQ4JiB2YWx1ZTgsIGNvbnN0IFQ5JiB2YWx1ZTksIGNvbnN0
IFQxMCYgdmFsdWUxMCwgY29uc3QgVDExJiB2YWx1ZTExLCBjb25zdCBUMTImIHZhbHVlMTIsIGNv
bnN0IFQxMyYgdmFsdWUxMywgY29uc3QgVDE0JiB2YWx1ZTE0KQoreworICAgIGRhdGFGaWxlKCku
cHJpbnQodmFsdWUxLCB2YWx1ZTIsIHZhbHVlMywgdmFsdWU0LCB2YWx1ZTUsIHZhbHVlNiwgdmFs
dWU3LCB2YWx1ZTgsIHZhbHVlOSwgdmFsdWUxMCwgdmFsdWUxMSwgdmFsdWUxMiwgdmFsdWUxMywg
dmFsdWUxNCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3
LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0
eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTU+Cit2
b2lkIGRhdGFMb2coY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwgY29uc3QgVDMm
IHZhbHVlMywgY29uc3QgVDQmIHZhbHVlNCwgY29uc3QgVDUmIHZhbHVlNSwgY29uc3QgVDYmIHZh
bHVlNiwgY29uc3QgVDcmIHZhbHVlNywgY29uc3QgVDgmIHZhbHVlOCwgY29uc3QgVDkmIHZhbHVl
OSwgY29uc3QgVDEwJiB2YWx1ZTEwLCBjb25zdCBUMTEmIHZhbHVlMTEsIGNvbnN0IFQxMiYgdmFs
dWUxMiwgY29uc3QgVDEzJiB2YWx1ZTEzLCBjb25zdCBUMTQmIHZhbHVlMTQsIGNvbnN0IFQxNSYg
dmFsdWUxNSkKK3sKKyAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlMSwgdmFsdWUyLCB2YWx1ZTMs
IHZhbHVlNCwgdmFsdWU1LCB2YWx1ZTYsIHZhbHVlNywgdmFsdWU4LCB2YWx1ZTksIHZhbHVlMTAs
IHZhbHVlMTEsIHZhbHVlMTIsIHZhbHVlMTMsIHZhbHVlMTQsIHZhbHVlMTUpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpkYXRhTG9nOwpJbmRleDogU291cmNlL1dURi93
dGYvSGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2
aXNpb24gMTUyNTgyKQorKysgU291cmNlL1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NiwxMiArODYsMTkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBzbyB0
aGF0IGNhbGxlcnMKICAgICAgICAgLy8gY2FuIGp1c3QgcGFzcyB0aGUgdHJhbnNsYXRvciBhbmQg
bGV0IHRoZSBjb21waWxlciBkZWR1Y2UgVC4KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IEFkZFJlc3VsdCBhZGQoY29uc3QgVCYpOworICAgICAg
ICAKKyAgICAgICAgLy8gQXR0ZW1wdHMgdG8gYWRkIGEgbGlzdCBvZiB0aGluZ3MgdG8gdGhlIHNl
dC4gUmV0dXJucyB0cnVlIGlmIGFueSBvZgorICAgICAgICAvLyB0aGVtIGFyZSBuZXcgdG8gdGhl
IHNldC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgc2V0IGlzIHVuY2hhbmdlZC4KKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgorICAgICAgICBib29sIGFkZChJdGVyYXRvclR5
cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpOwogCiAgICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0
IFZhbHVlVHlwZSYpOwogICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvcik7CiAgICAgICAgIHZv
aWQgY2xlYXIoKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoY29uc3QgVmFs
dWVUeXBlJik7CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaFNl
dCYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIHZvaWQgZGVsZXRlQWxs
VmFsdWVzPD4oY29uc3QgSGFzaFNldCYpOwpAQCAtMTkxLDYgKzE5OCwxNiBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBl
bmFtZSBWPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKyAgICBpbmxpbmUg
Ym9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5
cGUgZW5kKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZv
ciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gYWRkKCppdGVyKS5pc05ld0VudHJ5OworICAgICAgICByZXR1cm4g
Y2hhbmdlZDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgogICAgIGlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVy
YXRvciBpdCkKICAgICB7CiAgICAgICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQpA
QCAtMjU2LDYgKzI3MywxOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHZlY3Rvcltp
XSA9ICppdDsKICAgICB9ICAKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9
PShjb25zdCBIYXNoU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChzaXplKCkg
IT0gb3RoZXIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3Ig
KGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZCgpOyArK2l0ZXIpIHsK
KyAgICAgICAgICAgIGlmICghb3RoZXIuY29udGFpbnMoKml0ZXIpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
IH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Okhhc2hTZXQ7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFi
bGUuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExNzAsNiArMTE3MCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHsK
ICAgICAgICAgLy8gQ29weSB0aGUgaGFzaCB0YWJsZSB0aGUgZHVtYiB3YXksIGJ5IGFkZGluZyBl
YWNoIGVsZW1lbnQgdG8gdGhlIG5ldyB0YWJsZS4KICAgICAgICAgLy8gSXQgbWlnaHQgYmUgbW9y
ZSBlZmZpY2llbnQgdG8gY29weSB0aGUgdGFibGUgc2xvdHMsIGJ1dCBpdCdzIG5vdCBjbGVhciB0
aGF0IGVmZmljaWVuY3kgaXMgbmVlZGVkLgorICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkg
dGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQor
ICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExODQ1NQogICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKICAg
ICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9IG90aGVyLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKICAgICAgICAgICAgIGFkZCgqaXQpOwpAQCAtMTIwOSw2ICsxMjExLDggQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMs
IHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9y
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4mIEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6b3BlcmF0b3I9
KGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogSXQncyBs
aWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0
IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExODQ1NQogICAgICAgICBIYXNoVGFibGUgdG1wKG90aGVyKTsKICAgICAgICAg
c3dhcCh0bXApOwogICAgICAgICByZXR1cm4gKnRoaXM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9J
bnNlcnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBJbnNlcnRpb25faAorI2RlZmluZSBJbnNlcnRpb25faAorCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluc2VydGlvbiB7CitwdWJs
aWM6CisgICAgSW5zZXJ0aW9uKCkgeyB9CisgICAgCisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRl
eCwgVCBlbGVtZW50KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9lbGVt
ZW50KGVsZW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgVCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9l
bGVtZW50OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSW5zZXJ0aW9uJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZGV4IDwgb3RoZXIubV9pbmRleDsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHNpemVfdCBtX2luZGV4OworICAgIFQgbV9lbGVt
ZW50OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0VmVjdG9yVHlwZSwgdHlwZW5hbWUg
SW5zZXJ0aW9uVmVjdG9yVHlwZT4KK3ZvaWQgZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVjdG9y
VHlwZSYgdGFyZ2V0LCBJbnNlcnRpb25WZWN0b3JUeXBlJiBpbnNlcnRpb25zKQoreworICAgIGlm
ICghaW5zZXJ0aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKyAgICB0YXJnZXQuZ3Jvdyh0
YXJnZXQuc2l6ZSgpICsgaW5zZXJ0aW9ucy5zaXplKCkpOworICAgIHNpemVfdCBsYXN0SW5kZXgg
PSB0YXJnZXQuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gaW5z
ZXJ0aW9ucy5zaXplKCk7IGluZGV4SW5JbnNlcnRpb25zLS07KSB7CisgICAgICAgIHNpemVfdCBm
aXJzdEluZGV4ID0gaW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uaW5kZXgoKSArIGluZGV4
SW5JbnNlcnRpb25zOworICAgICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0
aW9ucyArIDE7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0
SW5kZXg7KQorICAgICAgICAgICAgdGFyZ2V0W2ldID0gdGFyZ2V0W2kgLSBpbmRleE9mZnNldF07
CisgICAgICAgIHRhcmdldFtmaXJzdEluZGV4XSA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlv
bnNdLmVsZW1lbnQoKTsKKyAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleDsKKyAgICB9Cisg
ICAgaW5zZXJ0aW9ucy5yZXNpemUoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2lu
ZyBXVEY6Okluc2VydGlvbjsKK3VzaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnM7CisKKyNlbmRp
ZiAvLyBJbnNlcnRpb25faApJbmRleDogU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCShyZXZpc2lvbiAxNTI1ODIp
CisrKyBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcs
NiArMjA3LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcHJpbnQodmFsdWUxMik7CiAgICAgICAgIHBy
aW50KHZhbHVlMTMpOwogICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlw
ZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsIHR5cGVuYW1l
IFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAs
IHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxND4K
KyAgICB2b2lkIHByaW50KGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJiB2YWx1ZTIsIGNvbnN0
IFQzJiB2YWx1ZTMsIGNvbnN0IFQ0JiB2YWx1ZTQsIGNvbnN0IFQ1JiB2YWx1ZTUsIGNvbnN0IFQ2
JiB2YWx1ZTYsIGNvbnN0IFQ3JiB2YWx1ZTcsIGNvbnN0IFQ4JiB2YWx1ZTgsIGNvbnN0IFQ5JiB2
YWx1ZTksIGNvbnN0IFQxMCYgdmFsdWUxMCwgY29uc3QgVDExJiB2YWx1ZTExLCBjb25zdCBUMTIm
IHZhbHVlMTIsIGNvbnN0IFQxMyYgdmFsdWUxMywgY29uc3QgVDE0JiB2YWx1ZTE0KQorICAgIHsK
KyAgICAgICAgcHJpbnQodmFsdWUxKTsKKyAgICAgICAgcHJpbnQodmFsdWUyKTsKKyAgICAgICAg
cHJpbnQodmFsdWUzKTsKKyAgICAgICAgcHJpbnQodmFsdWU0KTsKKyAgICAgICAgcHJpbnQodmFs
dWU1KTsKKyAgICAgICAgcHJpbnQodmFsdWU2KTsKKyAgICAgICAgcHJpbnQodmFsdWU3KTsKKyAg
ICAgICAgcHJpbnQodmFsdWU4KTsKKyAgICAgICAgcHJpbnQodmFsdWU5KTsKKyAgICAgICAgcHJp
bnQodmFsdWUxMCk7CisgICAgICAgIHByaW50KHZhbHVlMTEpOworICAgICAgICBwcmludCh2YWx1
ZTEyKTsKKyAgICAgICAgcHJpbnQodmFsdWUxMyk7CisgICAgICAgIHByaW50KHZhbHVlMTQpOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVu
YW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBU
NywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwg
dHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1Pgor
ICAgIHZvaWQgcHJpbnQoY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwgY29uc3Qg
VDMmIHZhbHVlMywgY29uc3QgVDQmIHZhbHVlNCwgY29uc3QgVDUmIHZhbHVlNSwgY29uc3QgVDYm
IHZhbHVlNiwgY29uc3QgVDcmIHZhbHVlNywgY29uc3QgVDgmIHZhbHVlOCwgY29uc3QgVDkmIHZh
bHVlOSwgY29uc3QgVDEwJiB2YWx1ZTEwLCBjb25zdCBUMTEmIHZhbHVlMTEsIGNvbnN0IFQxMiYg
dmFsdWUxMiwgY29uc3QgVDEzJiB2YWx1ZTEzLCBjb25zdCBUMTQmIHZhbHVlMTQsIGNvbnN0IFQx
NSYgdmFsdWUxNSkKKyAgICB7CisgICAgICAgIHByaW50KHZhbHVlMSk7CisgICAgICAgIHByaW50
KHZhbHVlMik7CisgICAgICAgIHByaW50KHZhbHVlMyk7CisgICAgICAgIHByaW50KHZhbHVlNCk7
CisgICAgICAgIHByaW50KHZhbHVlNSk7CisgICAgICAgIHByaW50KHZhbHVlNik7CisgICAgICAg
IHByaW50KHZhbHVlNyk7CisgICAgICAgIHByaW50KHZhbHVlOCk7CisgICAgICAgIHByaW50KHZh
bHVlOSk7CisgICAgICAgIHByaW50KHZhbHVlMTApOworICAgICAgICBwcmludCh2YWx1ZTExKTsK
KyAgICAgICAgcHJpbnQodmFsdWUxMik7CisgICAgICAgIHByaW50KHZhbHVlMTMpOworICAgICAg
ICBwcmludCh2YWx1ZTE0KTsKKyAgICAgICAgcHJpbnQodmFsdWUxNSk7CisgICAgfQogfTsKIAog
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGNvbnN0
IGNoYXIqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206561</attachid>
            <date>2013-07-12 12:20:48 -0700</date>
            <delta_ts>2013-07-12 15:41:41 -0700</delta_ts>
            <desc>added dumping of SSA metadata</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>234730</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NiBA
QAorMjAxMy0wNy0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcg
VVJMIChPT1BTISkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpmaWxsKToK
KyAgICAgICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmNsZWFyKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpzZXRMaXZl
VmFsdWVzKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZW5kQmFz
aWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKiBk
ZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6
Omp1c3RPbmVDaGlsZCk6CisgICAgICAgIChBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKiBkZmcv
REZHQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Js
b2NrOjp+QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6ZW5zdXJl
TG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjppc0luUGhpcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6aXNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FE
YXRhOjpTU0FEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+
U1NBRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKEJhc2lj
QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Om9wZXJhdG9yW10pOgorICAg
ICAgICAoU1NBRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja0luc2VydGlvblNl
dDo6QmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9u
U2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnRCZWZvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0OjpleGVj
dXRlKToKKyAgICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAoQmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAqIGRmZy9E
RkdDb21tb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzS2lsbCk6CisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6OmtpbGxTdGF0dXNGb3JEb2VzS2lsbCk6CisgICAgICAgICog
ZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2U6OmlzQ29udHJhZGlj
dG9yeSk6CisgICAgICAgIChKU0M6OkRGRzo6Q29udHJhZGljdGlvblBydW5pbmdQaGFzZTo6bWFr
ZUNvbnRyYWRpY3RvcnkpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1Db250cmFkaWN0aW9u
UHJ1bmluZyk6CisgICAgICAgICogZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZTo6Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlOjpicmVha0NyaXRpY2FsRWRnZSk6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKToKKyAgICAgICAgKiBkZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
ICogZGZnL0RGR0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6ZmluZFR5cGVDaGVja1Jvb3QpOgorICAg
ICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpjb3VudE5vZGUpOgorICAgICAgICAoRENFUGhhc2Up
OgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpjb3VudEVkZ2UpOgorICAgICAgICAoSlND
OjpERkc6OkRDRVBoYXNlOjplbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKToKKyAg
ICAgICAgKiBkZmcvREZHRWRnZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0VkZ2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpFZGdl
KToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXROb2RlKToKKyAgICAgICAgKEpTQzo6REZH
OjpFZGdlOjpzZXRVc2VLaW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRQcm9vZlN0
YXR1cyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6d2lsbE5vdEhhdmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkRGRzo6RWRnZTo6d2lsbEhhdmVDaGVjayk6CisgICAgICAgIChFZGdlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpFZGdlOjpraWxsU3RhdHVzVW5jaGVja2VkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpFZGdlOjpraWxsU3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRL
aWxsU3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpkb2VzS2lsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6RWRnZTo6ZG9lc05vdEtpbGwpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6
Om1ha2VXb3JkKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hGb3JtYXQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRm
Zy9ERkdGbHVzaEZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChXVEYp
OgorICAgICAgICAqIGRmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZTo6Rmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZW5lc3NBbmFseXNp
c1BoYXNlOjpwcm9jZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVuZXNzQW5hbHlz
aXNQaGFzZTo6c2V0Rm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hMaXZlbmVzc0Fu
YWx5c2lzUGhhc2U6OmZsdXNoRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZv
cm1GbHVzaExpdmVuZXNzQW5hbHlzaXMpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaExpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgIChERkcpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjphZGRGb3JEZXB0aEZpcnN0U29ydCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmRlcHRoRmlyc3RTb3J0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Okluc2VydGlvblNldDo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKExpdmVuZXNzQW5hbHlzaXNQaGFzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnByb2Nlc3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OnBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKToKKyAgICAgICAgKiBkZmcvREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUGhpKToKKyAgICAgICAgKE5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnBoaSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dGFrZW5CbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bm90VGFrZW5CbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyk6CisgICAg
ICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChTU0FDb252ZXJzaW9u
UGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6U1NBQ29udmVy
c2lvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpQ2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2FyZFBoaSk6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpRWRnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpkZWR1cGxpY2F0ZUNoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmROb2Rl
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2Fy
ZE5vZGVFZGdlKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmg6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpmbHVzaEZvcm1hdCk6Cisg
ICAgICAgIChWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93
ZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjcmVhdGVQaGlWYXJpYWJs
ZXMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjaGVja0FyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVVwc2lsb24pOgorICAgICAgICAoTG93ZXJE
RkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUGhp
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUpTQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlV2Vha0pTQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQWRkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoU3ViKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTXVsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoRGl2KToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTW9kKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTWluT3JNYXgpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhBYnMpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhOZWdhdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQml0QW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZUJpdE9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUJpdFhvcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVCaXRSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlQml0TFNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUJpdFVSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
VUludDMyVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlSW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVHZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZUNvbXBhcmVFcUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVDb21wYXJlU3RyaWN0RXFDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzcyk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzc0VxKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVHcmVhdGVyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVHcmVhdGVyRXEpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0ludDMyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Q2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06Omxvd0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpsb3dEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dKU1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc0xpdmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjp1c2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppbml0
aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjplbWl0T1NSRXhpdENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjphZGRFeGl0QXJndW1lbnRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6c2V0SW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpz
ZXRKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c2V0Qm9vbGVh
bik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNldFN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzZXREb3VibGUpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc1ZhbGlkKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJl
ZE5vZGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChMb3dlcmVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjpMb3dlcmVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJlZE5vZGVWYWx1ZTo6b3BlcmF0b3IhKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJlZE5vZGVWYWx1ZTo6YmxvY2spOgorICAgICAgICAqIGZ0bC9GVExWYWx1ZUZyb21CbG9j
ay5oOgorICAgICAgICAoSlNDOjpGVEw6OlZhbHVlRnJvbUJsb2NrOjpWYWx1ZUZyb21CbG9jayk6
CisgICAgICAgIChWYWx1ZUZyb21CbG9jayk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlU291cmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgICog
ZnRsL0ZUTFZhbHVlU291cmNlLmg6CisKIDIwMTMtMDctMTEgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlc3VycmVjdCB0aGUgQ0xvb3AgTExJTlQgb24gdGhlIEZU
TCBicmFuY2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUy
NTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMyArMTcwLDEzIEBACiAJCTBG
NDZFNkI5MTc2Rjg5REIwMEUxRjc1NSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUg
LyogRlRMU3dpdGNoQ2FzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNDZFNkM1MTc2RjhBNUUwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZD
MjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovOyB9OwogCQkwRjQ2RTZD
NjE3NkY4QTYwMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBE
RkdMYXp5SlNWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGNDZFNkVGMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1
QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi87IH07Ci0JCTBGNDZFNkYzMTc3Q0YwRDIwMEUx
Rjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxM
b29wcy5jcHAgKi87IH07Ci0JCTBGNDZFNkY0MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFs
TG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ2RTZEOTE3N0NCOTAwMDBF
MUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZENzE3N0NCOEZDMDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5jcHAgKi87IH07CiAJCTBGNDZFNkUzMTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlz
YXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkU0MTc3Q0Mz
NjYwMEUxRjc1NSAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUxMTc3Q0MzNjYwMEUxRjc1NSAvKiBVRGlz
ODZEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ2RTZFNTE3N0NDMzY2MDBFMUY3NTUgLyogWDg2RGlzYXNzZW1ibGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUy
MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwICovOyB9OworCQkwRjQ2RTZF
RjE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkVFMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdB
bmFseXNpcy5oICovOyB9OworCQkwRjQ2RTZGMzE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJh
bExvb3BzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDZFNkYxMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovOyB9Owor
CQkwRjQ2RTZGNDE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZGMjE3N0NGMEQyMDBF
MUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJ
CTBGNEUxQTBFMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTBDMTcz
QUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLzsgfTsKIAkJMEY0
RTFBMEYxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTBEMTczQUVEREMw
MDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1Myw2ICszNTMsMjEgQEAKIAkJMEZEREJG
QjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4
IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2
QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9Owor
CQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTU4MTc4N0FB
ODgwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTVDMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1NUQxNzg3QjBDRjAw
QjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1NjMxNzhGNUIwNTAwQjM1RjhDIC8qIERG
R0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhDIC8qIERGR0Jhc2ljQmxvY2suY3BwICovOyB9
OworCQkwRkU1MDU3MTE3OEY1QjUzMDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NjQx
NzhGNUI1MzAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEZF
NTA1NzQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTY3MTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdGbHVzaEZvcm1hdC5jcHAgKi87IH07CisJCTBGRTUwNTc1MTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNTA1NjgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1
NzYxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTY5MTc4
RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi87IH07
CisJCTBGRTUwNTc3MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
NTA1NkExNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1
NzgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2QjE3OEY1QjUz
MDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1
NzkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NkMxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTdBMTc4RjVCNTMwMEIzNUY4QyAv
KiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZEMTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1N0IxNzhG
NUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZFMTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1N0MxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2RjE3OEY1QjUzMDBCMzVGOEMgLyogREZH
U1NBQ29udmVyc2lvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1N0QxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NzAxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZl
cnNpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUz
NDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi87IH07CiAJ
CTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzRBMTcyM0NE
QTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE4
NiwxMyArMTIwMSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyogRlRMU3dpdGNo
Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0Y2hDYXNlLmg7
IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3BwOyBwYXRoID0g
ZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcvREZHTGF6eUpT
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUxNzdDRTk1QTAw
RTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29w
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9v
cHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBh
dGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIuY3BwOyBwYXRo
ID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1ibGVyLmg7IHBh
dGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlzYXNzZW1ibGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5o
OyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2RGlzYXNzZW1i
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4NkRpc2Fzc2Vt
Ymxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0Fu
YWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7
IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3BwOyBwYXRoID0g
ZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBkZmcvREZHTmF0
dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkzQUY4MTZEMENB
RDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRFMUEwRDE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzOTksMjEgQEAKIAkJMEZEREJGQjMxNjY2RUVENTAw
QzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBkZmcvREZHQmxv
Y2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUEx
Nzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTUwNTYyMTc4RjVCMDUwMEIzNUY4QyAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Jhc2ljQmxvY2suY3BwOyBwYXRoID0gZGZnL0RG
R0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2NDE3
OEY1QjUzMDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0g
ZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNTA1NjcxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZsdXNoRm9ybWF0LmNwcDsgcGF0aCA9
IGRmZy9ERkdGbHVzaEZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTUwNTY4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbHVzaEZvcm1hdC5oOyBwYXRoID0gZGZnL0RGR0ZsdXNo
Rm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTY5MTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2QTE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1
c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1
MDU2QjE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkMxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkQxNzhGNUI1MzAwQjM1
RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTZFMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU3MDE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29u
dmVyc2lvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NTQUNv
bnZlcnNpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RB
NTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTA5RkQx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0aW9ucy5oOyBwYXRoID0gZnRsL0ZUTEFiYnJldmlh
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NjIsMTAgKzI5OTIsMTMg
QEAKIAkJCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmgg
Ki8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCisJCQkJMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhD
IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLAogCQkJCTBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERG
R0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCiAJCQkJMEZEMjgxMjUxNzc5M0JFMzAwQkJCMEYzIC8q
IERGR0JpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEZEMjgxMjYxNzc5M0JFMzAwQkJCMEYzIC8q
IERGR0JpbmFyeVN3aXRjaC5oICovLAorCQkJCTBGRTUwNTY0MTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhD
IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEY4MzY0QjUxNjRCMEMwRTAwNTMz
MjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oICovLAogCQkJCTg2RUM5REI0MTMyOERGODIwMDJC
MkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yOTg1LDYgKzMwMTgsOCBAQAog
CQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5o
ICovLAogCQkJCTBGQkUwRjZCMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5oICovLAorCQkJCTBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU1QjE3ODdCMENGMDBCMzVG
OEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRF
RjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5
NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEYyRkM3NzAxNkUxMkY2RjAwMzhE
OTc2IC8qIERGR0RDRVBoYXNlLmNwcCAqLywKQEAgLTMwMTEsNiArMzA0NiwxMCBAQAogCQkJCTBG
REIyQ0Q0MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjJCREMx
MjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi8sCiAJCQkJMEYyQkRDMTMx
NTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLywKKwkJCQkwRkU1MDU2NzE3OEY1
QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuY3BwICovLAorCQkJCTBGRTUwNTY4MTc4RjVC
NTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oICovLAorCQkJCTBGRTUwNTY5MTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8sCisJCQkJMEZF
NTA1NkExNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
Ki8sCiAJCQkJODZBRTZDNEIxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCAqLywKIAkJ
CQk4NkVDOURCNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCAqLywKIAkJ
CQk4NkFFNkM0QzEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oICovLApAQCAtMzAyNSw2
ICszMDY0LDggQEAKIAkJCQkwRkRCMkNENjE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxp
emVyLmggKi8sCiAJCQkJMEY0NkU2QzIxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVl
LmNwcCAqLywKIAkJCQkwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUu
aCAqLywKKwkJCQkwRkU1MDU2QjE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNp
c1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU2QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmggKi8sCiAJCQkJMEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0xvbmdMaXZlZFN0YXRlLmNwcCAqLywKIAkJCQkwRkI0QjUxRDE2QjYyNzcyMDAzRjY5NkIgLyog
REZHTG9uZ0xpdmVkU3RhdGUuaCAqLywKIAkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyog
REZHTWluaWZpZWRHcmFwaC5oICovLApAQCAtMzA0MSw2ICszMDgyLDggQEAKIAkJCQkwRkE1ODFC
OTE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCAqLywKIAkJCQk4NkVDOURCRjEzMjhE
RjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJODZFQzlEQzAxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCAqLywKKwkJCQkwRkU1MDU2RDE3OEY1QjUzMDBC
MzVGOEMgLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgKi8sCisJCQkJMEZF
NTA1NkUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aCAqLywKIAkJCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwICov
LAogCQkJCTBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovLAogCQkJ
CTBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCAqLywKQEAgLTMwNzgs
NiArMzEyMSw4IEBACiAJCQkJODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmggKi8sCiAJCQkJODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwICovLAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKKwkJCQkwRkU1MDU2RjE3OEY1QjUzMDBCMzVGOEMgLyog
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU3MDE3OEY1QjUzMDBCMzVG
OEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggKi8sCiAJCQkJMEY2Mzk0NzYxNURDRTM0NzAw
NkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLywKIAkJCQkwRkMwOTc5RjE0
NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3
MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCkBAIC0zMjk4LDYgKzMzNDMsNyBAQAogCQkJCTg2
MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjNDMDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQSUNhc3QuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRTUwNTc5MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVz
c0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NUY0MDg4MTBFN0Q1NjMwMDk0
NzM2MSAvKiBBUElTaGltcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGNjA1MTQwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjU3REU4MEUxRjUxQzUw
MDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzQwNyw2ICszNDUzLDcg
QEAKIAkJCQkwRkVBMEExRDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9y
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0Rv
dWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3RDE3OEY1QjUzMDBC
MzVGOEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQz
QzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAq
LywKQEAgLTM0MjgsNiArMzQ3NSw3IEBACiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8q
IERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0
MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4
MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkU1MDU3NzE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEUxQTEyMTczQUYwN0IwMDdFRTJEMyAv
KiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1
QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZD
OTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNDQ0LDYgKzM0OTIsNyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIw
MDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDcxNTIy
ODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkU1MDU1RDE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8q
IERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2
OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRE
QkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zNTkxLDYgKzM2NDAsOCBAQAogCQkJCTBGNzY2RDM1MTVBRTI1M0IwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRTUwNTc1MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NTkxNzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzJGRkQ2NDEzOTk4NUE4MDBFNTM2NUEg
LyogS2V5d29yZExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3MkEwRUQxQ0U2OTAw
RjFGNjgxIC8qIExhYmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjAwOTdBNjBFQkFCQjU4MDA3
QTcyOTcgLyogTGFiZWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzA4LDYgKzM3NTksNyBA
QAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGREIyQ0RFMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3QjE3OEY1QjUzMDBCMzVGOEMgLyog
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
Q0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyMzVCREIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBI
ZWFkZXJzICovLApAQCAtNDE5NCw2ICs0MjQ2LDcgQEAKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4
ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREIyQ0Q5MTc0
MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRTUwNTc4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3M0Q3QUUxNjVBMTQyRDAwQUNBQjcx
IC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTY5QTA3
OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjhGOTQ0MDE2Njc2MzMwMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTQyMjUsOSArNDI3OCwxMSBAQAogCQkJCTBGQzA5NzZFMTQ2OEFCNTEwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzQxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMjM1QkQ4MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9y
bWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAw
QzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0
NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRTUwNTcxMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
Q0FyZ3VtZW50R2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkM1NTcwMTQ3MzhGMzUw
MDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlE
MTZCNzJBMDgwMDVERjk1QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MzQ2
LDYgKzQ0MDEsNyBAQAogCQkJCTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRS
ZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc4ODAxNDAxNDcxQUQ5MjAwNDFCMDE2IC8qIEpT
RGF0ZU1hdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDYxMDdFQzI3MTAwNURCQzhE
IC8qIEpTRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzYxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDM4Myw2ICs0NDM5LDcgQEAKIAkJCQlC
Q0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5NUFCODM0MjBEQTQzMjI1MDBCQzgzRjMgLyogTGVnYWN5
UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1N0MxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFC
MDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3
NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC00NDA1LDcgKzQ0NjIsOSBAQAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAv
KiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBC
MDJFODYgLyogTWFya1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3
RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTdB
MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNEMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0
aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTVDMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RDI4MTI3MTc3OTNCRTUwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQkYyRkYxNTYwRjA2QTAwOEU5MjIy
IC8qIE5hbWVDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0MTcsNiArNDQ3Niw3
IEBACiAJCQkJNjU1RUIyOUIxMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVzQ29kZWdlbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQ2OURFMjEwN0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTMxMDdFQzdFNzAwNjUwNDQ2IC8q
IE51bWJlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU2MzE3OEY1QjA1MDBC
MzVGOEMgLyogREZHQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFNDEw
N0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg2RjNFRUJFMTY4Q0RFOTMwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTE0NDY5REU1MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RDb25zdHJ1
Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0cyB7CiAgICAgc3RhdGljIFQgZGVmYXVsdFZh
bHVlKCkgeyByZXR1cm4gVCgpOyB9Ci0gICAgc3RhdGljIHZvaWQgZHVtcChjb25zdCBUJiB2YWx1
ZSwgUHJpbnRTdHJlYW0mIG91dCkgeyB2YWx1ZS5kdW1wKG91dCk7IH0KKyAgICBzdGF0aWMgdm9p
ZCBkdW1wKGNvbnN0IFQmIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KSB7IG91dC5wcmludCh2YWx1
ZSk7IH0KIH07CiAKIGVudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQsIExvY2FsT3Bl
cmFuZCB9OwpAQCAtMjA5LDEyICsyMDksMjUgQEAgcHVibGljOgogICAgICAgICBzZXRMb2NhbEZp
cnN0VGltZShvcGVyYW5kLCB2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2xlYXIoKQor
ICAgIHZvaWQgZmlsbChUIHZhbHVlKQogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRzW2ld
ID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0g
dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7Cisg
ICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNs
ZWFyKCkKKyAgICB7CisgICAgICAgIGZpbGwoVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSk7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYW5kcyYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBvdGhlci5udW1i
ZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAgQVNTRVJUKG51bWJlck9mTG9jYWxzKCkgPT0gb3Ro
ZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHMgPT0gb3RoZXIubV9hcmd1bWVudHMgJiYgbV9sb2NhbHMgPT0gb3RoZXIubV9sb2NhbHM7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2
aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTYgQEAgdm9pZCBBYnN0cmFjdFN0
YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJh
Y3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSBiYXNpY0Jsb2NrLT5zc2EtPnZhbHVlc0F0SGVhZC5i
ZWdpbigpOworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3Ig
ZW5kID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQuZW5kKCk7CisgICAgICAgIGZvciAo
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBmb3JOb2RlKGl0ZXItPmtleSkg
PSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5oYXNDbG9iYmVyYWJs
ZVN0YXRlKCkpCisgICAgICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCiAgICAgYmFzaWNCbG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZh
bHNlOwogICAgIGJhc2ljQmxvY2stPmNmYUhhc1Zpc2l0ZWQgPSB0cnVlOwogICAgIG1fYmxvY2sg
PSBiYXNpY0Jsb2NrOwpAQCAtODMsOSArOTMsMTkgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpiZWdp
bkJhc2ljQmxvY2soQmFzaQogICAgIG1fY3VycmVudE5vZGUgPSAwOwogfQogCi12b2lkIEFic3Ry
YWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyYXBoKQorc3RhdGljIHZvaWQgc2V0TGl2ZVZh
bHVlcyhIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBIYXNoU2V0PE5vZGUq
PiYgbGl2ZSkKK3sKKyAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICAKKyAgICBIYXNoU2V0PE5vZGUq
Pjo6aXRlcmF0b3IgaXRlciA9IGxpdmUuYmVnaW4oKTsKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRl
cmF0b3IgZW5kID0gbGl2ZS5lbmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikK
KyAgICAgICAgdmFsdWVzLmFkZCgqaXRlciwgQWJzdHJhY3RWYWx1ZSgpKTsKK30KKwordm9pZCBB
YnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKIHsKLSAgICBCYXNpY0Jsb2NrKiByb290ID0gZ3Jh
cGguYmxvY2soMCk7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7CiAg
ICAgcm9vdC0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7CiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRl
ZCA9IGZhbHNlOwogICAgIHJvb3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CkBAIC0xMTgs
OCArMTM4LDggQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogICAg
ICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgICAgIHJv
b3QtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwogICAgIH0KLSAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9ja0luZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsr
YmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJs
b2NrKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hh
YmxlKQpAQCAtMTM3LDEyICsxNTcsMTIgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXpl
KEdyYXBoJiBncgogICAgICAgICB9CiAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAh
PSBncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KQorICAgICAgICBpZiAoYmxvY2st
PmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3Jh
cGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOwotICAgICAgICAgICAgdmFs
dWUuc2V0TW9zdFNwZWNpZmljKGdyYXBoLCBncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlc1tp
XSk7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGdyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFs
dWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIHZhbHVlLnNldE1vc3RTcGVjaWZp
YyhtX2dyYXBoLCBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ldKTsKKyAgICAgICAg
ICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5k
Rm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3Bl
cmFuZCkubWVyZ2UodmFsdWUpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgSW5pdGlhbGl6aW5nIEJsb2NrICMldSwg
b3BlcmFuZCByJWQsIHRvICIsIGJsb2NrSW5kZXgsIG9wZXJhbmQpOwpAQCAtMTUxLDYgKzE3MSwx
MCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAjZW5kaWYKICAg
ICAgICAgfQogICAgICAgICBibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7CisgICAgICAg
IGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgICAgIHNldExpdmVWYWx1ZXMo
YmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLCBibG9jay0+c3NhLT5saXZlQXRIZWFkKTsKKyAgICAg
ICAgICAgIHNldExpdmVWYWx1ZXMoYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsLCBibG9jay0+c3Nh
LT5saXZlQXRUYWlsKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMTcyLDIwICsxOTYsNDEg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrKE1lcmdlTQogICAgIGJvb2wgY2hh
bmdlZCA9IGZhbHNlOwogICAgIAogICAgIGlmIChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8ICFB
U1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1
bWVudCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1
bWVudCkgeworICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7CisgICAgICAgIGNhc2Ug
VGhyZWFkZWRDUFM6IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJn
dW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJn
dW1lbnQpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRlIGZvciBhcmd1bWVudCAlenUu
XG4iLCBhcmd1bWVudCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2lu
ZyBzdGF0ZSBmb3IgYXJndW1lbnQgJXp1LlxuIiwgYXJndW1lbnQpOwogI2VuZGlmCi0gICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1ZXNBdFRhaWwuYXJn
dW1lbnQoYXJndW1lbnQpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWls
KGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0
aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdp
bmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRlIGZvciBsb2NhbCAlenUuXG4iLCBsb2NhbCk7CiAj
ZW5kaWYKLSAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZh
bHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3Rh
dGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFibGVzLmxvY2FsKGxvY2FsKSwgYmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7CisgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3Zh
cmlhYmxlcy5sb2NhbChsb2NhbCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBTU0E6IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYmxvY2stPnZhbHVlc0F0VGFpbC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IGJsb2NrLT52YWx1ZXNBdFRhaWxbaV0ubWVyZ2UobV92YXJpYWJsZXNbaV0pOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9
IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuYmVnaW4oKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9k
ZSo+OjppdGVyYXRvciBlbmQgPSBibG9jay0+c3NhLT5saXZlQXRUYWlsLmVuZCgpOworICAgICAg
ICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gKml0ZXI7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBibG9jay0+c3NhLT52
YWx1ZXNBdFRhaWwuZmluZChub2RlKS0+dmFsdWUubWVyZ2UoZm9yTm9kZShub2RlKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMzIzLDEzICszNjgsMTMgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAorICAgIGNhc2UgTW92SGludDoKICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogewog
ICAgICAgICAvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQgaXMgZWZmZWN0
aXZlbHkgYSBwcm9taXNlIHRoYXQgdGhlIFNldExvY2FsCiAgICAgICAgIC8vIHdhcyBkZWFkLgog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgTW92SGludDoKICAgICBj
YXNlIFpvbWJpZUhpbnQ6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgYnJlYWs7CkBAIC0xNTg2LDYgKzE2MzEsMTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgUGhpOgorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
OworICAgICAgICAvLyBUaGUgc3RhdGUgb2YgdGhpcyBub2RlIHdvdWxkIGhhdmUgYWxyZWFkeSBi
ZWVuIGRlY2lkZWQuCisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFVwc2lsb246
IHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBmb3JOb2RlKG5vZGUt
PnBoaSgpKSA9IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNh
c2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgY2FzZSBCcmVha3BvaW50OgpA
QCAtMTY3OCw3ICsxNzM0LDcgQEAgaW5saW5lIHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0
cnVjdAogICAgIG1fZGlkQ2xvYmJlciA9IHRydWU7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0
U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3Ry
YWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGUqIG5vZGUpCitib29sIEFic3RyYWN0U3RhdGU6Om1l
cmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUm
IGluVmFyaWFibGUsIE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xNzY2LDIxICsxODIyLDQ0IEBAIGlubGluZSBib29sIEFic3RyYWN0U3Rh
dGU6Om1lcmdlU3RhdGVBdFQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCitib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQog
ewogICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9
PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgIEFTU0VSVChm
cm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9PSB0by0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCkpOwogICAgIAogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwog
ICAgIAotICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgewotICAgICAgICBB
YnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoYXJn
dW1lbnQpOwotICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRl
c3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpLCB0by0+dmFy
aWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmFy
Z3VtZW50KGFyZ3VtZW50KSk7CisgICAgc3dpdGNoIChtX2dyYXBoLm1fZm9ybSkgeworICAgIGNh
c2UgVGhyZWFkZWRDUFM6IHsKKyAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1
bWVudCA8IGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3Vt
ZW50KSB7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1
ZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmFy
Z3VtZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCks
IGZyb20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgZnJvbS0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKKyAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gdG8tPnZhbHVlc0F0SGVhZC5sb2NhbChsb2NhbCk7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3Rp
bmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpLCB0by0+dmFyaWFibGVzQXRI
ZWFkLmxvY2FsKGxvY2FsKSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAotICAgIGZvciAoc2l6ZV90IGxv
Y2FsID0gMDsgbG9jYWwgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsg
Kytsb2NhbCkgewotICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IHRvLT52YWx1
ZXNBdEhlYWQubG9jYWwobG9jYWwpOwotICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFyaWFibGVC
ZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwp
LCB0by0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKSwgZnJvbS0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKGxvY2FsKSk7CisgICAgICAgIAorICAgIGNhc2UgU1NBOiB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBmcm9tLT52YWx1ZXNBdFRhaWwuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAg
Y2hhbmdlZCB8PSB0by0+dmFsdWVzQXRIZWFkW2ldLm1lcmdlKGZyb20tPnZhbHVlc0F0VGFpbFtp
XSk7CisgICAgICAgIAorICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IHRv
LT5zc2EtPmxpdmVBdEhlYWQuYmVnaW4oKTsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJh
dG9yIGVuZCA9IHRvLT5zc2EtPmxpdmVBdEhlYWQuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IHRvLT5zc2EtPnZhbHVlc0F0SGVhZC5maW5kKG5vZGUpLT52YWx1
ZS5tZXJnZSgKKyAgICAgICAgICAgICAgICBmcm9tLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKG5v
ZGUpLT52YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAoIXRvLT5jZmFIYXNWaXNpdGVkKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9u
IDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgcHVibGljOgogICAgIC8vIENhbGwg
dGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0byBpbml0aWFsaXplIHRoZSBhYnN0cmFjdCB2YWx1
ZXMgb2YKICAgICAvLyBhcmd1bWVudHMsIGFuZCB0byBpbmRpY2F0ZSB3aGljaCBibG9ja3Mgc2hv
dWxkIGJlIGxpc3RlZCBmb3IgQ0ZBCiAgICAgLy8gZXhlY3V0aW9uLgotICAgIHN0YXRpYyB2b2lk
IGluaXRpYWxpemUoR3JhcGgmKTsKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKIAogICAgIC8vIFN0
YXJ0IGFic3RyYWN0bHkgZXhlY3V0aW5nIHRoZSBnaXZlbiBiYXNpYyBibG9jay4gSW5pdGlhbGl6
ZXMgdGhlCiAgICAgLy8gbm90aW9uIG9mIGFic3RyYWN0IHN0YXRlIHRvIHdoYXQgd2UgYmVsaWV2
ZSBpdCB0byBiZSBhdCB0aGUgaGVhZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5
OSwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgRWRnZSBjaGlsZDFVbmNoZWNrZWQoKSBjb25zdCB7
IHJldHVybiBtX3dvcmRzWzBdOyB9CiAgICAgCisgICAgRWRnZSBqdXN0T25lQ2hpbGQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCEhY2hpbGQxKCkgJiYgIWNoaWxkMigpKSB7CisgICAgICAg
ICAgICBBU1NFUlQoIWNoaWxkMygpKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDEoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gRWRnZSgpOworICAgIH0KKyAgICAKICAgICB2b2lkIGlu
aXRpYWxpemUoRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyLCBFZGdlIGNoaWxkMykKICAgICB7CiAg
ICAgICAgIGNoaWxkKDApID0gY2hpbGQxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJl
Z2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscykKKyAgICA6IGJ5
dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKKyAgICAsIGluZGV4KE5vQmxvY2spCisgICAgLCBp
c09TUlRhcmdldChmYWxzZSkKKyAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2UpCisgICAgLCBjZmFT
aG91bGRSZXZpc2l0KGZhbHNlKQorICAgICwgY2ZhRm91bmRDb25zdGFudHMoZmFsc2UpCisgICAg
LCBjZmFEaWRGaW5pc2godHJ1ZSkKKyAgICAsIGNmYUJyYW5jaERpcmVjdGlvbihJbnZhbGlkQnJh
bmNoRGlyZWN0aW9uKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAsIGlzTGlua2VkKGZhbHNl
KQorI2VuZGlmCisgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKKyAgICAsIHZhcmlhYmxlc0F0SGVh
ZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1
bWVudHMsIG51bUxvY2FscykKKyAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscykKKyAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKK3sKK30K
KworQmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKSB7IH0KKwordm9pZCBCYXNpY0Jsb2NrOjplbnN1
cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQoreworICAgIHZhcmlhYmxlc0F0SGVhZC5l
bnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2YXJpYWJsZXNBdFRhaWwuZW5zdXJlTG9j
YWxzKG5ld051bUxvY2Fscyk7CisgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1M
b2NhbHMpOworICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKK30K
KworYm9vbCBCYXNpY0Jsb2NrOjppc0luUGhpcyhOb2RlKiBub2RlKSBjb25zdAoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhpcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocGhp
c1tpXSA9PSBub2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjppc0luQmxvY2soTm9kZSogbXlOb2RlKSBj
b25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTm9kZXMoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChub2RlKGkpID09IG15Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiIyIsIGluZGV4KTsKK30KKwor
QmFzaWNCbG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNpY0Jsb2NrKiBibG9jaykKKyAgICA6IGZs
dXNoRm9ybWF0QXRIZWFkKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKKyAg
ICAsIGZsdXNoRm9ybWF0QXRUYWlsKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZCkKKyAgICAsIGF2YWlsYWJpbGl0eUF0SGVhZChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQpCisgICAgLCBhdmFpbGFiaWxpdHlBdFRhaWwoT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRIZWFkKQoreworfQorCitCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+U1NBRGF0YSgp
IHsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSAiREZHTm9k
ZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rpb24uaCIKICNpbmNsdWRlICJPcGVyYW5k
cy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00
NCw0MiArNDYsMTYgQEAgY2xhc3MgSW5zZXJ0aW9uU2V0OwogdHlwZWRlZiBWZWN0b3I8QmFzaWNC
bG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3Vu
dGVkPEJhc2ljQmxvY2s+IHsKLSAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4s
IHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQotICAgICAgICA6IGJ5
dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKLSAgICAgICAgLCBpbmRleChOb0Jsb2NrKQotICAg
ICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2Up
Ci0gICAgICAgICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxzZSkKLSAgICAgICAgLCBjZmFGb3VuZENv
bnN0YW50cyhmYWxzZSkKLSAgICAgICAgLCBjZmFEaWRGaW5pc2godHJ1ZSkKLSAgICAgICAgLCBj
ZmFCcmFuY2hEaXJlY3Rpb24oSW52YWxpZEJyYW5jaERpcmVjdGlvbikKLSNpZiAhQVNTRVJUX0RJ
U0FCTEVECi0gICAgICAgICwgaXNMaW5rZWQoZmFsc2UpCi0jZW5kaWYKLSAgICAgICAgLCBpc1Jl
YWNoYWJsZShmYWxzZSkKLSAgICAgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBu
dW1Mb2NhbHMpCi0gICAgICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9j
YWxzKQotICAgICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAg
ICAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgewotICAg
IH0KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFy
Z3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKTsKKyAgICB+QmFzaWNCbG9jaygpOwogICAgIAot
ICAgIH5CYXNpY0Jsb2NrKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZW5zdXJlTG9j
YWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKLSAgICB7Ci0gICAgICAgIHZhcmlhYmxlc0F0SGVh
ZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICAgICAgdmFyaWFibGVzQXRUYWlsLmVu
c3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAgICAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlTG9j
YWxzKG5ld051bUxvY2Fscyk7Ci0gICAgICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3
TnVtTG9jYWxzKTsKLSAgICB9CisgICAgdm9pZCBlbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVt
TG9jYWxzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMu
c2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQog
ICAgIE5vZGUqJiBhdChzaXplX3QgaSkgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQogICAgIE5vZGUq
IGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX25vZGVzW2ldOyB9CisgICAgTm9kZSomIG9w
ZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogb3BlcmF0b3Jb
XShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KICAgICBOb2RlKiBsYXN0KCkgY29u
c3QgeyByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KICAgICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6
ZSkgeyBtX25vZGVzLnJlc2l6ZShzaXplKTsgfQpAQCAtOTYsMzEgKzcyLDE2IEBAIHN0cnVjdCBC
YXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICB9CiAgICAgYm9vbCBpc1BoaUlu
ZGV4KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBpIDwgcGhpcy5zaXplKCk7IH0KICAgICAKLSAg
ICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChwaGlz
W2ldID09IG5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzSW5CbG9jayhOb2Rl
KiBteU5vZGUpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgYm9vbCBpc0luUGhpcyhOb2RlKiBub2RlKSBjb25zdDsKKyAgICBib29s
IGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0OwogICAgIAogICAgIHVuc2lnbmVkIG51bVN1
Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQogICAgIAotICAg
IEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICBCYXNpY0Jsb2NrKiYg
c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhc3QoKS0+
c3VjY2Vzc29yKGluZGV4KTsKICAgICB9Ci0gICAgQmFzaWNCbG9jayogc3VjY2Vzc29yRm9yQ29u
ZGl0aW9uKGJvb2wgY29uZGl0aW9uKQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JGb3JDb25k
aXRpb24oYm9vbCBjb25kaXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gbGFzdCgpLT5zdWNj
ZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKICAgICB9CkBAIC0xMzAsMTAgKzkxLDEyIEBA
IHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBERkdfVkFSSUFE
SUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdf
REVGSU5FX0FQUEVORF9OT0RFCiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJpbnQoIiMiLCBpbmRleCk7Ci0gICAgfQorI2Rl
ZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5
cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKKyAg
ICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb25UZXJt
aW5hbChHcmFwaCYsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMp
OworICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9O
T0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiAgICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2Vk
IGludGVybmFsbHkgZm9yIGJsb2NrIGxpbmtpbmcgYW5kIE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5
IG1lYW5pbmdsZXNzCiAgICAgLy8gZm9yIG90aGVyIHB1cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4K
QEAgLTE2MCw2ICsxMjMsMjEgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2lj
QmxvYwogICAgIAogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKICAg
ICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7CisgICAgCisgICAgc3RydWN0
IFNTQURhdGEgeworICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZmx1c2hGb3JtYXRBdEhl
YWQ7CisgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBmbHVzaEZvcm1hdEF0VGFpbDsKKyAg
ICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgT3BlcmFu
ZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2
ZUF0SGVhZDsKKyAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKKyAgICAgICAgSGFz
aE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOworICAgICAgICBIYXNoTWFw
PE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7CisgICAgICAgIAorICAgICAgICBT
U0FEYXRhKEJhc2ljQmxvY2sqKTsKKyAgICAgICAgflNTQURhdGEoKTsKKyAgICB9OworICAgIE93
blB0cjxTU0FEYXRhPiBzc2E7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc2VydGlv
blNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2tJbmxpbmVzLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIERGR19WQVJJQURJQ19URU1Q
TEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVf
QVBQRU5EX05PREUKIAorI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJl
LCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1z
LCB2YWx1ZUFyZ3MpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBp
bmxpbmUgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9uVGVybWluYWwoR3JhcGgmIGdyYXBoLCBT
cGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB7
IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZSh0eXBlIHZhbHVlUGFyYW1z
Q29tbWEgdmFsdWVBcmdzKTsgXAorICAgICAgICBhcHBlbmQobGFzdCgpKTsgXAorICAgICAgICBh
dChzaXplKCkgLSAyKSA9IHJlc3VsdDsgXAorICAgICAgICByZXR1cm4gcmVzdWx0OyBcCisgICAg
fQorICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9O
T0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdCbG9ja0luc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0
aW9uU2V0KEdyYXBoJiBncmFwaCkKKyAgICA6IG1fZ3JhcGgoZ3JhcGgpCit7Cit9CisKK0Jsb2Nr
SW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQoKSB7IH0KKwordm9pZCBCbG9ja0luc2Vy
dGlvblNldDo6aW5zZXJ0KGNvbnN0IEJsb2NrSW5zZXJ0aW9uJiBpbnNlcnRpb24pCit7CisgICAg
bV9pbnNlcnRpb25zLmFwcGVuZChpbnNlcnRpb24pOworfQorCit2b2lkIEJsb2NrSW5zZXJ0aW9u
U2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNzUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrKQor
eworICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRleCwgYmxvY2spKTsKK30KKworQmFzaWNC
bG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgpCit7CisgICAgUmVm
UHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYobmV3IEJhc2ljQmxvY2soCisgICAgICAg
IFVJTlRfTUFYLAorICAgICAgICBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICBpbnNlcnQoaW5kZXgsIGJsb2NrKTsKKyAgICBy
ZXR1cm4gYmxvY2suZ2V0KCk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlKQoreworICAgIHJldHVybiBpbnNlcnQoYmVm
b3JlLT5pbmRleCk7Cit9CisKK2Jvb2wgQmxvY2tJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoKQorewor
ICAgIGlmIChtX2luc2VydGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBnaXZlbiB0byB1cyBpbiBhbnkg
b3JkZXIuIFNvLCB3ZSBuZWVkIHRvCisgICAgLy8gc29ydCB0aGVtIGJlZm9yZSBydW5uaW5nIFdU
Rjo6ZXhlY3V0ZUluc2VydGlvbnMuCisgICAgc3RkOjpzb3J0KG1faW5zZXJ0aW9ucy5iZWdpbigp
LCBtX2luc2VydGlvbnMuZW5kKCkpOworCisgICAgZXhlY3V0ZUluc2VydGlvbnMobV9ncmFwaC5t
X2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKKyAgICAKKyAgICAvLyBQcnVuZSBvdXQgZW1wdHkgZW50
cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0IGl0J3MKKyAgICAvLyBoZWFs
dGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5nLgorICAgIHVuc2lnbmVkIHRh
cmdldEluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIHNvdXJjZUluZGV4ID0gMDsgc291cmNl
SW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTspIHsKKyAgICAgICAgUmVmUHRyPEJhc2lj
QmxvY2s+IGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tzb3VyY2VJbmRleCsrXTsKKyAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2dyYXBoLm1fYmxv
Y2tzW3RhcmdldEluZGV4KytdID0gYmxvY2s7CisgICAgfQorICAgIG1fZ3JhcGgubV9ibG9ja3Mu
cmVzaXplKHRhcmdldEluZGV4KTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmxv
Y2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nb
aV0tPmluZGV4ID0gaTsKKyAgICAKKyAgICAvLyBBbmQgZmluYWxseSwgaW52YWxpZGF0ZSBhbGwg
YW5hbHlzZXMgdGhhdCByZWx5IG9uIHRoZSBDRkcuCisgICAgbV9ncmFwaC5pbnZhbGlkYXRlQ0ZH
KCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja0luc2VydGlvblNldF9oCisjZGVmaW5lIERG
R0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgPHd0Zi9J
bnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxSZWZQdHI8QmFzaWNCbG9j
az4gPiBCbG9ja0luc2VydGlvbjsKKworY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQgeworcHVibGlj
OgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0KEdyYXBoJiBncmFwaCk7CisgICAgfkJsb2NrSW5zZXJ0
aW9uU2V0KCk7CisgICAgCisgICAgdm9pZCBpbnNlcnQoY29uc3QgQmxvY2tJbnNlcnRpb24mIGlu
c2VydGlvbik7CisgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNzUmVmUHRyPEJhc2lj
QmxvY2s+IGJsb2NrKTsKKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQoc2l6ZV90IGluZGV4KTsKKyAg
ICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlKTsKKyAgICAKKyAg
ICBib29sIGV4ZWN1dGUoKTsKKworcHJpdmF0ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBW
ZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHQmxvY2tJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAg
cHVibGljOgogICAgICAgICAvLyBhZnRlciBhbGwgcHJlZGVjZXNzb3JzIGhhdmUgYmVlbiB2aXNp
dGVkLiBPbmx5IGxvb3BzIHdpbGwgY2F1c2UgdGhpcyBhbmFseXNpcyB0bwogICAgICAgICAvLyBy
ZXZpc2l0IGJsb2NrcywgYW5kIHRoZSBhbW91bnQgb2YgcmV2aXNpdGluZyBpcyBwcm9wb3J0aW9u
YWwgdG8gbG9vcCBkZXB0aC4KICAgICAgICAgCi0gICAgICAgIEFic3RyYWN0U3RhdGU6OmluaXRp
YWxpemUobV9ncmFwaCk7CisgICAgICAgIG1fc3RhdGUuaW5pdGlhbGl6ZSgpOwogICAgICAgICAK
ICAgICAgICAgZG8gewogICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3
ICsyMTIsMTAgQEAgZW51bSBHcmFwaEZvcm0gewogICAgIC8vCiAgICAgLy8gVGhyZWFkZWRDUFMg
Zm9ybSBpcyBzdWl0YWJsZSBmb3IgZGF0YSBmbG93IGFuYWx5c2lzIChDRkEsIHByZWRpY3Rpb24K
ICAgICAvLyBwcm9wYWdhdGlvbiksIHJlZ2lzdGVyIGFsbG9jYXRpb24sIGFuZCBjb2RlIGdlbmVy
YXRpb24uCi0gICAgVGhyZWFkZWRDUFMKKyAgICBUaHJlYWRlZENQUywKKyAgICAKKyAgICAvLyBT
U0EgZm9ybS4gU2VlIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIGZvciBhIGRlc2NyaXB0aW9uLgor
ICAgIFNTQQogfTsKIAogLy8gRGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiB0aGUgVW5pb25GaW5kIHN0
cnVjdHVyZSBvZiBWYXJpYWJsZUFjY2Vzc0RhdGEncy4KQEAgLTI1MCw2ICsyNTMsMTkgQEAgaW5s
aW5lIFByb29mU3RhdHVzIHByb29mU3RhdHVzRm9ySXNQcm92ZQogICAgIHJldHVybiBpc1Byb3Zl
ZCA/IElzUHJvdmVkIDogTmVlZHNDaGVjazsKIH0KIAorZW51bSBLaWxsU3RhdHVzIHsgRG9lc05v
dEtpbGwsIERvZXNLaWxsIH07CisKK2lubGluZSBib29sIGRvZXNLaWxsKEtpbGxTdGF0dXMga2ls
bFN0YXR1cykKK3sKKyAgICBBU1NFUlQoa2lsbFN0YXR1cyA9PSBEb2VzTm90S2lsbCB8fCBraWxs
U3RhdHVzID09IERvZXNLaWxsKTsKKyAgICByZXR1cm4ga2lsbFN0YXR1cyA9PSBEb2VzS2lsbDsK
K30KKworaW5saW5lIEtpbGxTdGF0dXMga2lsbFN0YXR1c0ZvckRvZXNLaWxsKGJvb2wgZG9lc0tp
bGwpCit7CisgICAgcmV0dXJuIGRvZXNLaWxsID8gRG9lc0tpbGwgOiBEb2VzTm90S2lsbDsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KIGJvb2wgY2hlY2tBbmRTZXQoVCYg
bGVmdCwgVSByaWdodCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRG
R0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJE
RkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIENyaXRpY2Fs
RWRnZUJyZWFraW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIENyaXRpY2Fs
RWRnZUJyZWFraW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
Y3JpdGljYWwgZWRnZSBicmVha2luZyIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nr
cygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEFuIGVkZ2Ug
QS0+QiBpcyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0aXBsZSBzdWNjZXNzb3IgYW5kIEIgaGFzIG11
bHRpcGxlCisgICAgICAgICAgICAvLyBwcmVkZWNlc3NvcnMuIFRodXMgd2UgZmFpbCBlYXJseSBp
ZiB3ZSBkb24ndCBoYXZlIG11bHRpcGxlIHN1Y2Nlc3NvcnMuCisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChibG9jay0+bnVtU3VjY2Vzc29ycygpIDw9IDEpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
Kiogc3VjY2Vzc29yID0gJmJsb2NrLT5zdWNjZXNzb3IoaSk7CisgICAgICAgICAgICAgICAgaWYg
KCgqc3VjY2Vzc29yKS0+cHJlZGVjZXNzb3JzLnNpemUoKSA8PSAxKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBicmVha0Ny
aXRpY2FsRWRnZShzdWNjZXNzb3IpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgdm9pZCBicmVha0NyaXRpY2FsRWRnZShCYXNpY0Jsb2NrKiogc3VjY2Vzc29y
KQorICAgIHsKKyAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOworICAgICAgICAKKyAgICAgICAg
QmFzaWNCbG9jayogcGFkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKCpzdWNjZXNzb3Ip
OworICAgICAgICBwYWQtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9u
ZSwgSnVtcCwgKCpzdWNjZXNzb3IpLT5hdCgwKS0+Y29kZU9yaWdpbiwgT3BJbmZvKCpzdWNjZXNz
b3IpKTsKKyAgICAgICAgCisgICAgICAgICpzdWNjZXNzb3IgPSBwYWQ7CisgICAgfQorICAgIAor
ICAgIEJsb2NrSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworfTsKKworYm9vbCBwZXJmb3Jt
Q3JpdGljYWxFZGdlQnJlYWtpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgQ3JpdGljYWwgRWRnZSBCcmVha2luZyBQaGFzZSIpOworICAg
IHJldHVybiBydW5QaGFzZTxDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlPihncmFwaCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorI2RlZmluZSBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgR3JhcGg7CisKKy8vIEluc2VydHMgZHVtbXkgYmFzaWMgYmxvY2tzIHRvIGJy
ZWFrIGNyaXRpY2FsIGVkZ2VzLiBBbiBlZGdlIEEtPkIgaXMKKy8vIGNyaXRpY2FsIGlmIEEgaGFz
IG11bHRpcGxlIHN1Y2Nlc3NvcnMgYW5kIEIgaGFzIG11bHRpcGxlIHByZWRlc3NvcnMuCisKK2Jv
b2wgcGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUs
OCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTIHx8IG1fZ3JhcGgubV9mb3JtID09IFNTQSk7
CisgICAgICAgIAogICAgICAgICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFs
bCBub2Rlcy4KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBAIC03NSwxMCAr
NzcsMjkgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB3aGlsZSAoIW1f
d29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV93b3JrbGlz
dC5sYXN0KCk7Ci0gICAgICAgICAgICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBv
biB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgotICAgICAgICAgICAgREZHX05PREVf
RE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291bnRFZGdlKTsKKyAgICAgICAgICAgIHdo
aWxlICghbV93b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV93b3JrbGlzdC5sYXN0KCk7CisgICAgICAgICAgICAgICAgbV93b3JrbGlzdC5yZW1vdmVM
YXN0KCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAv
LyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCisg
ICAgICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291
bnRFZGdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgICAgIC8vIEZpbmQgUGhpLT5VcHNp
bG9uIGVkZ2VzLCB3aGljaCBhcmUgcmVwcmVzZW50ZWQgYXMgbWV0YS1kYXRhIGluIHRoZQorICAg
ICAgICAgICAgICAgIC8vIFVwc2lsb24uCisgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAg
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5waGko
KS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudE5v
ZGUobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJ
bmRleCkgewpAQCAtOTQsOCArMTE1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkuaXNQcm92ZWQoKSB8fCBub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6
CisgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCgobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgPT0gKG1fZ3JhcGgubV9mb3JtID09IFRocmVh
ZGVkQ1BTKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS53aWxsTm90
SGF2ZUNoZWNrKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyIHRoZSBw
b3NzaWJpbGl0eSB0aGF0IFVJbnQzMlRvTnVtYmVyIGlzIGRlYWQgYnV0IGl0cwogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gY2hpbGQgaXNuJ3Q7IGlmIHNvIHRoZW4gd2Ugc2hvdWxkIE1vdkhp
bnQgdGhlIGNoaWxkLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KS0+c2hvdWxkR2VuZXJhdGUoKQpAQCAtMTE3LDggKzE0MCwxMCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAg
ICAgICAgY2FzZSBTZXRBcmd1bWVudDogewotICAgICAgICAgICAgICAgICAgICAvLyBMZWF2ZSB0
aGVtIGFzIG5vdCBzaG91bGRHZW5lcmF0ZS4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGVhdmUgdGhlbSBhcyBub3Qgc2hvdWxkR2VuZXJh
dGUuCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKQEAgLTEy
Niw3ICsxNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0
Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlIHx8IGVkZ2Uu
aXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghZWRnZSB8fCBlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBlZGdlKTsKQEAgLTE1OCwyMSArMTgzLDI1
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhbiAidW5wcm92ZWQi
IHVudHlwZWQgdXNlIGZvciBjb2RlIHRoYXQgaXMgdW5yZWFjaGFibGUuIFRoZSBDRkEKICAgICAg
ICAgLy8gd2lsbCBqdXN0IG5vdCBoYXZlIGdvdHRlbiBhcm91bmQgdG8gaXQuCi0gICAgICAgIGlm
IChlZGdlLmlzUHJvdmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAg
ICAgaWYgKGVkZ2Uud2lsbE5vdEhhdmVDaGVjaygpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBpZiAoIWVkZ2UtPnBvc3RmaXhSZWYoKSkKICAgICAgICAgICAgIG1fd29ya2xpc3QuYXBw
ZW5kKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb3VudE5vZGUoTm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIG1fd29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgIH0KKyAgICAK
ICAgICB2b2lkIGNvdW50RWRnZShOb2RlKiwgRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgLy8g
RG9uJ3QgY291bnQgZWRnZXMgdGhhdCBhcmUgYWxyZWFkeSBjb3VudGVkIGZvciB0aGVpciB0eXBl
IGNoZWNrcy4KLSAgICAgICAgaWYgKCEoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgp
ID09IFVudHlwZWRVc2UpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAg
aWYgKGVkZ2UtPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgaWYgKGVkZ2Uud2lsbEhhdmVDaGVjaygp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChlZGdlLm5v
ZGUoKSk7CisgICAgICAgIGNvdW50Tm9kZShlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihOb2RlKiBub2RlKQpAQCAt
MTgxLDcgKzIxMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5j
aGlsZHJlbi5jaGlsZChpKTsKICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChlZGdlLmlzUHJvdmVkKCkgfHwgZWRnZS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgIGlmIChlZGdlLndpbGxOb3RIYXZlQ2hl
Y2soKSkKICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGktLSk7CiAg
ICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5jcHAJ
KHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAgdm9pZCBFZGdlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgICAgICAgICBvdXQucHJpbnQoIkNoZWNrOiIpOwogICAg
ICAgICBvdXQucHJpbnQodXNlS2luZCgpLCAiOiIpOwogICAgIH0KKyAgICBpZiAoZG9lc0tpbGwo
KSkKKyAgICAgICAgb3V0LnByaW50KCJLaWxsOiIpOwogICAgIG91dC5wcmludChub2RlKCkpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24gMTUyNTgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDEyICszOSwxMiBAQCBjbGFzcyBBZGphY2VuY3lMaXN0OwogCiBjbGFzcyBFZGdlIHsK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBFZGdlKE5vZGUqIG5vZGUgPSAwLCBVc2VLaW5kIHVzZUtp
bmQgPSBVbnR5cGVkVXNlLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cyA9IE5lZWRzQ2hlY2spCisg
ICAgZXhwbGljaXQgRWRnZShOb2RlKiBub2RlID0gMCwgVXNlS2luZCB1c2VLaW5kID0gVW50eXBl
ZFVzZSwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMgPSBOZWVkc0NoZWNrLCBLaWxsU3RhdHVzIGtp
bGxTdGF0dXMgPSBEb2VzTm90S2lsbCkKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICA6IG1f
ZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwgdXNlS2luZCwgcHJvb2ZTdGF0dXMpKQorICAgICAg
ICA6IG1fZW5jb2RlZFdvcmQobWFrZVdvcmQobm9kZSwgdXNlS2luZCwgcHJvb2ZTdGF0dXMsIGtp
bGxTdGF0dXMpKQogI2Vsc2UKICAgICAgICAgOiBtX25vZGUobm9kZSkKLSAgICAgICAgLCBtX2Vu
Y29kZWRXb3JkKG1ha2VXb3JkKHVzZUtpbmQsIHByb29mU3RhdHVzKSkKKyAgICAgICAgLCBtX2Vu
Y29kZWRXb3JkKG1ha2VXb3JkKHVzZUtpbmQsIHByb29mU3RhdHVzLCBraWxsU3RhdHVzKSkKICNl
bmRpZgogICAgIHsKICAgICB9CkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dE5vZGUoTm9kZSogbm9kZSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9l
bmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMoKSk7Cisg
ICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCksIHByb29mU3Rh
dHVzKCksIGtpbGxTdGF0dXMoKSk7CiAjZWxzZQogICAgICAgICBtX25vZGUgPSBub2RlOwogI2Vu
ZGlmCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChub2Rl
KCkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29y
ZChub2RlKCksIHVzZUtpbmQsIHByb29mU3RhdHVzKCkpOworICAgICAgICBtX2VuY29kZWRXb3Jk
ID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kLCBwcm9vZlN0YXR1cygpLCBraWxsU3RhdHVzKCkp
OwogI2Vsc2UKICAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQsIHByb29m
U3RhdHVzKCkpOwogI2VuZGlmCkBAIC0xMDgsOSArMTA4LDkgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgQVNTRVJUKG5vZGUoKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9lbmNv
ZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cyk7CisgICAg
ICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQoKSwgcHJvb2ZTdGF0
dXMsIGtpbGxTdGF0dXMoKSk7CiAjZWxzZQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdv
cmQodXNlS2luZCgpLCBwcm9vZlN0YXR1cyk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtl
V29yZCh1c2VLaW5kKCksIHByb29mU3RhdHVzLCBraWxsU3RhdHVzKCkpOwogI2VuZGlmCiAgICAg
fQogICAgIGJvb2wgaXNQcm92ZWQoKSBjb25zdApAQCAtMTIyLDYgKzEyMiwzNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBwcm9vZlN0YXR1cygpID09IE5lZWRzQ2hlY2s7CiAgICAgfQogICAg
IAorICAgIGJvb2wgd2lsbE5vdEhhdmVDaGVjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNQcm92ZWQoKSB8fCB1c2VLaW5kKCkgPT0gVW50eXBlZFVzZTsKKyAgICB9CisgICAgYm9v
bCB3aWxsSGF2ZUNoZWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhd2lsbE5vdEhh
dmVDaGVjaygpOworICAgIH0KKyAgICAKKyAgICBLaWxsU3RhdHVzIGtpbGxTdGF0dXNVbmNoZWNr
ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbGxTdGF0dXNGb3JEb2VzS2lsbCht
X2VuY29kZWRXb3JkICYgMik7CisgICAgfQorICAgIEtpbGxTdGF0dXMga2lsbFN0YXR1cygpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIGtpbGxT
dGF0dXNVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgdm9pZCBzZXRLaWxsU3RhdHVzKEtpbGxTdGF0
dXMga2lsbFN0YXR1cykKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlKCkpOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtp
bmQoKSwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1cyk7CisjZWxzZQorICAgICAgICBtX2VuY29k
ZWRXb3JkID0gbWFrZVdvcmQodXNlS2luZCgpLCBwcm9vZlN0YXR1cygpLCBraWxsU3RhdHVzKTsK
KyNlbmRpZgorICAgIH0KKyAgICBib29sIGRvZXNLaWxsKCkgY29uc3QgeyByZXR1cm4gREZHOjpk
b2VzS2lsbChraWxsU3RhdHVzKCkpOyB9CisgICAgYm9vbCBkb2VzTm90S2lsbCgpIGNvbnN0IHsg
cmV0dXJuICFkb2VzS2lsbCgpOyB9CisgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0
dXJuICEhbm9kZSgpOyB9CiAgICAgCiAgICAgdHlwZWRlZiB2b2lkKiBFZGdlOjoqVW5zcGVjaWZp
ZWRCb29sVHlwZTsKQEAgLTE1MCwyMCArMTgwLDIwIEBAIHByaXZhdGU6CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiA2OyB9CiAgICAgCi0g
ICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQs
IFByb29mU3RhdHVzIHByb29mU3RhdHVzKQorICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQo
Tm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cywgS2ls
bFN0YXR1cyBraWxsU3RhdHVzKQogICAgIHsKICAgICAgICAgQVNTRVJUKHNpemVvZihub2RlKSA9
PSA4KTsKICAgICAgICAgdWludHB0cl90IHNoaWZ0ZWRWYWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KG5vZGUpIDw8IHNoaWZ0KCk7CiAgICAgICAgIEFTU0VSVCgoc2hpZnRlZFZhbHVlID4+
IHNoaWZ0KCkpID09IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpKTsKICAgICAgICAgQVNT
RVJUKHVzZUtpbmQgPj0gMCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQpOwotICAgICAgICBBU1NF
UlQoKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTGFzdFVzZUtpbmQpIDw8IDEpIDw9IChzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KDEpIDw8IHNoaWZ0KCkpKTsKLSAgICAgICAgcmV0dXJuIHNoaWZ0ZWRW
YWx1ZSB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDEpIHwgREZHOjppc1By
b3ZlZChwcm9vZlN0YXR1cyk7CisgICAgICAgIEFTU0VSVCgoc3RhdGljX2Nhc3Q8dWludHB0cl90
PihMYXN0VXNlS2luZCkgPDwgMikgPD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMikgPDwgc2hp
ZnQoKSkpOworICAgICAgICByZXR1cm4gc2hpZnRlZFZhbHVlIHwgKHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpkb2VzS2lsbChraWxsU3RhdHVzKSA8PCAxKSB8
IERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpOwogICAgIH0KICAgICAKICNlbHNlCi0gICAgc3Rh
dGljIHVpbnRwdHJfdCBtYWtlV29yZChVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29m
U3RhdHVzKQorICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoVXNlS2luZCB1c2VLaW5kLCBQ
cm9vZlN0YXR1cyBwcm9vZlN0YXR1cywgS2lsbFN0YXR1cyBraWxsU3RhdHVzKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDEpIHwgREZH
Ojppc1Byb3ZlZChwcm9vZlN0YXR1cyk7CisgICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dWlu
dHB0cl90Pih1c2VLaW5kKSA8PCAyKSB8IChERkc6OmRvZXNLaWxsKGtpbGxTdGF0dXMpIDw8IDEp
IHwgREZHOjppc1Byb3ZlZChwcm9vZlN0YXR1cyk7CiAgICAgfQogICAgIAogICAgIE5vZGUqIG1f
bm9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAxLDYgKzkwMSw3IEBAIHByaXZhdGU6CiAK
ICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKICAgICAgICAgY2FzZSBQaGk6CisgICAgICAg
IGNhc2UgVXBzaWxvbjoKICAgICAgICAgY2FzZSBGb3J3YXJkSW50MzJUb0RvdWJsZToKICAgICAg
ICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9y
bWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
Rm9ybWF0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rmx1c2hGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR0ZsdXNoRm9ybWF0LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
bmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZsdXNoRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBz
d2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRGVhZEZsdXNoOgorICAgICAgICBvdXQucHJpbnQo
IkRlYWRGbHVzaCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGbHVzaGVkSW50MzI6Cisg
ICAgICAgIG91dC5wcmludCgiRmx1c2hlZEludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZERvdWJsZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgb3V0LnByaW50
KCJGbHVzaGVkQ2VsbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGbHVzaGVkQm9vbGVh
bjoKKyAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkQm9vbGVhbiIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkSlNW
YWx1ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9y
bWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0ZsdXNoRm9ybWF0X2gKKyNk
ZWZpbmUgREZHRmx1c2hGb3JtYXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gRmx1c2hGb3JtYXQgeworICAgIERl
YWRGbHVzaCwKKyAgICBGbHVzaGVkSW50MzIsCisgICAgRmx1c2hlZERvdWJsZSwKKyAgICBGbHVz
aGVkQ2VsbCwKKyAgICBGbHVzaGVkQm9vbGVhbiwKKyAgICBGbHVzaGVkSlNWYWx1ZQorfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkZsdXNoRm9ybWF0KTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERG
R0ZsdXNoRm9ybWF0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVz
aExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdH
cmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNl
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNl
IHsKK3B1YmxpYzoKKyAgICBGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgp
CisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJmbHVzaC1saXZlbmVzcyBhbmFseXNpcyIpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9n
cmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIC8vIExpdmVuZXNzIGlzIGEg
YmFja3dhcmRzIGFuYWx5c2lzOyB0aGUgcm9vdHMgYXJlIHRoZSBibG9ja3MgdGhhdAorICAgICAg
ICAvLyBlbmQgaW4gYSB0ZXJtaW5hbCAoUmV0dXJuL1Rocm93L1Rocm93UmVmZXJlbmNlRXJyb3Ip
LiBGb3Igbm93LCB3ZQorICAgICAgICAvLyB1c2UgYSBmaXhwb2ludCBmb3JtdWxhdGlvbiBzaW5j
ZSBsaXZlbmVzcyBpcyBhIHJhcGlkIGFuYWx5c2lzIHdpdGgKKyAgICAgICAgLy8gY29udmVyZ2Vu
Y2UgZ3VhcmFudGVlZCBhZnRlciBPKGNvbm5lY3Rpdml0eSkuCisgICAgICAgIAorICAgICAgICAv
LyBTdGFydCBieSBhc3N1bWluZyB0aGF0IGV2ZXJ5dGhpbmcgaXMgZGVhZC4KKyAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQuZmlsbChEZWFk
Rmx1c2gpOworICAgICAgICAgICAgYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdFRhaWwuZmlsbChE
ZWFkRmx1c2gpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAg
ICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykKKyAgICAgICAgICAgICAg
ICBwcm9jZXNzKGJsb2NrSW5kZXgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQg
cHJvY2VzcyhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2xpdmUgPSBibG9jay0+
c3NhLT5mbHVzaEZvcm1hdEF0VGFpbDsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
bm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogewor
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhcmlh
YmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSwgRGVhZEZsdXNoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IHZhcmlhYmxl
LT5mbHVzaEZvcm1hdCgpOworICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgdmFyaWFi
bGUtPmxvY2FsKCksIGZvcm1hdCwgZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAg
ICAgICBibG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZCA9IG1fbGl2ZTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tpXTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IG1fbGl2ZS5zaXplKCk7IGotLTspIHsKKyAg
ICAgICAgICAgICAgICBGbHVzaEZvcm1hdCYgcHJlZGVjZXNzb3JGb3JtYXQgPSBwcmVkZWNlc3Nv
ci0+c3NhLT5mbHVzaEZvcm1hdEF0VGFpbFtqXTsKKyAgICAgICAgICAgICAgICBGbHVzaEZvcm1h
dCBteUZvcm1hdCA9IG1fbGl2ZVtqXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBUaHJlZSBwb3NzaWJpbGl0aWVzOgorICAgICAgICAgICAgICAgIC8vIDEpIFByZWRlY2Vz
c29yIGZvcm1hdCBpcyBEZWFkLCBpbiB3aGljaCBjYXNlIGl0IGFjcXVpcmVzIG91ciBmb3JtYXQu
CisgICAgICAgICAgICAgICAgLy8gMikgUHJlZGVjZXNzb3IgZm9ybWF0IGlzIGlkZW50aWNhbCB0
byBvdXIgZm9ybWF0LCBpbiB3aGljaCBjYXNlIHdlCisgICAgICAgICAgICAgICAgLy8gICAgZG8g
bm90aGluZy4KKyAgICAgICAgICAgICAgICAvLyAzKSBQcmVkZWNlc3NvciBmb3JtYXQgaXMgZGlm
ZmVyZW50IGZyb20gb3VyIGZvcm1hdCBhbmQgaXQncyBub3QgRGVhZCwKKyAgICAgICAgICAgICAg
ICAvLyAgICBpbiB3aGljaCBjYXNlIHdlIGhhdmUgYW4gZXJyb25lb3VzIHNldCBvZiBGbHVzaGVz
IGFuZCBTZXRMb2NhbHMuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHBy
ZWRlY2Vzc29yRm9ybWF0ID09IERlYWRGbHVzaCkgeworICAgICAgICAgICAgICAgICAgICBwcmVk
ZWNlc3NvckZvcm1hdCA9IG15Rm9ybWF0OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KHByZWRlY2Vzc29yRm9ybWF0ID09IG15Rm9ybWF0KQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAg
ICAgICAgICAgICAgICAiQmFkIEZsdXNoIG1lcmdlIGF0IGVkZ2UgIiwgKnByZWRlY2Vzc29yLCAi
IC0+ICIsICpibG9jaywKKyAgICAgICAgICAgICAgICAgICAgIiwgbG9jYWwgdmFyaWFibGUgciIs
IG1fbGl2ZS5vcGVyYW5kRm9ySW5kZXgoaiksICI6ICIsICpwcmVkZWNlc3NvciwKKyAgICAgICAg
ICAgICAgICAgICAgIiBoYXMgIiwgcHJlZGVjZXNzb3JGb3JtYXQsICIgYW5kICIsICpibG9jaywg
IiBoYXMgIiwgbXlGb3JtYXQsICIuXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJUiBh
dCB0aW1lIG9mIGVycm9yOlxuIik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7Cisg
ICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldEZvck5vZGUoTm9kZSogbm9kZSwgaW50IG9wZXJhbmQsIEZsdXNo
Rm9ybWF0IG5vZGVGb3JtYXQsIEZsdXNoRm9ybWF0IG5ld0Zvcm1hdCkKKyAgICB7CisgICAgICAg
IEZsdXNoRm9ybWF0JiBjdXJyZW50Rm9ybWF0ID0gbV9saXZlLm9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBEbyBzb21lIHVzZWZ1bCB2ZXJpZmljYXRpb24gaGVyZS4gSXQn
cyBPSyBpZiB3ZSB0aGluayB0aGF0IHRoZQorICAgICAgICAvLyBmbHVzaCBmb3JtYXQgaXMgZGVh
ZCBhdCB0aGUgdGltZSB0aGF0IHdlIHNlZSB0aGUgbm9kZS4gQnV0IGl0J3MKKyAgICAgICAgLy8g
bm90IE9LIGlmIGJvdGggdGhlIG5vZGUgYW5kIG1fbGl2ZSBzZWUgYSBGbHVzaEZvcm1hdCBhbmQg
dGhleSBkbworICAgICAgICAvLyBub3QgYWdyZWUgb24gaXQuCisgICAgICAgIAorICAgICAgICBp
ZiAoY3VycmVudEZvcm1hdCA9PSBEZWFkRmx1c2ggfHwgY3VycmVudEZvcm1hdCA9PSBub2RlRm9y
bWF0KSB7CisgICAgICAgICAgICBjdXJyZW50Rm9ybWF0ID0gbmV3Rm9ybWF0OworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkYXRhTG9nKAorICAgICAg
ICAgICAgIkJhZCBGbHVzaCBtZXJnZSBhdCBub2RlICIsIG5vZGUsICIsIHIiLCBvcGVyYW5kLCAi
OiBub2RlIGNsYWltcyAiLCBub2RlRm9ybWF0LAorICAgICAgICAgICAgIiBidXQgYmFja3dhcmRz
IGZsb3cgY2xhaW1zICIsIGN1cnJlbnRGb3JtYXQsICIuXG4iKTsKKyAgICAgICAgZGF0YUxvZygi
SVIgYXQgdGltZSBvZiBlcnJvcjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgRmx1c2hGb3JtYXQgZmx1c2hGb3JtYXQoTm9k
ZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+Zmx1c2hGb3JtYXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7CisgICAg
T3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IG1fbGl2ZTsKK307CisKK2Jvb2wgcGVyZm9ybUZsdXNoTGl2
ZW5lc3NBbmFseXNpcyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIkRGRyBGbHVzaC1MaXZlbmVzcyBBbmFseXNpcyBQaGFzZSIpOworICAgIHJldHVy
biBydW5QaGFzZTxGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZT4oZ3JhcGgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorI2RlZmluZSBERkdG
bHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbXB1dGVz
IEJhc2ljQmxvY2s6OnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQKKworYm9vbCBwZXJmb3JtRmx1c2hM
aXZlbmVzc0FuYWx5c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRmx1c2hMaXZlbmVzc0Fu
YWx5c2lzUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJGdW5jdGlv
bkV4ZWN1dGFibGVEdW1wLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgPHd0
Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogI2lmIEVOQUJM
RShERkdfSklUKQogCkBAIC0yMzUsNiArMjM2LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBjb25zdAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzSW5kZXhpbmdUeXBlKCkp
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgSW5kZXhpbmdUeXBlRHVtcChub2RlLT5pbmRleGlu
Z1R5cGUoKSkpOworICAgIGlmIChub2RlLT5oYXNQaGkoKSkKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiXiIsIG5vZGUtPnBoaSgpLT5pbmRleCgpKTsKICAgICBpZiAobm9kZS0+aGFzRXhlY3V0
aW9uQ291bnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+
ZXhlY3V0aW9uQ291bnRlcigpKSk7CiAgICAgaWYgKG9wID09IEpTQ29uc3RhbnQpIHsKQEAgLTMx
MywyMyArMzE2LDI1IEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYK
ICAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICBvdXQu
cHJpbnQocHJlZml4LCAiICBQaGkgTm9kZXM6Iik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxv
Y2stPnBoaXNbaV07Ci0gICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBw
aGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2Rl
LT5yZWZDb3VudCgpLCAiPi0+KCIpOwotICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsK
LSAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsK
LSAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgIG91
dC5wcmludCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQyKCktPmluZGV4KCkpOwotICAgICAgICAgICAg
ICAgIGlmIChwaGlOb2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50
KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDMoKS0+aW5kZXgoKSk7CisgICAgaWYgKCFibG9jay0+cGhp
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBoaXNbaV07CisgICAgICAg
ICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2RlID09
IER1bXBMaXZlUGhpc09ubHkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5yZWZDb3Vu
dCgpLCAiPi0+KCIpOworICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7CisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOwor
ICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMigpLT5pbmRleCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDMoKS0+aW5kZXgoKSk7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCIpIiwg
aSArIDEgPCBibG9jay0+cGhpcy5zaXplKCkgPyAiLCIgOiAiIik7CiAgICAgICAgIH0KLSAgICAg
ICAgb3V0LnByaW50KCIpIiwgaSArIDEgPCBibG9jay0+cGhpcy5zaXplKCkgPyAiLCIgOiAiIik7
CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9Ci0gICAgb3V0LnByaW50KCJcbiIpOwog
fQogCiB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCkBAIC0zNDMsMjkgKzM0OCw1
NyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgIGlmICghYmxv
Y2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZHVtcEJsb2NrSGVhZGVyKG91dCwg
IiIsIGJsb2NrLCBEdW1wQWxsUGhpcyk7Ci0gICAgICAgIG91dC5wcmludCgiICB2YXJzIGJlZm9y
ZTogIik7Ci0gICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKLSAgICAgICAgICAgIGR1
bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRIZWFkLCBvdXQpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKLSAgICAgICAgb3V0LnByaW50KCJcbiIpOwot
ICAgICAgICBvdXQucHJpbnQoIiAgdmFyIGxpbmtzOiAiKTsKLSAgICAgICAgZHVtcE9wZXJhbmRz
KGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIG91dCk7Ci0gICAgICAgIG91dC5wcmludCgiXG4iKTsK
KyAgICAgICAgc3dpdGNoIChtX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBMb2FkU3RvcmU6CisgICAg
ICAgIGNhc2UgVGhyZWFkZWRDUFM6IHsKKyAgICAgICAgICAgIG91dC5wcmludCgiICB2YXJzIGJl
Zm9yZTogIik7CisgICAgICAgICAgICBpZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCisgICAgICAg
ICAgICAgICAgb3V0LnByaW50KGJsb2NrLT52YWx1ZXNBdEhlYWQpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOworICAgICAgICAgICAgb3V0
LnByaW50KCJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIHZhciBsaW5rczogIik7Cisg
ICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgb3V0KTsKKyAg
ICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTU0E6IHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGJsb2NrLT5zc2EpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIEZsdXNoIGZvcm1h
dDogIiwgYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQsICJcbiIpOworICAgICAgICAgICAg
b3V0LnByaW50KCIgIEF2YWlsYWJpbGl0eTogIiwgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRI
ZWFkLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICBMaXZlOiAiLCBub2RlTGlzdER1
bXAoYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCksICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50
KCIgIFZhbHVlczogIiwgbm9kZU1hcER1bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkKSwgIlxu
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSB9CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBkdW1wQ29kZU9y
aWdpbihvdXQsICIiLCBsYXN0Tm9kZSwgYmxvY2stPmF0KGkpKTsKICAgICAgICAgICAgIGR1bXAo
b3V0LCAiIiwgYmxvY2stPmF0KGkpKTsKICAgICAgICAgICAgIGxhc3ROb2RlID0gYmxvY2stPmF0
KGkpOwogICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgiICB2YXJzIGFmdGVyOiAiKTsKLSAg
ICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQotICAgICAgICAgICAgZHVtcE9wZXJhbmRz
KGJsb2NrLT52YWx1ZXNBdFRhaWwsIG91dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91
dC5wcmludCgiPGVtcHR5PiIpOwotICAgICAgICBvdXQucHJpbnQoIlxuIik7Ci0gICAgICAgIG91
dC5wcmludCgiICB2YXIgbGlua3M6ICIpOwotICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZh
cmlhYmxlc0F0VGFpbCwgb3V0KTsKLSAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICBz
d2l0Y2ggKG1fZm9ybSkgeworICAgICAgICBjYXNlIExvYWRTdG9yZToKKyAgICAgICAgY2FzZSBU
aHJlYWRlZENQUzogeworICAgICAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYWZ0ZXI6ICIpOwor
ICAgICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQorICAgICAgICAgICAgICAgIG91
dC5wcmludChibG9jay0+dmFsdWVzQXRUYWlsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXG4i
KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICB2YXIgbGlua3M6ICIpOworICAgICAgICAgICAg
ZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG91dCk7CisgICAgICAgICAgICBv
dXQucHJpbnQoIlxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgU1NBOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9j
ay0+c3NhKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICBGbHVzaCBmb3JtYXQ6ICIsIGJsb2Nr
LT5zc2EtPmZsdXNoRm9ybWF0QXRUYWlsLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgi
ICBBdmFpbGFiaWxpdHk6ICIsIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCwgIlxuIik7
CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgTGl2ZTogIiwgbm9kZUxpc3REdW1wKGJsb2NrLT5z
c2EtPmxpdmVBdFRhaWwpLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICBWYWx1ZXM6
ICIsIG5vZGVNYXBEdW1wKGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCksICJcbiIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0gfQogICAgIH0KIH0KIApAQCAtNDc4LDYgKzUxMSwyOCBA
QCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jCiAgICAgICAgICAgICBi
cmVhazsKICAgICB9CiB9CisKK3ZvaWQgR3JhcGg6OmFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3Rv
cjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0
LCBIYXNoU2V0PEJhc2ljQmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAg
aWYgKHNlZW4uY29udGFpbnMoYmxvY2spKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcmVz
dWx0LmFwcGVuZChibG9jayk7CisgICAgd29ya2xpc3QuYXBwZW5kKGJsb2NrKTsKKyAgICBzZWVu
LmFkZChibG9jayk7Cit9CisKK3ZvaWQgR3JhcGg6OmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVy
KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKK3sKKyAgICBWZWN0b3I8QmFzaWNCbG9jayos
IDE2PiB3b3JrbGlzdDsKKyAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBzZWVuOworICAgIGFkZEZv
ckRlcHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKKyAgICB3
aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5u
dW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICBhZGRGb3JEZXB0aEZpcnN0U29ydChy
ZXN1bHQsIHdvcmtsaXN0LCBzZWVuLCBibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICB9Cit9CiAg
ICAgCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjQxLDYgKzY0MSw4IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIGludmFsaWRhdGVDRkcoKTsKICAgICAKKyAgICB2b2lkIGdldEJs
b2Nrc0luRGVwdGhGaXJzdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCk7CisgICAg
CiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxh
bi5jb21waWxhdGlvbi5nZXQoKTsgfQogICAgIAogICAgIERlc2lyZWRJZGVudGlmaWVycyYgaWRl
bnRpZmllcnMoKSB7IHJldHVybiBtX3BsYW4uaWRlbnRpZmllcnM7IH0KQEAgLTY3OSw2ICs2ODEs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNCbG9jayosIEJhc2ljQmxvY2sq
IHN1Y2Nlc3Nvcik7CisgICAgdm9pZCBhZGRGb3JEZXB0aEZpcnN0U29ydChWZWN0b3I8QmFzaWNC
bG9jayo+JiByZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgSGFzaFNl
dDxCYXNpY0Jsb2NrKj4mIHNlZW4sIEJhc2ljQmxvY2sqKTsKICAgICAKICAgICBBZGRTcGVjdWxh
dGlvbk1vZGUgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQsIGJv
b2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShy
ZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlv
blNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyNiArMzEsMTIgQEAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCi1jbGFzcyBJbnNlcnRpb24gewotcHVibGljOgotICAgIEluc2VydGlvbigpIHsgfQot
ICAgIAotICAgIEluc2VydGlvbihzaXplX3QgaW5kZXgsIE5vZGUqIGVsZW1lbnQpCi0gICAgICAg
IDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIHNpemVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0K
LSAgICBOb2RlKiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9Ci1wcml2YXRl
OgotICAgIHNpemVfdCBtX2luZGV4OwotICAgIE5vZGUqIG1fZWxlbWVudDsKLX07Cit0eXBlZGVm
IFdURjo6SW5zZXJ0aW9uPE5vZGUqPiBJbnNlcnRpb247CiAKIGNsYXNzIEluc2VydGlvblNldCB7
CiBwdWJsaWM6CkBAIC04MSwyMCArNjcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBleGVj
dXRlKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2luc2VydGlvbnMu
c2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBibG9jay0+Z3JvdyhibG9jay0+
c2l6ZSgpICsgbV9pbnNlcnRpb25zLnNpemUoKSk7Ci0gICAgICAgIHNpemVfdCBsYXN0SW5kZXgg
PSBibG9jay0+c2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9ucyA9
IG1faW5zZXJ0aW9ucy5zaXplKCk7IGluZGV4SW5JbnNlcnRpb25zLS07KSB7Ci0gICAgICAgICAg
ICBJbnNlcnRpb24mIGluc2VydGlvbiA9IG1faW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc107
Ci0gICAgICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbi5pbmRleCgpICsgaW5k
ZXhJbkluc2VydGlvbnM7Ci0gICAgICAgICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleElu
SW5zZXJ0aW9ucyArIDE7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAt
LWkgPiBmaXJzdEluZGV4OykKLSAgICAgICAgICAgICAgICBibG9jay0+YXQoaSkgPSBibG9jay0+
YXQoaSAtIGluZGV4T2Zmc2V0KTsKLSAgICAgICAgICAgIGJsb2NrLT5hdChmaXJzdEluZGV4KSA9
IGluc2VydGlvbi5lbGVtZW50KCk7Ci0gICAgICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4
OwotICAgICAgICB9Ci0gICAgICAgIG1faW5zZXJ0aW9ucy5yZXNpemUoMCk7CisgICAgICAgIGV4
ZWN1dGVJbnNlcnRpb25zKCpibG9jaywgbV9pbnNlcnRpb25zKTsKICAgICB9CiBwcml2YXRlOgog
ICAgIEdyYXBoJiBtX2dyYXBoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTGl2
ZW5lc3NBbmFseXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBM
aXZlbmVzc0FuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIExpdmVu
ZXNzQW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJs
aXZlbmVzcyBhbmFseXNpcyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisg
ICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIExpdmVuZXNzIGlzIGEgYmFja3dhcmRzIGFuYWx5c2lzOyB0aGUgcm9vdHMgYXJl
IHRoZSBibG9ja3MgdGhhdAorICAgICAgICAvLyBlbmQgaW4gYSB0ZXJtaW5hbCAoUmV0dXJuL1Ro
cm93L1Rocm93UmVmZXJlbmNlRXJyb3IpLiBGb3Igbm93LCB3ZQorICAgICAgICAvLyB1c2UgYSBm
aXhwb2ludCBmb3JtdWxhdGlvbiBzaW5jZSBsaXZlbmVzcyBpcyBhIHJhcGlkIGFuYWx5c2lzIHdp
dGgKKyAgICAgICAgLy8gY29udmVyZ2VuY2UgZ3VhcmFudGVlZCBhZnRlciBPKGNvbm5lY3Rpdml0
eSkuCisgICAgICAgIAorICAgICAgICAvLyBTdGFydCBieSBhc3N1bWluZyB0aGF0IGV2ZXJ5dGhp
bmcgaXMgZGVhZC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2Nr
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYmxvY2stPnNzYS0+bGl2
ZUF0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5jbGVh
cigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAgICBtX2No
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykKKyAgICAgICAgICAgICAgICBwcm9j
ZXNzKGJsb2NrSW5kZXgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgcHJvY2Vz
cyhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkg
dGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQor
ICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExODQ1NQorICAgICAgICBtX2xpdmUgPSBibG9jay0+c3NhLT5saXZlQXRUYWlsOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBu
b2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gR2l2ZW4gYW4gVXBzaWxvbjoKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICBuOiBVcHNpbG9uKCRwLCBAeCkKKyAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAcCBhbmQgQG4g
YW5kIHVzZXMgQHguCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gR2l2ZW4gYSBQaGk6
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gICAgcDogUGhpKCkKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBXZSBzYXkgbm90aGluZy4gSXQncyBuZWl0aGVyIGEgdXNlIG5v
ciBhIGRlZi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBHaXZlbiBhIG5vZGU6Cisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gICAgbjogVGhpbmd5KEBhLCBAYiwgQGMpCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQG4gYW5k
IHVzZXMgQGEsIEBiLCBAYy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIFVwc2lsb246IHsKKyAgICAgICAgICAgICAgICBO
b2RlKiBwaGkgPSBub2RlLT5waGkoKTsKKyAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKHBo
aSk7CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAgICAgICAgICAg
ICBtX2xpdmUuYWRkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFBo
aTogeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3Zl
KG5vZGUpOworICAgICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgs
IG5vZGUsIGFkZENoaWxkVXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fbGl2ZSA9PSBibG9jay0+c3Nh
LT5saXZlQXRIZWFkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCA9IG1fbGl2ZTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGkt
LTspCisgICAgICAgICAgICBibG9jay0+c3NhLT5saXZlQXRUYWlsLmFkZChtX2xpdmUuYmVnaW4o
KSwgbV9saXZlLmVuZCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRDaGlsZFVzZShOb2Rl
KiwgRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZENoaWxkVXNlKGVkZ2UpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGFkZENoaWxkVXNlKEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBl
ZGdlLnNldEtpbGxTdGF0dXMobV9saXZlLmFkZChlZGdlLm5vZGUoKSkuaXNOZXdFbnRyeSA/IERv
ZXNLaWxsIDogRG9lc05vdEtpbGwpOworICAgIH0KKyAgICAKKyAgICBib29sIG1fY2hhbmdlZDsK
KyAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7Cit9OworCitib29sIHBlcmZvcm1MaXZlbmVzc0Fu
YWx5c2lzKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lv
bigiREZHIExpdmVuZXNzIEFuYWx5c2lzIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPExp
dmVuZXNzQW5hbHlzaXNQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlX2gKKyNkZWZpbmUgREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21t
b24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsK
KworLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5saXZlQXRIZWFkL2xpdmVBdFRhaWwuCisK
K2Jvb2wgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJTcGVjdWxh
dGVkVHlwZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogI2luY2x1ZGUgIlZhbHVlUHJv
ZmlsZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKQEAgLTUzOCw2ICs1MzksMTcgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihtX29wSW5mbyk7CiAgICAgfQog
ICAgIAorICAgIGJvb2wgaGFzUGhpKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IFVw
c2lsb247CisgICAgfQorICAgIAorICAgIE5vZGUqIHBoaSgpCisgICAgeworICAgICAgICBBU1NF
UlQoaGFzUGhpKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE5vZGUqPihtX29wSW5m
byk7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzSWRlbnRpZmllcigpCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKG9wKCkpIHsKQEAgLTc3MywxNiArNzg1LDE2IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgbV9vcEluZm8yID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYmxvY2spOwogICAgIH0K
ICAgICAKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbkJsb2NrKCkKKyAgICBCYXNpY0Jsb2NrKiYgdGFr
ZW5CbG9jaygpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7
Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJbmZvKTsKKyAg
ICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcEluZm8pOwogICAg
IH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbkJsb2NrKCkKKyAgICBCYXNpY0Jsb2Nr
KiYgbm90VGFrZW5CbG9jaygpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7Ci0g
ICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJbmZvMik7CisgICAg
ICAgIHJldHVybiAqYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZvMik7CiAgICAg
fQogICAgIAogICAgIFN3aXRjaERhdGEqIHN3aXRjaERhdGEoKQpAQCAtODA1LDcgKzgxNyw3IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNp
Z25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CiAgICAgICAgICAg
ICBpZiAoaW5kZXggPCBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSkKQEAgLTgyMCwxMSArODMy
LDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgICAgIHJldHVybiBub3RUYWtlbkJsb2NrKCk7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gdGFrZW5CbG9j
aygpOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckZv
ckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yRm9y
Q29uZGl0aW9uKGJvb2wgY29uZGl0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNo
KCkpOwogICAgICAgICByZXR1cm4gY29uZGl0aW9uID8gdGFrZW5CbG9jaygpIDogbm90VGFrZW5C
bG9jaygpOwpAQCAtMTM5OSw2ICsxNDExLDIzIEBAIHB1YmxpYzoKICAgICBOb2RlKiByZXBsYWNl
bWVudDsKIH07CiAKK2lubGluZSBib29sIG5vZGVDb21wYXJhdG9yKE5vZGUqIGEsIE5vZGUqIGIp
Cit7CisgICAgcmV0dXJuIGEtPmluZGV4KCkgPCBiLT5pbmRleCgpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorQ1N0cmluZyBub2RlTGlzdER1bXAoY29uc3QgVCYgbm9kZUxpc3QpCit7Cisg
ICAgcmV0dXJuIHNvcnRlZExpc3REdW1wKG5vZGVMaXN0LCBub2RlQ29tcGFyYXRvcik7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitDU3RyaW5nIG5vZGVNYXBEdW1wKGNvbnN0IFQmIG5vZGVN
YXApCit7CisgICAgcmV0dXJuIHNvcnRlZE1hcER1bXAobm9kZU1hcCwgbm9kZUNvbXBhcmF0b3Ip
OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTUyNTgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw2ICs2Myw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhNb3ZIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhab21iaWVIaW50
LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCisgICAgbWFjcm8oVXBzaWxvbiwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9P
U1IpIFwKICAgICBtYWNybyhQaGksIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NS
KSBcCiAgICAgbWFjcm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQp
IFwKICAgICBtYWNybyhQaGFudG9tTG9jYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05v
dEV4aXQpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdH
cmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNl
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhh
c2UgeworcHVibGljOgorICAgIE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UoR3JhcGgmIGdy
YXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiT1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpcyIp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NF
UlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKj4gZGVwdGhGaXJzdDsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmly
c3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IGRlcHRoRmlyc3RbaV07CisgICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFi
aWxpdHlBdEhlYWQuZmlsbCgwKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0
eUF0VGFpbC5maWxsKDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBkZXB0aEZpcnN0W2ldOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBXZSBlZGl0IGF2YWlsYWJpbGl0eUF0VGFpbCBpbi1wbGFjZSwgYnV0IGZpcnN0IGluaXRp
YWxpemUgaXQgdG8KKyAgICAgICAgICAgIC8vIGF2YWlsYWJpbGl0eUF0SGVhZC4KKyAgICAgICAg
ICAgIE9wZXJhbmRzPE5vZGUqPiYgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmls
aXR5QXRUYWlsOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxh
YmlsaXR5QXRIZWFkOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2V0
TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgICAgIGNh
c2UgTW92SGludEFuZENoZWNrOiB7CisgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IDA7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBqLS07KSB7CisgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihqKTsKKyAg
ICAgICAgICAgICAgICBPcGVyYW5kczxOb2RlKj4mIHN1Y2Nlc3NvckF2YWlsYWJpbGl0eSA9IHN1
Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBrID0gYXZhaWxhYmlsaXR5LnNpemUoKTsgay0tOykgeworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBteU5vZGUgPSBhdmFpbGFiaWxpdHlba107CisgICAgICAgICAgICAgICAgICAg
IGlmICghbXlOb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5zc2EtPmxpdmVB
dEhlYWQuY29udGFpbnMobXlOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0
IHRoaXMgbWF5IG92ZXJ3cml0ZSBhdmFpbGFiaWxpdHkgd2l0aCBhIGJvZ3VzIG5vZGUKKyAgICAg
ICAgICAgICAgICAgICAgLy8gYXQgbWVyZ2UgcG9pbnRzLiBUaGlzIGlzIGZpbmUsIHNpbmNlIG1l
cmdlIHBvaW50cyBoYXZlCisgICAgICAgICAgICAgICAgICAgIC8vIE1vdkhpbnQoUGhpKSdzIHRv
IHdvcmsgYXJvdW5kIHRoaXMuIFRoZSBvdXRjb21lIG9mIHRoaXMgaXMKKyAgICAgICAgICAgICAg
ICAgICAgLy8geW91IG1pZ2h0IGhhdmUgYSBwcm9ncmFtIGluIHdoaWNoIGEgbm9kZSBoYXBwZW5z
IHRvIHJlbWFpbgorICAgICAgICAgICAgICAgICAgICAvLyBsaXZlIGludG8gc29tZSBibG9jayBC
LCBhbmQgc2VwYXJhdGVseSAoZHVlIHRvIGNvcHkKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJv
cGFnYXRpb24pIGp1c3Qgb25lIG9mIHRoZSBwcmVkZWNlc3NvcnMgb2YgQiBpc3N1ZWQgYQorICAg
ICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50IHB1dHRpbmcgdGhhdCBub2RlIGludG8gc29tZSBs
b2NhbC4gVGhlbiBpbiBCIHdlIG1pZ2h0CisgICAgICAgICAgICAgICAgICAgIC8vIHRoaW5rIHRo
YXQgdGhhdCBub2RlIGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQgbG9jYWwuIE9mCisgICAgICAg
ICAgICAgICAgICAgIC8vIGNvdXJzZSBpZiB0aGF0IGxvY2FsIHdhcyBhY3R1YWxseSBsaXZlIGlu
IEIsIEIgd291bGQgaGF2ZSBhCisgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBmb3IgaXQuIFNv
IGVzc2VudGlhbGx5IHdlJ2xsIGhhdmUgT1NSIGV4aXQgZHJvcHBpbmcgdGhpcworICAgICAgICAg
ICAgICAgICAgICAvLyBub2RlJ3MgdmFsdWUgaW50byB0aGUgbG9jYWwgd2hlbiB3ZSBvdGhlcndp
c2UgKGluIHRoZSBERkcpCisgICAgICAgICAgICAgICAgICAgIC8vIHdvdWxkIGhhdmUgZHJvcHBl
ZCB1bmRlZmluZWQgaW50byB0aGUgbG9jYWwuIFRoaXMgc2VlbXMKKyAgICAgICAgICAgICAgICAg
ICAgLy8gaGFybWxlc3MuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBzdWNjZXNzb3JBdmFpbGFiaWxpdHlba10gPSBteU5vZGU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9OworCitib29sIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhHcmFwaCYg
Z3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPU1IgQXZh
aWxhYmlsaXR5IEFuYWx5c2lzIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE9TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VfaAorI2RlZmluZSBERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29tcHV0ZXMgQmFzaWNC
bG9jazo6c3NhLT5hdmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhpcyByZWxpZXMgb24gbGl2ZW5l
c3MKKy8vIGFuYWx5c2lzIHBoYXNlIGhhdmluZyBiZWVuIHJ1biBhbmQgdGhlIGdyYXBoIG5vdCBo
YXZpbmcgYmVlbiB0cmFuc2Zvcm1lZAorLy8gYWZ0ZXIgdGhhdC4KKworYm9vbCBwZXJmb3JtT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTcgQEAKICNpbmNsdWRlICJE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNs
dWRlICJERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR0NyaXRpY2FsRWRn
ZUJyZWFraW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdEQ0VQaGFzZS5oIgogI2luY2x1ZGUgIkRG
R0ZhaWxlZEZpbmFsaXplci5oIgorI2luY2x1ZGUgIkRGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvbXBp
bGVyLmgiCisjaW5jbHVkZSAiREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCisjaW5jbHVkZSAi
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rp
b25JbmplY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmgiCisjaW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZH
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgpAQCAtMTgzLDIxICsxODgsMjEgQEAgUGxhbjo6
Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogCiAgICAgcGVyZm9ybVN0b3JlRWxp
bWluYXRpb24oZGZnKTsKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKLSAgICAKLSAg
ICAvLyBOb3RlIHRoYXQgRENFIGlzIG5lY2Vzc2FyeSBldmVuIGluIHRoZSBGVEwsIGJlY2F1c2Ug
b25seSB3ZSBrbm93IHdoYXQgaXMKLSAgICAvLyBsaXZlLWluLWJ5dGVjb2RlLiBUaGUgRlRMIHVz
ZXMgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgd2hlbiBPU1IgZXhpdAotICAgIC8vIHZh
bHVlcyBzaG91bGQgYmUgd2lyZWQgdG8gTFZhbHVlcywgdmVyc3VzIGJlaW5nIHdpcmVkIHRvIEV4
aXRWYWx1ZTo6ZGVhZCgpLgotICAgIC8vIFRoaXMgaXMgZGlzdGluY3QgZnJvbSB3aGF0IFpvbWJp
ZUhpbnQgZ2l2ZXMgdXM6IFpvbWJpZUhpbnQgc2F5cyB0aGF0IHRoZQotICAgIC8vIHZhbHVlIGlu
IHRoZSBnaXZlbiBieXRlY29kZSBsb2NhbCBpcyBhbHdheXMgZGVhZDsgdGhlIHJlZmVyZW5jZSBj
b3VudHMgdGhhdAotICAgIC8vIERDRSBwcm9kdWNlcyB0ZWxsIHVzIHRoYXQgdGhlIHZhbHVlIGlz
IGxpdmUgZm9yIGEgd2hpbGUgYnV0IGV2ZW50dWFsbHkKLSAgICAvLyBkaWVzLCBhbmQgaXQgdGVs
bHMgdXMgZXhhY3RseSB3aGVuIHRoZSBkZWF0aCBwb2ludCBpcy4KLSAgICBwZXJmb3JtRENFKGRm
Zyk7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBpZiAoT3B0aW9uczo6dXNlRXhwZXJpbWVu
dGFsRlRMKCkKICAgICAgICAgJiYgY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uCiAgICAg
ICAgICYmIEZUTDo6Y2FuQ29tcGlsZShkZmcpKSB7CiAgICAgICAgIAorICAgICAgICBwZXJmb3Jt
Q3JpdGljYWxFZGdlQnJlYWtpbmcoZGZnKTsKKyAgICAgICAgcGVyZm9ybVNTQUNvbnZlcnNpb24o
ZGZnKTsKKyAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKKyAgICAgICAgcGVy
Zm9ybUNGQShkZmcpOworICAgICAgICBwZXJmb3JtRENFKGRmZyk7IC8vIFdlIHJlbHkgb24gdGhp
cyB0byBjb252ZXJ0IGRlYWQgU2V0TG9jYWxzIGludG8gdGhlIGFwcHJvcHJpYXRlIGhpbnQsIGFu
ZCB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJlY29nbml6ZWQgYXMgZGVhZCBieSBM
TFZNLgorICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOworICAgICAgICBwZXJm
b3JtRmx1c2hMaXZlbmVzc0FuYWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFi
aWxpdHlBbmFseXNpcyhkZmcpOworICAgICAgICAKICAgICAgICAgZHVtcEFuZFZlcmlmeUdyYXBo
KGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoiKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IE9TUiBlbnRyeS4KQEAgLTIxNSw2ICsyMjAsNyBAQCBQbGFu
OjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQogICAgIAorICAgIHBlcmZvcm1EQ0UoZGZnKTsKICAgICBwZXJmb3JtVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwogICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcs
ICJHcmFwaCBhZnRlciBvcHRpbWl6YXRpb246Iik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDE0ICs0
NzIsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CiAgICAgICAgICAg
ICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBj
b21waWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdo
aWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4KLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICAgICAgLy8gUGhpcyBz
aG91bGQgbm90IGJlIHZpc2libGUgaGVyZSBzaW5jZSB3ZSdyZSBpdGVyYXRpbmcgdGhlIGFsbC1i
dXQtUGhpJ3MKICAgICAgICAgICAgIC8vIHBhcnQgb2YgYmFzaWMgYmxvY2tzLgotICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVwc2lsb246Cisg
ICAgICAgICAgICAvLyBUaGVzZSBkb24ndCBnZXQgaW5zZXJ0ZWQgdW50aWwgd2UgZ28gaW50byBT
U0EuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRTY29wZToKQEAgLTU0MCw3ICs1NDUsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBM
YXN0Tm9kZVR5cGU6Ci0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAg
ZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5o
IgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisj
aW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVi
bGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBTU0FDb252ZXJzaW9uUGhhc2UoR3JhcGgmIGdyYXBo
KQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiU1NBIGNvbnZlcnNpb24iKQorICAgICAgICAsIG1f
aW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgICAgICAsIG1fY2hhbmdlZChmYWxzZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZp
Z3VyZSBvdXQgd2hpY2ggU2V0TG9jYWwncyBuZWVkIGZsdXNoaW5nLiBOZWVkIHRvIGRvIHRoaXMg
d2hpbGUgdGhlCisgICAgICAgIC8vIFBoaSBncmFwaCBpcyBzdGlsbCBpbnRhY3QuCisgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJ
bmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNp
emUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IEZsdXNo
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBhZGRGbHVz
aGVkTG9jYWxPcChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGls
ZSAoIW1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSk7CisgICAgICAgICAg
ICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRGbHVzaGVkTG9jYWxF
ZGdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRWxpbWluYXRlIGFsbCBkdXBs
aWNhdGUgb3Igc2VsZi1wb2ludGluZyBQaGkgZWRnZXMuIFRoaXMgbWVhbnMgdGhhdAorICAgICAg
ICAvLyB3ZSB0cmFuc2Zvcm06CisgICAgICAgIC8vCisgICAgICAgIC8vIHA6IFBoaShAbjEsIEBu
MiwgQG4zKQorICAgICAgICAvLworICAgICAgICAvLyBpbnRvOgorICAgICAgICAvLworICAgICAg
ICAvLyBwOiBQaGkoQHgpCisgICAgICAgIC8vCisgICAgICAgIC8vIGlmIGVhY2ggQG5pIGluIHtA
bjEsIEBuMiwgQG4zfSBpcyBlaXRoZXIgZXF1YWwgdG8gQHAgdG8gaXMgZXF1YWwKKyAgICAgICAg
Ly8gdG8gQHgsIGZvciBleGFjdGx5IG9uZSBvdGhlciBAeC4gQWRkaXRpb25hbGx5LCB0cml2aWFs
IFBoaXMgKGkuZS4KKyAgICAgICAgLy8gcDogUGhpKEB4KSkgYXJlIGZvcndhcmRlZCwgc28gdGhh
dCBpZiBoYXZlIGFuIGVkZ2UgdG8gc3VjaCBAcCwgd2UKKyAgICAgICAgLy8gcmVwbGFjZSBpdCB3
aXRoIEB4LiBUaGlzIGxvb3AgZG9lcyB0aGlzIGZvciBQaGlzIG9ubHk7IGxhdGVyIHdlIGRvCisg
ICAgICAgIC8vIHN1Y2ggZm9yd2FyZGluZyBmb3IgUGhpIHJlZmVyZW5jZXMgZm91bmQgaW4gb3Ro
ZXIgbm9kZXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIFNlZSBBeWNvY2sgYW5kIEhvcnNwb29s
IGluIENDJzAwIGZvciBhIGJldHRlciBkZXNjcmlwdGlvbiBvZiB3aGF0CisgICAgICAgIC8vIHdl
J3JlIGRvaW5nIGhlcmUuCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZh
bHNlOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7
CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJsb2NrLT5waGlzW3BoaUluZGV4XTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICBmb3J3YXJkUGhpQ2hpbGRyZW4ocGhpKTsKKyAgICAgICAgICAgICAgICAgICAgZGVk
dXBsaWNhdGVDaGlsZHJlbihwaGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZvciBl
YWNoIGJhc2ljIGJsb2NrLCBmb3IgZWFjaCBsb2NhbCBsaXZlIGF0IHRoZSBoZWFkIG9mIHRoYXQg
YmxvY2ssCisgICAgICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBub2RlIHdlIHNob3VsZCBiZSByZWZl
cnJpbmcgdG8gaW5zdGVhZCBvZiB0aGF0IGxvY2FsLgorICAgICAgICAvLyBJZiBpdCB0dXJucyBv
dXQgdG8gYmUgYSBub24tdHJpdmlhbCBQaGksIG1ha2Ugc3VyZSB0aGF0IHRvIGNyZWF0ZSBhbgor
ICAgICAgICAvLyBTU0EgUGhpIGFuZCBVcHNpbG9ucyBpbiBwcmVkZWNlc3NvciBibG9ja3MuIFdl
IHJldXNlCisgICAgICAgIC8vIEJhc2ljQmxvY2s6OnZhcmlhYmxlc0F0SGVhZCBmb3IgdHJhY2tp
bmcgd2hpY2ggbm9kZXMgdG8gcmVmZXIgdG8uCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAg
ICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBQb2lzb24gdGhpcyBlbnRyeSBpbiB2YXJpYWJsZXNBdEhlYWQgYmVjYXVzZSB3
ZSBkb24ndAorICAgICAgICAgICAgICAgICAgICAvLyB3YW50IGFueW9uZSB0byB0cnkgdG8gcmVm
ZXIgdG8gaXQsIGlmIHRoZSB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICAvLyBjYXB0
dXJlZC4KKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXSA9IDA7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50Ogor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgor
ICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFu
dG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBoaSB8
fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgRWRn
ZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChlZGdlKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVkZ2Uubm9kZSgp
OworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEl0J3MgYSBub24tdHJpdmlhbCBQaGkuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHNldCB0aGUgUGhpJ3MgdHlwZSAoaS5lLiBOb2RlUmVzdWx0TWFzaykgdG8K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZmxlY3QgdGhlIFZhcmlhYmxlQWNjZXNzRGF0
YSdzIHVuYm94aW5nLiBUaGlzIHdpbGwgbWFrZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZWFzaWVyIGZvciB0aGUgYmFja2VuZCB0byBmaWd1cmUgb3V0IHdoaWNoIHZhbHVlIHRvIHVz
ZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwc2lsb25zLCBhbmQgd2hhdCB0eXBl
IHRvIHVzZSBmb3IgdGhlIFBoaSBpdHNlbGYuCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGVGbGFncyByZXN1bHQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTm9kZVJlc3VsdE51
bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5h
cmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTm9kZVJlc3VsdEludDMyOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0
aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5vZGVS
ZXN1bHRCb29sZWFuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBOb2RlUmVzdWx0SlM7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTm9kZVJlc3VsdEpTOwor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgwLCBTcGVjTm9uZSwgUGhpLCBub2RlLT5jb2RlT3Jp
Z2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MocmVzdWx0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgobm9kZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1
bHRNYXNrKSA9PSByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUo
KTsgai0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRl
Y2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcmVkZWNlc3Nvci0+YXBwZW5kTm9uVGVybWluYWwoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBibG9jay0+bGFzdCgpLT5j
b2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZSks
IEVkZ2UocHJlZGVjZXNzb3ItPnZhcmlhYmxlc0F0VGFpbFtpXSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8odmFyaWFi
bGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSkpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSBub2RlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gQ29udmVydCBvcGVyYXRpb25zIG92ZXIgbG9jYWxzIGlu
dG8gb3BlcmF0aW9ucyBvdmVyIFNTQSBub2Rlcy4KKyAgICAgICAgLy8gLSBHZXRMb2NhbCBvdmVy
IGNhcHR1cmVkIHZhcmlhYmxlcyBsb3NlIHRoZWlyIHBoaXMuCisgICAgICAgIC8vIC0gR2V0TG9j
YWwgb3ZlciB1bmNhcHR1cmVkIHZhcmlhYmxlcyBkaWUgYW5kIGdldCByZXBsYWNlZCB3aXRoIHJl
ZmVyZW5jZXMKKyAgICAgICAgLy8gICB0byB0aGUgbm9kZSBzcGVjaWZpZWQgYnkgdmFyaWFibGVz
QXRIZWFkLgorICAgICAgICAvLyAtIFNldExvY2FsIGdldHMgTm9kZU11c3RHZW5lcmF0ZSBpZiBp
dCdzIGZsdXNoZWQsIG9yIHR1cm5zIGludG8gYQorICAgICAgICAvLyAgIE1vdkhpbnQgb3RoZXJ3
aXNlLgorICAgICAgICAvLyAtIEZsdXNoIGxvc2VzIGl0cyBjaGlsZHJlbiBidXQgcmVtYWlucywg
YmVjYXVzZSB3ZSB3YW50IHRvIGtub3cgd2hlbiBhCisgICAgICAgIC8vICAgZmx1c2hlZCBTZXRM
b2NhbCdzIHZhbHVlIGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoaXMgYWxzbyBtYWtlcyBpdCBzaW1w
bGVyCisgICAgICAgIC8vICAgdG8gcmVhc29uIGFib3V0IHRoZSBmb3JtYXQgb2YgYSBsb2NhbCwg
c2luY2Ugd2UgY2FuIGp1c3QgZm9sZCBpdCBpbnRvIHRoZQorICAgICAgICAvLyAgIGJhY2t3YXJk
cyBhbmFseXNpcyB0aGF0IExpdmVuZXNzQW5hbHlzaXNQaGFzZSBkb2VzLiBBcyBwYXJ0IG9mIHRo
ZQorICAgICAgICAvLyAgIGJhY2t3YXJkcyBhbmFseXNpcywgd2Ugc2F5IHRoYXQgdGhlIHR5cGUg
b2YgYSBsb2NhbCBjYW4gYmUgZWl0aGVyCisgICAgICAgIC8vICAgaW50MzIsIGRvdWJsZSwgdmFs
dWUsIG9yIGRlYWQuCisgICAgICAgIC8vIC0gUGhhbnRvbUxvY2FsIGJlY29tZXMgUGhhbnRvbSwg
YW5kIGl0cyBjaGlsZCBpcyB3aGF0ZXZlciBpcyBzcGVjaWZpZWQKKyAgICAgICAgLy8gICBieSB2
YXJpYWJsZXNBdEhlYWQuCisgICAgICAgIC8vIC0gU2V0QXJndW1lbnQgdHVybnMgaW50byBHZXRM
b2NhbC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJs
b2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAg
ICAgICAgICBibG9jay0+YXQobm9kZUluZGV4KS0+cmVwbGFjZW1lbnQgPSAwOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8
IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihub2RlKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgbV9mbHVzaGVkTG9jYWxPcHMuY29udGFp
bnMobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVN
dXN0R2VuZXJhdGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZIaW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgp
OworICAgICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBGbHVzaDogeworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJl
bi5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OiB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlh
YmxlLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0Tm9kZShibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2Ug
U2V0QXJndW1lbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoR2V0TG9jYWwpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIEZyZWUgYWxsIHBoaXMgYW5kIHJlc2V0IHZhcmlhYmxlcyB2ZWN0b3Jz
LgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0g
YmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgICAgICAgICBtX2dyYXBo
Lm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgICAgIGJs
b2NrLT5waGlzLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLmNs
ZWFyKCk7CisgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLmNsZWFyKCk7CisgICAg
ICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+
dmFsdWVzQXRIZWFkLmNsZWFyKCk7CisgICAgICAgICAgICBibG9jay0+c3NhID0gYWRvcHRQdHIo
bmV3IEJhc2ljQmxvY2s6OlNTQURhdGEoYmxvY2spKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBTU0E7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworcHJpdmF0ZToKKyAgICB2b2lkIGZvcndhcmRQaGlDaGlsZHJlbihOb2RlKiBub2RlKQorICAg
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7
ICsraSkgeworICAgICAgICAgICAgRWRnZSYgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkp
OworICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgbV9jaGFuZ2VkIHw9IGZvcndhcmRQaGlFZGdlKGVkZ2UpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIE5vZGUqIGZvcndhcmRQaGkoTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGls
ZHJlbi5qdXN0T25lQ2hpbGQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgICAgIHJldHVybiBlZGdlLm5v
ZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAg
ICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGZvcndhcmRQaGlFZGdlKEVkZ2Um
IGVkZ2UpCisgICAgeworICAgICAgICBOb2RlKiBuZXdOb2RlID0gZm9yd2FyZFBoaShlZGdlLm5v
ZGUoKSk7CisgICAgICAgIGlmIChuZXdOb2RlID09IGVkZ2Uubm9kZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBlZGdlLnNldE5vZGUobmV3Tm9kZSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlZHVwbGljYXRlQ2hpbGRyZW4oTm9k
ZSogbm9kZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2Vu
Y3lMaXN0OjpTaXplOyArK2kpIHsKKyAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxk
cmVuLmNoaWxkKGkpOworICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKGVkZ2UgPT0gbm9kZSkgeworICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2UoaS0tKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBBZGphY2VuY3lMaXN0OjpTaXplOyAr
K2opIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGRyZW4uY2hpbGQoaikgPT0gZWRn
ZSkgeworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGotLSk7
CisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkRmx1
c2hlZExvY2FsT3AoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ZsdXNoZWRMb2Nh
bE9wcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9mbHVz
aGVkTG9jYWxPcHMuYWRkKG5vZGUpOworICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Qu
YXBwZW5kKG5vZGUpOworICAgIH0KKworICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsRWRnZShOb2Rl
KiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgYWRkRmx1c2hlZExvY2FsT3AoZWRnZS5ub2Rl
KCkpOworICAgIH0KKworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBIYXNo
U2V0PE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wczsKKyAgICBWZWN0b3I8Tm9kZSo+IG1fZmx1c2hl
ZExvY2FsT3BXb3JrbGlzdDsKKyAgICBib29sIG1fY2hhbmdlZDsKK307CisKK2Jvb2wgcGVyZm9y
bVNTQUNvbnZlcnNpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKCJERkcgU1NBIENvbnZlcnNpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhh
c2U8U1NBQ29udmVyc2lvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKyNk
ZWZpbmUgREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbnZlcnQgVGhyZWFkZWRDUFMgZm9ybSBpbnRvIFNT
QSBmb3JtLiBUaGlzIHJlc3VsdHMgaW4gYSBmb3JtIHRoYXQgaGFzOgorLy8KKy8vIC0gUm91Z2hs
eSBtaW5pbWFsIFBoaSdzLiBXZSB1c2UgdGhlIEF5Y29jayAmIEhvcnNwb29sIGZpeHBvaW50IGZv
cgorLy8gICBjb252ZXJ0aW5nIHRoZSBDUFMgbWF4aW1hbCBQaGlzIGludG8gU1NBIG1pbmltYWwg
UGhpcywgd2l0aCB0aGUgY2F2ZWF0CisvLyAgIHRoYXQgaXJyZWR1Y2libGUgY29udHJvbCBmbG93
IG1heSByZXN1bHQgaW4gc29tZSBtaXNzZWQgb3Bwb3J0dW5pdGllcworLy8gICBmb3IgUGhpIHJl
ZHVjdGlvbi4KKy8vCisvLyAtIE5vIHVzZXMgb2YgR2V0TG9jYWwvU2V0TG9jYWwgZXhjZXB0IGZv
ciBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGZsdXNoZXMuCisvLyAgIEFmdGVyIHRoaXMsIGFueSBy
ZW1haW5pbmcgU2V0TG9jYWwgbWVhbnMgRmx1c2guIEZsdXNoIG5vZGVzIGFyZQorLy8gICBlbGlt
aW5hdGVkLiBQaGFudG9tTG9jYWxzIGJlY29tZSBQaGFudG9tcy4gTm9kZXMgbWF5IG1heSBoYXZl
IGNoaWxkcmVuCisvLyAgIHRoYXQgYXJlIGluIGFub3RoZXIgYmFzaWMgYmxvY2suCisvLworLy8g
LSBNb3ZIaW50cyBhcmUgdXNlZCBmb3IgT1NSIGluZm9ybWF0aW9uLCBhbmQgYXJlIHRoZW1zZWx2
ZXMgbWluaW1hbC4KKy8vICAgQSBNb3ZIaW50IHdpbGwgb2NjdXIgYXQgc29tZSBwb2ludCBhZnRl
ciB0aGUgYXNzaWduaW5nLCBhbmQgYXQgUGhpCisvLyAgIHBvaW50cy4KKy8vCisvLyAtIFVubGlr
ZSBjb252ZW50aW9uYWwgU1NBIGluIHdoaWNoIFBoaSBmdW5jdGlvbnMgcmVmZXIgdG8gcHJlZGVj
ZXNzb3JzCisvLyAgIGFuZCB2YWx1ZXMsIG91ciBTU0EgdXNlcyBVcHNpbG9uIGZ1bmN0aW9ucyB0
byBpbmRpY2F0ZSB2YWx1ZXMgaW4KKy8vICAgcHJlZGVjZXNzb3JzLiBBIG1lcmdlIHdpbGwgbG9v
ayBsaWtlOgorLy8KKy8vICAgbGFiZWxBOgorLy8gICAgICAgYTogVGhpbmd5KC4uLikKKy8vICAg
ICAgIGI6IFVwc2lsb24oXmUsIEBhKQorLy8gICAgICAgSnVtcChsYWJlbEMpCisvLworLy8gICBs
YWJlbEI6CisvLyAgICAgICBjOiBPdGhlclRoaW5neSguLi4pCisvLyAgICAgICBkOiBVcHNpbG9u
KF5lLCBAYykKKy8vICAgICAgIEp1bXAobGFiZWxDKQorLy8KKy8vICAgbGFiZWxDOgorLy8gICAg
ICAgZTogUGhpKCkKKy8vCisvLyAgIE5vdGUgdGhhdCB0aGUgUGhpIGhhcyBubyBjaGlsZHJlbiwg
YnV0IHRoZSBwcmVkZWNlc3NvcnMgaGF2ZSBVcHNpbG9ucworLy8gICB0aGF0IGhhdmUgYSB3ZWFr
IHJlZmVyZW5jZSB0byB0aGUgUGhpICheZSBpbnN0ZWFkIG9mIEBlOyB3ZSBzdG9yZSBpdAorLy8g
ICBpbiB0aGUgT3BJbmZvIHJhdGhlciB0aGFuIHRoZSBBZGphY2VuY3lMaXN0KS4gVGhpbmsgb2Yg
dGhlIFVwc2lsb24KKy8vICAgYXMgImFzc2lnbmluZyIgdG8gdGhlICJ2YXJpYWJsZSIgYXNzb2Np
YXRlZCB3aXRoIHRoZSBQaGksIGFuZCB0aGF0CisvLyAgIHRoaXMgaXMgdGhlIG9uZSBwbGFjZSBp
biBTU0EgZm9ybSB3aGVyZSB5b3UgY2FuIGhhdmUgbXVsdGlwbGUKKy8vICAgYXNzaWdubWVudHMu
CisvLworLy8gICBUaGlzIGltcGxpZXMgc29tZSBvdGhlciBsb29zZW5pbmdzIG9mIFNTQS4gRm9y
IGV4YW1wbGUsIGFuIFVwc2lsb24KKy8vICAgbWF5IHByZWNlZGUgYSBQaGkgaW4gdGhlIHNhbWUg
YmFzaWMgYmxvY2s7IHRoaXMgbWF5IGFyaXNlIGFmdGVyIENGRworLy8gICBzaW1wbGlmaWNhdGlv
bi4gQWx0aG91Z2ggaXQncyBwcm9maXRhYmxlIGZvciBDRkcgc2ltcGxpZmljYXRpb24gKG9yCisv
LyAgIHNvbWUgb3RoZXIgcGhhc2UpIHRvIHJlbW92ZSB0aGVzZSwgaXQncyBub3Qgc3RyaWN0bHkg
bmVjZXNzYXJ5LiBBcworLy8gICB3ZWxsLCB0aGlzIGZvcm0gYWxsb3dzIHRoZSBVcHNpbG9uIHRv
IGJlIGluIGFueSBibG9jayB0aGF0IGRvbWluYXRlcworLy8gICB0aGUgcHJlZGVjZXNzb3IgYmxv
Y2sgb2YgdGhlIFBoaSwgd2hpY2ggYWxsb3dzIGZvciBibG9jayBzcGxpdHRpbmcgdG8KKy8vICAg
aWdub3JlIHRoZSBwb3NzaWJpbGl0eSBvZiBpbnRyb2R1Y2luZyBhbiBleHRyYSBlZGdlIGJldHdl
ZW4gdGhlIFBoaQorLy8gICBhbmQgdGhlIHByZWRlY2Vzc29yICh0aG91Z2ggbm9ybWFsIFNTQSB3
b3VsZCBhbGxvdyB0aGlzLCBhbHNvLCB3aXRoCisvLyAgIHRoZSBjYXZlYXQgdGhhdCB0aGUgUGhp
IHByZWRlY2Vzc29yIGJsb2NrIGxpc3RzIHdvdWxkIGhhdmUgdG8gYmUKKy8vICAgdXBkYXRlZCku
CisvLworLy8gICBUaGUgZWFzaWVzdCB3YXkgdG8gY29udmVydCBmcm9tIHRoaXMgU1NBIGZvcm0g
aW50byBhIGRpZmZlcmVudCBTU0EKKy8vICAgZm9ybSBpcyB0byByZWRvIFNTQSBjb252ZXJzaW9u
IGZvciBQaGkgZnVuY3Rpb25zLiBUaGF0IGlzLCB0cmVhdCBlYWNoCisvLyAgIFBoaSBpbiBvdXIg
SVIgYXMgYSBub24tU1NBIHZhcmlhYmxlIGluIHRoZSBmb3JlaWduIElSIChzbywgYXMgYW4KKy8v
ICAgYWxsb2NhIGluIExMVk0gSVIsIGZvciBleGFtcGxlKTsgdGhlIFVwc2lsb25zIHRoYXQgcmVm
ZXIgdG8gdGhlIFBoaQorLy8gICBiZWNvbWUgc3RvcmVzIGFuZCB0aGUgUGhpcyB0aGVtc2VsdmVz
IGJlY29tZSBsb2Fkcy4KKy8vCisvLyAgIEZ1biBmYWN0OiBVcHNpbG9uIGlzIHNvIG5hbWVkIGJl
Y2F1c2UgaXQgY29tZXMgYmVmb3JlIFBoaSBpbiB0aGUKKy8vICAgYWxwaGFiZXQuIEl0IGNhbiBi
ZSB3cml0dGVuIGFzICJZIi4KKworYm9vbCBwZXJmb3JtU1NBQ29udmVyc2lvbihHcmFwaCYpOwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM5NSw3ICs0Mzk1LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICBjYXNlIFBoaToKICAgICBjYXNlIEZsdXNoOgogICAgICAgICBicmVhazsKIApAQCAt
NDgyOSw2ICs0ODI4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAgIGNhc2UgUGhp
OgorICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Mjk2LDcgKzQyOTYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBGbHVzaDoKLSAgICBjYXNlIFBoaToKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJyZWFrcG9pbnQ6CkBAIC00NjkwLDYgKzQ2ODksOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogICAgICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICBjYXNlIFBoaToKKyAgICBj
YXNlIFVwc2lsb246CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
aWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
aWRhdGUuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMjIgKzgxLDIxIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIFZfRVFVQUwoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSks
IDApLCBzdGF0aWNfY2FzdDxOb2RlKj4oMCksIHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChp
KSk7CiAgICAgICAgIAogICAgICAgICAvLyBWYWxpZGF0ZSByZWYgY291bnRzIGFuZCB1c2VzLgot
ICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gbXlSZWZDb3VudHM7CiAgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxv
Y2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIFZBTElEQVRFKChibG9jayksIGJsb2NrLT5pc1JlYWNo
YWJsZSk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2Rl
cygpOyArK2kpCi0gICAgICAgICAgICAgICAgbXlSZWZDb3VudHMuYWRkKGJsb2NrLT5ub2RlKGkp
LCAwKTsKKyAgICAgICAgICAgICAgICBtX215UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShpKSwg
MCk7CiAgICAgICAgIH0KLSAgICAgICAgSGFzaFNldDxOb2RlKj4gYWNjZXB0YWJsZU5vZGVzOwog
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxv
Y2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPm5vZGUoaSk7Ci0gICAgICAgICAgICAgICAgYWNjZXB0YWJsZU5vZGVzLmFkZChub2Rl
KTsKKyAgICAgICAgICAgICAgICBtX2FjY2VwdGFibGVOb2Rlcy5hZGQobm9kZSk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9n
cmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CkBAIC0xMDgsNyArMTA3LDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBt
eVJlZkNvdW50cy5maW5kKGVkZ2Uubm9kZSgpKS0+dmFsdWUrKzsKKyAgICAgICAgICAgICAgICAg
ICAgbV9teVJlZkNvdW50cy5maW5kKGVkZ2Uubm9kZSgpKS0+dmFsdWUrKzsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIFNTQSwgYWxsIGVkZ2VzIG11c3QgaGFz
UmVzdWx0KCkuCisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSks
IGVkZ2UtPmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAvLyBVbmxlc3MgSSdtIGEgRmx1c2gsIFBoYW50b20sIEdldExvY2FsLCBvciBQaGks
IG15IGNoaWxkcmVuIHNob3VsZCBoYXNSZXN1bHQoKS4KICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CkBAIC0xNDgsNiArMTUzLDkgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBUaHJlYWRlZENQUzoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
U1NBOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKQEAgLTE1Nyw5ICsxNjUsNDQgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9j
a3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+bnVtTm9kZXMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5ub2RlKGkpOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcmVmQ291bnRTdGF0
ZSA9PSBFeGFjdFJlZkNvdW50KQorICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwg
bV9teVJlZkNvdW50cy5nZXQobm9kZSksIG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbm9k
ZS0+cmVmQ291bnQoKSwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBMb2FkU3RvcmU6
CisgICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6CisgICAgICAgICAgICB2YWxpZGF0ZUNQUygpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTU0E6CisgICAg
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IFNTQSB2ZXJpZmljYXRpb24uCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgR3JhcGgmIG1f
Z3JhcGg7CisgICAgR3JhcGhEdW1wTW9kZSBtX2dyYXBoRHVtcE1vZGU7CisgICAgCisgICAgSGFz
aE1hcDxOb2RlKiwgdW5zaWduZWQ+IG1fbXlSZWZDb3VudHM7CisgICAgSGFzaFNldDxOb2RlKj4g
bV9hY2NlcHRhYmxlTm9kZXM7CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZUNQUygpCisgICAgewog
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxv
Y2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+IHBoaXNJblRoaXNCbG9jazsKQEAgLTE3MCwxNSArMjEzLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBub2Rlc0luVGhpc0Jsb2NrLmFkZChub2RlKTsKICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPmlzUGhpSW5kZXgoaSkpCiAgICAgICAgICAgICAgICAgICAgIHBoaXNJblRo
aXNCbG9jay5hZGQobm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9yZWZDb3Vu
dFN0YXRlID09IEV4YWN0UmVmQ291bnQpCi0gICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5v
ZGUpLCBteVJlZkNvdW50cy5nZXQobm9kZSksIG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwg
bm9kZS0+cmVmQ291bnQoKSwgMSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAg
ICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBhY2NlcHRhYmxlTm9kZXMuY29u
dGFpbnMoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUs
IGVkZ2UpLCBtX2FjY2VwdGFibGVOb2Rlcy5jb250YWlucyhlZGdlLm5vZGUoKSkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjI4LDcgKzI2Nyw2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8
IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IGJsb2NrLT5wcmVkZWNlc3NvcnNba107CiAgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHBy
ZXZCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoYmxvY2stPnByZWRl
Y2Vzc29yc1trXSksIHByZXZCbG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KGxvY2FsKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhh
dCBpcyBub3QgcmVmZXJyaW5nIHRvICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJs
ZS4KQEAgLTMyMSw3ICszNTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIEdldExvY2FsJ3MgdGhhdCB3ZSBr
bm93IHRvIGJlIGRlYWQsIGJ1dCB0aGF0IHRoZSBncmFwaAogICAgICAgICAgICAgICAgICAgICAv
LyBkb2Vzbid0IHlldCBrbm93IHRvIGJlIGRlYWQuCi0gICAgICAgICAgICAgICAgICAgIGlmICgh
bXlSZWZDb3VudHMuZ2V0KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbXlSZWZD
b3VudHMuZ2V0KG5vZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykKICAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIGdldExvY2FsUG9zaXRpb25z
Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0KTsKQEAgLTM1NSwxMCArMzkzLDYgQEAg
cHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotcHJpdmF0ZToKLSAgICBHcmFwaCYgbV9n
cmFwaDsKLSAgICBHcmFwaER1bXBNb2RlIG1fZ3JhcGhEdW1wTW9kZTsKLSAgICAKICAgICB2b2lk
IGNoZWNrT3BlcmFuZCgKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2ssIE9wZXJhbmRzPHNpemVf
dD4mIGdldExvY2FsUG9zaXRpb25zLAogICAgICAgICBPcGVyYW5kczxzaXplX3Q+JiBzZXRMb2Nh
bFBvc2l0aW9ucywgaW50IG9wZXJhbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gK
IAogI2luY2x1ZGUgIkRGR0RvdWJsZUZvcm1hdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHRmx1c2hG
b3JtYXQuaCIKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5o
IgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCkBAIC0zMTgsNiArMzE5LDI5IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGNoZWNrQW5kU2V0KG1fZmxhZ3MsIG1fZmxhZ3MgfCBuZXdGbGFn
cyk7CiAgICAgfQogICAgIAorICAgIEZsdXNoRm9ybWF0IGZsdXNoRm9ybWF0KCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChmaW5kKCkgPT0gdGhpcyk7CisgICAgICAgIAorICAgICAgICBpZiAoIXNo
b3VsZFVuYm94SWZQb3NzaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRKU1ZhbHVl
OworICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQorICAgICAg
ICAgICAgcmV0dXJuIEZsdXNoZWREb3VibGU7CisgICAgICAgIAorICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYg
KGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVz
aGVkSW50MzI7CisgICAgICAgIAorICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCisgICAgICAgICAgICByZXR1cm4gRmx1c2hlZENlbGw7CisgICAgICAgIAorICAgICAg
ICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1
cm4gRmx1c2hlZEJvb2xlYW47CisgICAgICAgIAorICAgICAgICByZXR1cm4gRmx1c2hlZEpTVmFs
dWU7CisgICAgfQorICAgIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNl
LWluZWZmaWNpZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKICAgICAvLyB3
aWxsIGhhdmUgdGhlIHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGlj
dGlvbi4gQnV0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAgaW5s
aW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgSnVtcDoKICAgICBjYXNl
IEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIEZvcndhcmRGb3JjZU9TUkV4aXQ6CisgICAgY2FzZSBQ
aGk6CisgICAgY2FzZSBVcHNpbG9uOgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CkBAIC0xNzQsNiArMTc2LDggQEAgaW5s
aW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogCiBib29sIGNhbkNvbXBpbGUoR3JhcGgm
IGdyYXBoKQogeworICAgIFJFTEVBU0VfQVNTRVJUKGdyYXBoLm1fZm9ybSA9PSBTU0EpOworICAg
IAogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTI1ODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaCIKICNpbmNsdWRlICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJG
VExGb3JtYXR0ZWRWYWx1ZS5oIgorI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKICNp
bmNsdWRlICJGVExPdXRwdXQuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJG
VExWYWx1ZVNvdXJjZS5oIgpAQCAtNjEsMTAgKzYyLDYgQEAgcHVibGljOgogICAgICAgICAsIG1f
ZnRsU3RhdGUoc3RhdGUpCiAgICAgICAgICwgbV9oZWFwcyhzdGF0ZS5jb250ZXh0KQogICAgICAg
ICAsIG1fb3V0KHN0YXRlLmNvbnRleHQpCi0gICAgICAgICwgbV9sb2NhbHNCb29sZWFuKE9wZXJh
bmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAg
LCBtX2xvY2FsczMyKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZCkKLSAgICAgICAgLCBtX2xvY2FsczY0KE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAgLCBtX2xvY2Fsc0RvdWJsZShPcGVy
YW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAg
ICwgbV92YWx1ZVNvdXJjZXMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFy
aWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkKICAgICAgICAgLCBtX2V4aXRUaHVua0dlbmVyYXRvcihzdGF0ZSkK
QEAgLTc0LDYgKzcxLDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgbG93ZXIoKQogICAgIHsK
KyAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgp
OworICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5tb2R1bGUgPQogICAgICAgICAgICAgTExW
TU1vZHVsZUNyZWF0ZVdpdGhOYW1lSW5Db250ZXh0KCJqc0JvZHkiLCBtX2Z0bFN0YXRlLmNvbnRl
eHQpOwogICAgICAgICAKQEAgLTg1LDEyICs4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAg
ICAgIG1fcHJvbG9ndWUgPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuY29udGV4dCwgbV9m
dGxTdGF0ZS5mdW5jdGlvbik7CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gbV9sb2NhbHNCb29sZWFuLnNpemUoKTsgaW5k
ZXgtLTspIHsKLSAgICAgICAgICAgIG1fbG9jYWxzQm9vbGVhbltpbmRleF0gPSBidWlsZEFsbG9j
YShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmJvb2xlYW4pOwotICAgICAgICAgICAgbV9sb2NhbHMz
MltpbmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmludDMyKTsKLSAg
ICAgICAgICAgIG1fbG9jYWxzNjRbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVy
LCBtX291dC5pbnQ2NCk7Ci0gICAgICAgICAgICBtX2xvY2Fsc0RvdWJsZVtpbmRleF0gPSBidWls
ZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmRvdWJsZVR5cGUpOwotICAgICAgICB9Cisg
ICAgICAgIGNyZWF0ZVBoaVZhcmlhYmxlcygpOwogICAgICAgICAKICAgICAgICAgbV9pbml0aWFs
aXphdGlvbiA9IGFwcGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5jb250ZXh0LCBtX2Z0bFN0YXRl
LmZ1bmN0aW9uKTsKICAgICAgICAgbV9hcmd1bWVudENoZWNrcyA9IGFwcGVuZEJhc2ljQmxvY2so
bV9mdGxTdGF0ZS5jb250ZXh0LCBtX2Z0bFN0YXRlLmZ1bmN0aW9uKTsKQEAgLTEwNCwxOSArOTgs
MTggQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFtX2hpZ2hCbG9jaykKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fYmxvY2tzLmFkZChtX2hpZ2hCbG9jaywgRlRM
X05FV19CTE9DSyhtX291dCwgKCJCbG9jayAiLCAqbV9oaWdoQmxvY2spKSk7Ci0gICAgICAgICAg
ICBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygpOwotICAgICAgICAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obV9hcmd1bWVudENoZWNrcywgbG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSkpOwogCi0g
ICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKTsKKyAgICAgICAgY2hlY2tBcmd1bWVu
dHMoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ncmFwaC5ibG9j
aygwKSkpOwogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KQotICAgICAg
ICAgICAgY29tcGlsZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IGRlcHRoRmlyc3Q7CisgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3Jk
ZXIoZGVwdGhGaXJzdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZp
cnN0LnNpemUoKTsgKytpKQorICAgICAgICAgICAgY29tcGlsZUJsb2NrKGRlcHRoRmlyc3RbaV0p
OwogICAgICAgICAKICAgICAgICAgLy8gQW5kIG5vdyBjb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRp
b24gYmxvY2suCiAgICAgICAgIGxpbmtPU1JFeGl0c0FuZENvbXBsZXRlSW5pdGlhbGl6YXRpb25C
bG9ja3MoKTsKQEAgLTEyOSw0MSArMTIyLDQwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAK
LSAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbE9wUm9vdHMoKQorICAgIHZvaWQgY3JlYXRlUGhpVmFy
aWFibGVzKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gbV9oaWdo
QmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9oaWdoQmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAh
PSBGbHVzaCkKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYWRkRmx1c2hlZExvY2FsT3Ao
bm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbG9zZU92ZXJGbHVzaGVk
TG9jYWxPcHMoKQotICAgIHsKLSAgICAgICAgd2hpbGUgKCFtX2ZsdXNoZWRMb2NhbE9wV29ya2xp
c3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9mbHVzaGVkTG9jYWxP
cFdvcmtsaXN0Lmxhc3QoKTsKLSAgICAgICAgICAgIG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5y
ZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChtX2ZsdXNoZWRM
b2NhbE9wcy5jb250YWlucyhub2RlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIERGR19O
T0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZEZsdXNoZWRMb2NhbEVkZ2UpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2Rl
SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gUGhpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBMVHlwZSB0eXBlOworICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNrKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0TnVtYmVyOgorICAgICAgICAgICAgICAgICAgICB0
eXBlID0gbV9vdXQuZG91YmxlVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50MzI6CisgICAgICAgICAgICAgICAgICAgIHR5
cGUgPSBtX291dC5pbnQzMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9
IG1fb3V0LmJvb2xlYW47CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgTm9kZVJlc3VsdEpTOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gbV9vdXQu
aW50NjQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBtX3BoaXMuYWRkKG5vZGUsIGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgdHlwZSkp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHZvaWQgYWRkRmx1
c2hlZExvY2FsT3AoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2ZsdXNoZWRMb2Nh
bE9wcy5jb250YWlucyhub2RlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mbHVz
aGVkTG9jYWxPcHMuYWRkKG5vZGUpOwotICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Qu
YXBwZW5kKG5vZGUpOwotICAgIH0KLSAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbEVkZ2UoTm9kZSos
IEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKGVkZ2Uubm9kZSgp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCB0cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKCkKKyAg
ICB2b2lkIGNoZWNrQXJndW1lbnRzKCkKICAgICB7CiAgICAgICAgIC8vIFdoaWxlIGNoZWNraW5n
IGFyZ3VtZW50cywgZXZlcnl0aGluZyBpcyBpbiB0aGUgc3RhY2suCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNpemUoKTsgaS0tOykKQEAgLTE3Miw1NiArMTY0LDU0
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4oMCk7CiAgICAg
ICAgIG1fbm9kZSA9IDA7CiAgICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
Z3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKytpKSB7Ci0gICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgIGlmICghbm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBtX2dyYXBo
LmJsb2NrKDApLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkW2ldOworICAgICAgICAgICAgaW50IG9w
ZXJhbmQgPSBtX2dyYXBoLmJsb2NrKDApLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgLy8g
SWYgaXQncyBjYXB0dXJlZCB0aGVuIHdlJ2xsIGJlIGFjY2Vzc2luZyBpdCB0aHJvdWdoIGxvYWRz
IGFuZCBzdG9yZXMKLSAgICAgICAgICAgIC8vIGFueXdheSAtIHRoZXJlJ3Mgbm8gcG9pbnQgaW4g
dHJhbnNmZXJpbmcgaXQgb3V0LgotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVk
KCkpCisgICAgICAgICAgICBpZiAoZm9ybWF0ID09IERlYWRGbHVzaCB8fCBmb3JtYXQgPT0gRmx1
c2hlZEpTVmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3IodmFyaWFi
bGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZvcm1hdCAhPSBGbHVz
aGVkRG91YmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZSBwcm9maWxlID0gCisgICAgICAgICAgICAgICAgTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZTo6ZnJvbUxhenlPcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
Lm1fcHJvZmlsZWRCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVLZXkoMCwgb3BlcmFuZCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFy
aWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSk7CisgICAgICAgICAg
ICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQz
MjogeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVW
YWx1ZShqc1ZhbHVlKSwgcHJvZmlsZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJl
UHJlZGljdGlvbigpOworICAgICAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDogeworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwg
cHJvZmlsZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNJbnQz
MlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQz
Mihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldCh1bmJveEludDMyKGpz
VmFsdWUpLCBtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBGbHVzaGVkQm9vbGVhbjogeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgcHJvZmlsZSwgaXNOb3RCb29sZWFuKGpzVmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikp
IHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1
ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOwotICAgICAgICAgICAg
ICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikp
IHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1
ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwotICAgICAgICAg
ICAgICAgICAgICBtX291dC5zZXQodW5ib3hCb29sZWFuKGpzVmFsdWUpLCBtX2xvY2Fsc0Jvb2xl
YW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LnNldChq
c1ZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAg
fQogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCisgICAgdm9pZCBjb21waWxlQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAg
ICAgICBtX2hpZ2hCbG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIG1f
aGlnaEJsb2NrID0gYmxvY2s7CiAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayA9IG1fYmxv
Y2tzLmdldChtX2hpZ2hCbG9jayk7CiAgICAgICAgIAogICAgICAgICBtX25leHRIaWdoQmxvY2sg
PSAwOwotICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBibG9ja0luZGV4
ICsgMTsgbmV4dEJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK25leHRCbG9ja0lu
ZGV4KSB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBuZXh0QmxvY2tJbmRleCA9IG1faGlnaEJs
b2NrLT5pbmRleCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytu
ZXh0QmxvY2tJbmRleCkgewogICAgICAgICAgICAgbV9uZXh0SGlnaEJsb2NrID0gbV9ncmFwaC5i
bG9jayhuZXh0QmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAobV9uZXh0SGlnaEJsb2NrKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQxLDExICsyMzEsNyBAQCBwcml2YXRlOgogICAg
ICAgICAKICAgICAgICAgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKCk7CiAgICAgICAg
IAotICAgICAgICBtX2ludDMyVmFsdWVzLmNsZWFyKCk7Ci0gICAgICAgIG1fanNWYWx1ZVZhbHVl
cy5jbGVhcigpOwotICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuY2xlYXIoKTsKLSAgICAgICAgbV9z
dG9yYWdlVmFsdWVzLmNsZWFyKCk7Ci0gICAgICAgIG1fdGltZVRvTGl2ZS5jbGVhcigpOworICAg
ICAgICBtX2xpdmUgPSBibG9jay0+c3NhLT5saXZlQXRIZWFkOwogICAgICAgICAKICAgICAgICAg
bV9zdGF0ZS5yZXNldCgpOwogICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhtX2hpZ2hC
bG9jayk7CkBAIC0yNzQsNiArMjYwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIG1fZGlyZWN0aW9u
ID0gKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpID8gRm9yd2FyZFNwZWN1bGF0
aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9u
b2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAgIGNvbXBpbGVV
cHNpbG9uKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAg
ICAgICBjb21waWxlUGhpKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKU0Nv
bnN0YW50OgogICAgICAgICAgICAgY29tcGlsZUpTQ29uc3RhbnQoKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNDQ1LDggKzQzNyw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChtX25vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dy
YXBoLCBtX25vZGUsIHVzZSk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5oYXNSZXN1
bHQoKSkKLSAgICAgICAgICAgIG1fdGltZVRvTGl2ZS5hZGQobV9ub2RlLCBtX25vZGUtPmFkanVz
dGVkUmVmQ291bnQoKSk7CisgICAgICAgIGlmIChtX25vZGUtPmFkanVzdGVkUmVmQ291bnQoKSkK
KyAgICAgICAgICAgIG1fbGl2ZS5hZGQobV9ub2RlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChz
aG91bGRFeGVjdXRlRWZmZWN0cykKICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZUVmZmVjdHMo
bm9kZUluZGV4KTsKQEAgLTQ1NCw3MyArNDQ2LDc5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVVcHNpbG9uKCkKKyAgICB7Cisg
ICAgICAgIExWYWx1ZSBkZXN0aW5hdGlvbiA9IG1fcGhpcy5nZXQobV9ub2RlLT5waGkoKSk7Cisg
ICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+cGhpKCktPmZsYWdzKCkgJiBOb2RlUmVz
dWx0TWFzaykgeworICAgICAgICBjYXNlIE5vZGVSZXN1bHROdW1iZXI6CisgICAgICAgICAgICBt
X291dC5zZXQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50MzI6CisgICAgICAgICAg
ICBtX291dC5zZXQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGVSZXN1bHRCb29sZWFuOgorICAgICAg
ICAgICAgbV9vdXQuc2V0KGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9u
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKKyAgICAg
ICAgICAgIG1fb3V0LnNldChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlv
bik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQaGkoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIHNvdXJjZSA9IG1fcGhpcy5nZXQobV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRj
aCAobV9ub2RlLT5mbGFncygpICYgTm9kZVJlc3VsdE1hc2spIHsKKyAgICAgICAgY2FzZSBOb2Rl
UmVzdWx0TnVtYmVyOgorICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmdldChzb3VyY2UpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQzMjoKKyAgICAg
ICAgICAgIHNldEludDMyKG1fb3V0LmdldChzb3VyY2UpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE5vZGVSZXN1bHRCb29sZWFuOgorICAgICAgICAgICAgc2V0Qm9vbGVhbiht
X291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2Rl
UmVzdWx0SlM6CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmdldChzb3VyY2UpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIAogICAgIHZvaWQgY29tcGlsZUpTQ29uc3RhbnQoKQogICAgIHsKICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9ub2RlKTsKICAgICAgICAg
aWYgKHZhbHVlLmlzRG91YmxlKCkpCi0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQobV9u
b2RlLCBtX291dC5jb25zdERvdWJsZSh2YWx1ZS5hc0RvdWJsZSgpKSk7CisgICAgICAgICAgICBz
ZXREb3VibGUobV9vdXQuY29uc3REb3VibGUodmFsdWUuYXNEb3VibGUoKSkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuY29uc3RJ
bnQ2NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSkpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVXZWFrSlNDb25zdGFudCgpCiAgICAgewotICAgICAgICBtX2pzVmFsdWVW
YWx1ZXMuYWRkKG1fbm9kZSwgd2Vha1BvaW50ZXIobV9ub2RlLT53ZWFrQ29uc3RhbnQoKSkpOwor
ICAgICAgICBzZXRKU1ZhbHVlKHdlYWtQb2ludGVyKG1fbm9kZS0+d2Vha0NvbnN0YW50KCkpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0TG9jYWwoKQogICAgIHsKLSAgICAgICAg
Ly8gR2V0TG9jYWwgaXMgb25lIG9mIHRoZSBmZXcgbm9kZXMgdGhhdCBtYXkgYmUgbGVmdCBiZWhp
bmQsIHdpdGggIXNob3VsZEdlbmVyYXRlKCkuCi0gICAgICAgIGlmICghbV9ub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBHZXRMb2NhbHMgYXJp
c2Ugb25seSBpbiB0d28gY2FzZXM6IGNhcHR1cmVkIHZhcmlhYmxlcyBhbmQgYXJndW1lbnRzLgog
ICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24g
PSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gU3BlY05vbmUpIHsKLSAg
ICAgICAgICAgIHRlcm1pbmF0ZShJbmFkZXF1YXRlQ292ZXJhZ2UpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyYXAgaW5zdGVhZC4KLSAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzODMKLSAg
ICAgICAgICAgIHRlcm1pbmF0ZShJbmFkZXF1YXRlQ292ZXJhZ2UpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVy
ZWQoKSkgewotICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5tX3ZhbHVl
KSkKLSAgICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmxvYWQz
MihwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5sb2FkNjQoYWRk
cmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVCghdmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZv
cm1hdCgpKTsKICAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBv
c3NpYmxlKCkpIHsKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9y
bWF0KCkpIHsKLSAgICAgICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQobV9ub2RlLCBtX291
dC5nZXQobV9sb2NhbHNEb3VibGUub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIExvY2FscyB0aGF0IGFyZSBtYXJrZWQgc2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkgdGhh
dCBhcmVuJ3QgYWxzbyBmb3JjZWQgdG8KLSAgICAgICAgICAgIC8vIHVzZSBkb3VibGUgZm9ybWF0
LCBhbmQgdGhhdCBoYXZlIHRoZSByaWdodCBwcmVkaWN0aW9uLCB3aWxsIGFsd2F5cyBiZQotICAg
ICAgICAgICAgLy8gc3BlY3VsYXRlZCBvbiBTZXRMb2NhbCBhbmQgd2lsbCBhbHdheXMgYmUgc3Rv
cmVkIGludG8gYW4gYXBwcm9wcmlhdGVseQotICAgICAgICAgICAgLy8gdHlwZWQgcmVmZXJlbmNl
IExWYWx1ZS4KLSAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikp
IHsKLSAgICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmdldCht
X2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0
aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCht
X25vZGUsIG1fb3V0LmdldChtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAvLyBXZSBza2lwIHRoZSBDZWxsIGNhc2UgaGVyZSBiZWNhdXNlIHRoYXQgZ2V0cyB0cmVhdGVk
IGlkZW50aWNhbGx5IHRvCi0gICAgICAgICAgICAvLyBKU1ZhbHVlcywgc2luY2UgY2VsbHMgYXJl
IHN0b3JlZCB1bnRhZ2dlZC4KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9qc1ZhbHVl
VmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmdldChtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpKSk7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24odmFsdWUubV92YWx1
ZSkpCisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcih2YXJpYWJs
ZS0+bG9jYWwoKSkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5sb2FkNjQoYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlU2V0TG9jYWwoKQpAQCAtNTI5LDY0ICs1MjcsNDAgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7Ci0gICAgICAgIGJvb2wgbmVl
ZHNGbHVzaGluZyA9IG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG1fbm9kZSk7CiAgICAgICAg
IAogICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7CiAgICAg
ICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CiAgICAgICAg
ICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHNEb3VibGUub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHZh
cmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkxvY2Fs
cyk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3Io
dmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjayk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewotICAgICAgICAg
ICAgICAgICAgICBtX291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOwotICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDMySW5Mb2NhbHMpOworICAgICAgICAg
ICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRGb3IodmFyaWFibGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJl
ZGljdGlvbikpIHsKICAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHM2
NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRz
Rmx1c2hpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRk
cmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
U291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5K
U1N0YWNrKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1
ZUluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNz
Rm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgbV9v
dXQuc2V0KGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSksIG1fbG9jYWxzQm9vbGVhbi5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hp
bmcpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFs
dWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJv
b2xlYW4obV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgK
KyAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pLAorICAgICAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKHZhcmlh
YmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgewotICAgICAgICAgICAgbV9vdXQuc3RvcmU2
NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgbV92
YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1
ZUluSlNTdGFjayk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7Ci0gICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7Ci0gICAgICAgICAgICBtX291dC5z
dG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAg
ICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNl
KFZhbHVlSW5KU1N0YWNrKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3ZhbHVlU291
cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2Nh
bHMpOworICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5s
b2NhbCgpKSk7CisgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgIH0KICAgICAKICAgICB2b2lk
IGNvbXBpbGVNb3ZIaW50KCkKQEAgLTYyMCwxOSArNTk0LDE4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobV9ub2RlLT5hcml0
aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9k
ZSwgbV9vdXQuYWRkKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIobV9v
dXQuYWRkKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5hZGRX
aXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZs
b3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOwotICAgICAg
ICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0
LCAwKSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAw
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAg
ICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAg
ICAgIG1fb3V0LmRvdWJsZUFkZChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJs
ZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTY1MSwxOSArNjI0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewotICAg
ICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuc3ViKGxlZnQsIHJp
Z2h0KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5zdWJXaXRoT3ZlcmZsb3czMihsZWZ0LCBy
aWdodCk7CiAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9v
dXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOwotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5h
ZGQobV9ub2RlLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CisgICAgICAgICAgICBz
ZXRJbnQzMihtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0g
ICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAor
ICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZVN1Yihs
b3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTcwMywxMyArNjc1LDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJW
YWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAg
ICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAgICAg
IG1fb3V0LmRvdWJsZU11bChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTgw
MCwxMyArNzcxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGRvbmUsIGxhc3ROZXh0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9p
bnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsK
KyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cykpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAgICAg
ICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAgICBt
X291dC5kb3VibGVEaXYobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04OTEs
MTMgKzg2MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhkb25lLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7Cisg
ICAgICAgICAgICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBO
dW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZCgKLSAgICAgICAgICAg
ICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXREb3VibGUoCiAgICAgICAgICAgICAgICAgbV9v
dXQuZG91YmxlUmVtKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9k
ZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtOTE1LDgg
Kzg4NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9u
b2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMu
YWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEludDMyKAogICAg
ICAgICAgICAgICAgIG1fb3V0LnNlbGVjdCgKICAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5v
cCgpID09IEFyaXRoTWluCiAgICAgICAgICAgICAgICAgICAgICAgICA/IG1fb3V0Lmxlc3NUaGFu
KGxlZnQsIHJpZ2h0KQpAQCAtOTUwLDcgKzkxOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgbV9kb3VibGVW
YWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIHJlc3VsdHMpKTsK
KyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgcmVzdWx0
cykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtOTcx
LDEyICs5MzksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3BlY3Vs
YXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmVxdWFsKHJlc3VsdCwgbV9vdXQuY29u
c3RJbnQzMigxIDw8IDMxKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMyVmFs
dWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9v
dXQuZG91YmxlQWJzKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAg
c2V0RG91YmxlKG1fb3V0LmRvdWJsZUFicyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEwMDMsMTIg
Kzk3MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmV4dHJh
Y3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHNldEludDMyKHJlc3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJs
ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5kb3VibGVOZWcobG93RG91YmxlKG1fbm9kZS0+Y2hp
bGQxKCkpKSk7CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlTmVnKGxvd0RvdWJs
ZShtX25vZGUtPmNoaWxkMSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtMTAyMCw0NyArOTg4LDM4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlQml0QW5kKCkKICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAg
ICAgICAgICAgbV9ub2RlLCBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSks
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmJp
dEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0T3IoKQogICAgIHsKLSAgICAg
ICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsIG1fb3V0LmJpdE9yKGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwor
ICAgICAgICBzZXRJbnQzMihtX291dC5iaXRPcihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwg
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlQml0WG9yKCkKICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAg
ICAgbV9ub2RlLCBtX291dC5iaXRYb3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmJpdFhvcihs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0UlNoaWZ0KCkKICAgICB7Ci0gICAgICAg
IG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLAotICAgICAgICAgICAgbV9v
dXQuYVNocigKLSAgICAgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKLSAg
ICAgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1f
b3V0LmNvbnN0SW50MzIoMzEpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5hU2hyKAorICAg
ICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBtX291dC5i
aXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVCaXRMU2hpZnQoKQogICAgIHsKLSAgICAg
ICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsCi0gICAgICAgICAgICBt
X291dC5zaGwoCi0gICAgICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCi0g
ICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBt
X291dC5jb25zdEludDMyKDMxKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQuc2hsKAorICAg
ICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBtX291dC5i
aXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVCaXRVUlNoaWZ0KCkKICAgICB7Ci0gICAg
ICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLAotICAgICAgICAgICAg
bV9vdXQubFNocigKLSAgICAgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwK
LSAgICAgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSks
IG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5sU2hyKAor
ICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBtX291
dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEp
KSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJlcigpCkBAIC0x
MDY4LDE0ICsxMDI3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgIGlmICghbm9kZUNhblNwZWN1bGF0ZUlu
dGVnZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgbV9kb3VibGVW
YWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQudW5zaWduZWRUb0RvdWJsZSh2YWx1ZSkpOworICAgICAg
ICAgICAgc2V0RG91YmxlKG1fb3V0LnVuc2lnbmVkVG9Eb3VibGUodmFsdWUpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRlRm9yd2Fy
ZCgKICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFuKHZh
bHVlLCBtX291dC5pbnQzMlplcm8pLAogICAgICAgICAgICAgRm9ybWF0dGVkVmFsdWUoVmFsdWVG
b3JtYXRVSW50MzIsIHZhbHVlKSk7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwg
dmFsdWUpOworICAgICAgICBzZXRJbnQzMih2YWx1ZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZUludDMyVG9Eb3VibGUoKQpAQCAtMTA4Nyw3ICsxMDQ2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gY29udGVtcG9yYW5lb3VzIGxvdy1sZXZlbCByZXByZXNlbnRhdGlvbnMuIFNvLCB0
aGlzIGdpdmVzIGNoaWxkMSBhIGRvdWJsZQogICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBhbmQg
dGhlbiBmb3J3YXJkcyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIG1fbm9kZS4KICAgICAgICAgCi0g
ICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MSgpKSk7CisgICAgICAgIHNldERvdWJsZShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpCkBAIC0xMjE1LDgg
KzExNzQsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEJ1dHRlcmZseSgp
CiAgICAgewotICAgICAgICBtX3N0b3JhZ2VWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2Rl
LCBtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNPYmpl
Y3RfYnV0dGVyZmx5KSk7CisgICAgICAgIHNldFN0b3JhZ2UobV9vdXQubG9hZFB0cihsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcnJheUxlbmd0aCgpCkBAIC0xMjI1LDggKzExODMs
NyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBB
cnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAg
ICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsIG1fb3V0Lmxv
YWQzMihsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJs
aWNMZW5ndGgpKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihsb3dTdG9yYWdl
KG1fbm9kZS0+Y2hpbGQyKCkpLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEyNTYsNyArMTIx
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UsIG1fb3V0Lnplcm9F
eHQoaW5kZXgsIG1fb3V0LmludFB0ciksCiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZm9y
Tm9kZShtX25vZGUtPmNoaWxkMigpKS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm82NChyZXN1bHQpKTsK
LSAgICAgICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMjg4LDcgKzEyNDUsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIDAs
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVk
KHJlc3VsdCwgcmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1f
ZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgc2V0RG91
YmxlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTEzODgsOCArMTM0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VB
Y2Nlc3NEYXRhJiBkYXRhID0KICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YVttX25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAgIAotICAgICAgICBt
X2pzVmFsdWVWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICBzZXRKU1Zh
bHVlKAogICAgICAgICAgICAgbV9vdXQubG9hZDY0KAogICAgICAgICAgICAgICAgIG1fb3V0LmFk
ZHJlc3MoCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcHMucHJvcGVydGllc1tkYXRhLmlkZW50
aWZpZXJOdW1iZXJdLApAQCAtMTQxMiw3ICsxMzY4LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIGNvbXBpbGVHZXRHbG9iYWxWYXIoKQogICAgIHsKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVz
LmFkZChtX25vZGUsIG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShtX25vZGUtPnJlZ2lzdGVy
UG9pbnRlcigpKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNv
bHV0ZShtX25vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGNvbXBpbGVQdXRHbG9iYWxWYXIoKQpAQCAtMTQzNywzMCArMTM5MywyNyBAQCBwcml2YXRlOgog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9ub2RlLT5j
aGlsZDIoKS5ub2RlKCkpLmlzTnVsbCgpKTsKICAgICAgICAgbWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZFdhdGNocG9pbnRJZklzU3RpbGxWYWxpZCgpOwotICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRk
KAotICAgICAgICAgICAgbV9ub2RlLCBlcXVhbE51bGxPclVuZGVmaW5lZCgKKyAgICAgICAgc2V0
Qm9vbGVhbigKKyAgICAgICAgICAgIGVxdWFsTnVsbE9yVW5kZWZpbmVkKAogICAgICAgICAgICAg
ICAgIG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsTnVsbE9yVW5kZWZp
bmVkKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVTdHJpY3RFcSgpCiAg
ICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0g
ICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwK
KyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwobG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25v
ZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5W
YWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xl
YW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwobG93RG91YmxlKG1fbm9kZS0+
Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpIHsK
ICAgICAgICAgICAgIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SWZJc1N0aWxsVmFs
aWQoKTsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAg
bV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5l
cXVhbCgKICAgICAgICAgICAgICAgICAgICAgbG93Tm9uTnVsbE9iamVjdChtX25vZGUtPmNoaWxk
MSgpKSwKICAgICAgICAgICAgICAgICAgICAgbG93Tm9uTnVsbE9iamVjdChtX25vZGUtPmNoaWxk
MigpKSkpOwpAQCAtMTQ3NywxOSArMTQzMCwxNiBAQCBwcml2YXRlOgogICAgICAgICBpZiAoY29u
c3RhbnQuaXNVbmRlZmluZWRPck51bGwoKQogICAgICAgICAgICAgJiYgIW1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50SWZJc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAgaWYgKGNv
bnN0YW50LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgK
LSAgICAgICAgICAgICAgICAgICAgbV9ub2RlLCBlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUt
PmNoaWxkMSgpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGwpKTsKKyAgICAgICAgICAgICAg
ICBzZXRCb29sZWFuKGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFsbENl
bGxzQXJlRmFsc2UsIEVxdWFsTnVsbCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNVbmRlZmlu
ZWQoKSk7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAg
IG1fbm9kZSwgZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNB
cmVGYWxzZSwgRXF1YWxVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oZXF1YWxO
dWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxV
bmRlZmluZWQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAg
c2V0Qm9vbGVhbigKICAgICAgICAgICAgIG1fb3V0LmVxdWFsKAogICAgICAgICAgICAgICAgIGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksCiAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQ2NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnQpKSkpOwpAQCAtMTQ5OCwxNSArMTQ0OCwxMyBA
QCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVMZXNzKCkKICAgICB7CiAgICAgICAg
IGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKLSAgICAgICAgICAgIG1f
Ym9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAg
c2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5sZXNzVGhhbihsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5h
cnlVc2VLaW5kKE51bWJlclVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQo
Ci0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAg
ICAgICAgICAgICBtX291dC5kb3VibGVMZXNzVGhhbihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC0xNTE3LDE1ICsxNDY1LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21w
aWxlQ29tcGFyZUxlc3NFcSgpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAg
ICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAg
ICAgICAgbV9vdXQubGVzc1RoYW5PckVxdWFsKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVy
VXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAg
ICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0
LmRvdWJsZUxlc3NUaGFuT3JFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgbG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTE1MzcsMTUgKzE0ODMsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNv
bXBpbGVDb21wYXJlR3JlYXRlcigpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAot
ICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAg
ICAgICAgICAgbV9vdXQuZ3JlYXRlclRoYW4obG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJV
c2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAg
IG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQu
ZG91YmxlR3JlYXRlclRoYW4oCiAgICAgICAgICAgICAgICAgICAgIGxvd0RvdWJsZShtX25vZGUt
PmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0xNTU3LDE2ICsxNTAxLDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxl
Q29tcGFyZUdyZWF0ZXJFcSgpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAg
ICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAg
ICAgICAgbV9vdXQuZ3JlYXRlclRoYW5PckVxdWFsKAogICAgICAgICAgICAgICAgICAgICBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fbm9k
ZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZh
bHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVh
bigKICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwoCiAgICAg
ICAgICAgICAgICAgICAgIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTc3LDcgKzE1MTks
NyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoKQogICAgIHsK
LSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmJpdE5vdChib29saWZ5
KG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQuYml0Tm90KGJv
b2xpZnkobV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
SnVtcCgpCkBAIC0xOTMxLDYgKzE4NzMsMTQgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAg
dm9pZCBzcGVjdWxhdGVCYWNrd2FyZCgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVk
VmFsdWUgbG93VmFsdWUsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSwKKyAg
ICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgeworICAgICAgICBhcHBlbmRPU1JFeGl0
KAorICAgICAgICAgICAga2luZCwgbG93VmFsdWUsIHByb2ZpbGUsIGZhaWxDb25kaXRpb24sIEJh
Y2t3YXJkU3BlY3VsYXRpb24sIEZvcm1hdHRlZFZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNwZWN1bGF0ZUJhY2t3YXJkKAogICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRW
YWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAg
ICB7CiAgICAgICAgIGFwcGVuZE9TUkV4aXQoCkBAIC0xOTk5LDE0ICsxOTQ5LDE3IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCBlZGdlLnVz
ZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVl
IHJlc3VsdCA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIGJveGVkUmVzdWx0ID0g
bV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgTG93ZXJlZE5vZGVW
YWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYg
KGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAg
ICAgIAorICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwor
ICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSBib3hlZFJl
c3VsdCA9IHZhbHVlLnZhbHVlKCk7CiAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKICAgICAg
ICAgICAgICAgICBqc1ZhbHVlVmFsdWUoYm94ZWRSZXN1bHQpLCBlZGdlLCBTcGVjSW50MzIsIGlz
Tm90SW50MzIoYm94ZWRSZXN1bHQpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJv
eEludDMyKGJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKGVkZ2Uu
bm9kZSgpLCByZXN1bHQpOworICAgICAgICAgICAgc2V0SW50MzIoZWRnZS5ub2RlKCksIHJlc3Vs
dCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKQEAgLTIwMTksMTAg
KzE5NzIsMTIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwg
bW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgaXNDZWxsKGVkZ2UudXNlS2luZCgp
KSk7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHVuY2hlY2tlZFJlc3VsdCA9IG1fanNW
YWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUg
dmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgdW5jaGVja2VkVmFsdWUgPSB2YWx1
ZS52YWx1ZSgpOwogICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAg
anNWYWx1ZVZhbHVlKHVuY2hlY2tlZFJlc3VsdCksIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwo
dW5jaGVja2VkUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4gdW5jaGVja2VkUmVzdWx0Owor
ICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh1bmNoZWNrZWRWYWx1ZSksIGVkZ2UsIFNwZWND
ZWxsLCBpc05vdENlbGwodW5jaGVja2VkVmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB1bmNo
ZWNrZWRWYWx1ZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IShtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0NlbGwpKTsKQEAgLTIwNjEsMTQg
KzIwMTYsMTcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwg
bW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gQm9v
bGVhblVzZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fYm9vbGVh
blZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVl
cy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBt
X2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAg
ICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAo
aXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gdmFs
dWUudmFsdWUoKTsKICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAogICAgICAgICAgICAgICAg
IGpzVmFsdWVWYWx1ZSh1bmJveGVkUmVzdWx0KSwgZWRnZSwgU3BlY0Jvb2xlYW4sIGlzTm90Qm9v
bGVhbih1bmJveGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hC
b29sZWFuKHVuYm94ZWRSZXN1bHQpOwotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChl
ZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oZWRnZS5ub2RlKCks
IHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAg
IApAQCAtMjA4MSwxNiArMjAzOSwyMSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJU
X1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBpc0RvdWJs
ZShlZGdlLnVzZUtpbmQoKSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQg
PSBtX2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgaW50UmVzdWx0ID0gbV9pbnQzMlZh
bHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9v
dXQuaW50VG9Eb3VibGUoaW50UmVzdWx0KTsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFk
ZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9
IG1fZG91YmxlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAg
ICAgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChp
c1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmludFRv
RG91YmxlKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGVkZ2Uubm9kZSgp
LCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKExWYWx1ZSBib3hlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQo
ZWRnZS5ub2RlKCkpKSB7CisgICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdl
Lm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZh
bHVlIGJveGVkUmVzdWx0ID0gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRG91YmxlIHVu
Ym94aW5nIGludCBjYXNlIikpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgZG91YmxlQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRG91YmxlIHVuYm94aW5nIGRvdWJsZSBjYXNlIikpOwog
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJEb3VibGUgdW5ib3hpbmcgY29udGludWF0aW9uIikpOwpAQCAtMjExNSw3ICsyMDc4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1f
b3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBpbnRUb0RvdWJsZSwgdW5ib3hlZERvdWJsZSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHNldERvdWJsZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMTI4LDI0
ICsyMDkxLDI4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUs
IG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFVu
dHlwZWRVc2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2pzVmFs
dWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2ludDMyVmFsdWVz
LmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hJbnQz
Mih1bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5u
b2RlKCksIHJlc3VsdCk7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFs
dWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAgICB2YWx1
ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQo
dmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94SW50MzIodmFsdWUudmFs
dWUoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSkp
IHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hCb29sZWFuKHVuYm94ZWRSZXN1bHQp
OwotICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsK
KyAgICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAg
ICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94
Qm9vbGVhbih2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZWRnZS5ub2Rl
KCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2RvdWJsZVZhbHVlcy5n
ZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94RG91Ymxl
KHVuYm94ZWRSZXN1bHQpOwotICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChlZGdlLm5v
ZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5u
b2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBib3hEb3VibGUodmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTIxNTUsMTEgKzIxMjIsMTIgQEAgcHJpdmF0ZToKICAgICAK
ICAgICBMVmFsdWUgbG93U3RvcmFnZShFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBpZiAoTFZh
bHVlIHJlc3VsdCA9IG1fc3RvcmFnZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fc3Rv
cmFnZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKICAgICAgICAgCiAgICAgICAgIExW
YWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOwotICAgICAgICBtX3N0b3JhZ2VWYWx1ZXMuYWRk
KGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAgICBzZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCBy
ZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTIyNDIsNiAr
MjIxMCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgogICAgICAgICAgICAg
c3BlY3VsYXRlTnVtYmVyKGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Qm9vbGVhblVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oZWRnZSk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KQEAgLTIzNDIsNiArMjMxMywxMSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgZG91YmxlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjUmVhbE51bWJlciwK
ICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQodmFsdWUsIHZhbHVl
KSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICBsb3dCb29sZWFuKGVkZ2UpOworICAgIH0KIAogICAgIGJvb2wgbWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKQogICAgIHsKQEAgLTI0MzAs
MjIgKzI0MDYsMTUgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIGlzTGl2ZShOb2RlKiBub2Rl
KQogICAgIHsKLSAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVy
ID0gbV90aW1lVG9MaXZlLmZpbmQobm9kZSk7Ci0gICAgICAgIEFTU0VSVChpdGVyICE9IG1fdGlt
ZVRvTGl2ZS5lbmQoKSk7Ci0gICAgICAgIHJldHVybiAhIWl0ZXItPnZhbHVlOworICAgICAgICBy
ZXR1cm4gbV9saXZlLmNvbnRhaW5zKG5vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZShF
ZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBpZiAoIWVkZ2UtPmhhc1Jlc3VsdCgpKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICBB
U1NFUlQoZWRnZS0+aGFzUmVzdWx0KCkpOworICAgICAgICBpZiAoIWVkZ2UuZG9lc0tpbGwoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSGFzaE1h
cDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV90aW1lVG9MaXZlLmZpbmQoZWRn
ZS5ub2RlKCkpOwotICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3RpbWVUb0xpdmUuZW5kKCkpOwot
ICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUpOwotICAgICAgICBpdGVyLT52YWx1ZS0tOworICAg
ICAgICBtX2xpdmUucmVtb3ZlKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgLy8gV3Jh
cHBlciB1c2VkIG9ubHkgZm9yIERGR19OT0RFX0RPX1RPX0NISUxEUkVOCkBAIC0yNDYyLDYzICsy
NDMxLDM0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxv
Y2soKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YWx1ZVNvdXJjZXMuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9oaWdoQmxvY2stPnZhcmlh
Ymxlc0F0SGVhZFtpXTsKLSAgICAgICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgICAg
IG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5h
cmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
dmFyaWFibGUtPmlzQXJndW1lbnRzQWxpYXMoKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoQXJndW1lbnRzU291cmNlKTsKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9mbHVz
aGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHZh
bHVlIHdpbGwgaGF2ZSBiZWVuIGZsdXNoZWQgdG8gdGhlIEpTU3RhY2sgaW4gc29tZSBmb3JtIG9y
Ci0gICAgICAgICAgICAgICAgLy8gYW5vdGhlci4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoRG91
YmxlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBtX2hpZ2hCbG9jay0+c3NhLT5mbHVz
aEZvcm1hdEF0SGVhZFtpXTsKKyAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAg
ICAgICBjYXNlIERlYWRGbHVzaDogeworICAgICAgICAgICAgICAgIC8vIE11c3QgY29uc2lkZXIg
YXZhaWxhYmxlIG5vZGVzIGluc3RlYWQuCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1f
aGlnaEJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1
ZVNvdXJjZShTb3VyY2VJc0RlYWQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJj
ZShub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkg
ewotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShE
b3VibGVJbkxvY2Fscyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzW2ldID0gVmFsdWVTb3VyY2UoSW50MzJJbkxvY2Fscyk7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZElu
dDMyOgorICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoSW50
MzJJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewot
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEJvb2xl
YW5JbkxvY2Fscyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgICAgICAgICBt
X3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjayk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZsdXNo
ZWRDZWxsOgorICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgIGNh
c2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBW
YWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0g
VmFsdWVTb3VyY2UoVmFsdWVJbkxvY2Fscyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0y
NTI2LDYgKzI0NjYsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0
dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24s
CiAgICAgICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUg
cmVjb3ZlcnkpCiAgICAgeworICAgICAgICBhcHBlbmRPU1JFeGl0KAorICAgICAgICAgICAga2lu
ZCwgbG93VmFsdWUsIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdo
VmFsdWUpLAorICAgICAgICAgICAgZmFpbENvbmRpdGlvbiwgZGlyZWN0aW9uLCByZWNvdmVyeSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgRXhpdEtpbmQg
a2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUgcHJvZmlsZSwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24sIFNwZWN1bGF0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCisgICAgewogICAgICAg
ICBpZiAoT3B0aW9uczo6ZnRsVHJhcHNPbk9TUkV4aXQoKSkgewogICAgICAgICAgICAgTEJhc2lj
QmxvY2sgZmFpbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk9TUiBleGl0IGZhaWxDYXNl
IikpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJPU1IgZXhpdCBjb250aW51YXRpb24iKSk7CkBAIC0yNTQ2LDExICsyNDk1LDkg
QEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5z
aXplKCkgPT0gbV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gbV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKTsKICAgICAgICAgCi0gICAgICAgIG1fZnRs
U3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoCi0gICAgICAgICAgICBPU1JFeGl0KAotICAg
ICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKLSAgICAgICAgICAgICAgICBtX2NvZGVP
cmlnaW4sIG1fbGFzdFNldE9wZXJhbmQsIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mQXJndW1lbnRz
KCksCi0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZMb2NhbHMoKSkpOwor
ICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCisgICAg
ICAgICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgcHJvZmlsZSwgbV9jb2RlT3JpZ2luLCBt
X2xhc3RTZXRPcGVyYW5kLAorICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZBcmd1
bWVudHMoKSwgbV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0
bFN0YXRlLm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAg
IAogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxh
c3QoKTsKQEAgLTI2MDIsMjcgKzI1NDksNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBE
b3VibGVJbkpTU3RhY2s6CiAgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRW
YWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgVmFsdWVJbkxvY2FsczoKLSAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1l
bnQoCi0gICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRK
U1ZhbHVlLCBtX291dC5nZXQobV9sb2NhbHM2NFtpXSkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBJbnQzMkluTG9jYWxzOgotICAgICAgICAgICAgICAgIGFkZEV4
aXRBcmd1bWVudCgKLSAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1
ZUZvcm1hdEludDMyLCBtX291dC5nZXQobV9sb2NhbHMzMltpXSkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCb29sZWFuSW5Mb2NhbHM6Ci0gICAgICAgICAgICAg
ICAgYWRkRXhpdEFyZ3VtZW50KAotICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMs
IGksIFZhbHVlRm9ybWF0Qm9vbGVhbiwgbV9vdXQuZ2V0KG1fbG9jYWxzQm9vbGVhbltpXSkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEb3VibGVJbkxvY2FsczoK
LSAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIGV4
aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXREb3VibGUsIG1fb3V0LmdldChtX2xvY2Fsc0Rv
dWJsZVtpXSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcmd1
bWVudHNTb3VyY2U6Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBQaGFudG9t
QXJndW1lbnRzLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTM5ODYKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTb3Vy
Y2VJc0RlYWQ6CiAgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6
ZGVhZCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjY4MiwxMiArMjYwOCwxMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIHVpbnQzMlRvTnVtYmVyID0gMDsKICAgICAg
ICAgICAgICAgICBOb2RlKiBkb3VibGVBc0ludDMyID0gMDsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X3RpbWVUb0xpdmUuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNp
Z25lZD46Oml0ZXJhdG9yIGVuZCA9IG1fdGltZVRvTGl2ZS5lbmQoKTsKKyAgICAgICAgICAgICAg
ICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fbGl2ZS5iZWdpbigpOworICAgICAg
ICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBtX2xpdmUuZW5kKCk7CiAg
ICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBpdGVyLT5rZXk7Cisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9ICppdGVyOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWNhbmRpZGF0ZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+Y2hpbGQxKCkg
IT0gbm9kZSkKQEAgLTI3MzIsMjQgKzI2NTYsMjggQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgQVNTRVJUKGlzTGl2ZShub2RlKSk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoTFZhbHVlIHJlc3VsdCA9IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUpKSB7Ci0gICAgICAgICAg
ICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRJbnQz
MiwgcmVzdWx0KTsKKworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9pbnQzMlZh
bHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAg
ICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SW50
MzIsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fYm9vbGVhblZhbHVlcy5nZXQobm9k
ZSkpIHsKLSAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4
LCBWYWx1ZUZvcm1hdEJvb2xlYW4sIHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9ib29sZWFu
VmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAg
ICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRC
b29sZWFuLCB2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0
KG5vZGUpKSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBp
bmRleCwgVmFsdWVGb3JtYXRKU1ZhbHVlLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1fanNW
YWx1ZVZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAg
ICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9y
bWF0SlNWYWx1ZSwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9kb3VibGVWYWx1ZXMu
Z2V0KG5vZGUpKSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRz
LCBpbmRleCwgVmFsdWVGb3JtYXREb3VibGUsIHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9k
b3VibGVWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZv
cm1hdERvdWJsZSwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtMjgzNCw2ICsyNzYyLDU3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzLm9wZXJhbmQob3BlcmFuZCkgPSBWYWx1ZVNvdXJjZShub2RlLT5jaGlsZDEoKS5ub2RlKCkp
OwogICAgIH0KICAgICAKKyAgICB2b2lkIHNldEludDMyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIG1faW50MzJWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFs
dWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorICAgIHZvaWQgc2V0SlNWYWx1ZShOb2Rl
KiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuc2V0
KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorICAg
IHZvaWQgc2V0Qm9vbGVhbihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBtX2Jvb2xlYW5WYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGln
aEJsb2NrKSk7CisgICAgfQorICAgIHZvaWQgc2V0U3RvcmFnZShOb2RlKiBub2RlLCBMVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBtX3N0b3JhZ2VWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWRO
b2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorICAgIHZvaWQgc2V0RG91Ymxl
KE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fZG91YmxlVmFsdWVz
LnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0K
KworICAgIHZvaWQgc2V0SW50MzIoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW50
MzIobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0SlNWYWx1ZShMVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBzZXRKU1ZhbHVlKG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAg
ICB2b2lkIHNldEJvb2xlYW4oTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0Qm9vbGVh
bihtX25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXRTdG9yYWdlKExWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHNldFN0b3JhZ2UobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAg
IHZvaWQgc2V0RG91YmxlKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldERvdWJsZSht
X25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKGNvbnN0IExvd2Vy
ZWROb2RlVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21p
bmF0ZXMobV9oaWdoQmxvY2ssIHZhbHVlLmJsb2NrKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBhZGRXZWFr
UmVmZXJlbmNlKEpTQ2VsbCogdGFyZ2V0KQogICAgIHsKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRD
b2RlLT5jb21tb24ud2Vha1JlZmVyZW5jZXMuYXBwZW5kKApAQCAtMjg4OCwyMCArMjg2NywxNCBA
QCBwcml2YXRlOgogICAgIExWYWx1ZSBtX3RhZ1R5cGVOdW1iZXI7CiAgICAgTFZhbHVlIG1fdGFn
TWFzazsKICAgICAKLSAgICBIYXNoU2V0PE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wczsKLSAgICBW
ZWN0b3I8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKKyAgICBIYXNoTWFwPE5vZGUq
LCBMb3dlcmVkTm9kZVZhbHVlPiBtX2ludDMyVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExv
d2VyZWROb2RlVmFsdWU+IG1fanNWYWx1ZVZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dl
cmVkTm9kZVZhbHVlPiBtX2Jvb2xlYW5WYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJl
ZE5vZGVWYWx1ZT4gbV9zdG9yYWdlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWRO
b2RlVmFsdWU+IG1fZG91YmxlVmFsdWVzOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fbGl2ZTsKICAg
ICAKLSAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1faW50MzJWYWx1ZXM7Ci0gICAgSGFzaE1h
cDxOb2RlKiwgTFZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZh
bHVlPiBtX2Jvb2xlYW5WYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3N0b3Jh
Z2VWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2RvdWJsZVZhbHVlczsKLSAg
ICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gbV90aW1lVG9MaXZlOwotICAgIAotICAgIE9wZXJh
bmRzPExWYWx1ZT4gbV9sb2NhbHNCb29sZWFuOwotICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2Nh
bHMzMjsKLSAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzNjQ7Ci0gICAgT3BlcmFuZHM8TFZh
bHVlPiBtX2xvY2Fsc0RvdWJsZTsKKyAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fcGhpczsK
ICAgICAKICAgICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gbV92YWx1ZVNvdXJjZXM7CiAgICAgaW50
IG1fbGFzdFNldE9wZXJhbmQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyZWROb2RlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyZWROb2RlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJlZE5vZGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBGVExMb3dlcmVkTm9kZVZhbHVlX2gKKyNkZWZpbmUgRlRMTG93ZXJlZE5vZGVWYWx1ZV9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBSZXByZXNlbnRzIHRo
ZSBhY3Qgb2YgaGF2aW5nIGxvd2VyZWQgYSBERkc6Ok5vZGUgdG8gYW4gTFZhbHVlLCBhbmQgcmVj
b3JkcyB0aGUKKy8vIERGRzo6QmFzaWNCbG9jayB0aGF0IGRpZCB0aGUgbG93ZXJpbmcuIFRoZSBM
VmFsdWUgaXMgd2hhdCB3ZSB1c2UgbW9zdCBvZnRlbiwgYnV0CisvLyB3ZSBuZWVkIHRvIHZlcmlm
eSB0aGF0IHdlJ3JlIGluIGEgYmxvY2sgdGhhdCBpcyBkb21pbmF0ZWQgYnkgdGhlIG9uZSB0aGF0
IGRpZAorLy8gdGhlIGxvd2VyaW5nLiBXZSdyZSBndWFyYW50ZWVkIHRoYXQgZm9yIGVhY2ggREZH
OjpOb2RlLCB0aGVyZSB3aWxsIGJlIG9uZQorLy8gTG93ZXJlZE5vZGVWYWx1ZSB0aGF0IGFsd2F5
cyBkb21pbmF0ZXMgYWxsIHVzZXMgb2YgdGhlIERGRzo6Tm9kZTsgYnV0IHRoZXJlIG1heQorLy8g
YmUgb3RoZXJzIHRoYXQgZG9uJ3QgZG9taW5hdGUgYW5kIHdlJ3JlIGVmZmVjdGl2ZWx5IGRvaW5n
IG9wcG9ydHVuaXN0aWMgR1ZOIG9uCisvLyB0aGUgbG93ZXJpbmcgY29kZS4KKworY2xhc3MgTG93
ZXJlZE5vZGVWYWx1ZSB7CitwdWJsaWM6CisgICAgTG93ZXJlZE5vZGVWYWx1ZSgpCisgICAgICAg
IDogbV92YWx1ZSgwKQorICAgICAgICAsIG1fYmxvY2soMCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIExvd2VyZWROb2RlVmFsdWUoTFZhbHVlIHZhbHVlLCBERkc6OkJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgICwgbV9ibG9jayhibG9jaykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3ZhbHVlKTsKKyAgICAgICAgQVNTRVJUKG1fYmxvY2spOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9
CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAor
ICAgIExWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBERkc6OkJh
c2ljQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIAorcHJpdmF0
ZToKKyAgICBMVmFsdWUgbV92YWx1ZTsKKyAgICBERkc6OkJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKworI2VuZGlmIC8vIEZUTExvd2VyZWROb2RlVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZyb21CbG9jay5oCShyZXZpc2lvbiAxNTI1ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAogY2xhc3MgVmFsdWVGcm9tQmxvY2sgewogcHVibGljOgorICAgIFZhbHVlRnJvbUJsb2Nr
KCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgICAgICwgbV9ibG9jaygwKQorICAgIHsKKyAg
ICB9CisgICAgCiAgICAgVmFsdWVGcm9tQmxvY2soTFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9jayBi
bG9jaykKICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQogICAgICAgICAsIG1fYmxvY2soYmxvY2sp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAko
cmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNv
dXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDIxICs0NSw2IEBAIHZvaWQgVmFsdWVTb3Vy
Y2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICBjYXNlIERvdWJsZUluSlNTdGFjazoKICAg
ICAgICAgb3V0LnByaW50KCJEb3VibGVJbkpTU3RhY2siKTsKICAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgVmFsdWVJbkxvY2FsczoKLSAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluTG9jYWxzIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEludDMySW5Mb2NhbHM6Ci0gICAgICAgIG91dC5w
cmludCgiSW50MzJJbkxvY2FscyIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBCb29sZWFu
SW5Mb2NhbHM6Ci0gICAgICAgIG91dC5wcmludCgiQm9vbGVhbkluTG9jYWxzIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIERvdWJsZUluTG9jYWxzOgotICAgICAgICBvdXQucHJpbnQoIkRv
dWJsZUluTG9jYWxzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEFyZ3VtZW50c1NvdXJj
ZToKLSAgICAgICAgb3V0LnByaW50KCJBcmd1bWVudHNTb3VyY2UiKTsKLSAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgU291cmNlSXNEZWFkOgogICAgICAgICBvdXQucHJpbnQoIlNvdXJjZUlzRGVh
ZCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFZhbHVlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0MSw2IEBA
IGVudW0gVmFsdWVTb3VyY2VLaW5kIHsKICAgICBWYWx1ZUluSlNTdGFjaywKICAgICBJbnQzMklu
SlNTdGFjaywKICAgICBEb3VibGVJbkpTU3RhY2ssCi0gICAgVmFsdWVJbkxvY2FscywKLSAgICBJ
bnQzMkluTG9jYWxzLAotICAgIEJvb2xlYW5JbkxvY2FscywKLSAgICBEb3VibGVJbkxvY2FscywK
LSAgICBBcmd1bWVudHNTb3VyY2UsCiAgICAgU291cmNlSXNEZWFkLAogICAgIEhhdmVOb2RlCiB9
OwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTMtMDctMTEgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gKE9PUFMh
KS4KKyAgICAgICAgTmVlZCB0aGUgYnVnIFVSTCAoT09QUyEpLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogd3RmL0hhc2hTZXQuaDoKKyAgICAgICAgKEhhc2hTZXQpOgorICAg
ICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6OjphZGQpOgorICAgICAgICAoV1RGOjo9KToKKyAg
ICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6Ojo6SGFzaFRhYmxlKToKKyAg
ICAgICAgKFdURjo6PSk6CisgICAgICAgICogd3RmL0luc2VydGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKFdURik6CisgICAgICAgIChJbnNlcnRpb24pOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246
Okluc2VydGlvbik6CisgICAgICAgIChXVEY6Okluc2VydGlvbjo6aW5kZXgpOgorICAgICAgICAo
V1RGOjpJbnNlcnRpb246OmVsZW1lbnQpOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246Om9wZXJh
dG9yPCk6CisgICAgICAgIChXVEY6OmV4ZWN1dGVJbnNlcnRpb25zKToKKwogMjAxMy0wNy0wMiAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZp
eCAzMi1iaXQgYnVpbGQuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKIAkJMEZEODFBQzUx
NTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0
Qml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMEZE
REJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1
NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBGRERCRkE4MTY2NkRGQTMw
MEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmggKi87IH07CisJCTBGRTUwNTU3MTc4N0E4MDYwMEIzNUY4QyAvKiBJbnNlcnRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUw
NTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLzsgfTsKKwkJMEZFNTA1N0YxNzkw
ODlGRTAwQjM1RjhDIC8qIExpc3REdW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU3RTE3OTA4OUY5MDBCMzVGOEMgLyogTGlzdER1bXAuaCAq
LzsgfTsKIAkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUQxNTY1RjBGOTAw
REI1MTRBIC8qIFJBTVNpemUuY3BwICovOyB9OwogCQkxNDNGNjEyMDE1NjVGMEY5MDBEQjUxNEEg
LyogUkFNU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQzRjYxMUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkxNDY5NDE5MjE2RUFBRjZEMDAyNEUxNDYgLyogUnVu
TG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDY5NDE5MDE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1Miw2ICszNTQsOCBAQAog
CQkwRkQ4MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVh
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdQcmludFN0
cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkE2MTY2NkRGQTMw
MEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkU1MDU1NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc2VydGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU3RTE3OTA4
OUY5MDBCMzVGOEMgLyogTGlzdER1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlzdER1bXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5
dGVTcGluTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlU3BpbkxvY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1T
aXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4NSwxMSArNzg5LDEzIEBACiAJCQkJQThBNDcyQkEx
NTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzJCQjE1MUE4MjVB
MDA0MTIzRkYgLyogSGV4TnVtYmVyLmggKi8sCiAJCQkJQThBNDcyQkMxNTFBODI1QTAwNDEyM0ZG
IC8qIElubGluZUFTTS5oICovLAorCQkJCTBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNl
cnRpb24uaCAqLywKIAkJCQlBOEE0NzJCRTE1MUE4MjVBMDA0MTIzRkYgLyogSW50MTZBcnJheS5o
ICovLAogCQkJCUE4QTQ3MkJGMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQzMkFycmF5LmggKi8sCiAJ
CQkJQThBNDcyQkQxNTFBODI1QTAwNDEyM0ZGIC8qIEludDhBcnJheS5oICovLAogCQkJCUE4QTQ3
MkMwMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmggKi8sCiAJCQkJ
MEY0NkU2REQxNzdDQkE2QTAwRTFGNzU1IC8qIExMVk1IZWFkZXJzLmggKi8sCisJCQkJMEZFNTA1
N0UxNzkwODlGOTAwQjM1RjhDIC8qIExpc3REdW1wLmggKi8sCiAJCQkJQThBNDcyQzExNTFBODI1
QTAwNDEyM0ZGIC8qIExpc3RIYXNoU2V0LmggKi8sCiAJCQkJQThBNDcyQzIxNTFBODI1QTAwNDEy
M0ZGIC8qIExpc3RSZWZQdHIuaCAqLywKIAkJCQlBOEE0NzJDMzE1MUE4MjVBMDA0MTIzRkYgLyog
TG9ja2VyLmggKi8sCkBAIC0xMTgxLDYgKzExODcsNyBAQAogCQkJCUE4QTQ3M0U4MTUxQTgyNUIw
MDQxMjNGRiAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFQTE1MUE4
MjVCMDA0MTIzRkYgLyogTUQ1LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDU0OTdBRDE1ODU3RDAz
MDBCNUJDMzAgLyogTWVkaWFUaW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1NzE3ODdB
ODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjFEMTE1NDE1
RkYxMUJFMDAyNkU5MDggLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0RkQ4NTU0NzE2MTMzRTBFMDBDNUI3MDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uQXJy
YXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlGM0ZCQzcxRTE2MUFGN0JGMDBCQjRC
RDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICov
LApAQCAtMTMwOCw2ICsxMzE1LDcgQEAKIAkJCQk5NzRDRkM4RTE2QTRGMzI3MDA2RDU0MDQgLyog
V2Vha1B0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8q
IFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZG
IC8qIFdURlRocmVhZERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTdGMTc5MDg5RkUw
MEIzNUY4QyAvKiBMaXN0RHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNDQ4ODMxNkZFOUZF
MTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NkU2REUxNzdD
QkE2QTAwRTFGNzU1IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
RGF0YUxvZy5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTggQEAgdm9pZCBkYXRhTG9nKGNvbnN0IFQx
JiB2YWx1ZTEsIGNvbnN0IFQyJgogICAgIGRhdGFGaWxlKCkucHJpbnQodmFsdWUxLCB2YWx1ZTIs
IHZhbHVlMywgdmFsdWU0LCB2YWx1ZTUsIHZhbHVlNiwgdmFsdWU3LCB2YWx1ZTgsIHZhbHVlOSwg
dmFsdWUxMCwgdmFsdWUxMSwgdmFsdWUxMiwgdmFsdWUxMyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBU
NSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5
cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlw
ZW5hbWUgVDE0Pgordm9pZCBkYXRhTG9nKGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJiB2YWx1
ZTIsIGNvbnN0IFQzJiB2YWx1ZTMsIGNvbnN0IFQ0JiB2YWx1ZTQsIGNvbnN0IFQ1JiB2YWx1ZTUs
IGNvbnN0IFQ2JiB2YWx1ZTYsIGNvbnN0IFQ3JiB2YWx1ZTcsIGNvbnN0IFQ4JiB2YWx1ZTgsIGNv
bnN0IFQ5JiB2YWx1ZTksIGNvbnN0IFQxMCYgdmFsdWUxMCwgY29uc3QgVDExJiB2YWx1ZTExLCBj
b25zdCBUMTImIHZhbHVlMTIsIGNvbnN0IFQxMyYgdmFsdWUxMywgY29uc3QgVDE0JiB2YWx1ZTE0
KQoreworICAgIGRhdGFGaWxlKCkucHJpbnQodmFsdWUxLCB2YWx1ZTIsIHZhbHVlMywgdmFsdWU0
LCB2YWx1ZTUsIHZhbHVlNiwgdmFsdWU3LCB2YWx1ZTgsIHZhbHVlOSwgdmFsdWUxMCwgdmFsdWUx
MSwgdmFsdWUxMiwgdmFsdWUxMywgdmFsdWUxNCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQx
LCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlw
ZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1l
IFQxMCwgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUg
VDE0LCB0eXBlbmFtZSBUMTU+Cit2b2lkIGRhdGFMb2coY29uc3QgVDEmIHZhbHVlMSwgY29uc3Qg
VDImIHZhbHVlMiwgY29uc3QgVDMmIHZhbHVlMywgY29uc3QgVDQmIHZhbHVlNCwgY29uc3QgVDUm
IHZhbHVlNSwgY29uc3QgVDYmIHZhbHVlNiwgY29uc3QgVDcmIHZhbHVlNywgY29uc3QgVDgmIHZh
bHVlOCwgY29uc3QgVDkmIHZhbHVlOSwgY29uc3QgVDEwJiB2YWx1ZTEwLCBjb25zdCBUMTEmIHZh
bHVlMTEsIGNvbnN0IFQxMiYgdmFsdWUxMiwgY29uc3QgVDEzJiB2YWx1ZTEzLCBjb25zdCBUMTQm
IHZhbHVlMTQsIGNvbnN0IFQxNSYgdmFsdWUxNSkKK3sKKyAgICBkYXRhRmlsZSgpLnByaW50KHZh
bHVlMSwgdmFsdWUyLCB2YWx1ZTMsIHZhbHVlNCwgdmFsdWU1LCB2YWx1ZTYsIHZhbHVlNywgdmFs
dWU4LCB2YWx1ZTksIHZhbHVlMTAsIHZhbHVlMTEsIHZhbHVlMTIsIHZhbHVlMTMsIHZhbHVlMTQs
IHZhbHVlMTUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpkYXRhTG9n
OwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL1dURi93dGYvSGFz
aFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMiArODYsMTkgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHRl
bXBsYXRlIGFyZ3VtZW50cyBzbyB0aGF0IGNhbGxlcnMKICAgICAgICAgLy8gY2FuIGp1c3QgcGFz
cyB0aGUgdHJhbnNsYXRvciBhbmQgbGV0IHRoZSBjb21waWxlciBkZWR1Y2UgVC4KICAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IEFkZFJlc3VsdCBh
ZGQoY29uc3QgVCYpOworICAgICAgICAKKyAgICAgICAgLy8gQXR0ZW1wdHMgdG8gYWRkIGEgbGlz
dCBvZiB0aGluZ3MgdG8gdGhlIHNldC4gUmV0dXJucyB0cnVlIGlmIGFueSBvZgorICAgICAgICAv
LyB0aGVtIGFyZSBuZXcgdG8gdGhlIHNldC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgc2V0IGlzIHVu
Y2hhbmdlZC4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgorICAgICAg
ICBib29sIGFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpOwogCiAgICAg
ICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYpOwogICAgICAgICB2b2lkIHJlbW92ZShp
dGVyYXRvcik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJik7CisgICAgICAgIAorICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgSGFzaFNldCYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIHZvaWQgZGVsZXRlQWxsVmFsdWVzPD4oY29uc3QgSGFzaFNldCYpOwpAQCAtMTkxLDYg
KzE5OCwxNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yVHlwZT4KKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JU
eXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAh
PSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gYWRkKCppdGVyKS5pc05ld0Vu
dHJ5OworICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogICAgIGlubGluZSB2b2lkIEhhc2hTZXQ8
VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICB7CiAgICAgICAgIGlmIChpdC5tX2lt
cGwgPT0gbV9pbXBsLmVuZCgpKQpAQCAtMjU2LDYgKzI3MywxOCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgICAgIHZlY3RvcltpXSA9ICppdDsKICAgICB9ICAKIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBIYXNoU2V0JiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVy
ICE9IGVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmICghb3RoZXIuY29udGFpbnMoKml0
ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Okhh
c2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL1dU
Ri93dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNzAsNiArMTE3MCw4IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgIHsKICAgICAgICAgLy8gQ29weSB0aGUgaGFzaCB0YWJsZSB0aGUg
ZHVtYiB3YXksIGJ5IGFkZGluZyBlYWNoIGVsZW1lbnQgdG8gdGhlIG5ldyB0YWJsZS4KICAgICAg
ICAgLy8gSXQgbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgdG8gY29weSB0aGUgdGFibGUgc2xvdHMs
IGJ1dCBpdCdzIG5vdCBjbGVhciB0aGF0IGVmZmljaWVuY3kgaXMgbmVlZGVkLgorICAgICAgICAv
LyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRp
YyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQogICAgICAgICBjb25zdF9pdGVyYXRvciBl
bmQgPSBvdGhlci5lbmQoKTsKICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9IG90aGVy
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGFkZCgqaXQpOwpAQCAtMTIw
OSw2ICsxMjExLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBIYXNoVGFibGU8
S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4m
IEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywg
S2V5VHJhaXRzPjo6b3BlcmF0b3I9KGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpCiAgICAgeworICAg
ICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9y
IHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQogICAgICAgICBIYXNoVGFibGUg
dG1wKG90aGVyKTsKICAgICAgICAgc3dhcCh0bXApOwogICAgICAgICByZXR1cm4gKnRoaXM7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9JbnNlcnRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0luc2VydGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbnNlcnRpb25faAorI2RlZmluZSBJ
bnNlcnRpb25faAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIEluc2VydGlvbiB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uKCkgeyB9CisgICAgCisgICAg
SW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorICAgICAgICA6IG1faW5kZXgoaW5k
ZXgpCisgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgVCBlbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgSW5zZXJ0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lu
ZGV4IDwgb3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHNpemVfdCBt
X2luZGV4OworICAgIFQgbV9lbGVtZW50OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0
VmVjdG9yVHlwZSwgdHlwZW5hbWUgSW5zZXJ0aW9uVmVjdG9yVHlwZT4KK3ZvaWQgZXhlY3V0ZUlu
c2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYgdGFyZ2V0LCBJbnNlcnRpb25WZWN0b3JUeXBlJiBp
bnNlcnRpb25zKQoreworICAgIGlmICghaW5zZXJ0aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICB0YXJnZXQuZ3Jvdyh0YXJnZXQuc2l6ZSgpICsgaW5zZXJ0aW9ucy5zaXplKCkpOwor
ICAgIHNpemVfdCBsYXN0SW5kZXggPSB0YXJnZXQuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGlu
ZGV4SW5JbnNlcnRpb25zID0gaW5zZXJ0aW9ucy5zaXplKCk7IGluZGV4SW5JbnNlcnRpb25zLS07
KSB7CisgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0
aW9uc10uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOworICAgICAgICBzaXplX3QgaW5kZXhP
ZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBs
YXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQorICAgICAgICAgICAgdGFyZ2V0W2ldID0gdGFy
Z2V0W2kgLSBpbmRleE9mZnNldF07CisgICAgICAgIHRhcmdldFtmaXJzdEluZGV4XSA9IGluc2Vy
dGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmVsZW1lbnQoKTsKKyAgICAgICAgbGFzdEluZGV4ID0g
Zmlyc3RJbmRleDsKKyAgICB9CisgICAgaW5zZXJ0aW9ucy5yZXNpemUoMCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Okluc2VydGlvbjsKK3VzaW5nIFdURjo6ZXhlY3V0
ZUluc2VydGlvbnM7CisKKyNlbmRpZiAvLyBJbnNlcnRpb25faApJbmRleDogU291cmNlL1dURi93
dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIExpc3REdW1wX2gKKyNkZWZpbmUgTGlzdER1bXBfaAorCisjaW5jbHVk
ZSAiQ29tbWFQcmludGVyLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJT
dHJpbmdQcmludFN0cmVhbS5oIgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NsYXNzIExpc3REdW1wIHsKK3B1YmxpYzoKKyAgICBMaXN0RHVtcChjb25zdCBUJiBs
aXN0LCBjb25zdCBjaGFyKiBjb21tYSkKKyAgICAgICAgOiBtX2xpc3QobGlzdCkKKyAgICAgICAg
LCBtX2NvbW1hKGNvbW1hKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHR5cGVuYW1lIFQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtX2xpc3QuYmVnaW4oKTsgaXRlciAhPSBtX2xpc3QuZW5kKCk7ICsr
aXRlcikKKyAgICAgICAgICAgIG91dC5wcmludChtX2NvbW1hLCAqaXRlcik7CisgICAgfQorCitw
cml2YXRlOgorICAgIGNvbnN0IFQmIG1fbGlzdDsKKyAgICBDb21tYVByaW50ZXIgbV9jb21tYTsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBNYXBEdW1wIHsKK3B1YmxpYzoKKyAg
ICBNYXBEdW1wKGNvbnN0IFQmIG1hcCwgY29uc3QgY2hhciogYXJyb3csIGNvbnN0IGNoYXIqIGNv
bW1hKQorICAgICAgICA6IG1fbWFwKG1hcCkKKyAgICAgICAgLCBtX2Fycm93KGFycm93KQorICAg
ICAgICAsIG1fY29tbWEoY29tbWEpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodHlwZW5hbWUgVDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fbWFwLmJlZ2luKCk7IGl0ZXIgIT0gbV9tYXAuZW5kKCk7
ICsraXRlcikKKyAgICAgICAgICAgIG91dC5wcmludChtX2NvbW1hLCBpdGVyLT5rZXksIG1fYXJy
b3csIGl0ZXItPnZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IFQmIG1f
bWFwOworICAgIGNvbnN0IGNoYXIqIG1fYXJyb3c7CisgICAgQ29tbWFQcmludGVyIG1fY29tbWE7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorTGlzdER1bXA8VD4gbGlzdER1bXAoY29uc3Qg
VCYgbGlzdCwgY29uc3QgY2hhciogY29tbWEgPSAiLCAiKQoreworICAgIHJldHVybiBMaXN0RHVt
cDxUPihsaXN0LCBjb21tYSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENv
bXBhcmF0b3I+CitDU3RyaW5nIHNvcnRlZExpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnN0IENv
bXBhcmF0b3ImIGNvbXBhcmF0b3IsIGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIikKK3sKKyAgICBW
ZWN0b3I8dHlwZW5hbWUgVDo6VmFsdWVUeXBlPiBteUxpc3Q7CisgICAgbXlMaXN0LmFwcGVuZFJh
bmdlKGxpc3QuYmVnaW4oKSwgbGlzdC5lbmQoKSk7CisgICAgc3RkOjpzb3J0KG15TGlzdC5iZWdp
bigpLCBteUxpc3QuZW5kKCksIGNvbXBhcmF0b3IpOworICAgIFN0cmluZ1ByaW50U3RyZWFtIG91
dDsKKyAgICBDb21tYVByaW50ZXIgY29tbWFQcmludGVyKGNvbW1hKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbXlMaXN0LnNpemUoKTsgKytpKQorICAgICAgICBvdXQucHJpbnQoY29t
bWFQcmludGVyLCBteUxpc3RbaV0pOworICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBsZXNzVGhhbihjb25zdCBUJiBhLCBj
b25zdCBUJiBiKQoreworICAgIHJldHVybiBhIDwgYjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK0NTdHJpbmcgc29ydGVkTGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29uc3QgY2hhciogY29t
bWEgPSAiLCAiKQoreworICAgIHJldHVybiBzb3J0ZWRMaXN0RHVtcChsaXN0LCBsZXNzVGhhbjxU
OjpWYWx1ZVR5cGU+LCBjb21tYSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitNYXBEdW1w
PFQ+IG1hcER1bXAoY29uc3QgVCYgbWFwLCBjb25zdCBjaGFyKiBhcnJvdyA9ICI9PiIsIGNvbnN0
IGNoYXIqIGNvbW1hID0gIiwgIikKK3sKKyAgICByZXR1cm4gTWFwRHVtcDxUPihtYXAsIGFycm93
LCBjb21tYSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbXBhcmF0b3I+
CitDU3RyaW5nIHNvcnRlZE1hcER1bXAoY29uc3QgVCYgbWFwLCBjb25zdCBDb21wYXJhdG9yJiBj
b21wYXJhdG9yLCBjb25zdCBjaGFyKiBhcnJvdyA9ICI9PiIsIGNvbnN0IGNoYXIqIGNvbW1hID0g
IiwgIikKK3sKKyAgICBWZWN0b3I8dHlwZW5hbWUgVDo6S2V5VHlwZT4ga2V5czsKKyAgICBmb3Ig
KHR5cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtYXAuYmVnaW4oKTsgaXRlciAhPSBt
YXAuZW5kKCk7ICsraXRlcikKKyAgICAgICAga2V5cy5hcHBlbmQoaXRlci0+a2V5KTsKKyAgICBz
dGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpLCBjb21wYXJhdG9yKTsKKyAgICBTdHJp
bmdQcmludFN0cmVhbSBvdXQ7CisgICAgQ29tbWFQcmludGVyIGNvbW1hUHJpbnRlcihjb21tYSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG91dC5wcmludChjb21tYVByaW50ZXIsIGtleXNbaV0sIGFycm93LCBtYXAuZ2V0KGtleXNbaV0p
KTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwordXNpbmcgV1RGOjpsaXN0RHVtcDsKK3VzaW5nIFdURjo6c29ydGVkTGlzdER1bXA7Cit1c2lu
ZyBXVEY6Om1hcER1bXA7Cit1c2luZyBXVEY6OnNvcnRlZE1hcER1bXA7CisKKyNlbmRpZiAvLyBM
aXN0RHVtcF9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkocmV2aXNpb24gMTUyNTgyKQorKysg
U291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDYgKzIw
Nyw0NSBAQCBwdWJsaWM6CiAgICAgICAgIHByaW50KHZhbHVlMTIpOwogICAgICAgICBwcmludCh2
YWx1ZTEzKTsKICAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1l
IFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwg
dHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLCB0eXBl
bmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQ+CisgICAg
dm9pZCBwcmludChjb25zdCBUMSYgdmFsdWUxLCBjb25zdCBUMiYgdmFsdWUyLCBjb25zdCBUMyYg
dmFsdWUzLCBjb25zdCBUNCYgdmFsdWU0LCBjb25zdCBUNSYgdmFsdWU1LCBjb25zdCBUNiYgdmFs
dWU2LCBjb25zdCBUNyYgdmFsdWU3LCBjb25zdCBUOCYgdmFsdWU4LCBjb25zdCBUOSYgdmFsdWU5
LCBjb25zdCBUMTAmIHZhbHVlMTAsIGNvbnN0IFQxMSYgdmFsdWUxMSwgY29uc3QgVDEyJiB2YWx1
ZTEyLCBjb25zdCBUMTMmIHZhbHVlMTMsIGNvbnN0IFQxNCYgdmFsdWUxNCkKKyAgICB7CisgICAg
ICAgIHByaW50KHZhbHVlMSk7CisgICAgICAgIHByaW50KHZhbHVlMik7CisgICAgICAgIHByaW50
KHZhbHVlMyk7CisgICAgICAgIHByaW50KHZhbHVlNCk7CisgICAgICAgIHByaW50KHZhbHVlNSk7
CisgICAgICAgIHByaW50KHZhbHVlNik7CisgICAgICAgIHByaW50KHZhbHVlNyk7CisgICAgICAg
IHByaW50KHZhbHVlOCk7CisgICAgICAgIHByaW50KHZhbHVlOSk7CisgICAgICAgIHByaW50KHZh
bHVlMTApOworICAgICAgICBwcmludCh2YWx1ZTExKTsKKyAgICAgICAgcHJpbnQodmFsdWUxMik7
CisgICAgICAgIHByaW50KHZhbHVlMTMpOworICAgICAgICBwcmludCh2YWx1ZTE0KTsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBU
MywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5
cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5cGVu
YW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNT4KKyAgICB2
b2lkIHByaW50KGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJiB2YWx1ZTIsIGNvbnN0IFQzJiB2
YWx1ZTMsIGNvbnN0IFQ0JiB2YWx1ZTQsIGNvbnN0IFQ1JiB2YWx1ZTUsIGNvbnN0IFQ2JiB2YWx1
ZTYsIGNvbnN0IFQ3JiB2YWx1ZTcsIGNvbnN0IFQ4JiB2YWx1ZTgsIGNvbnN0IFQ5JiB2YWx1ZTks
IGNvbnN0IFQxMCYgdmFsdWUxMCwgY29uc3QgVDExJiB2YWx1ZTExLCBjb25zdCBUMTImIHZhbHVl
MTIsIGNvbnN0IFQxMyYgdmFsdWUxMywgY29uc3QgVDE0JiB2YWx1ZTE0LCBjb25zdCBUMTUmIHZh
bHVlMTUpCisgICAgeworICAgICAgICBwcmludCh2YWx1ZTEpOworICAgICAgICBwcmludCh2YWx1
ZTIpOworICAgICAgICBwcmludCh2YWx1ZTMpOworICAgICAgICBwcmludCh2YWx1ZTQpOworICAg
ICAgICBwcmludCh2YWx1ZTUpOworICAgICAgICBwcmludCh2YWx1ZTYpOworICAgICAgICBwcmlu
dCh2YWx1ZTcpOworICAgICAgICBwcmludCh2YWx1ZTgpOworICAgICAgICBwcmludCh2YWx1ZTkp
OworICAgICAgICBwcmludCh2YWx1ZTEwKTsKKyAgICAgICAgcHJpbnQodmFsdWUxMSk7CisgICAg
ICAgIHByaW50KHZhbHVlMTIpOworICAgICAgICBwcmludCh2YWx1ZTEzKTsKKyAgICAgICAgcHJp
bnQodmFsdWUxNCk7CisgICAgICAgIHByaW50KHZhbHVlMTUpOworICAgIH0KIH07CiAKIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFy
Kik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206575</attachid>
            <date>2013-07-12 15:41:41 -0700</date>
            <delta_ts>2013-07-12 20:01:53 -0700</delta_ts>
            <desc>it just ran something</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>256237</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NiBA
QAorMjAxMy0wNy0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcg
VVJMIChPT1BTISkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpmaWxsKToK
KyAgICAgICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmNsZWFyKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpzZXRMaXZl
VmFsdWVzKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZW5kQmFz
aWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKiBk
ZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6
Omp1c3RPbmVDaGlsZCk6CisgICAgICAgIChBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKiBkZmcv
REZHQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Js
b2NrOjp+QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6ZW5zdXJl
TG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjppc0luUGhpcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6aXNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FE
YXRhOjpTU0FEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+
U1NBRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKEJhc2lj
QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Om9wZXJhdG9yW10pOgorICAg
ICAgICAoU1NBRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja0luc2VydGlvblNl
dDo6QmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9u
U2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnRCZWZvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0OjpleGVj
dXRlKToKKyAgICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAoQmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAqIGRmZy9E
RkdDb21tb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzS2lsbCk6CisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6OmtpbGxTdGF0dXNGb3JEb2VzS2lsbCk6CisgICAgICAgICog
ZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2U6OmlzQ29udHJhZGlj
dG9yeSk6CisgICAgICAgIChKU0M6OkRGRzo6Q29udHJhZGljdGlvblBydW5pbmdQaGFzZTo6bWFr
ZUNvbnRyYWRpY3RvcnkpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1Db250cmFkaWN0aW9u
UHJ1bmluZyk6CisgICAgICAgICogZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZTo6Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlOjpicmVha0NyaXRpY2FsRWRnZSk6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKToKKyAgICAgICAgKiBkZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
ICogZGZnL0RGR0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6ZmluZFR5cGVDaGVja1Jvb3QpOgorICAg
ICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpjb3VudE5vZGUpOgorICAgICAgICAoRENFUGhhc2Up
OgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpjb3VudEVkZ2UpOgorICAgICAgICAoSlND
OjpERkc6OkRDRVBoYXNlOjplbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKToKKyAg
ICAgICAgKiBkZmcvREZHRWRnZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0VkZ2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpFZGdl
KToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXROb2RlKToKKyAgICAgICAgKEpTQzo6REZH
OjpFZGdlOjpzZXRVc2VLaW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRQcm9vZlN0
YXR1cyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6d2lsbE5vdEhhdmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkRGRzo6RWRnZTo6d2lsbEhhdmVDaGVjayk6CisgICAgICAgIChFZGdlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpFZGdlOjpraWxsU3RhdHVzVW5jaGVja2VkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpFZGdlOjpraWxsU3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRL
aWxsU3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpkb2VzS2lsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6RWRnZTo6ZG9lc05vdEtpbGwpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6
Om1ha2VXb3JkKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hGb3JtYXQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRm
Zy9ERkdGbHVzaEZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChXVEYp
OgorICAgICAgICAqIGRmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZTo6Rmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZW5lc3NBbmFseXNp
c1BoYXNlOjpwcm9jZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVuZXNzQW5hbHlz
aXNQaGFzZTo6c2V0Rm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hMaXZlbmVzc0Fu
YWx5c2lzUGhhc2U6OmZsdXNoRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZv
cm1GbHVzaExpdmVuZXNzQW5hbHlzaXMpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaExpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgIChERkcpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjphZGRGb3JEZXB0aEZpcnN0U29ydCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmRlcHRoRmlyc3RTb3J0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Okluc2VydGlvblNldDo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKExpdmVuZXNzQW5hbHlzaXNQaGFzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnByb2Nlc3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OnBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKToKKyAgICAgICAgKiBkZmcvREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUGhpKToKKyAgICAgICAgKE5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnBoaSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dGFrZW5CbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bm90VGFrZW5CbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyk6CisgICAg
ICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChTU0FDb252ZXJzaW9u
UGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6U1NBQ29udmVy
c2lvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpQ2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2FyZFBoaSk6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpRWRnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpkZWR1cGxpY2F0ZUNoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmROb2Rl
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2Fy
ZE5vZGVFZGdlKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmg6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpmbHVzaEZvcm1hdCk6Cisg
ICAgICAgIChWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93
ZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjcmVhdGVQaGlWYXJpYWJs
ZXMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjaGVja0FyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVVwc2lsb24pOgorICAgICAgICAoTG93ZXJE
RkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUGhp
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUpTQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlV2Vha0pTQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQWRkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoU3ViKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTXVsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoRGl2KToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTW9kKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTWluT3JNYXgpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhBYnMpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhOZWdhdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQml0QW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZUJpdE9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUJpdFhvcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVCaXRSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlQml0TFNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUJpdFVSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
VUludDMyVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlSW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVHZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZUNvbXBhcmVFcUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVDb21wYXJlU3RyaWN0RXFDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzcyk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzc0VxKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVHcmVhdGVyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVHcmVhdGVyRXEpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0ludDMyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Q2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06Omxvd0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpsb3dEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dKU1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc0xpdmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjp1c2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppbml0
aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjplbWl0T1NSRXhpdENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjphZGRFeGl0QXJndW1lbnRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6c2V0SW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpz
ZXRKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c2V0Qm9vbGVh
bik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNldFN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzZXREb3VibGUpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc1ZhbGlkKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJl
ZE5vZGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChMb3dlcmVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjpMb3dlcmVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJlZE5vZGVWYWx1ZTo6b3BlcmF0b3IhKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJlZE5vZGVWYWx1ZTo6YmxvY2spOgorICAgICAgICAqIGZ0bC9GVExWYWx1ZUZyb21CbG9j
ay5oOgorICAgICAgICAoSlNDOjpGVEw6OlZhbHVlRnJvbUJsb2NrOjpWYWx1ZUZyb21CbG9jayk6
CisgICAgICAgIChWYWx1ZUZyb21CbG9jayk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlU291cmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgICog
ZnRsL0ZUTFZhbHVlU291cmNlLmg6CisKIDIwMTMtMDctMTEgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlc3VycmVjdCB0aGUgQ0xvb3AgTExJTlQgb24gdGhlIEZU
TCBicmFuY2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUy
NTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMyArMTcwLDEzIEBACiAJCTBG
NDZFNkI5MTc2Rjg5REIwMEUxRjc1NSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUg
LyogRlRMU3dpdGNoQ2FzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNDZFNkM1MTc2RjhBNUUwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZD
MjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovOyB9OwogCQkwRjQ2RTZD
NjE3NkY4QTYwMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBE
RkdMYXp5SlNWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGNDZFNkVGMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1
QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi87IH07Ci0JCTBGNDZFNkYzMTc3Q0YwRDIwMEUx
Rjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxM
b29wcy5jcHAgKi87IH07Ci0JCTBGNDZFNkY0MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFs
TG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ2RTZEOTE3N0NCOTAwMDBF
MUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZENzE3N0NCOEZDMDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5jcHAgKi87IH07CiAJCTBGNDZFNkUzMTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlz
YXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkU0MTc3Q0Mz
NjYwMEUxRjc1NSAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUxMTc3Q0MzNjYwMEUxRjc1NSAvKiBVRGlz
ODZEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ2RTZFNTE3N0NDMzY2MDBFMUY3NTUgLyogWDg2RGlzYXNzZW1ibGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUy
MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwICovOyB9OworCQkwRjQ2RTZF
RjE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkVFMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdB
bmFseXNpcy5oICovOyB9OworCQkwRjQ2RTZGMzE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJh
bExvb3BzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDZFNkYxMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovOyB9Owor
CQkwRjQ2RTZGNDE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZGMjE3N0NGMEQyMDBF
MUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJ
CTBGNEUxQTBFMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTBDMTcz
QUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLzsgfTsKIAkJMEY0
RTFBMEYxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTBEMTczQUVEREMw
MDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1Myw2ICszNTMsMjEgQEAKIAkJMEZEREJG
QjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4
IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2
QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9Owor
CQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTU4MTc4N0FB
ODgwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTVDMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1NUQxNzg3QjBDRjAw
QjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1NjMxNzhGNUIwNTAwQjM1RjhDIC8qIERG
R0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhDIC8qIERGR0Jhc2ljQmxvY2suY3BwICovOyB9
OworCQkwRkU1MDU3MTE3OEY1QjUzMDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NjQx
NzhGNUI1MzAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEZF
NTA1NzQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTY3MTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdGbHVzaEZvcm1hdC5jcHAgKi87IH07CisJCTBGRTUwNTc1MTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNTA1NjgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1
NzYxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTY5MTc4
RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi87IH07
CisJCTBGRTUwNTc3MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
NTA1NkExNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1
NzgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2QjE3OEY1QjUz
MDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1
NzkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NkMxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTdBMTc4RjVCNTMwMEIzNUY4QyAv
KiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZEMTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1N0IxNzhG
NUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZFMTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1N0MxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2RjE3OEY1QjUzMDBCMzVGOEMgLyogREZH
U1NBQ29udmVyc2lvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1N0QxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NzAxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZl
cnNpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUz
NDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi87IH07CiAJ
CTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzRBMTcyM0NE
QTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE4
NiwxMyArMTIwMSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyogRlRMU3dpdGNo
Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0Y2hDYXNlLmg7
IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3BwOyBwYXRoID0g
ZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcvREZHTGF6eUpT
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUxNzdDRTk1QTAw
RTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29w
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9v
cHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBh
dGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIuY3BwOyBwYXRo
ID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1ibGVyLmg7IHBh
dGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlzYXNzZW1ibGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5o
OyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2RGlzYXNzZW1i
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4NkRpc2Fzc2Vt
Ymxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0Fu
YWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7
IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3BwOyBwYXRoID0g
ZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBkZmcvREZHTmF0
dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkzQUY4MTZEMENB
RDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRFMUEwRDE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzOTksMjEgQEAKIAkJMEZEREJGQjMxNjY2RUVENTAw
QzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBkZmcvREZHQmxv
Y2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUEx
Nzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTUwNTYyMTc4RjVCMDUwMEIzNUY4QyAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Jhc2ljQmxvY2suY3BwOyBwYXRoID0gZGZnL0RG
R0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2NDE3
OEY1QjUzMDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0g
ZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNTA1NjcxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZsdXNoRm9ybWF0LmNwcDsgcGF0aCA9
IGRmZy9ERkdGbHVzaEZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTUwNTY4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbHVzaEZvcm1hdC5oOyBwYXRoID0gZGZnL0RGR0ZsdXNo
Rm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTY5MTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2QTE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1
c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1
MDU2QjE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkMxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkQxNzhGNUI1MzAwQjM1
RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTZFMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU3MDE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29u
dmVyc2lvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NTQUNv
bnZlcnNpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RB
NTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTA5RkQx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0aW9ucy5oOyBwYXRoID0gZnRsL0ZUTEFiYnJldmlh
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NjIsMTAgKzI5OTIsMTMg
QEAKIAkJCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmgg
Ki8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCisJCQkJMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhD
IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLAogCQkJCTBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERG
R0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCiAJCQkJMEZEMjgxMjUxNzc5M0JFMzAwQkJCMEYzIC8q
IERGR0JpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEZEMjgxMjYxNzc5M0JFMzAwQkJCMEYzIC8q
IERGR0JpbmFyeVN3aXRjaC5oICovLAorCQkJCTBGRTUwNTY0MTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhD
IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEY4MzY0QjUxNjRCMEMwRTAwNTMz
MjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oICovLAogCQkJCTg2RUM5REI0MTMyOERGODIwMDJC
MkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yOTg1LDYgKzMwMTgsOCBAQAog
CQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5o
ICovLAogCQkJCTBGQkUwRjZCMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5oICovLAorCQkJCTBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU1QjE3ODdCMENGMDBCMzVG
OEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRF
RjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5
NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEYyRkM3NzAxNkUxMkY2RjAwMzhE
OTc2IC8qIERGR0RDRVBoYXNlLmNwcCAqLywKQEAgLTMwMTEsNiArMzA0NiwxMCBAQAogCQkJCTBG
REIyQ0Q0MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjJCREMx
MjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi8sCiAJCQkJMEYyQkRDMTMx
NTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLywKKwkJCQkwRkU1MDU2NzE3OEY1
QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuY3BwICovLAorCQkJCTBGRTUwNTY4MTc4RjVC
NTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oICovLAorCQkJCTBGRTUwNTY5MTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8sCisJCQkJMEZF
NTA1NkExNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
Ki8sCiAJCQkJODZBRTZDNEIxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCAqLywKIAkJ
CQk4NkVDOURCNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCAqLywKIAkJ
CQk4NkFFNkM0QzEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oICovLApAQCAtMzAyNSw2
ICszMDY0LDggQEAKIAkJCQkwRkRCMkNENjE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxp
emVyLmggKi8sCiAJCQkJMEY0NkU2QzIxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVl
LmNwcCAqLywKIAkJCQkwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUu
aCAqLywKKwkJCQkwRkU1MDU2QjE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNp
c1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU2QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmggKi8sCiAJCQkJMEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0xvbmdMaXZlZFN0YXRlLmNwcCAqLywKIAkJCQkwRkI0QjUxRDE2QjYyNzcyMDAzRjY5NkIgLyog
REZHTG9uZ0xpdmVkU3RhdGUuaCAqLywKIAkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyog
REZHTWluaWZpZWRHcmFwaC5oICovLApAQCAtMzA0MSw2ICszMDgyLDggQEAKIAkJCQkwRkE1ODFC
OTE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCAqLywKIAkJCQk4NkVDOURCRjEzMjhE
RjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJODZFQzlEQzAxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCAqLywKKwkJCQkwRkU1MDU2RDE3OEY1QjUzMDBC
MzVGOEMgLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgKi8sCisJCQkJMEZF
NTA1NkUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aCAqLywKIAkJCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwICov
LAogCQkJCTBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovLAogCQkJ
CTBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCAqLywKQEAgLTMwNzgs
NiArMzEyMSw4IEBACiAJCQkJODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmggKi8sCiAJCQkJODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwICovLAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKKwkJCQkwRkU1MDU2RjE3OEY1QjUzMDBCMzVGOEMgLyog
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU3MDE3OEY1QjUzMDBCMzVG
OEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggKi8sCiAJCQkJMEY2Mzk0NzYxNURDRTM0NzAw
NkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLywKIAkJCQkwRkMwOTc5RjE0
NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3
MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCkBAIC0zMjk4LDYgKzMzNDMsNyBAQAogCQkJCTg2
MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjNDMDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQSUNhc3QuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRTUwNTc5MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVz
c0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NUY0MDg4MTBFN0Q1NjMwMDk0
NzM2MSAvKiBBUElTaGltcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGNjA1MTQwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjU3REU4MEUxRjUxQzUw
MDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzQwNyw2ICszNDUzLDcg
QEAKIAkJCQkwRkVBMEExRDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9y
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0Rv
dWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3RDE3OEY1QjUzMDBC
MzVGOEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQz
QzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAq
LywKQEAgLTM0MjgsNiArMzQ3NSw3IEBACiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8q
IERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0
MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4
MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkU1MDU3NzE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEUxQTEyMTczQUYwN0IwMDdFRTJEMyAv
KiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1
QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZD
OTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNDQ0LDYgKzM0OTIsNyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIw
MDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDcxNTIy
ODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkU1MDU1RDE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8q
IERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2
OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRE
QkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zNTkxLDYgKzM2NDAsOCBAQAogCQkJCTBGNzY2RDM1MTVBRTI1M0IwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRTUwNTc1MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NTkxNzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzJGRkQ2NDEzOTk4NUE4MDBFNTM2NUEg
LyogS2V5d29yZExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3MkEwRUQxQ0U2OTAw
RjFGNjgxIC8qIExhYmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjAwOTdBNjBFQkFCQjU4MDA3
QTcyOTcgLyogTGFiZWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzA4LDYgKzM3NTksNyBA
QAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGREIyQ0RFMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3QjE3OEY1QjUzMDBCMzVGOEMgLyog
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
Q0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyMzVCREIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBI
ZWFkZXJzICovLApAQCAtNDE5NCw2ICs0MjQ2LDcgQEAKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4
ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREIyQ0Q5MTc0
MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRTUwNTc4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3M0Q3QUUxNjVBMTQyRDAwQUNBQjcx
IC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTY5QTA3
OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjhGOTQ0MDE2Njc2MzMwMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTQyMjUsOSArNDI3OCwxMSBAQAogCQkJCTBGQzA5NzZFMTQ2OEFCNTEwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzQxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMjM1QkQ4MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9y
bWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAw
QzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0
NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRTUwNTcxMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
Q0FyZ3VtZW50R2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkM1NTcwMTQ3MzhGMzUw
MDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlE
MTZCNzJBMDgwMDVERjk1QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MzQ2
LDYgKzQ0MDEsNyBAQAogCQkJCTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRS
ZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc4ODAxNDAxNDcxQUQ5MjAwNDFCMDE2IC8qIEpT
RGF0ZU1hdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDYxMDdFQzI3MTAwNURCQzhE
IC8qIEpTRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzYxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDM4Myw2ICs0NDM5LDcgQEAKIAkJCQlC
Q0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5NUFCODM0MjBEQTQzMjI1MDBCQzgzRjMgLyogTGVnYWN5
UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1N0MxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFC
MDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3
NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC00NDA1LDcgKzQ0NjIsOSBAQAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAv
KiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBC
MDJFODYgLyogTWFya1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3
RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTdB
MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNEMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0
aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTVDMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RDI4MTI3MTc3OTNCRTUwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQkYyRkYxNTYwRjA2QTAwOEU5MjIy
IC8qIE5hbWVDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0MTcsNiArNDQ3Niw3
IEBACiAJCQkJNjU1RUIyOUIxMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVzQ29kZWdlbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQ2OURFMjEwN0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTMxMDdFQzdFNzAwNjUwNDQ2IC8q
IE51bWJlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU2MzE3OEY1QjA1MDBC
MzVGOEMgLyogREZHQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFNDEw
N0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg2RjNFRUJFMTY4Q0RFOTMwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTE0NDY5REU1MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RDb25zdHJ1
Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0cyB7CiAgICAgc3RhdGljIFQgZGVmYXVsdFZh
bHVlKCkgeyByZXR1cm4gVCgpOyB9Ci0gICAgc3RhdGljIHZvaWQgZHVtcChjb25zdCBUJiB2YWx1
ZSwgUHJpbnRTdHJlYW0mIG91dCkgeyB2YWx1ZS5kdW1wKG91dCk7IH0KKyAgICBzdGF0aWMgdm9p
ZCBkdW1wKGNvbnN0IFQmIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KSB7IG91dC5wcmludCh2YWx1
ZSk7IH0KIH07CiAKIGVudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQsIExvY2FsT3Bl
cmFuZCB9OwpAQCAtMjA5LDEyICsyMDksMjUgQEAgcHVibGljOgogICAgICAgICBzZXRMb2NhbEZp
cnN0VGltZShvcGVyYW5kLCB2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2xlYXIoKQor
ICAgIHZvaWQgZmlsbChUIHZhbHVlKQogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRzW2ld
ID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0g
dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7Cisg
ICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNs
ZWFyKCkKKyAgICB7CisgICAgICAgIGZpbGwoVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSk7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYW5kcyYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBvdGhlci5udW1i
ZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAgQVNTRVJUKG51bWJlck9mTG9jYWxzKCkgPT0gb3Ro
ZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHMgPT0gb3RoZXIubV9hcmd1bWVudHMgJiYgbV9sb2NhbHMgPT0gb3RoZXIubV9sb2NhbHM7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2
aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTYgQEAgdm9pZCBBYnN0cmFjdFN0
YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJh
Y3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSBiYXNpY0Jsb2NrLT5zc2EtPnZhbHVlc0F0SGVhZC5i
ZWdpbigpOworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3Ig
ZW5kID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQuZW5kKCk7CisgICAgICAgIGZvciAo
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBmb3JOb2RlKGl0ZXItPmtleSkg
PSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5oYXNDbG9iYmVyYWJs
ZVN0YXRlKCkpCisgICAgICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCiAgICAgYmFzaWNCbG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZh
bHNlOwogICAgIGJhc2ljQmxvY2stPmNmYUhhc1Zpc2l0ZWQgPSB0cnVlOwogICAgIG1fYmxvY2sg
PSBiYXNpY0Jsb2NrOwpAQCAtODMsMTMgKzkzLDI4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKEJhc2kKICAgICBtX2N1cnJlbnROb2RlID0gMDsKIH0KIAotdm9pZCBBYnN0
cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKK3N0YXRpYyB2b2lkIHNldExpdmVW
YWx1ZXMoSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4mIHZhbHVlcywgSGFzaFNldDxOb2Rl
Kj4mIGxpdmUpCit7CisgICAgdmFsdWVzLmNsZWFyKCk7CisgICAgCisgICAgSGFzaFNldDxOb2Rl
Kj46Oml0ZXJhdG9yIGl0ZXIgPSBsaXZlLmJlZ2luKCk7CisgICAgSGFzaFNldDxOb2RlKj46Oml0
ZXJhdG9yIGVuZCA9IGxpdmUuZW5kKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CisgICAgICAgIHZhbHVlcy5hZGQoKml0ZXIsIEFic3RyYWN0VmFsdWUoKSk7Cit9CisKK3ZvaWQg
QWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IGdy
YXBoLmJsb2NrKDApOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2NrKDApOwog
ICAgIHJvb3QtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOwogICAgIHJvb3QtPmNmYUhhc1Zpc2l0
ZWQgPSBmYWxzZTsKICAgICByb290LT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCk7ICsraSkgeworICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAg
ICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIE5vZGUqIG5vZGUgPSBy
b290LT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSk7CiAgICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IFNldEFyZ3VtZW50KTsKICAgICAgICAgaWYgKCFub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKQEAgLTExOCwxMiArMTQzLDExIEBAIHZv
aWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICAgICAgICAgIHJvb3Qt
PnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOwogICAgICAgICByb290LT52YWx1ZXNBdFRh
aWwubG9jYWwoaSkuY2xlYXIoKTsKICAgICB9Ci0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAxIDsgYmxvY2tJbmRleCA8IGdyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsK
LSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9ja0luZGV4IDwgbV9ncmFwaC5u
dW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAg
ICAgYmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKICAgICAgICAgYmxvY2stPmNmYUhh
c1Zpc2l0ZWQgPSBmYWxzZTsKICAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFs
c2U7CkBAIC0xMzcsMTIgKzE2MSwxMiBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUo
R3JhcGgmIGdyCiAgICAgICAgIH0KICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9
IGdyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgIGlmIChibG9jay0+
Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBncmFw
aC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgICAgICAgICB2YWx1
ZS5zZXRNb3N0U3BlY2lmaWMoZ3JhcGgsIGdyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ld
KTsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1
ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgdmFsdWUuc2V0TW9zdFNwZWNpZmlj
KG1fZ3JhcGgsIG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0pOworICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChvcGVy
YW5kKS5tZXJnZSh2YWx1ZSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBJbml0aWFsaXppbmcgQmxvY2sgIyV1LCBv
cGVyYW5kIHIlZCwgdG8gIiwgYmxvY2tJbmRleCwgb3BlcmFuZCk7CkBAIC0xNTIsNiArMTc2LDE1
IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICAgICAgfQog
ICAgICAgICBibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7CiAgICAgfQorICAgIGlmICht
X2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7
CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNBdEhlYWQsIGJsb2Nr
LT5zc2EtPmxpdmVBdEhlYWQpOworICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3Nh
LT52YWx1ZXNBdFRhaWwsIGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwpOworICAgICAgICB9CisgICAg
fQogfQogCiBib29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNb2RlIG1lcmdl
TW9kZSkKQEAgLTE3MiwyMCArMjA1LDQxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNC
bG9jayhNZXJnZU0KICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAKICAgICBpZiAobWVy
Z2VNb2RlICE9IERvbnRNZXJnZSB8fCAhQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgc3dpdGNoIChtX2dyYXBo
Lm1fZm9ybSkgeworICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOiB7CisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2lu
ZyBzdGF0ZSBmb3IgYXJndW1lbnQgJXp1LlxuIiwgYXJndW1lbnQpOworICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGFyZ3VtZW50ICV6dS5cbiIsIGFy
Z3VtZW50KTsKICNlbmRpZgotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24g
PSBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMuYXJndW1l
bnQoYXJndW1lbnQpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9j
YWwgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsK
KyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1
ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMuYXJndW1lbnQoYXJndW1l
bnQpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsg
bG9jYWwgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwp
IHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAg
ICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRlIGZvciBsb2NhbCAlenUuXG4iLCBsb2Nh
bCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBzdGF0ZSBmb3Ig
bG9jYWwgJXp1LlxuIiwgbG9jYWwpOwogI2VuZGlmCi0gICAgICAgICAgICBBYnN0cmFjdFZhbHVl
JiBkZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpOwotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxl
cy5sb2NhbChsb2NhbCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKKyAg
ICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1ZXNB
dFRhaWwubG9jYWwobG9jYWwpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0
ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU1NBOiB7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdFRhaWwuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBibG9jay0+dmFsdWVzQXRUYWlsW2ld
Lm1lcmdlKG1fdmFyaWFibGVzW2ldKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSGFzaFNl
dDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBibG9jay0+c3NhLT5saXZlQXRUYWlsLmJlZ2luKCk7
CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gYmxvY2stPnNzYS0+
bGl2ZUF0VGFpbC5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsLmZpbmQobm9kZSktPnZhbHVlLm1l
cmdlKGZvck5vZGUobm9kZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTI5
Miw2ICszNDYsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwog
ICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBHZXRBcmd1bWVudDogeworICAgICAg
ICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IG1fdmFyaWFibGVzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
OworICAgICAgICBBU1NFUlQodmFsdWUuaXNUb3AoKSk7CisgICAgICAgIEZpbHRyYXRpb25SZXN1
bHQgcmVzdWx0ID0KKyAgICAgICAgICAgIHZhbHVlLmZpbHRlcih0eXBlRmlsdGVyRm9yKHVzZUtp
bmRGb3IodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
cmVzdWx0LCByZXN1bHQgPT0gRmlsdHJhdGlvbk9LKTsKKyAgICAgICAgZm9yTm9kZShub2RlKSA9
IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEdl
dExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBAIC0zMjMsMTMgKzM4OSwxMyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCisgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgTW92SGludEFuZENoZWNr
OiB7CiAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuIEEgTW92SGludCBpcyBl
ZmZlY3RpdmVseSBhIHByb21pc2UgdGhhdCB0aGUgU2V0TG9jYWwKICAgICAgICAgLy8gd2FzIGRl
YWQuCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBNb3ZIaW50Ogog
ICAgIGNhc2UgWm9tYmllSGludDogewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICBicmVhazsKQEAgLTE1ODYsNiArMTY1MiwxNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBQaGk6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09
IFNTQSk7CisgICAgICAgIC8vIFRoZSBzdGF0ZSBvZiB0aGlzIG5vZGUgd291bGQgaGF2ZSBhbHJl
YWR5IGJlZW4gZGVjaWRlZC4KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgVXBz
aWxvbjogeworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGZvck5vZGUo
bm9kZS0+cGhpKCkpID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICBjYXNlIEJyZWFrcG9p
bnQ6CkBAIC0xNjc4LDcgKzE3NTUsNyBAQCBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9i
YmVyU3RydWN0CiAgICAgbV9kaWRDbG9iYmVyID0gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwg
QWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKK2Jvb2wgQWJzdHJhY3RTdGF0
ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RW
YWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTE3NjYsMjEgKzE4NDMsNDQgQEAgaW5saW5lIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgYm9v
bCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykK
K2Jvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayog
dG8pCiB7CiAgICAgQVNTRVJUKGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50
cygpID09IHRvLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgQVNT
RVJUKGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpID09IHRvLT52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgCiAgICAgYm9vbCBjaGFuZ2VkID0gZmFs
c2U7CiAgICAgCi0gICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGZyb20t
PnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gdG8tPnZhbHVlc0F0SGVhZC5hcmd1bWVu
dChhcmd1bWVudCk7Ci0gICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9j
a3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCksIHRv
LT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpLCBmcm9tLT52YXJpYWJsZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7Cisg
ICAgY2FzZSBUaHJlYWRlZENQUzogeworICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
YXJndW1lbnQpIHsKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gdG8t
PnZhbHVlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpLCB0by0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3Vt
ZW50KSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9t
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmxvY2FsKGxv
Y2FsKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3Mo
ZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCksIHRvLT52YXJpYWJs
ZXNBdEhlYWQubG9jYWwobG9jYWwpLCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwp
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgZm9yIChzaXpl
X3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2Fs
cygpOyArK2xvY2FsKSB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gdG8t
PnZhbHVlc0F0SGVhZC5sb2NhbChsb2NhbCk7Ci0gICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJp
YWJsZUJldHdlZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFpbC5sb2NhbChs
b2NhbCksIHRvLT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpLCBmcm9tLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwobG9jYWwpKTsKKyAgICAgICAgCisgICAgY2FzZSBTU0E6IHsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGZyb20tPnZhbHVlc0F0VGFpbC5zaXplKCk7IGktLTspCisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHRvLT52YWx1ZXNBdEhlYWRbaV0ubWVyZ2UoZnJvbS0+dmFsdWVzQXRU
YWlsW2ldKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVy
ID0gdG8tPnNzYS0+bGl2ZUF0SGVhZC5iZWdpbigpOworICAgICAgICBIYXNoU2V0PE5vZGUqPjo6
aXRlcmF0b3IgZW5kID0gdG8tPnNzYS0+bGl2ZUF0SGVhZC5lbmQoKTsKKyAgICAgICAgZm9yICg7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSAqaXRlcjsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gdG8tPnNzYS0+dmFsdWVzQXRIZWFkLmZpbmQobm9kZSkt
PnZhbHVlLm1lcmdlKAorICAgICAgICAgICAgICAgIGZyb20tPnNzYS0+dmFsdWVzQXRUYWlsLmZp
bmQobm9kZSktPnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmICghdG8tPmNmYUhhc1Zpc2l0ZWQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2
aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgLy8g
Q2FsbCB0aGlzIGJlZm9yZSBiZWdpbm5pbmcgQ0ZBIHRvIGluaXRpYWxpemUgdGhlIGFic3RyYWN0
IHZhbHVlcyBvZgogICAgIC8vIGFyZ3VtZW50cywgYW5kIHRvIGluZGljYXRlIHdoaWNoIGJsb2Nr
cyBzaG91bGQgYmUgbGlzdGVkIGZvciBDRkEKICAgICAvLyBleGVjdXRpb24uCi0gICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZShHcmFwaCYpOworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogCiAgICAg
Ly8gU3RhcnQgYWJzdHJhY3RseSBleGVjdXRpbmcgdGhlIGdpdmVuIGJhc2ljIGJsb2NrLiBJbml0
aWFsaXplcyB0aGUKICAgICAvLyBub3Rpb24gb2YgYWJzdHJhY3Qgc3RhdGUgdG8gd2hhdCB3ZSBi
ZWxpZXZlIGl0IHRvIGJlIGF0IHRoZSBoZWFkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5
LDYgKzk5LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBFZGdlIGNoaWxkMVVuY2hlY2tlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fd29yZHNbMF07IH0KICAgICAKKyAgICBFZGdlIGp1c3RPbmVDaGlsZCgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoISFjaGlsZDEoKSAmJiAhY2hpbGQyKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOworICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBFZGdlKCk7CisgICAgfQorICAgIAogICAgIHZv
aWQgaW5pdGlhbGl6ZShFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAg
IHsKICAgICAgICAgY2hpbGQoMCkgPSBjaGlsZDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVj
b2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQorICAg
IDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQorICAgICwgaW5kZXgoTm9CbG9jaykKKyAg
ICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQorICAgICwgY2ZhSGFzVmlzaXRlZChmYWxzZSkKKyAgICAs
IGNmYVNob3VsZFJldmlzaXQoZmFsc2UpCisgICAgLCBjZmFGb3VuZENvbnN0YW50cyhmYWxzZSkK
KyAgICAsIGNmYURpZEZpbmlzaCh0cnVlKQorICAgICwgY2ZhQnJhbmNoRGlyZWN0aW9uKEludmFs
aWRCcmFuY2hEaXJlY3Rpb24pCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICwgaXNMaW5rZWQo
ZmFsc2UpCisjZW5kaWYKKyAgICAsIGlzUmVhY2hhYmxlKGZhbHNlKQorICAgICwgdmFyaWFibGVz
QXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQor
eworfQorCitCYXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygpIHsgfQorCit2b2lkIEJhc2ljQmxvY2s6
OmVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCit7CisgICAgdmFyaWFibGVzQXRI
ZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5l
d051bUxvY2Fscyk7CisgICAgdmFsdWVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMp
OworfQorCitib29sIEJhc2ljQmxvY2s6OmlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0Cit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChwaGlzW2ldID09IG5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEJhc2ljQmxvY2s6OmlzSW5CbG9jayhOb2RlKiBteU5v
ZGUpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Ob2RlcygpOyArK2kp
IHsKKyAgICAgICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZW1v
dmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNl
c3NvcnNbaV0gIT0gYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcHJlZGVj
ZXNzb3JzW2ldID0gcHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgcHJlZGVjZXNzb3JzLnJl
bW92ZUxhc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBwcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNb
aV0gIT0gZnJvbSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwcmVkZWNlc3NvcnNb
aV0gPSB0bzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoIiMiLCBpbmRleCk7Cit9CisKK0Jhc2ljQmxvY2s6OlNT
QURhdGE6OlNTQURhdGEoQmFzaWNCbG9jayogYmxvY2spCisgICAgOiBmbHVzaEZvcm1hdEF0SGVh
ZChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBmbHVzaEZvcm1h
dEF0VGFpbChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBhdmFp
bGFiaWxpdHlBdEhlYWQoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQorICAg
ICwgYXZhaWxhYmlsaXR5QXRUYWlsKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZCkKK3sKK30KKworQmFzaWNCbG9jazo6U1NBRGF0YTo6flNTQURhdGEoKSB7IH0KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNTI1
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRl
ICJERkdWYXJpYWRpY0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDQsNDIgKzQ2LDE2IEBA
IGNsYXNzIEluc2VydGlvblNldDsKIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVk
ZWNlc3Nvckxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2Nr
PiB7Ci0gICAgQmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1B
cmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscykKLSAgICAgICAgOiBieXRlY29kZUJlZ2luKGJ5
dGVjb2RlQmVnaW4pCi0gICAgICAgICwgaW5kZXgoTm9CbG9jaykKLSAgICAgICAgLCBpc09TUlRh
cmdldChmYWxzZSkKLSAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQotICAgICAgICAsIGNm
YVNob3VsZFJldmlzaXQoZmFsc2UpCi0gICAgICAgICwgY2ZhRm91bmRDb25zdGFudHMoZmFsc2Up
Ci0gICAgICAgICwgY2ZhRGlkRmluaXNoKHRydWUpCi0gICAgICAgICwgY2ZhQnJhbmNoRGlyZWN0
aW9uKEludmFsaWRCcmFuY2hEaXJlY3Rpb24pCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAg
ICAsIGlzTGlua2VkKGZhbHNlKQotI2VuZGlmCi0gICAgICAgICwgaXNSZWFjaGFibGUoZmFsc2Up
Ci0gICAgICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAg
ICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAgICAg
LCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgICAgICwgdmFsdWVz
QXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgIHsKLSAgICB9CisgICAgQmFzaWNC
bG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2ln
bmVkIG51bUxvY2Fscyk7CisgICAgfkJhc2ljQmxvY2soKTsKICAgICAKLSAgICB+QmFzaWNCbG9j
aygpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBu
ZXdOdW1Mb2NhbHMpCi0gICAgewotICAgICAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJlTG9jYWxz
KG5ld051bUxvY2Fscyk7Ci0gICAgICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3
TnVtTG9jYWxzKTsKLSAgICAgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2Nh
bHMpOwotICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0g
ICAgfQorICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2Fscyk7CiAgICAg
CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQogICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KICAgICBOb2RlKiYgYXQo
c2l6ZV90IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAgICBOb2RlKiBhdChzaXplX3QgaSkg
Y29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5vZGUqJiBvcGVyYXRvcltdKHNpemVf
dCBpKSB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNv
bnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIGF0
KHNpemUoKSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpIHsgbV9ub2Rlcy5y
ZXNpemUoc2l6ZSk7IH0KQEAgLTk2LDQ0ICs3MiwzNCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJl
ZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgfQogICAgIGJvb2wgaXNQaGlJbmRleChzaXplX3QgaSkg
Y29uc3QgeyByZXR1cm4gaSA8IHBoaXMuc2l6ZSgpOyB9CiAgICAgCi0gICAgYm9vbCBpc0luUGhp
cyhOb2RlKiBub2RlKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwaGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAocGhpc1tpXSA9PSBub2RlKQot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0luQmxvY2soTm9kZSogbXlOb2RlKSBjb25z
dAotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Ob2RlcygpOyArK2kp
IHsKLSAgICAgICAgICAgIGlmIChub2RlKGkpID09IG15Tm9kZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAg
IGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3Q7CisgICAgYm9vbCBpc0luQmxvY2soTm9k
ZSogbXlOb2RlKSBjb25zdDsKICAgICAKICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgeyBy
ZXR1cm4gbGFzdCgpLT5udW1TdWNjZXNzb3JzKCk7IH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNp
Z25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiBsYXN0KCktPnN1Y2Nlc3NvcihpbmRl
eCk7CiAgICAgfQotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckZvckNvbmRpdGlvbihib29sIGNv
bmRpdGlvbikKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJvb2wgY29u
ZGl0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhc3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGNvbmRpdGlvbik7CiAgICAgfQorICAgIAorICAgIHZvaWQgcmVtb3ZlUHJlZGVjZXNzb3Io
QmFzaWNCbG9jayogYmxvY2spOworICAgIHZvaWQgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxv
Y2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKIAogI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9O
T0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29t
bWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKICAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1z
IHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdyYXBoJiwgU3BlY3VsYXRlZFR5cGUgdmFs
dWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZV
TkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BUFBFTkRf
Tk9ERQogICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgIHsK
LSAgICAgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOwotICAgIH0KKyNkZWZpbmUgREZHX0RFRklO
RV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1
ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQcmUg
dHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9uVGVybWluYWwoR3JhcGgmLCBT
cGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKKyAgICBERkdfVkFS
SUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBE
RkdfREVGSU5FX0FQUEVORF9OT0RFCisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OwogICAgIAogICAgIC8vIFRoaXMgdmFsdWUgaXMgdXNlZCBpbnRlcm5hbGx5IGZv
ciBibG9jayBsaW5raW5nIGFuZCBPU1IgZW50cnkuIEl0IGlzIG1vc3RseSBtZWFuaW5nbGVzcwog
ICAgIC8vIGZvciBvdGhlciBwdXJwb3NlcyBkdWUgdG8gaW5saW5pbmcuCkBAIC0xNjAsNiArMTI2
LDIxIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAKICAg
ICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CiAgICAgT3BlcmFuZHM8QWJz
dHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworICAgIAorICAgIHN0cnVjdCBTU0FEYXRhIHsKKyAg
ICAgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGZsdXNoRm9ybWF0QXRIZWFkOworICAgICAgICBP
cGVyYW5kczxGbHVzaEZvcm1hdD4gZmx1c2hGb3JtYXRBdFRhaWw7CisgICAgICAgIE9wZXJhbmRz
PE5vZGUqPiBhdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPE5vZGUqPiBhdmFp
bGFiaWxpdHlBdFRhaWw7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdEhlYWQ7CisgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFi
c3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJh
Y3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworICAgICAgICAKKyAgICAgICAgU1NBRGF0YShCYXNpY0Js
b2NrKik7CisgICAgICAgIH5TU0FEYXRhKCk7CisgICAgfTsKKyAgICBPd25QdHI8U1NBRGF0YT4g
c3NhOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShy
ZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDE3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04o
REZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAK
KyNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0
LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBc
CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJh
c2ljQmxvY2s6OmFwcGVuZE5vblRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUg
dHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgeyBcCisgICAgICAgIE5v
ZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJn
cyk7IFwKKyAgICAgICAgYXBwZW5kKGxhc3QoKSk7IFwKKyAgICAgICAgYXQoc2l6ZSgpIC0gMikg
PSByZXN1bHQ7IFwKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKyAgICBERkdfVkFS
SUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBE
RkdfREVGSU5FX0FQUEVORF9OT0RFCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRp
b25TZXQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChHcmFwaCYg
Z3JhcGgpCisgICAgOiBtX2dyYXBoKGdyYXBoKQoreworfQorCitCbG9ja0luc2VydGlvblNldDo6
fkJsb2NrSW5zZXJ0aW9uU2V0KCkgeyB9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2Vy
dChjb25zdCBCbG9ja0luc2VydGlvbiYgaW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5h
cHBlbmQoaW5zZXJ0aW9uKTsKK30KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNp
emVfdCBpbmRleCwgUGFzc1JlZlB0cjxCYXNpY0Jsb2NrPiBibG9jaykKK3sKKyAgICBpbnNlcnQo
QmxvY2tJbnNlcnRpb24oaW5kZXgsIGJsb2NrKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5z
ZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4KQoreworICAgIFJlZlB0cjxCYXNpY0Jsb2Nr
PiBibG9jayA9IGFkb3B0UmVmKG5ldyBCYXNpY0Jsb2NrKAorICAgICAgICBVSU5UX01BWCwKKyAg
ICAgICAgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCksCisgICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpKSk7CisgICAgYmxvY2stPmlzUmVhY2hhYmxlID0gdHJ1ZTsKKyAgICBpbnNlcnQoaW5k
ZXgsIGJsb2NrKTsKKyAgICByZXR1cm4gYmxvY2suZ2V0KCk7Cit9CisKK0Jhc2ljQmxvY2sqIEJs
b2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlKQoreworICAg
IHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCk7Cit9CisKK2Jvb2wgQmxvY2tJbnNlcnRpb25T
ZXQ6OmV4ZWN1dGUoKQoreworICAgIGlmIChtX2luc2VydGlvbnMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBn
aXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVkIHRvCisgICAgLy8gc29ydCB0aGVt
IGJlZm9yZSBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuCisgICAgc3RkOjpzb3J0KG1f
aW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworCisgICAgZXhlY3V0ZUlu
c2VydGlvbnMobV9ncmFwaC5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKKyAgICAKKyAgICAvLyBQ
cnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0
IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5n
LgorICAgIHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIHNvdXJj
ZUluZGV4ID0gMDsgc291cmNlSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTspIHsKKyAg
ICAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tzb3VyY2VJ
bmRleCsrXTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEluZGV4KytdID0gYmxvY2s7CisgICAgfQorICAg
IG1fZ3JhcGgubV9ibG9ja3MucmVzaXplKHRhcmdldEluZGV4KTsKKyAgICAKKyAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAg
IG1fZ3JhcGgubV9ibG9ja3NbaV0tPmluZGV4ID0gaTsKKyAgICAKKyAgICAvLyBBbmQgZmluYWxs
eSwgaW52YWxpZGF0ZSBhbGwgYW5hbHlzZXMgdGhhdCByZWx5IG9uIHRoZSBDRkcuCisgICAgbV9n
cmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2Vy
dGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja0luc2VydGlv
blNldF9oCisjZGVmaW5lIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBXVEY6Okluc2VydGlv
bjxSZWZQdHI8QmFzaWNCbG9jaz4gPiBCbG9ja0luc2VydGlvbjsKKworY2xhc3MgQmxvY2tJbnNl
cnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0KEdyYXBoJiBncmFwaCk7
CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgdm9pZCBpbnNlcnQoY29uc3Qg
QmxvY2tJbnNlcnRpb24mIGluc2VydGlvbik7CisgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4
LCBQYXNzUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrKTsKKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQo
c2l6ZV90IGluZGV4KTsKKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayog
YmVmb3JlKTsKKyAgICAKKyAgICBib29sIGV4ZWN1dGUoKTsKKworcHJpdmF0ZToKKyAgICBHcmFw
aCYgbV9ncmFwaDsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIEFT
U0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyB8fCBtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpOwogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gR2xvYmFs
bHlVbmlmaWVkKTsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV2
ZXJ5dGhpbmdJc0xpdmUpOwogICAgICAgICAKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAg
ICAgICAvLyBhZnRlciBhbGwgcHJlZGVjZXNzb3JzIGhhdmUgYmVlbiB2aXNpdGVkLiBPbmx5IGxv
b3BzIHdpbGwgY2F1c2UgdGhpcyBhbmFseXNpcyB0bwogICAgICAgICAvLyByZXZpc2l0IGJsb2Nr
cywgYW5kIHRoZSBhbW91bnQgb2YgcmV2aXNpdGluZyBpcyBwcm9wb3J0aW9uYWwgdG8gbG9vcCBk
ZXB0aC4KICAgICAgICAgCi0gICAgICAgIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUobV9ncmFw
aCk7CisgICAgICAgIG1fc3RhdGUuaW5pdGlhbGl6ZSgpOwogICAgICAgICAKICAgICAgICAgZG8g
ewogICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MSwxNSArMzYxLDkgQEAgcHJp
dmF0ZToKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAg
IGRhdGFMb2coCiAgICAgICAgICAgICAiRml4aW5nIHByZWRlY2Vzc29ycyBhbmQgcGhpcyBkdWUg
dG8gamV0dGlzb24gb2YgQmxvY2sgIiwgKmpldHRpc29uZWRCbG9jaywKLSAgICAgICAgICAgICIg
ZnJvbSBCbG9jayAiLCAqYmxvY2ssICIuXG4iLAorICAgICAgICAgICAgIiBmcm9tIEJsb2NrICIs
ICpibG9jaywgIi5cbiIpOwogI2VuZGlmCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKGpldHRpc29uZWRCbG9jay0+cHJlZGVjZXNzb3JzW2ldICE9IGJsb2NrKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNl
c3NvcnNbaV0gPSBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy5sYXN0KCk7Ci0gICAgICAg
ICAgICBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBqZXR0aXNvbmVkQmxvY2stPnJlbW92ZVBy
ZWRlY2Vzc29yKGJsb2NrKTsKICAgICB9CiAKICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE+IG5v
QmxvY2tzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRp
bmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzI3LDEyICszMjcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIFNldEFyZ3VtZW50
IG1heSBvbmx5IGFwcGVhciBpbiB0aGUgcm9vdCBibG9jay4KICAgICAgICAgICAgIC8vCiAgICAg
ICAgICAgICAvLyBUYWlsIHZhcmlhYmxlOiB0aGUgbGFzdCB0aGluZyB0aGF0IGhhcHBlbmVkIHRv
IHRoZSB2YXJpYWJsZSBpbiB0aGUgYmxvY2suCi0gICAgICAgICAgICAvLyBJdCBtYXkgYmUgYSBG
bHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwgU2V0TG9jYWwsIG9yIFNldEFyZ3VtZW50Lgor
ICAgICAgICAgICAgLy8gSXQgbWF5IGJlIGEgRmx1c2gsIFBoYW50b21Mb2NhbCwgR2V0TG9jYWws
IFNldExvY2FsLCBTZXRBcmd1bWVudCwgb3IgUGhpLgogICAgICAgICAgICAgLy8gU2V0QXJndW1l
bnQgbWF5IG9ubHkgYXBwZWFyIGluIHRoZSByb290IGJsb2NrLiBOb3RlIHRoYXQgaWYgdGhlcmUg
ZXZlcgogICAgICAgICAgICAgLy8gd2FzIGEgR2V0TG9jYWwgdG8gdGhlIHZhcmlhYmxlLCBhbmQg
aXQgd2FzIGZvbGxvd2VkIGJ5IFBoYW50b21Mb2NhbHMgYW5kCiAgICAgICAgICAgICAvLyBGbHVz
aGVzIGJ1dCBub3QgU2V0TG9jYWxzLCB0aGVuIHRoZSB0YWlsIHZhcmlhYmxlIHdpbGwgYmUgdGhl
IEdldExvY2FsLgogICAgICAgICAgICAgLy8gVGhpcyByZWZsZWN0cyB0aGUgZmFjdCB0aGF0IHlv
dSBvbmx5IGNhcmUgdGhhdCB0aGUgdGFpbCB2YXJpYWJsZSBpcyBhCi0gICAgICAgICAgICAvLyBG
bHVzaCBvciBQaGFudG9tTG9jYWwgaWYgbm90aGluZyBlbHNlIGludGVyZXN0aW5nIGhhcHBlbmVk
LgorICAgICAgICAgICAgLy8gRmx1c2ggb3IgUGhhbnRvbUxvY2FsIGlmIG5vdGhpbmcgZWxzZSBp
bnRlcmVzdGluZyBoYXBwZW5lZC4gTGlrZXdpc2UsIGlmCisgICAgICAgICAgICAvLyB0aGVyZSBl
dmVyIHdhcyBhIFNldExvY2FsIGFuZCBpdCB3YXMgZm9sbG93ZWQgYnkgRmx1c2hlcywgdGhlbiB0
aGUgdGFpbAorICAgICAgICAgICAgLy8gdmFyaWFibGUgd2lsbCBiZSBhIFNldExvY2FsIGFuZCBu
b3QgdGhvc2Ugc3Vic2VxdWVudCBGbHVzaGVzLgogICAgICAgICAgICAgLy8KICAgICAgICAgICAg
IC8vIENoaWxkIG9mIEdldExvY2FsOiB0aGUgb3BlcmF0aW9uIHRoYXQgdGhlIEdldExvY2FsIGtl
ZXBzIGFsaXZlLiBGb3IKICAgICAgICAgICAgIC8vIHVuY2FwdHVyZWQgbG9jYWxzLCBpdCBtYXkg
YmUgYSBQaGkgZnJvbSB0aGUgY3VycmVudCBibG9jay4gRm9yIGFyZ3VtZW50cywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDgsMTcgKzQ4LDE1IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBP
cHQKICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2FzZSBCZWZvcmVGaXhwb2ludDoKICAgICAg
ICAgb3V0LnByaW50KCJCZWZvcmVGaXhwb2ludCIpOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgRml4cG9pbnROb3RDb252ZXJnZWQ6CiAgICAgICAgIG91dC5wcmlu
dCgiRml4cG9pbnROb3RDb252ZXJnZWQiKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEZpeHBvaW50Q29udmVyZ2VkOgogICAgICAgICBvdXQucHJpbnQoIkZpeHBv
aW50Q29udmVyZ2VkIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBHcmFwaEZvcm0gZm9ybSkKQEAgLTY2LDE0
ICs2NCwxNSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgR3JhCiAgICAg
c3dpdGNoIChmb3JtKSB7CiAgICAgY2FzZSBMb2FkU3RvcmU6CiAgICAgICAgIG91dC5wcmludCgi
TG9hZFN0b3JlIik7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBU
aHJlYWRlZENQUzoKICAgICAgICAgb3V0LnByaW50KCJUaHJlYWRlZENQUyIpOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1NBOgorICAgICAg
ICBvdXQucHJpbnQoIlNTQSIpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBVbmlmaWNhdGlvblN0YXRlIHN0YXRlKQpAQCAtODEsMTQgKzgwLDEyIEBAIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVbmkKICAgICBzd2l0Y2ggKHN0YXRlKSB7
CiAgICAgY2FzZSBMb2NhbGx5VW5pZmllZDoKICAgICAgICAgb3V0LnByaW50KCJMb2NhbGx5VW5p
ZmllZCIpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgR2xvYmFs
bHlVbmlmaWVkOgogICAgICAgICBvdXQucHJpbnQoIkdsb2JhbGx5VW5pZmllZCIpOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgUmVmQ291bnRTdGF0ZSBzdGF0ZSkKQEAgLTk2LDE0ICs5MywxMiBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUmVmCiAgICAgc3dpdGNoIChzdGF0ZSkgewog
ICAgIGNhc2UgRXZlcnl0aGluZ0lzTGl2ZToKICAgICAgICAgb3V0LnByaW50KCJFdmVyeXRoaW5n
SXNMaXZlIik7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBFeGFj
dFJlZkNvdW50OgogICAgICAgICBvdXQucHJpbnQoIkV4YWN0UmVmQ291bnQiKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIFByb29mU3RhdHVzIHN0YXR1cykKQEAgLTExMSwxNCArMTA2LDEyIEBAIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm8KICAgICBzd2l0Y2ggKHN0YXR1cykgewog
ICAgIGNhc2UgSXNQcm92ZWQ6CiAgICAgICAgIG91dC5wcmludCgiSXNQcm92ZWQiKTsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE5lZWRzQ2hlY2s6CiAgICAgICAg
IG91dC5wcmludCgiTmVlZHNDaGVjayIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiwxMCBAQCBlbnVtIEdyYXBo
Rm9ybSB7CiAgICAgLy8KICAgICAvLyBUaHJlYWRlZENQUyBmb3JtIGlzIHN1aXRhYmxlIGZvciBk
YXRhIGZsb3cgYW5hbHlzaXMgKENGQSwgcHJlZGljdGlvbgogICAgIC8vIHByb3BhZ2F0aW9uKSwg
cmVnaXN0ZXIgYWxsb2NhdGlvbiwgYW5kIGNvZGUgZ2VuZXJhdGlvbi4KLSAgICBUaHJlYWRlZENQ
UworICAgIFRocmVhZGVkQ1BTLAorICAgIAorICAgIC8vIFNTQSBmb3JtLiBTZWUgREZHU1NBQ29u
dmVyc2lvblBoYXNlLmggZm9yIGEgZGVzY3JpcHRpb24uCisgICAgU1NBCiB9OwogCiAvLyBEZXNj
cmliZXMgdGhlIHN0YXRlIG9mIHRoZSBVbmlvbkZpbmQgc3RydWN0dXJlIG9mIFZhcmlhYmxlQWNj
ZXNzRGF0YSdzLgpAQCAtMjUwLDYgKzI1MywxOSBAQCBpbmxpbmUgUHJvb2ZTdGF0dXMgcHJvb2ZT
dGF0dXNGb3JJc1Byb3ZlCiAgICAgcmV0dXJuIGlzUHJvdmVkID8gSXNQcm92ZWQgOiBOZWVkc0No
ZWNrOwogfQogCitlbnVtIEtpbGxTdGF0dXMgeyBEb2VzTm90S2lsbCwgRG9lc0tpbGwgfTsKKwor
aW5saW5lIGJvb2wgZG9lc0tpbGwoS2lsbFN0YXR1cyBraWxsU3RhdHVzKQoreworICAgIEFTU0VS
VChraWxsU3RhdHVzID09IERvZXNOb3RLaWxsIHx8IGtpbGxTdGF0dXMgPT0gRG9lc0tpbGwpOwor
ICAgIHJldHVybiBraWxsU3RhdHVzID09IERvZXNLaWxsOworfQorCitpbmxpbmUgS2lsbFN0YXR1
cyBraWxsU3RhdHVzRm9yRG9lc0tpbGwoYm9vbCBkb2VzS2lsbCkKK3sKKyAgICByZXR1cm4gZG9l
c0tpbGwgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPgogYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyAr
MzcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IEFTU0VSVCghbm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAg
IEFTU0VSVCghbm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1ZSk7
CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApAQCAtMzg5LDcgKzM4OSw3
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBmb3IgKDsgaW5kZXhJbkJsb2NrIDwgYmxvY2st
PnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGlmICghbm9kZS0+aGFzTG9jYWwoKSkK
KyAgICAgICAgICAgIGlmICghbm9kZS0+aGFzTG9jYWwobV9ncmFwaCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSAhPSBvcGVyYW5kKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNp
bmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAg
IENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNl
KGdyYXBoLCAiY3JpdGljYWwgZWRnZSBicmVha2luZyIpCisgICAgICAgICwgbV9pbnNlcnRpb25T
ZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IEFuIGVkZ2UgQS0+QiBpcyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0aXBsZSBzdWNjZXNzb3IgYW5k
IEIgaGFzIG11bHRpcGxlCisgICAgICAgICAgICAvLyBwcmVkZWNlc3NvcnMuIFRodXMgd2UgZmFp
bCBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIG11bHRpcGxlIHN1Y2Nlc3NvcnMuCisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChibG9jay0+bnVtU3VjY2Vzc29ycygpIDw9IDEpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiogc3VjY2Vzc29yID0gJmJsb2NrLT5zdWNjZXNzb3IoaSk7CisgICAgICAgICAg
ICAgICAgaWYgKCgqc3VjY2Vzc29yKS0+cHJlZGVjZXNzb3JzLnNpemUoKSA8PSAxKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBicmVha0NyaXRpY2FsRWRnZShibG9jaywgc3VjY2Vzc29yKTsgCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5leGVjdXRl
KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgYnJlYWtDcml0aWNhbEVkZ2UoQmFzaWNC
bG9jayogcHJlZGVjZXNzb3IsIEJhc2ljQmxvY2sqKiBzdWNjZXNzb3IpCisgICAgeworICAgICAg
ICBtX2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBwYWQg
PSBtX2luc2VydGlvblNldC5pbnNlcnRCZWZvcmUoKnN1Y2Nlc3Nvcik7CisgICAgICAgIHBhZC0+
YXBwZW5kTm9kZSgKKyAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCAoKnN1Y2Nl
c3NvciktPmF0KDApLT5jb2RlT3JpZ2luLCBPcEluZm8oKnN1Y2Nlc3NvcikpOworICAgICAgICBw
YWQtPnByZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgICAgICAoKnN1Y2Nlc3Nv
ciktPnJlcGxhY2VQcmVkZWNlc3NvcihwcmVkZWNlc3NvciwgcGFkKTsKKyAgICAgICAgCisgICAg
ICAgICpzdWNjZXNzb3IgPSBwYWQ7CisgICAgfQorICAgIAorICAgIEJsb2NrSW5zZXJ0aW9uU2V0
IG1faW5zZXJ0aW9uU2V0OworfTsKKworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmco
R3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcg
Q3JpdGljYWwgRWRnZSBCcmVha2luZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFz
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNh
bEVkZ2VCcmVha2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Ny
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorI2RlZmluZSBERkdDcml0aWNhbEVkZ2VCcmVha2lu
Z1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisK
Ky8vIEluc2VydHMgZHVtbXkgYmFzaWMgYmxvY2tzIHRvIGJyZWFrIGNyaXRpY2FsIGVkZ2VzLiBB
biBlZGdlIEEtPkIgaXMKKy8vIGNyaXRpY2FsIGlmIEEgaGFzIG11bHRpcGxlIHN1Y2Nlc3NvcnMg
YW5kIEIgaGFzIG11bHRpcGxlIHByZWRlc3NvcnMuCisKK2Jvb2wgcGVyZm9ybUNyaXRpY2FsRWRn
ZUJyZWFraW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQ
aGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRo
cmVhZGVkQ1BTIHx8IG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAogICAgICAgICAv
LyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9j
a3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBAIC03NSwxMCArNzcsMzEgQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICB3aGlsZSAoIW1fd29ya2xpc3QuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgICAg
ICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNz
IGl0J3MgcmVmJ2VkLgotICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFw
aCwgbm9kZSwgY291bnRFZGdlKTsKKyAgICAgICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0KCk7
CisgICAgICAgICAgICAgICAgbV93b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9u
IHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCisgICAgICAgICAgICAgICAgREZHX05P
REVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291bnRFZGdlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkg
eworICAgICAgICAgICAgICAgIC8vIEZpbmQgUGhpLT5VcHNpbG9uIGVkZ2VzLCB3aGljaCBhcmUg
cmVwcmVzZW50ZWQgYXMgbWV0YS1kYXRhIGluIHRoZQorICAgICAgICAgICAgICAgIC8vIFVwc2ls
b24uCisgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7
IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnBoaSgpLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50Tm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9j
a3MoKTsgKytibG9ja0luZGV4KSB7CkBAIC05NCw4ICsxMTcsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS5pc1Byb3ZlZCgpIHx8IG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6IHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKChub2RlLT5vcCgpID09IFNldExvY2FsKSA9PSAobV9ncmFwaC5t
X2Zvcm0gPT0gVGhyZWFkZWRDUFMpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLndpbGxOb3RIYXZlQ2hlY2soKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgVUludDMyVG9OdW1iZXIgaXMgZGVhZCBidXQg
aXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZCBpc24ndDsgaWYgc28gdGhlbiB3
ZSBzaG91bGQgTW92SGludCB0aGUgY2hpbGQuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpCkBAIC0xMTcsOCArMTQyLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRo
cmVhZGVkQ1BTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZWF2ZSB0aGVtIGFzIG5v
dCBzaG91bGRHZW5lcmF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgZGVm
YXVsdDogewpAQCAtMTI2LDcgKzE1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4
IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgubV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWVkZ2UgfHwgZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2Up
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlIHx8IGVkZ2Uud2lsbE5vdEhh
dmVDaGVjaygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIGVkZ2UpOwpAQCAt
MTU4LDIxICsxODUsMjUgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZl
IGFuICJ1bnByb3ZlZCIgdW50eXBlZCB1c2UgZm9yIGNvZGUgdGhhdCBpcyB1bnJlYWNoYWJsZS4g
VGhlIENGQQogICAgICAgICAvLyB3aWxsIGp1c3Qgbm90IGhhdmUgZ290dGVuIGFyb3VuZCB0byBp
dC4KLSAgICAgICAgaWYgKGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5
cGVkVXNlKQorICAgICAgICBpZiAoZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGlmICghZWRnZS0+cG9zdGZpeFJlZigpKQogICAgICAgICAgICAg
bV93b3JrbGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNv
dW50Tm9kZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPnBvc3RmaXhSZWYo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV93b3JrbGlzdC5hcHBlbmQobm9kZSk7
CisgICAgfQorICAgIAogICAgIHZvaWQgY291bnRFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCiAgICAg
ewogICAgICAgICAvLyBEb24ndCBjb3VudCBlZGdlcyB0aGF0IGFyZSBhbHJlYWR5IGNvdW50ZWQg
Zm9yIHRoZWlyIHR5cGUgY2hlY2tzLgotICAgICAgICBpZiAoIShlZGdlLmlzUHJvdmVkKCkgfHwg
ZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAotICAgICAgICBpZiAoZWRnZS0+cG9zdGZpeFJlZigpKQorICAgICAgICBpZiAoZWRnZS53
aWxsSGF2ZUNoZWNrKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fd29ya2xpc3Qu
YXBwZW5kKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgY291bnROb2RlKGVkZ2Uubm9kZSgpKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKE5v
ZGUqIG5vZGUpCkBAIC0xODEsNyArMjEyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2Ug
ZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOwogICAgICAgICAgICAgaWYgKCFlZGdlKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGVkZ2UuaXNQcm92ZWQo
KSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgaWYgKGVkZ2Uu
d2lsbE5vdEhhdmVDaGVjaygpKQogICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92
ZUVkZ2UoaS0tKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdFZGdlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQCB2b2lkIEVk
Z2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIG91dC5wcmludCgi
Q2hlY2s6Iik7CiAgICAgICAgIG91dC5wcmludCh1c2VLaW5kKCksICI6Iik7CiAgICAgfQorICAg
IGlmIChkb2VzS2lsbCgpKQorICAgICAgICBvdXQucHJpbnQoIktpbGw6Iik7CiAgICAgb3V0LnBy
aW50KG5vZGUoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShy
ZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEyIEBAIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAK
IGNsYXNzIEVkZ2UgewogcHVibGljOgotICAgIGV4cGxpY2l0IEVkZ2UoTm9kZSogbm9kZSA9IDAs
IFVzZUtpbmQgdXNlS2luZCA9IFVudHlwZWRVc2UsIFByb29mU3RhdHVzIHByb29mU3RhdHVzID0g
TmVlZHNDaGVjaykKKyAgICBleHBsaWNpdCBFZGdlKE5vZGUqIG5vZGUgPSAwLCBVc2VLaW5kIHVz
ZUtpbmQgPSBVbnR5cGVkVXNlLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cyA9IE5lZWRzQ2hlY2ss
IEtpbGxTdGF0dXMga2lsbFN0YXR1cyA9IERvZXNOb3RLaWxsKQogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlLCB1c2VLaW5kLCBwcm9vZlN0
YXR1cykpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlLCB1c2VLaW5kLCBw
cm9vZlN0YXR1cywga2lsbFN0YXR1cykpCiAjZWxzZQogICAgICAgICA6IG1fbm9kZShub2RlKQot
ICAgICAgICAsIG1fZW5jb2RlZFdvcmQobWFrZVdvcmQodXNlS2luZCwgcHJvb2ZTdGF0dXMpKQor
ICAgICAgICAsIG1fZW5jb2RlZFdvcmQobWFrZVdvcmQodXNlS2luZCwgcHJvb2ZTdGF0dXMsIGtp
bGxTdGF0dXMpKQogI2VuZGlmCiAgICAgewogICAgIH0KQEAgLTYxLDcgKzYxLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSwgdXNlS2luZCgpLCBwcm9v
ZlN0YXR1cygpKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUsIHVzZUtp
bmQoKSwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1cygpKTsKICNlbHNlCiAgICAgICAgIG1fbm9k
ZSA9IG5vZGU7CiAjZW5kaWYKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICB1bnNpZ25lZCBtYXNrZWQgPSBtX2VuY29kZWRXb3JkICYg
KCgoMSA8PCBzaGlmdCgpKSAtIDEpKTsKLSAgICAgICAgdW5zaWduZWQgc2hpZnRlZCA9IG1hc2tl
ZCA+PiAxOworICAgICAgICB1bnNpZ25lZCBzaGlmdGVkID0gbWFza2VkID4+IDI7CiAjZWxzZQog
ICAgICAgICB1bnNpZ25lZCBzaGlmdGVkID0gc3RhdGljX2Nhc3Q8VXNlS2luZD4obV9lbmNvZGVk
V29yZCkgPj4gMTsKICNlbmRpZgpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBU1NFUlQobm9kZSgpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBtX2VuY29k
ZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kLCBwcm9vZlN0YXR1cygpKTsKKyAgICAg
ICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCwgcHJvb2ZTdGF0dXMo
KSwga2lsbFN0YXR1cygpKTsKICNlbHNlCiAgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29y
ZCh1c2VLaW5kLCBwcm9vZlN0YXR1cygpKTsKICNlbmRpZgpAQCAtMTA4LDkgKzEwOCw5IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlKCkpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQoKSwgcHJv
b2ZTdGF0dXMpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VL
aW5kKCksIHByb29mU3RhdHVzLCBraWxsU3RhdHVzKCkpOwogI2Vsc2UKLSAgICAgICAgbV9lbmNv
ZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMpOworICAgICAgICBtX2Vu
Y29kZWRXb3JkID0gbWFrZVdvcmQodXNlS2luZCgpLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cygp
KTsKICNlbmRpZgogICAgIH0KICAgICBib29sIGlzUHJvdmVkKCkgY29uc3QKQEAgLTEyMiw2ICsx
MjIsMzYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcHJvb2ZTdGF0dXMoKSA9PSBOZWVkc0No
ZWNrOwogICAgIH0KICAgICAKKyAgICBib29sIHdpbGxOb3RIYXZlQ2hlY2soKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzUHJvdmVkKCkgfHwgdXNlS2luZCgpID09IFVudHlwZWRVc2U7
CisgICAgfQorICAgIGJvb2wgd2lsbEhhdmVDaGVjaygpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gIXdpbGxOb3RIYXZlQ2hlY2soKTsKKyAgICB9CisgICAgCisgICAgS2lsbFN0YXR1cyBr
aWxsU3RhdHVzVW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraWxsU3Rh
dHVzRm9yRG9lc0tpbGwobV9lbmNvZGVkV29yZCAmIDIpOworICAgIH0KKyAgICBLaWxsU3RhdHVz
IGtpbGxTdGF0dXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7CisgICAg
ICAgIHJldHVybiBraWxsU3RhdHVzVW5jaGVja2VkKCk7CisgICAgfQorICAgIHZvaWQgc2V0S2ls
bFN0YXR1cyhLaWxsU3RhdHVzIGtpbGxTdGF0dXMpCisgICAgeworICAgICAgICBBU1NFUlQobm9k
ZSgpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdv
cmQobm9kZSgpLCB1c2VLaW5kKCksIHByb29mU3RhdHVzKCksIGtpbGxTdGF0dXMpOworI2Vsc2UK
KyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMo
KSwga2lsbFN0YXR1cyk7CisjZW5kaWYKKyAgICB9CisgICAgYm9vbCBkb2VzS2lsbCgpIGNvbnN0
IHsgcmV0dXJuIERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1cygpKTsgfQorICAgIGJvb2wgZG9lc05v
dEtpbGwoKSBjb25zdCB7IHJldHVybiAhZG9lc0tpbGwoKTsgfQorICAgIAogICAgIGJvb2wgaXNT
ZXQoKSBjb25zdCB7IHJldHVybiAhIW5vZGUoKTsgfQogICAgIAogICAgIHR5cGVkZWYgdm9pZCog
RWRnZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGU7CkBAIC0xNDgsMjIgKzE3OCwyMiBAQCBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBBZGphY2VuY3lMaXN0OwogICAgIAogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNjsgfQorICAgIHN0YXRp
YyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDc7IH0KICAgICAKLSAgICBzdGF0aWMgdWludHB0
cl90IG1ha2VXb3JkKE5vZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJv
b2ZTdGF0dXMpCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VL
aW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3RhdHVzLCBLaWxsU3RhdHVzIGtpbGxTdGF0
dXMpCiAgICAgewogICAgICAgICBBU1NFUlQoc2l6ZW9mKG5vZGUpID09IDgpOwogICAgICAgICB1
aW50cHRyX3Qgc2hpZnRlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkgPDwg
c2hpZnQoKTsKICAgICAgICAgQVNTRVJUKChzaGlmdGVkVmFsdWUgPj4gc2hpZnQoKSkgPT0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpOwogICAgICAgICBBU1NFUlQodXNlS2luZCA+PSAw
ICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7Ci0gICAgICAgIEFTU0VSVCgoc3RhdGljX2Nhc3Q8
dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMSkgPD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gc2hpZnRlZFZhbHVlIHwgKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMSkgfCBERkc6OmlzUHJvdmVkKHByb29mU3RhdHVz
KTsKKyAgICAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KExhc3RVc2VLaW5kKSA8
PCAyKSA8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigyKSA8PCBzaGlmdCgpKSk7CisgICAgICAg
IHJldHVybiBzaGlmdGVkVmFsdWUgfCAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8
PCAyKSB8IChERkc6OmRvZXNLaWxsKGtpbGxTdGF0dXMpIDw8IDEpIHwgREZHOjppc1Byb3ZlZChw
cm9vZlN0YXR1cyk7CiAgICAgfQogICAgIAogI2Vsc2UKLSAgICBzdGF0aWMgdWludHB0cl90IG1h
a2VXb3JkKFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMpCisgICAgc3Rh
dGljIHVpbnRwdHJfdCBtYWtlV29yZChVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29m
U3RhdHVzLCBLaWxsU3RhdHVzIGtpbGxTdGF0dXMpCiAgICAgewotICAgICAgICByZXR1cm4gKHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMSkgfCBERkc6OmlzUHJvdmVkKHByb29m
U3RhdHVzKTsKKyAgICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQp
IDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1cykgPDwgMSkgfCBERkc6OmlzUHJvdmVk
KHByb29mU3RhdHVzKTsKICAgICB9CiAgICAgCiAgICAgTm9kZSogbV9ub2RlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI1
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBWYWx1
ZVRvSW50MzI6IHsKICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9m
aXRhYmxlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
c2V0T3BBbmREZWZhdWx0RmxhZ3MoSWRlbnRpdHkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC05MDEsNiArOTAyLDggQEAgcHJpdmF0ZToK
IAogICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAgICBjYXNlIFBoaToKKyAgICAg
ICAgY2FzZSBVcHNpbG9uOgorICAgICAgICBjYXNlIEdldEFyZ3VtZW50OgogICAgICAgICBjYXNl
IEZvcndhcmRJbnQzMlRvRG91YmxlOgogICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6
CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRmx1c2hGb3JtYXQu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
Rmx1c2hGb3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBE
ZWFkRmx1c2g6CisgICAgICAgIG91dC5wcmludCgiRGVhZEZsdXNoIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkSW50
MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAg
b3V0LnByaW50KCJGbHVzaGVkRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZs
dXNoZWRDZWxsOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRDZWxsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNo
ZWRCb29sZWFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgor
ICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRKU1ZhbHVlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHRmx1c2hGb3JtYXRfaAorI2RlZmluZSBERkdGbHVzaEZvcm1hdF9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHTm9kZUZsYWdzLmgiCisjaW5jbHVkZSAiREZHVXNlS2luZC5oIgorI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Vu
dW0gRmx1c2hGb3JtYXQgeworICAgIERlYWRGbHVzaCwKKyAgICBGbHVzaGVkSW50MzIsCisgICAg
Rmx1c2hlZERvdWJsZSwKKyAgICBGbHVzaGVkQ2VsbCwKKyAgICBGbHVzaGVkQm9vbGVhbiwKKyAg
ICBGbHVzaGVkSlNWYWx1ZQorfTsKKworaW5saW5lIE5vZGVGbGFncyByZXN1bHRGb3IoRmx1c2hG
b3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBEZWFkRmx1
c2g6CisgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAg
ICAgICByZXR1cm4gTm9kZVJlc3VsdEpTOworICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAg
ICByZXR1cm4gTm9kZVJlc3VsdEludDMyOworICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAg
ICAgcmV0dXJuIE5vZGVSZXN1bHROdW1iZXI7CisgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAg
ICAgICAgcmV0dXJuIE5vZGVSZXN1bHRCb29sZWFuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitpbmxpbmUgVXNlS2luZCB1c2VL
aW5kRm9yKEZsdXNoRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAg
IGNhc2UgRGVhZEZsdXNoOgorICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIHJldHVy
biBVbnR5cGVkVXNlOworICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIHJldHVybiBDZWxs
VXNlOworICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICByZXR1cm4gSW50MzJVc2U7Cisg
ICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICByZXR1cm4gTnVtYmVyVXNlOworICAgIGNh
c2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgIHJldHVybiBCb29sZWFuVXNlOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBVbnR5cGVkVXNlOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6Rmx1c2hGb3JtYXQpOworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHRmx1c2hGb3JtYXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZH
UGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHVibGljOgorICAgIEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBn
cmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImZsdXNoLWxpdmVuZXNzIGFuYWx5c2lzIikK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgLy8gTGl2ZW5lc3Mg
aXMgYSBiYWNrd2FyZHMgYW5hbHlzaXM7IHRoZSByb290cyBhcmUgdGhlIGJsb2NrcyB0aGF0Cisg
ICAgICAgIC8vIGVuZCBpbiBhIHRlcm1pbmFsIChSZXR1cm4vVGhyb3cvVGhyb3dSZWZlcmVuY2VF
cnJvcikuIEZvciBub3csIHdlCisgICAgICAgIC8vIHVzZSBhIGZpeHBvaW50IGZvcm11bGF0aW9u
IHNpbmNlIGxpdmVuZXNzIGlzIGEgcmFwaWQgYW5hbHlzaXMgd2l0aAorICAgICAgICAvLyBjb252
ZXJnZW5jZSBndWFyYW50ZWVkIGFmdGVyIE8oY29ubmVjdGl2aXR5KS4KKyAgICAgICAgCisgICAg
ICAgIC8vIFN0YXJ0IGJ5IGFzc3VtaW5nIHRoYXQgZXZlcnl0aGluZyBpcyBkZWFkLgorICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBibG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZC5maWxs
KERlYWRGbHVzaCk7CisgICAgICAgICAgICBibG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0VGFpbC5m
aWxsKERlYWRGbHVzaCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KQorICAgICAgICAg
ICAgICAgIHByb2Nlc3MoYmxvY2tJbmRleCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLmJsb2NrKDApLT5z
c2EtPmZsdXNoRm9ybWF0QXRIZWFkLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1f
Z3JhcGguYmxvY2soMCktPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWRbaV0gPT0gRGVhZEZsdXNoKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICAgICAiQmFkIGZsdXNoIGxpdmVuZXNzIGFuYWx5c2lzIHJlc3VsdDogbm90IGFsbCBsb2Nh
bHMgZGVhZCBhdCByb290OiAiLAorICAgICAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnNz
YS0+Zmx1c2hGb3JtYXRBdEhlYWQsICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiSVIgYXQg
dGltZSBvZiBlcnJvcjpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCkKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIG1fbGl2ZSA9IGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRUYWlsOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBu
b2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Cisg
ICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDog
eworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZh
cmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSwgRGVhZEZsdXNoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7CisgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IHZhcmlh
YmxlLT5mbHVzaEZvcm1hdCgpOworICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgdmFy
aWFibGUtPmxvY2FsKCksIGZvcm1hdCwgZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICBibG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZCA9IG1fbGl2ZTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tp
XTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IG1fbGl2ZS5zaXplKCk7IGotLTspIHsK
KyAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCYgcHJlZGVjZXNzb3JGb3JtYXQgPSBwcmVkZWNl
c3Nvci0+c3NhLT5mbHVzaEZvcm1hdEF0VGFpbFtqXTsKKyAgICAgICAgICAgICAgICBGbHVzaEZv
cm1hdCBteUZvcm1hdCA9IG1fbGl2ZVtqXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBUaHJlZSBwb3NzaWJpbGl0aWVzOgorICAgICAgICAgICAgICAgIC8vIDEpIFByZWRl
Y2Vzc29yIGZvcm1hdCBpcyBEZWFkLCBpbiB3aGljaCBjYXNlIGl0IGFjcXVpcmVzIG91ciBmb3Jt
YXQuCisgICAgICAgICAgICAgICAgLy8gMikgUHJlZGVjZXNzb3IgZm9ybWF0IGlzIGlkZW50aWNh
bCB0byBvdXIgZm9ybWF0LCBpbiB3aGljaCBjYXNlIHdlCisgICAgICAgICAgICAgICAgLy8gICAg
ZG8gbm90aGluZy4KKyAgICAgICAgICAgICAgICAvLyAzKSBQcmVkZWNlc3NvciBmb3JtYXQgaXMg
ZGlmZmVyZW50IGZyb20gb3VyIGZvcm1hdCBhbmQgaXQncyBub3QgRGVhZCwKKyAgICAgICAgICAg
ICAgICAvLyAgICBpbiB3aGljaCBjYXNlIHdlIGhhdmUgYW4gZXJyb25lb3VzIHNldCBvZiBGbHVz
aGVzIGFuZCBTZXRMb2NhbHMuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KHByZWRlY2Vzc29yRm9ybWF0ID09IERlYWRGbHVzaCkgeworICAgICAgICAgICAgICAgICAgICBw
cmVkZWNlc3NvckZvcm1hdCA9IG15Rm9ybWF0OworICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKHByZWRlY2Vzc29yRm9ybWF0ID09IG15Rm9ybWF0KQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgICAgICAgICAiQmFkIEZsdXNoIG1lcmdlIGF0IGVkZ2UgIiwgKnByZWRlY2Vzc29y
LCAiIC0+ICIsICpibG9jaywKKyAgICAgICAgICAgICAgICAgICAgIiwgbG9jYWwgdmFyaWFibGUg
ciIsIG1fbGl2ZS5vcGVyYW5kRm9ySW5kZXgoaiksICI6ICIsICpwcmVkZWNlc3NvciwKKyAgICAg
ICAgICAgICAgICAgICAgIiBoYXMgIiwgcHJlZGVjZXNzb3JGb3JtYXQsICIgYW5kICIsICpibG9j
aywgIiBoYXMgIiwgbXlGb3JtYXQsICIuXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJ
UiBhdCB0aW1lIG9mIGVycm9yOlxuIik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7
CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICB2b2lkIHNldEZvck5vZGUoTm9kZSogbm9kZSwgaW50IG9wZXJhbmQsIEZs
dXNoRm9ybWF0IG5vZGVGb3JtYXQsIEZsdXNoRm9ybWF0IG5ld0Zvcm1hdCkKKyAgICB7CisgICAg
ICAgIEZsdXNoRm9ybWF0JiBjdXJyZW50Rm9ybWF0ID0gbV9saXZlLm9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgIAorICAgICAgICAvLyBEbyBzb21lIHVzZWZ1bCB2ZXJpZmljYXRpb24gaGVyZS4g
SXQncyBPSyBpZiB3ZSB0aGluayB0aGF0IHRoZQorICAgICAgICAvLyBmbHVzaCBmb3JtYXQgaXMg
ZGVhZCBhdCB0aGUgdGltZSB0aGF0IHdlIHNlZSB0aGUgbm9kZS4gQnV0IGl0J3MKKyAgICAgICAg
Ly8gbm90IE9LIGlmIGJvdGggdGhlIG5vZGUgYW5kIG1fbGl2ZSBzZWUgYSBGbHVzaEZvcm1hdCBh
bmQgdGhleSBkbworICAgICAgICAvLyBub3QgYWdyZWUgb24gaXQuCisgICAgICAgIAorICAgICAg
ICBpZiAoY3VycmVudEZvcm1hdCA9PSBEZWFkRmx1c2ggfHwgY3VycmVudEZvcm1hdCA9PSBub2Rl
Rm9ybWF0KSB7CisgICAgICAgICAgICBjdXJyZW50Rm9ybWF0ID0gbmV3Rm9ybWF0OworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgIkJhZCBGbHVzaCBtZXJnZSBhdCBub2RlICIsIG5vZGUsICIsIHIiLCBvcGVyYW5k
LCAiOiBub2RlIGNsYWltcyAiLCBub2RlRm9ybWF0LAorICAgICAgICAgICAgIiBidXQgYmFja3dh
cmRzIGZsb3cgY2xhaW1zICIsIGN1cnJlbnRGb3JtYXQsICIuXG4iKTsKKyAgICAgICAgZGF0YUxv
ZygiSVIgYXQgdGltZSBvZiBlcnJvcjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgRmx1c2hGb3JtYXQgZmx1c2hGb3JtYXQo
Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+Zmx1c2hGb3JtYXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7Cisg
ICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IG1fbGl2ZTsKK307CisKK2Jvb2wgcGVyZm9ybUZsdXNo
TGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkRGRyBGbHVzaC1MaXZlbmVzcyBBbmFseXNpcyBQaGFzZSIpOworICAgIHJl
dHVybiBydW5QaGFzZTxGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZT4oZ3JhcGgpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorI2RlZmluZSBE
RkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbXB1
dGVzIEJhc2ljQmxvY2s6OnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQKKworYm9vbCBwZXJmb3JtRmx1
c2hMaXZlbmVzc0FuYWx5c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRmx1c2hMaXZlbmVz
c0FuYWx5c2lzUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJGdW5j
dGlvbkV4ZWN1dGFibGVEdW1wLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
PHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogI2lmIEVO
QUJMRShERkdfSklUKQogCkBAIC0yMTYsOCArMjE3LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJpZCIsIHN0b3Jh
Z2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtzdG9yYWdl
QWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKICAgICAgICAgb3V0LnByaW50KCIs
ICIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSk7CiAg
ICAgfQotICAgIEFTU0VSVChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT5o
YXNMb2NhbCgpKTsKLSAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpIHsKKyAg
ICBBU1NFUlQobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSA9PSBub2RlLT5oYXNM
b2NhbCgqdGhpcykpOworICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMp
KSB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGludCBvcGVyYW5kID0gdmFyaWFibGVB
Y2Nlc3NEYXRhLT5vcGVyYW5kKCk7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVy
YW5kKSkKQEAgLTIzNSw2ICsyMzYsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNJbmRleGluZ1R5cGUoKSkKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPmluZGV4aW5nVHlwZSgp
KSk7CisgICAgaWYgKG5vZGUtPmhhc1BoaSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJe
Iiwgbm9kZS0+cGhpKCktPmluZGV4KCkpOwogICAgIGlmIChub2RlLT5oYXNFeGVjdXRpb25Db3Vu
dGVyKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2RlLT5leGVjdXRp
b25Db3VudGVyKCkpKTsKICAgICBpZiAob3AgPT0gSlNDb25zdGFudCkgewpAQCAtMjYwLDcgKzI2
Myw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICBvdXQu
cHJpbnQoIikiKTsKIAogICAgIGlmICghc2tpcHBlZCkgewotICAgICAgICBpZiAobm9kZS0+aGFz
VmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKnRoaXMpKQogICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwgU3Bl
Y3VsYXRpb25EdW1wKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkgPyAiLCBm
b3JjaW5nIGRvdWJsZSIgOiAiIik7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmhhc0hlYXBQcmVk
aWN0aW9uKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgcHJlZGljdGluZyAiLCBTcGVjdWxh
dGlvbkR1bXAobm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSkpOwpAQCAtMzEzLDIzICszMTYsMjUg
QEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgICAgICAgICAg
b3V0LnByaW50KCJcbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIG91dC5wcmludChwcmVmaXgs
ICIgIFBoaSBOb2RlczoiKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhpc1tpXTsK
LSAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9k
ZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG91
dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPnJlZkNvdW50KCks
ICI+LT4oIik7Ci0gICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSkgewotICAgICAgICAgICAg
b3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOwotICAgICAgICAgICAg
aWYgKHBoaU5vZGUtPmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAi
LCBwaGlOb2RlLT5jaGlsZDIoKS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBoaU5v
ZGUtPmNoaWxkMygpKQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5v
ZGUtPmNoaWxkMygpLT5pbmRleCgpKTsKKyAgICBpZiAoIWJsb2NrLT5waGlzLmlzRW1wdHkoKSkg
eworICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQaGkgTm9kZXM6Iik7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgIGlmICghcGhp
Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlz
T25seSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG91dC5wcmludCgi
IEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7
CisgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIkAiLCBwaGlOb2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpKSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQyKCktPmluZGV4KCkpOworICAgICAgICAgICAgICAgICAg
ICBpZiAocGhpTm9kZS0+Y2hpbGQzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMygpLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIikiLCBpICsgMSA8IGJsb2Nr
LT5waGlzLnNpemUoKSA/ICIsIiA6ICIiKTsKICAgICAgICAgfQotICAgICAgICBvdXQucHJpbnQo
IikiLCBpICsgMSA8IGJsb2NrLT5waGlzLnNpemUoKSA/ICIsIiA6ICIiKTsKKyAgICAgICAgb3V0
LnByaW50KCJcbiIpOwogICAgIH0KLSAgICBvdXQucHJpbnQoIlxuIik7CiB9CiAKIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTM0MywyOSArMzQ4LDU3IEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBkdW1wQmxvY2tIZWFkZXIob3V0LCAiIiwgYmxvY2ssIER1
bXBBbGxQaGlzKTsKLSAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYmVmb3JlOiAiKTsKLSAgICAg
ICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQotICAgICAgICAgICAgZHVtcE9wZXJhbmRzKGJs
b2NrLT52YWx1ZXNBdEhlYWQsIG91dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dC5w
cmludCgiPGVtcHR5PiIpOwotICAgICAgICBvdXQucHJpbnQoIlxuIik7Ci0gICAgICAgIG91dC5w
cmludCgiICB2YXIgbGlua3M6ICIpOwotICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZCwgb3V0KTsKLSAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICBzd2l0
Y2ggKG1fZm9ybSkgeworICAgICAgICBjYXNlIExvYWRTdG9yZToKKyAgICAgICAgY2FzZSBUaHJl
YWRlZENQUzogeworICAgICAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYmVmb3JlOiAiKTsKKyAg
ICAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKKyAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoYmxvY2stPnZhbHVlc0F0SGVhZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CisgICAgICAgICAgICBvdXQucHJpbnQoIlxuIik7
CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgdmFyIGxpbmtzOiAiKTsKKyAgICAgICAgICAgIGR1
bXBPcGVyYW5kcyhibG9jay0+dmFyaWFibGVzQXRIZWFkLCBvdXQpOworICAgICAgICAgICAgb3V0
LnByaW50KCJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFNTQTogeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2st
PnNzYSk7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgRmx1c2ggZm9ybWF0OiAiLCBibG9jay0+
c3NhLT5mbHVzaEZvcm1hdEF0SGVhZCwgIlxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAg
QXZhaWxhYmlsaXR5OiAiLCBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQsICJcbiIpOwor
ICAgICAgICAgICAgb3V0LnByaW50KCIgIExpdmU6ICIsIG5vZGVMaXN0RHVtcChibG9jay0+c3Nh
LT5saXZlQXRIZWFkKSwgIlxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgVmFsdWVzOiAi
LCBub2RlTWFwRHVtcChibG9jay0+c3NhLT52YWx1ZXNBdEhlYWQpLCAiXG4iKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9IH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGR1bXBDb2RlT3JpZ2luKG91dCwgIiIs
IGxhc3ROb2RlLCBibG9jay0+YXQoaSkpOwogICAgICAgICAgICAgZHVtcChvdXQsICIiLCBibG9j
ay0+YXQoaSkpOwogICAgICAgICAgICAgbGFzdE5vZGUgPSBibG9jay0+YXQoaSk7CiAgICAgICAg
IH0KLSAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYWZ0ZXI6ICIpOwotICAgICAgICBpZiAoYmxv
Y2stPmNmYUhhc1Zpc2l0ZWQpCi0gICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVl
c0F0VGFpbCwgb3V0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0LnByaW50KCI8ZW1w
dHk+Iik7Ci0gICAgICAgIG91dC5wcmludCgiXG4iKTsKLSAgICAgICAgb3V0LnByaW50KCIgIHZh
ciBsaW5rczogIik7Ci0gICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFyaWFibGVzQXRUYWls
LCBvdXQpOwotICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgIHN3aXRjaCAobV9mb3Jt
KSB7CisgICAgICAgIGNhc2UgTG9hZFN0b3JlOgorICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOiB7
CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgdmFycyBhZnRlcjogIik7CisgICAgICAgICAgICBp
ZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KGJsb2Nr
LT52YWx1ZXNBdFRhaWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5w
cmludCgiPGVtcHR5PiIpOworICAgICAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICAg
ICAgb3V0LnByaW50KCIgIHZhciBsaW5rczogIik7CisgICAgICAgICAgICBkdW1wT3BlcmFuZHMo
YmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgb3V0KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXG4i
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBTU0E6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrLT5zc2EpOworICAg
ICAgICAgICAgb3V0LnByaW50KCIgIEZsdXNoIGZvcm1hdDogIiwgYmxvY2stPnNzYS0+Zmx1c2hG
b3JtYXRBdFRhaWwsICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIEF2YWlsYWJpbGl0
eTogIiwgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLCAiXG4iKTsKKyAgICAgICAgICAg
IG91dC5wcmludCgiICBMaXZlOiAiLCBub2RlTGlzdER1bXAoYmxvY2stPnNzYS0+bGl2ZUF0VGFp
bCksICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIFZhbHVlczogIiwgbm9kZU1hcER1
bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsKSwgIlxuIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfSB9CiAgICAgfQogfQogCkBAIC00NzgsNiArNTExLDI4IEBAIHZvaWQgR3JhcGg6
OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2MKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
IH0KKwordm9pZCBHcmFwaDo6YWRkRm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sq
PiYgcmVzdWx0LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEhhc2hTZXQ8QmFz
aWNCbG9jayo+JiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBpZiAoc2Vlbi5jb250
YWlucyhibG9jaykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZXN1bHQuYXBwZW5kKGJs
b2NrKTsKKyAgICB3b3JrbGlzdC5hcHBlbmQoYmxvY2spOworICAgIHNlZW4uYWRkKGJsb2NrKTsK
K30KKwordm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoVmVjdG9yPEJhc2lj
QmxvY2sqPiYgcmVzdWx0KQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0
OworICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHNlZW47CisgICAgYWRkRm9yRGVwdGhGaXJzdFNv
cnQocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkpOworICAgIHdoaWxlICghd29ya2xp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFr
ZUxhc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMo
KTsgaS0tOykKKyAgICAgICAgICAgIGFkZEZvckRlcHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xp
c3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNzb3IoaSkpOworICAgIH0KK30KICAgICAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgIGRldGhyZWFkKCk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRh
KCkpOworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRo
aXMpKTsKICAgICAgICAgbm9kZS0+Y29udmVydFRvQ29uc3RhbnQoY29uc3RhbnROdW1iZXIpOwog
ICAgIH0KICAgICAKQEAgLTQwMSw3ICs0MDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5j
b2RlT3JpZ2luKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgpKSB7Cisg
ICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgqdGhpcykpIHsKICAgICAgICAgICAgIGlmICghb3Bl
cmFuZElzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChub2RlLT5sb2Nh
bCgpKTsKQEAgLTY0MSw2ICs2NDEsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBpbnZhbGlk
YXRlQ0ZHKCk7CiAgICAgCisgICAgdm9pZCBnZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihWZWN0
b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpOworICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlv
biogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAg
ICAKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFu
LmlkZW50aWZpZXJzOyB9CkBAIC02NzksNiArNjgxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29y
a2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IpOworICAgIHZvaWQgYWRk
Rm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0b3I8QmFz
aWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEhhc2hTZXQ8QmFzaWNCbG9jayo+JiBzZWVuLCBCYXNp
Y0Jsb2NrKik7CiAgICAgCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRl
SW50ZWdlciwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMjYgKzMxLDEyIEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdHcmFw
aC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotY2xhc3MgSW5zZXJ0aW9uIHsK
LXB1YmxpYzoKLSAgICBJbnNlcnRpb24oKSB7IH0KLSAgICAKLSAgICBJbnNlcnRpb24oc2l6ZV90
IGluZGV4LCBOb2RlKiBlbGVtZW50KQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAg
ICwgbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgaW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Ci0gICAgTm9kZSogZWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZWxlbWVudDsgfQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9pbmRleDsKLSAg
ICBOb2RlKiBtX2VsZW1lbnQ7Ci19OwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxOb2RlKj4gSW5z
ZXJ0aW9uOwogCiBjbGFzcyBJbnNlcnRpb25TZXQgewogcHVibGljOgpAQCAtODEsMjAgKzY3LDcg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKICAg
ICB7Ci0gICAgICAgIGlmICghbV9pbnNlcnRpb25zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgYmxvY2stPmdyb3coYmxvY2stPnNpemUoKSArIG1faW5zZXJ0aW9ucy5zaXpl
KCkpOwotICAgICAgICBzaXplX3QgbGFzdEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaW5kZXhJbkluc2VydGlvbnMgPSBtX2luc2VydGlvbnMuc2l6ZSgpOyBpbmRl
eEluSW5zZXJ0aW9ucy0tOykgewotICAgICAgICAgICAgSW5zZXJ0aW9uJiBpbnNlcnRpb24gPSBt
X2luc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdOwotICAgICAgICAgICAgc2l6ZV90IGZpcnN0
SW5kZXggPSBpbnNlcnRpb24uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOwotICAgICAgICAg
ICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IGxhc3RJbmRleDsgLS1pID4gZmlyc3RJbmRleDspCi0gICAgICAg
ICAgICAgICAgYmxvY2stPmF0KGkpID0gYmxvY2stPmF0KGkgLSBpbmRleE9mZnNldCk7Ci0gICAg
ICAgICAgICBibG9jay0+YXQoZmlyc3RJbmRleCkgPSBpbnNlcnRpb24uZWxlbWVudCgpOwotICAg
ICAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleDsKLSAgICAgICAgfQotICAgICAgICBtX2lu
c2VydGlvbnMucmVzaXplKDApOworICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucygqYmxvY2ssIG1f
aW5zZXJ0aW9ucyk7CiAgICAgfQogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlz
aXNQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgor
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTGl2ZW5lc3NBbmFseXNpc1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdy
YXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAibGl2ZW5lc3MgYW5hbHlzaXMiKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBMaXZlbmVzcyBpcyBhIGJh
Y2t3YXJkcyBhbmFseXNpczsgdGhlIHJvb3RzIGFyZSB0aGUgYmxvY2tzIHRoYXQKKyAgICAgICAg
Ly8gZW5kIGluIGEgdGVybWluYWwgKFJldHVybi9UaHJvdy9UaHJvd1JlZmVyZW5jZUVycm9yKS4g
Rm9yIG5vdywgd2UKKyAgICAgICAgLy8gdXNlIGEgZml4cG9pbnQgZm9ybXVsYXRpb24gc2luY2Ug
bGl2ZW5lc3MgaXMgYSByYXBpZCBhbmFseXNpcyB3aXRoCisgICAgICAgIC8vIGNvbnZlcmdlbmNl
IGd1YXJhbnRlZWQgYWZ0ZXIgTyhjb25uZWN0aXZpdHkpLgorICAgICAgICAKKyAgICAgICAgLy8g
U3RhcnQgYnkgYXNzdW1pbmcgdGhhdCBldmVyeXRoaW5nIGlzIGRlYWQuCisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9ja0luZGV4KTsKKyAgICAgICAg
fSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbV9ncmFwaC5ibG9j
aygwKS0+c3NhLT5saXZlQXRIZWFkLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICAgICAiQmFkIGxpdmVuZXNzIGFuYWx5c2lzIHJlc3VsdDogbGl2ZSBhdCBy
b290IGlzIG5vdCBlbXB0eTogIiwKKyAgICAgICAgICAgICAgICBub2RlTGlzdER1bXAobV9ncmFw
aC5ibG9jaygwKS0+c3NhLT5saXZlQXRIZWFkKSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9n
KCJJUiBhdCB0aW1lIG9mIGVycm9yOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsK
KyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoQmxvY2tJbmRleCBi
bG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4g
YmUgaW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAgICAgICAgLy8gSGFz
aFNldHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKKyAg
ICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246CisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gICAgbjogVXBzaWxvbigkcCwgQHgpCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFuZCB1c2VzIEB4Lgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhpOgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVzZSBub3IgYSBkZWYuCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2RlOgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwg
QGMuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICAgICAgY2FzZSBVcHNpbG9uOiB7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9k
ZS0+cGhpKCk7CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkpOworICAgICAgICAg
ICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICAgICAgbV9saXZlLmFkZChu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAg
ICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRDaGls
ZFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KQorICAgICAgICAg
ICAgYmxvY2stPnByZWRlY2Vzc29yc1tpXS0+c3NhLT5saXZlQXRUYWlsLmFkZChtX2xpdmUuYmVn
aW4oKSwgbV9saXZlLmVuZCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRDaGlsZFVzZShO
b2RlKiwgRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZENoaWxkVXNlKGVkZ2UpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGFkZENoaWxkVXNlKEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAg
ICBlZGdlLnNldEtpbGxTdGF0dXMobV9saXZlLmFkZChlZGdlLm5vZGUoKSkuaXNOZXdFbnRyeSA/
IERvZXNLaWxsIDogRG9lc05vdEtpbGwpOworICAgIH0KKyAgICAKKyAgICBib29sIG1fY2hhbmdl
ZDsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7Cit9OworCitib29sIHBlcmZvcm1MaXZlbmVz
c0FuYWx5c2lzKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1Jl
Z2lvbigiREZHIExpdmVuZXNzIEFuYWx5c2lzIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNl
PExpdmVuZXNzQW5hbHlzaXNQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTGl2ZW5lc3NBbmFseXNp
c1BoYXNlX2gKKyNkZWZpbmUgREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdD
b21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFw
aDsKKworLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5saXZlQXRIZWFkL2xpdmVBdFRhaWwu
CisKK2Jvb2wgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVO
QUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdOb2Rl
QWxsb2NhdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTM3LDYg
KzM4LDI1IEBAIHVuc2lnbmVkIE5vZGU6OmluZGV4KCkgY29uc3QKICAgICByZXR1cm4gTm9kZUFs
bG9jYXRvcjo6YWxsb2NhdG9yT2YodGhpcyktPmluZGV4T2YodGhpcyk7CiB9CiAKK2Jvb2wgTm9k
ZTo6aGFzVmFyaWFibGVBY2Nlc3NEYXRhKEdyYXBoJiBncmFwaCkKK3sKKyAgICBzd2l0Y2ggKG9w
KCkpIHsKKyAgICBjYXNlIFBoaToKKyAgICAgICAgcmV0dXJuIGdyYXBoLm1fZm9ybSAhPSBTU0E7
CisgICAgY2FzZSBHZXRMb2NhbDoKKyAgICBjYXNlIFNldExvY2FsOgorICAgIGNhc2UgTW92SGlu
dDoKKyAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAg
Y2FzZSBTZXRBcmd1bWVudDoKKyAgICBjYXNlIEZsdXNoOgorICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBX
VEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1MjU4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw5ICs0NSwxMSBAQAogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlU2V0LmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisjaW5jbHVkZSA8
d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xh
c3MgR3JhcGg7CiBzdHJ1Y3QgQmFzaWNCbG9jazsKIAogc3RydWN0IFN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhIHsKQEAgLTQ5OCwzMiArNTAwLDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBib29sIGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpCisgICAgYm9vbCBo
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoR3JhcGgmKTsKKyAgICBib29sIGhhc0xvY2FsKEdyYXBoJiBn
cmFwaCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAob3AoKSkgewotICAgICAgICBjYXNlIEdldExv
Y2FsOgotICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAg
ICAgIGNhc2UgTW92SGludEFuZENoZWNrOgotICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6Ci0gICAg
ICAgIGNhc2UgUGhpOgotICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgotICAgICAgICBjYXNlIEZs
dXNoOgotICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIGJvb2wgaGFzTG9jYWwoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICByZXR1cm4gaGFzVmFyaWFibGVBY2Nl
c3NEYXRhKGdyYXBoKTsKICAgICB9CiAgICAgCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1ZhcmlhYmxlQWNjZXNz
RGF0YSgpKTsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmFyaWFibGVBY2Nlc3NE
YXRhKj4obV9vcEluZm8pLT5maW5kKCk7CiAgICAgfQogICAgIApAQCAtNTM4LDYgKzUyMiwxNyBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNQaGkoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gVXBzaWxvbjsKKyAgICB9CisgICAgCisgICAgTm9kZSogcGhp
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNQaGkoKSk7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8Tm9kZSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNJZGVu
dGlmaWVyKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewpAQCAtNzczLDE2ICs3Njgs
MTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBtX29wSW5mbzIgPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihibG9jayk7CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2so
KQorICAgIEJhc2ljQmxvY2sqJiB0YWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNp
Y0Jsb2NrKj4obV9vcEluZm8pOworICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Js
b2NrKio+KCZtX29wSW5mbyk7CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG5vdFRha2Vu
QmxvY2soKQorICAgIEJhc2ljQmxvY2sqJiBub3RUYWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChpc0JyYW5jaCgpKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Js
b2NrKj4obV9vcEluZm8yKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9j
ayoqPigmbV9vcEluZm8yKTsKICAgICB9CiAgICAgCiAgICAgU3dpdGNoRGF0YSogc3dpdGNoRGF0
YSgpCkBAIC04MDUsNyArODAwLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICBCYXNp
Y0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKGlz
U3dpdGNoKCkpIHsKICAgICAgICAgICAgIGlmIChpbmRleCA8IHN3aXRjaERhdGEoKS0+Y2FzZXMu
c2l6ZSgpKQpAQCAtODIwLDExICs4MTUsMTEgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAgICAg
cmV0dXJuIG5vdFRha2VuQmxvY2soKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIHJldHVybiB0YWtlbkJsb2NrKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
QmFzaWNCbG9jayogc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJvb2wgY29uZGl0aW9uKQorICAgIEJh
c2ljQmxvY2sqJiBzdWNjZXNzb3JGb3JDb25kaXRpb24oYm9vbCBjb25kaXRpb24pCiAgICAgewog
ICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7CiAgICAgICAgIHJldHVybiBjb25kaXRpb24gPyB0
YWtlbkJsb2NrKCkgOiBub3RUYWtlbkJsb2NrKCk7CkBAIC0xMzk5LDYgKzEzOTQsMjMgQEAgcHVi
bGljOgogICAgIE5vZGUqIHJlcGxhY2VtZW50OwogfTsKIAoraW5saW5lIGJvb2wgbm9kZUNvbXBh
cmF0b3IoTm9kZSogYSwgTm9kZSogYikKK3sKKyAgICByZXR1cm4gYS0+aW5kZXgoKSA8IGItPmlu
ZGV4KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitDU3RyaW5nIG5vZGVMaXN0RHVtcChj
b25zdCBUJiBub2RlTGlzdCkKK3sKKyAgICByZXR1cm4gc29ydGVkTGlzdER1bXAobm9kZUxpc3Qs
IG5vZGVDb21wYXJhdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0NTdHJpbmcgbm9k
ZU1hcER1bXAoY29uc3QgVCYgbm9kZU1hcCkKK3sKKyAgICByZXR1cm4gc29ydGVkTWFwRHVtcChu
b2RlTWFwLCBub2RlQ29tcGFyYXRvcik7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVGbGFncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlRmxhZ3MuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVGbGFncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIGR1bXBOb2RlRmxhZ3MoUHJpbnRT
dHJlYW0mIG91dCwgTm9kZUZsYWdzIGZsYWdzKQogewotICAgIGlmICghKGZsYWdzIF4gTm9kZURv
ZXNOb3RFeGl0KSkgeworICAgIGlmICghKChmbGFncyAmIH5Ob2RlUmVsZXZhbnRUb09TUikgXiBO
b2RlRG9lc05vdEV4aXQpKSB7CiAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw5IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhNb3ZIaW50QW5kQ2hlY2ssIE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlRXhpdHNGb3J3YXJkKSBcCiAgICAgbWFjcm8oTW92SGludCwgTm9kZURvZXNO
b3RFeGl0KSBcCiAgICAgbWFjcm8oWm9tYmllSGludCwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAg
bWFjcm8oR2V0QXJndW1lbnQsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFBoYW50b20sIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhVcHNpbG9uLCBOb2RlRG9lc05vdEV4aXQgfCBO
b2RlUmVsZXZhbnRUb09TUikgXAogICAgIG1hY3JvKFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9k
ZVJlbGV2YW50VG9PU1IpIFwKICAgICBtYWNybyhGbHVzaCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBoYW50b21Mb2NhbCwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVEb2VzTm90RXhpdCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgor
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJPU1IgYXZhaWxhYmls
aXR5IGFuYWx5c2lzIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAg
ICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0OworICAgICAgICBtX2dyYXBoLmdldEJs
b2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtpXTsKKyAgICAgICAgICAgIGJsb2Nr
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5maWxsKDApOworICAgICAgICAgICAgYmxvY2stPnNz
YS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3RbaV07CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFdlIGVkaXQgYXZhaWxhYmlsaXR5QXRUYWlsIGluLXBsYWNlLCBi
dXQgZmlyc3QgaW5pdGlhbGl6ZSBpdCB0bworICAgICAgICAgICAgLy8gYXZhaWxhYmlsaXR5QXRI
ZWFkLgorICAgICAgICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBhdmFpbGFiaWxpdHkgPSBibG9jay0+
c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHkgPSBibG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytu
b2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAg
ICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKKyAgICAgICAgICAgICAgICAgICAg
YXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CisgICAg
ICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGot
LTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3Vj
Y2Vzc29yKGopOworICAgICAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiYgc3VjY2Vzc29yQXZh
aWxhYmlsaXR5ID0gc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSBhdmFpbGFiaWxpdHkuc2l6ZSgpOyBrLS07KSB7Cisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9IGF2YWlsYWJpbGl0eVtrXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFteU5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghYmxv
Y2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhteU5vZGUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBtYXkgb3ZlcndyaXRlIGF2YWlsYWJpbGl0eSB3aXRoIGEgYm9n
dXMgbm9kZQorICAgICAgICAgICAgICAgICAgICAvLyBhdCBtZXJnZSBwb2ludHMuIFRoaXMgaXMg
ZmluZSwgc2luY2UgbWVyZ2UgcG9pbnRzIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgLy8gTW92
SGludChQaGkpJ3MgdG8gd29yayBhcm91bmQgdGhpcy4gVGhlIG91dGNvbWUgb2YgdGhpcyBpcwor
ICAgICAgICAgICAgICAgICAgICAvLyB5b3UgbWlnaHQgaGF2ZSBhIHByb2dyYW0gaW4gd2hpY2gg
YSBub2RlIGhhcHBlbnMgdG8gcmVtYWluCisgICAgICAgICAgICAgICAgICAgIC8vIGxpdmUgaW50
byBzb21lIGJsb2NrIEIsIGFuZCBzZXBhcmF0ZWx5IChkdWUgdG8gY29weQorICAgICAgICAgICAg
ICAgICAgICAvLyBwcm9wYWdhdGlvbikganVzdCBvbmUgb2YgdGhlIHByZWRlY2Vzc29ycyBvZiBC
IGlzc3VlZCBhCisgICAgICAgICAgICAgICAgICAgIC8vIE1vdkhpbnQgcHV0dGluZyB0aGF0IG5v
ZGUgaW50byBzb21lIGxvY2FsLiBUaGVuIGluIEIgd2UgbWlnaHQKKyAgICAgICAgICAgICAgICAg
ICAgLy8gdGhpbmsgdGhhdCB0aGF0IG5vZGUgaXMgYSB2YWxpZCB2YWx1ZSBmb3IgdGhhdCBsb2Nh
bC4gT2YKKyAgICAgICAgICAgICAgICAgICAgLy8gY291cnNlIGlmIHRoYXQgbG9jYWwgd2FzIGFj
dHVhbGx5IGxpdmUgaW4gQiwgQiB3b3VsZCBoYXZlIGEKKyAgICAgICAgICAgICAgICAgICAgLy8g
UGhpIGZvciBpdC4gU28gZXNzZW50aWFsbHkgd2UnbGwgaGF2ZSBPU1IgZXhpdCBkcm9wcGluZyB0
aGlzCisgICAgICAgICAgICAgICAgICAgIC8vIG5vZGUncyB2YWx1ZSBpbnRvIHRoZSBsb2NhbCB3
aGVuIHdlIG90aGVyd2lzZSAoaW4gdGhlIERGRykKKyAgICAgICAgICAgICAgICAgICAgLy8gd291
bGQgaGF2ZSBkcm9wcGVkIHVuZGVmaW5lZCBpbnRvIHRoZSBsb2NhbC4gVGhpcyBzZWVtcworICAg
ICAgICAgICAgICAgICAgICAvLyBoYXJtbGVzcy4KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3NvckF2YWlsYWJpbGl0eVtrXSA9IG15Tm9kZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KK307CisKK2Jvb2wgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lv
bigiREZHIE9TUiBBdmFpbGFiaWxpdHkgQW5hbHlzaXMgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVu
UGhhc2U8T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZV9oCisjZGVmaW5l
IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBD
b21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBUaGlzIHJl
bGllcyBvbiBsaXZlbmVzcworLy8gYW5hbHlzaXMgcGhhc2UgaGF2aW5nIGJlZW4gcnVuIGFuZCB0
aGUgZ3JhcGggbm90IGhhdmluZyBiZWVuIHRyYW5zZm9ybWVkCisvLyBhZnRlciB0aGF0LgorCiti
b29sIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhHcmFwaCYpOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEyICszNiwxNyBA
QAogI2luY2x1ZGUgIkRGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdDU0VQ
aGFzZS5oIgogI2luY2x1ZGUgIkRGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgiCisjaW5jbHVkZSAi
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0RDRVBoYXNlLmgi
CiAjaW5jbHVkZSAiREZHRmFpbGVkRmluYWxpemVyLmgiCisjaW5jbHVkZSAiREZHRmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdGaXh1cFBoYXNlLmgiCiAjaW5jbHVk
ZSAiREZHSklUQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2Uu
aCIKKyNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVk
ZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHVW5p
ZmljYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCkBAIC0xODIsMjIgKzE4
NywyMiBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgZGZn
Lm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50Q29udmVyZ2VkOwogCiAgICAgcGVyZm9ybVN0b3Jl
RWxpbWluYXRpb24oZGZnKTsKLSAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKLSAgICAK
LSAgICAvLyBOb3RlIHRoYXQgRENFIGlzIG5lY2Vzc2FyeSBldmVuIGluIHRoZSBGVEwsIGJlY2F1
c2Ugb25seSB3ZSBrbm93IHdoYXQgaXMKLSAgICAvLyBsaXZlLWluLWJ5dGVjb2RlLiBUaGUgRlRM
IHVzZXMgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgd2hlbiBPU1IgZXhpdAotICAgIC8v
IHZhbHVlcyBzaG91bGQgYmUgd2lyZWQgdG8gTFZhbHVlcywgdmVyc3VzIGJlaW5nIHdpcmVkIHRv
IEV4aXRWYWx1ZTo6ZGVhZCgpLgotICAgIC8vIFRoaXMgaXMgZGlzdGluY3QgZnJvbSB3aGF0IFpv
bWJpZUhpbnQgZ2l2ZXMgdXM6IFpvbWJpZUhpbnQgc2F5cyB0aGF0IHRoZQotICAgIC8vIHZhbHVl
IGluIHRoZSBnaXZlbiBieXRlY29kZSBsb2NhbCBpcyBhbHdheXMgZGVhZDsgdGhlIHJlZmVyZW5j
ZSBjb3VudHMgdGhhdAotICAgIC8vIERDRSBwcm9kdWNlcyB0ZWxsIHVzIHRoYXQgdGhlIHZhbHVl
IGlzIGxpdmUgZm9yIGEgd2hpbGUgYnV0IGV2ZW50dWFsbHkKLSAgICAvLyBkaWVzLCBhbmQgaXQg
dGVsbHMgdXMgZXhhY3RseSB3aGVuIHRoZSBkZWF0aCBwb2ludCBpcy4KLSAgICBwZXJmb3JtRENF
KGRmZyk7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBpZiAoT3B0aW9uczo6dXNlRXhwZXJp
bWVudGFsRlRMKCkKICAgICAgICAgJiYgY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uCiAg
ICAgICAgICYmIEZUTDo6Y2FuQ29tcGlsZShkZmcpKSB7CiAgICAgICAgIAorICAgICAgICBwZXJm
b3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoZGZnKTsKKyAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFk
aW5nKGRmZyk7CisgICAgICAgIHBlcmZvcm1TU0FDb252ZXJzaW9uKGRmZyk7CisgICAgICAgIHBl
cmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKKyAg
ICAgICAgcGVyZm9ybURDRShkZmcpOyAvLyBXZSByZWx5IG9uIHRoaXMgdG8gY29udmVydCBkZWFk
IFNldExvY2FscyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBoaW50LCBhbmQgdG8ga2lsbCBkZWFkIGNv
ZGUgdGhhdCB3b24ndCBiZSByZWNvZ25pemVkIGFzIGRlYWQgYnkgTExWTS4KKyAgICAgICAgcGVy
Zm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKKyAgICAgICAgcGVyZm9ybUZsdXNoTGl2ZW5lc3NB
bmFseXNpcyhkZmcpOworICAgICAgICBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoZGZn
KTsKKyAgICAgICAgCiAgICAgICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBqdXN0
IGJlZm9yZSBGVEwgbG93ZXJpbmc6Iik7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogU3Vw
cG9ydCBPU1IgZW50cnkuCkBAIC0yMTUsNiArMjIwLDggQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRo
IFBsYW46OmNvbXBpbGVJblRocgogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKICAg
ICAKKyAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKKyAgICBwZXJmb3JtRENFKGRmZyk7
CiAgICAgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKICAgICBkdW1wQW5k
VmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGggYWZ0ZXIgb3B0aW1pemF0aW9uOiIpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5q
ZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxh
bi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAgICAgICAg
aWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQobm9kZS0+aGFzTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUt
Pmhhc0xvY2FsKG1fZ3JhcGgpKTsKICAgICAgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+cHJlZGljdCgKICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25Gcm9tVmFs
dWUobV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSkpOwogICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzIsMTQgKzQ3MiwyMCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFpv
bWJpZUhpbnQ6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlz
aWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8g
aW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgotICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2FzZSBQaGk6
CiAgICAgICAgICAgICAvLyBQaGlzIHNob3VsZCBub3QgYmUgdmlzaWJsZSBoZXJlIHNpbmNlIHdl
J3JlIGl0ZXJhdGluZyB0aGUgYWxsLWJ1dC1QaGkncwogICAgICAgICAgICAgLy8gcGFydCBvZiBi
YXNpYyBibG9ja3MuCi0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICAgICAg
ICAgIC8vIFRoZXNlIGRvbid0IGdldCBpbnNlcnRlZCB1bnRpbCB3ZSBnbyBpbnRvIFNTQS4KKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBjYXNlIEdldFNjb3BlOgpAQCAtNTQwLDcgKzU0Niw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExhc3ROb2Rl
VHlwZToKLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAjZWxzZQogICAgICAgICBkZWZhdWx0
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVy
c2lvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgiCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5j
bHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRl
ICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBTU0FDb252ZXJzaW9uUGhhc2UgOiBwdWJsaWMgUGhh
c2UgeworcHVibGljOgorICAgIFNTQUNvbnZlcnNpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJTU0EgY29udmVyc2lvbiIpCisgICAgICAgICwgbV9pbnNlcnRp
b25TZXQoZ3JhcGgpCisgICAgICAgICwgbV9jaGFuZ2VkKGZhbHNlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFw
aC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91
dCB3aGljaCBTZXRMb2NhbCdzIG5lZWQgZmx1c2hpbmcuIE5lZWQgdG8gZG8gdGhpcyB3aGlsZSB0
aGUKKyAgICAgICAgLy8gUGhpIGdyYXBoIGlzIHN0aWxsIGludGFjdC4KKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07
KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJ
bmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBu
b2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5v
ZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gRmx1c2gpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGFkZEZsdXNoZWRMb2Nh
bE9wKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxlICghbV9m
bHVzaGVkTG9jYWxPcFdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgQVNT
RVJUKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKTsKKyAgICAgICAgICAgIERGR19O
T0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZEZsdXNoZWRMb2NhbEVkZ2UpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBFbGltaW5hdGUgYWxsIGR1cGxpY2F0ZSBv
ciBzZWxmLXBvaW50aW5nIFBoaSBlZGdlcy4gVGhpcyBtZWFucyB0aGF0CisgICAgICAgIC8vIHdl
IHRyYW5zZm9ybToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gcDogUGhpKEBuMSwgQG4yLCBAbjMp
CisgICAgICAgIC8vCisgICAgICAgIC8vIGludG86CisgICAgICAgIC8vCisgICAgICAgIC8vIHA6
IFBoaShAeCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaWYgZWFjaCBAbmkgaW4ge0BuMSwgQG4y
LCBAbjN9IGlzIGVpdGhlciBlcXVhbCB0byBAcCB0byBpcyBlcXVhbAorICAgICAgICAvLyB0byBA
eCwgZm9yIGV4YWN0bHkgb25lIG90aGVyIEB4LiBBZGRpdGlvbmFsbHksIHRyaXZpYWwgUGhpcyAo
aS5lLgorICAgICAgICAvLyBwOiBQaGkoQHgpKSBhcmUgZm9yd2FyZGVkLCBzbyB0aGF0IGlmIGhh
dmUgYW4gZWRnZSB0byBzdWNoIEBwLCB3ZQorICAgICAgICAvLyByZXBsYWNlIGl0IHdpdGggQHgu
IFRoaXMgbG9vcCBkb2VzIHRoaXMgZm9yIFBoaXMgb25seTsgbGF0ZXIgd2UgZG8KKyAgICAgICAg
Ly8gc3VjaCBmb3J3YXJkaW5nIGZvciBQaGkgcmVmZXJlbmNlcyBmb3VuZCBpbiBvdGhlciBub2Rl
cy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2VlIEF5Y29jayBhbmQgSG9yc3Bvb2wgaW4gQ0Mn
MDAgZm9yIGEgYmV0dGVyIGRlc2NyaXB0aW9uIG9mIHdoYXQKKyAgICAgICAgLy8gd2UncmUgZG9p
bmcgaGVyZS4KKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jaykK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsKKyAgICAg
ICAgICAgICAgICAgICAgTm9kZSogcGhpID0gYmxvY2stPnBoaXNbcGhpSW5kZXhdOworICAgICAg
ICAgICAgICAgICAgICBpZiAocGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IGZvcndhcmRQaGlDaGlsZHJlbihwaGkpOworICAgICAgICAgICAgICAgICAgICBkZWR1cGxpY2F0
ZUNoaWxkcmVuKHBoaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gRm9yIGVhY2ggYmFz
aWMgYmxvY2ssIGZvciBlYWNoIGxvY2FsIGxpdmUgYXQgdGhlIGhlYWQgb2YgdGhhdCBibG9jaywK
KyAgICAgICAgLy8gZmlndXJlIG91dCB3aGF0IG5vZGUgd2Ugc2hvdWxkIGJlIHJlZmVycmluZyB0
byBpbnN0ZWFkIG9mIHRoYXQgbG9jYWwuCisgICAgICAgIC8vIElmIGl0IHR1cm5zIG91dCB0byBi
ZSBhIG5vbi10cml2aWFsIFBoaSwgbWFrZSBzdXJlIHRoYXQgd2UgY3JlYXRlIGFuCisgICAgICAg
IC8vIFNTQSBQaGkgYW5kIFVwc2lsb25zIGluIHByZWRlY2Vzc29yIGJsb2Nrcy4gV2UgcmV1c2UK
KyAgICAgICAgLy8gQmFzaWNCbG9jazo6dmFyaWFibGVzQXRIZWFkIGZvciB0cmFja2luZyB3aGlj
aCBub2RlcyB0byByZWZlciB0by4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRI
ZWFkW2ldOworICAgICAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFBvaXNvbiB0aGlzIGVudHJ5IGluIHZhcmlhYmxlc0F0SGVhZCBiZWNhdXNlIHdlIGRvbid0
CisgICAgICAgICAgICAgICAgICAgIC8vIHdhbnQgYW55b25lIHRvIHRyeSB0byByZWZlciB0byBp
dCwgaWYgdGhlIHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIGNhcHR1cmVkLgor
ICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpIHx8IG5vZGUt
Pm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2Ug
PSBub2RlLT5jaGlsZHJlbi5qdXN0T25lQ2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGVkZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWRnZS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBh
IG5vbi10cml2aWFsIFBoaS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZv
cm1hdCA9IHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZUZsYWdzIHJlc3VsdCA9IHJlc3VsdEZvcihmb3JtYXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgVXNlS2luZCB1c2VLaW5kID0gdXNlS2luZEZvcihmb3JtYXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgwLCBTcGVjTm9uZSwgUGhpLCBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MocmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCgobm9kZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNrKSA9PSBy
ZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tOykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxv
Y2stPnByZWRlY2Vzc29yc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWNl
c3Nvci0+YXBwZW5kTm9uVGVybWluYWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBibG9jay0+bGFzdCgpLT5jb2RlT3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZSksIEVkZ2UocHJlZGVj
ZXNzb3ItPnZhcmlhYmxlc0F0VGFpbFtpXSwgdXNlS2luZCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSBub2RlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gQ29udmVydCBvcGVyYXRpb25zIG92ZXIgbG9jYWxzIGludG8g
b3BlcmF0aW9ucyBvdmVyIFNTQSBub2Rlcy4KKyAgICAgICAgLy8gLSBHZXRMb2NhbCBvdmVyIGNh
cHR1cmVkIHZhcmlhYmxlcyBsb3NlIHRoZWlyIHBoaXMuCisgICAgICAgIC8vIC0gR2V0TG9jYWwg
b3ZlciB1bmNhcHR1cmVkIHZhcmlhYmxlcyBkaWUgYW5kIGdldCByZXBsYWNlZCB3aXRoIHJlZmVy
ZW5jZXMKKyAgICAgICAgLy8gICB0byB0aGUgbm9kZSBzcGVjaWZpZWQgYnkgdmFyaWFibGVzQXRI
ZWFkLgorICAgICAgICAvLyAtIFNldExvY2FsIGdldHMgTm9kZU11c3RHZW5lcmF0ZSBpZiBpdCdz
IGZsdXNoZWQsIG9yIHR1cm5zIGludG8gYQorICAgICAgICAvLyAgIE1vdkhpbnQgb3RoZXJ3aXNl
LgorICAgICAgICAvLyAtIEZsdXNoIGxvc2VzIGl0cyBjaGlsZHJlbiBidXQgcmVtYWlucywgYmVj
YXVzZSB3ZSB3YW50IHRvIGtub3cgd2hlbiBhCisgICAgICAgIC8vICAgZmx1c2hlZCBTZXRMb2Nh
bCdzIHZhbHVlIGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoaXMgYWxzbyBtYWtlcyBpdCBzaW1wbGVy
CisgICAgICAgIC8vICAgdG8gcmVhc29uIGFib3V0IHRoZSBmb3JtYXQgb2YgYSBsb2NhbCwgc2lu
Y2Ugd2UgY2FuIGp1c3QgZm9sZCBpdCBpbnRvIHRoZQorICAgICAgICAvLyAgIGJhY2t3YXJkcyBh
bmFseXNpcyB0aGF0IExpdmVuZXNzQW5hbHlzaXNQaGFzZSBkb2VzLiBBcyBwYXJ0IG9mIHRoZQor
ICAgICAgICAvLyAgIGJhY2t3YXJkcyBhbmFseXNpcywgd2Ugc2F5IHRoYXQgdGhlIHR5cGUgb2Yg
YSBsb2NhbCBjYW4gYmUgZWl0aGVyCisgICAgICAgIC8vICAgaW50MzIsIGRvdWJsZSwgdmFsdWUs
IG9yIGRlYWQuCisgICAgICAgIC8vIC0gUGhhbnRvbUxvY2FsIGJlY29tZXMgUGhhbnRvbSwgYW5k
IGl0cyBjaGlsZCBpcyB3aGF0ZXZlciBpcyBzcGVjaWZpZWQKKyAgICAgICAgLy8gICBieSB2YXJp
YWJsZXNBdEhlYWQuCisgICAgICAgIC8vIC0gU2V0QXJndW1lbnQgdHVybnMgaW50byBHZXRBcmd1
bWVudC4KKyAgICAgICAgLy8gLSBVcHNpbG9ucyBnZXQgdGhlaXIgY2hpbGRyZW4gZml4ZWQgdG8g
cmVmZXIgdG8gdGhlIHRydWUgdmFsdWUgb2YgdGhhdCBsb2NhbAorICAgICAgICAvLyAgIGF0IHRo
ZSBlbmQgb2YgdGhlIGJsb2NrLiBQcmlvciB0byB0aGlzIGxvb3AsIFVwc2lsb25zIHdpbGwgcmVm
ZXIgdG8KKyAgICAgICAgLy8gICB2YXJpYWJsZUF0VGFpbFtvcGVyYW5kXSwgd2hpY2ggbWF5IGJl
IGFueSBvZiBGbHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwKKyAgICAgICAgLy8gICBTZXRM
b2NhbCwgU2V0QXJndW1lbnQsIG9yIFBoaS4gV2UgYWNjb21wbGlzaCB0aGlzIGJ5IHNldHRpbmcg
dGhlCisgICAgICAgIC8vICAgcmVwbGFjZW1lbnQgcG9pbnRlcnMgb2YgYWxsIG9mIHRob3NlIG5v
ZGVzIHRvIHJlZmVyIHRvIGVpdGhlcgorICAgICAgICAvLyAgIHZhcmlhYmxlc0F0SGVhZFtvcGVy
YW5kXSwgb3IgdGhlIGNoaWxkIG9mIHRoZSBTZXRMb2NhbC4KKyAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBo
aXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGJsb2NrLT5waGlzW3Bo
aUluZGV4XS0+cmVwbGFjZW1lbnQgPQorICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQoYmxvY2stPnBoaXNbcGhpSW5kZXhdLT5sb2NhbCgpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNp
emUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgICAgIGJsb2NrLT5hdChub2RlSW5kZXgp
LT5yZXBsYWNlbWVudCA9IDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0
aW9uKG5vZGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQo
KSB8fCBtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVs
dEZsYWdzKE1vdkhpbnQpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsgLy8gT25seSBmb3IgVXBzaWxvbnMuCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICAv
LyBJdCBzZWVtcyB0ZW1wdGluZyB0byBqdXN0IGRvIGZvcndhcmRQaGkoR2V0TG9jYWwpLCBleGNl
cHQgdGhhdCB3ZQorICAgICAgICAgICAgICAgICAgICAvLyBjb3VsZCBoYXZlIGNyZWF0ZWQgYSBu
ZXcgKFNTQSkgUGhpLCBhbmQgdGhlIEdldExvY2FsIGNvdWxkIHN0aWxsIGJlCisgICAgICAgICAg
ICAgICAgICAgIC8vIHJlZmVycmluZyB0byBhbiBvbGQgKENQUykgUGhpLiBVc2VzIHZhcmlhYmxl
c0F0SGVhZCB0byB0ZWxsIHVzIHdoYXQKKyAgICAgICAgICAgICAgICAgICAgLy8gdG8gcmVmZXIg
dG8uCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1
cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5y
ZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDogeworICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIG9ubHkgZm9yIFVwc2lsb25zLiBBbiBVcHNpbG9uIHdpbGwgb25seSByZWZl
ciB0byBhIEZsdXNoIGlmCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIHdlcmUgbm8gU2V0
TG9jYWxzIG9yIEdldExvY2FscyBpbiB0aGUgYmxvY2suCisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7
CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxl
LT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0Tm9kZShibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkg
Zm9yIFVwc2lsb25zLiBBbiBVcHNpbG9uIHdpbGwgb25seSByZWZlciB0byBhCisgICAgICAgICAg
ICAgICAgICAgIC8vIFBoYW50b21Mb2NhbCBpZiB0aGVyZSB3ZXJlIG5vIFNldExvY2FscyBvciBH
ZXRMb2NhbHMgaW4gdGhlIGJsb2NrLgorICAgICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNl
bWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogeworICAgICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRBcmd1bWVudCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MocmVzdWx0Rm9yKG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRnJlZSBhbGwgcGhpcyBhbmQgcmVzZXQg
dmFyaWFibGVzIHZlY3RvcnMuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAg
ICAgICAgICAgIG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0p
OworICAgICAgICAgICAgYmxvY2stPnBoaXMuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKKyAg
ICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2Nr
LT5zc2EgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jazo6U1NBRGF0YShibG9jaykpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLmNsZWFyKCk7CisgICAg
ICAgIAorICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFNTQTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZm9yd2FyZFBoaUNoaWxkcmVuKE5vZGUqIG5v
ZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlz
dDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlJiBlZGdlID0gbm9kZS0+Y2hpbGRyZW4u
Y2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gZm9yd2FyZFBoaUVkZ2UoZWRnZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogZm9yd2FyZFBoaShOb2RlKiBub2RlKQorICAg
IHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CisgICAgICAgICAgICBjYXNlIFBoaTogeworICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5v
ZGUtPmNoaWxkcmVuLmp1c3RPbmVDaGlsZCgpOworICAgICAgICAgICAgICAgIGlmICghZWRnZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVkZ2Uubm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
KyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgZm9yd2FyZFBoaUVk
Z2UoRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIE5vZGUqIG5ld05vZGUgPSBmb3J3YXJkUGhp
KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKG5ld05vZGUgPT0gZWRnZS5ub2RlKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVkZ2Uuc2V0Tm9kZShuZXdOb2RlKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVkdXBsaWNhdGVDaGls
ZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9k
ZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZWRnZSA9PSBub2RlKSB7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0pOworICAgICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IEFkamFjZW5jeUxpc3Q6
OlNpemU7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZHJlbi5jaGlsZChq
KSA9PSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVk
Z2Uoai0tKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBhZGRGbHVzaGVkTG9jYWxPcChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG1fZmx1
c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBtX2ZsdXNoZWRMb2NhbE9wcy5hZGQobm9kZSk7CisgICAgICAgIG1fZmx1c2hlZExvY2FsT3BX
b3JrbGlzdC5hcHBlbmQobm9kZSk7CisgICAgfQorCisgICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxF
ZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChl
ZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNl
dDsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wczsKKyAgICBWZWN0b3I8Tm9k
ZSo+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKKyAgICBib29sIG1fY2hhbmdlZDsKK307CisK
K2Jvb2wgcGVyZm9ybVNTQUNvbnZlcnNpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5n
UmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgU1NBIENvbnZlcnNpb24gUGhhc2UiKTsKKyAgICBy
ZXR1cm4gcnVuUGhhc2U8U1NBQ29udmVyc2lvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHU1NBQ29udmVyc2lv
blBoYXNlX2gKKyNkZWZpbmUgREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbnZlcnQgVGhyZWFkZWRDUFMg
Zm9ybSBpbnRvIFNTQSBmb3JtLiBUaGlzIHJlc3VsdHMgaW4gYSBmb3JtIHRoYXQgaGFzOgorLy8K
Ky8vIC0gUm91Z2hseSBtaW5pbWFsIFBoaSdzLiBXZSB1c2UgdGhlIEF5Y29jayAmIEhvcnNwb29s
IGZpeHBvaW50IGZvcgorLy8gICBjb252ZXJ0aW5nIHRoZSBDUFMgbWF4aW1hbCBQaGlzIGludG8g
U1NBIG1pbmltYWwgUGhpcywgd2l0aCB0aGUgY2F2ZWF0CisvLyAgIHRoYXQgaXJyZWR1Y2libGUg
Y29udHJvbCBmbG93IG1heSByZXN1bHQgaW4gc29tZSBtaXNzZWQgb3Bwb3J0dW5pdGllcworLy8g
ICBmb3IgUGhpIHJlZHVjdGlvbi4KKy8vCisvLyAtIE5vIHVzZXMgb2YgR2V0TG9jYWwvU2V0TG9j
YWwgZXhjZXB0IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGZsdXNoZXMuCisvLyAgIEFmdGVy
IHRoaXMsIGFueSByZW1haW5pbmcgU2V0TG9jYWwgbWVhbnMgRmx1c2guIEZsdXNoIG5vZGVzIGFy
ZQorLy8gICBlbGltaW5hdGVkLiBQaGFudG9tTG9jYWxzIGJlY29tZSBQaGFudG9tcy4gTm9kZXMg
bWF5IG1heSBoYXZlIGNoaWxkcmVuCisvLyAgIHRoYXQgYXJlIGluIGFub3RoZXIgYmFzaWMgYmxv
Y2suCisvLworLy8gLSBNb3ZIaW50cyBhcmUgdXNlZCBmb3IgT1NSIGluZm9ybWF0aW9uLCBhbmQg
YXJlIHRoZW1zZWx2ZXMgbWluaW1hbC4KKy8vICAgQSBNb3ZIaW50IHdpbGwgb2NjdXIgYXQgc29t
ZSBwb2ludCBhZnRlciB0aGUgYXNzaWduaW5nLCBhbmQgYXQgUGhpCisvLyAgIHBvaW50cy4KKy8v
CisvLyAtIFVubGlrZSBjb252ZW50aW9uYWwgU1NBIGluIHdoaWNoIFBoaSBmdW5jdGlvbnMgcmVm
ZXIgdG8gcHJlZGVjZXNzb3JzCisvLyAgIGFuZCB2YWx1ZXMsIG91ciBTU0EgdXNlcyBVcHNpbG9u
IGZ1bmN0aW9ucyB0byBpbmRpY2F0ZSB2YWx1ZXMgaW4KKy8vICAgcHJlZGVjZXNzb3JzLiBBIG1l
cmdlIHdpbGwgbG9vayBsaWtlOgorLy8KKy8vICAgbGFiZWxBOgorLy8gICAgICAgYTogVGhpbmd5
KC4uLikKKy8vICAgICAgIGI6IFVwc2lsb24oXmUsIEBhKQorLy8gICAgICAgSnVtcChsYWJlbEMp
CisvLworLy8gICBsYWJlbEI6CisvLyAgICAgICBjOiBPdGhlclRoaW5neSguLi4pCisvLyAgICAg
ICBkOiBVcHNpbG9uKF5lLCBAYykKKy8vICAgICAgIEp1bXAobGFiZWxDKQorLy8KKy8vICAgbGFi
ZWxDOgorLy8gICAgICAgZTogUGhpKCkKKy8vCisvLyAgIE5vdGUgdGhhdCB0aGUgUGhpIGhhcyBu
byBjaGlsZHJlbiwgYnV0IHRoZSBwcmVkZWNlc3NvcnMgaGF2ZSBVcHNpbG9ucworLy8gICB0aGF0
IGhhdmUgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgUGhpICheZSBpbnN0ZWFkIG9mIEBlOyB3ZSBz
dG9yZSBpdAorLy8gICBpbiB0aGUgT3BJbmZvIHJhdGhlciB0aGFuIHRoZSBBZGphY2VuY3lMaXN0
KS4gVGhpbmsgb2YgdGhlIFVwc2lsb24KKy8vICAgYXMgImFzc2lnbmluZyIgdG8gdGhlICJ2YXJp
YWJsZSIgYXNzb2NpYXRlZCB3aXRoIHRoZSBQaGksIGFuZCB0aGF0CisvLyAgIHRoaXMgaXMgdGhl
IG9uZSBwbGFjZSBpbiBTU0EgZm9ybSB3aGVyZSB5b3UgY2FuIGhhdmUgbXVsdGlwbGUKKy8vICAg
YXNzaWdubWVudHMuCisvLworLy8gICBUaGlzIGltcGxpZXMgc29tZSBvdGhlciBsb29zZW5pbmdz
IG9mIFNTQS4gRm9yIGV4YW1wbGUsIGFuIFVwc2lsb24KKy8vICAgbWF5IHByZWNlZGUgYSBQaGkg
aW4gdGhlIHNhbWUgYmFzaWMgYmxvY2s7IHRoaXMgbWF5IGFyaXNlIGFmdGVyIENGRworLy8gICBz
aW1wbGlmaWNhdGlvbi4gQWx0aG91Z2ggaXQncyBwcm9maXRhYmxlIGZvciBDRkcgc2ltcGxpZmlj
YXRpb24gKG9yCisvLyAgIHNvbWUgb3RoZXIgcGhhc2UpIHRvIHJlbW92ZSB0aGVzZSwgaXQncyBu
b3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBBcworLy8gICB3ZWxsLCB0aGlzIGZvcm0gYWxsb3dzIHRo
ZSBVcHNpbG9uIHRvIGJlIGluIGFueSBibG9jayB0aGF0IGRvbWluYXRlcworLy8gICB0aGUgcHJl
ZGVjZXNzb3IgYmxvY2sgb2YgdGhlIFBoaSwgd2hpY2ggYWxsb3dzIGZvciBibG9jayBzcGxpdHRp
bmcgdG8KKy8vICAgaWdub3JlIHRoZSBwb3NzaWJpbGl0eSBvZiBpbnRyb2R1Y2luZyBhbiBleHRy
YSBlZGdlIGJldHdlZW4gdGhlIFBoaQorLy8gICBhbmQgdGhlIHByZWRlY2Vzc29yICh0aG91Z2gg
bm9ybWFsIFNTQSB3b3VsZCBhbGxvdyB0aGlzLCBhbHNvLCB3aXRoCisvLyAgIHRoZSBjYXZlYXQg
dGhhdCB0aGUgUGhpIHByZWRlY2Vzc29yIGJsb2NrIGxpc3RzIHdvdWxkIGhhdmUgdG8gYmUKKy8v
ICAgdXBkYXRlZCkuCisvLworLy8gICBUaGUgZWFzaWVzdCB3YXkgdG8gY29udmVydCBmcm9tIHRo
aXMgU1NBIGZvcm0gaW50byBhIGRpZmZlcmVudCBTU0EKKy8vICAgZm9ybSBpcyB0byByZWRvIFNT
QSBjb252ZXJzaW9uIGZvciBQaGkgZnVuY3Rpb25zLiBUaGF0IGlzLCB0cmVhdCBlYWNoCisvLyAg
IFBoaSBpbiBvdXIgSVIgYXMgYSBub24tU1NBIHZhcmlhYmxlIGluIHRoZSBmb3JlaWduIElSIChz
bywgYXMgYW4KKy8vICAgYWxsb2NhIGluIExMVk0gSVIsIGZvciBleGFtcGxlKTsgdGhlIFVwc2ls
b25zIHRoYXQgcmVmZXIgdG8gdGhlIFBoaQorLy8gICBiZWNvbWUgc3RvcmVzIGFuZCB0aGUgUGhp
cyB0aGVtc2VsdmVzIGJlY29tZSBsb2Fkcy4KKy8vCisvLyAgIEZ1biBmYWN0OiBVcHNpbG9uIGlz
IHNvIG5hbWVkIGJlY2F1c2UgaXQgY29tZXMgYmVmb3JlIFBoaSBpbiB0aGUKKy8vICAgYWxwaGFi
ZXQuIEl0IGNhbiBiZSB3cml0dGVuIGFzICJZIi4KKworYm9vbCBwZXJmb3JtU1NBQ29udmVyc2lv
bihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM5NSw3ICs0Mzk1
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICBjYXNlIFBoaToKICAgICBjYXNlIEZsdXNoOgogICAgICAgICBi
cmVhazsKIApAQCAtNDgyOSw2ICs0ODI4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgor
ICAgIGNhc2UgUGhpOgorICAgIGNhc2UgVXBzaWxvbjoKKyAgICBjYXNlIEdldEFyZ3VtZW50Ogog
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOTYsNyArNDI5
Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAK
ICAgICBjYXNlIEZsdXNoOgotICAgIGNhc2UgUGhpOgogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgQnJlYWtwb2ludDoKQEAgLTQ2OTAsNiArNDY4OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2Ug
TGFzdE5vZGVUeXBlOgorICAgIGNhc2UgUGhpOgorICAgIGNhc2UgVXBzaWxvbjoKKyAgICBjYXNl
IEdldEFyZ3VtZW50OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDI0ICs4MSwyOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBWX0VRVUFMKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkp
LCAwKSwgc3RhdGljX2Nhc3Q8Tm9kZSo+KDApLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwo
aSkpOwogICAgICAgICAKICAgICAgICAgLy8gVmFsaWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4K
LSAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG15UmVmQ291bnRzOwogICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJs
b2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJs
b2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBWQUxJREFURSgoYmxvY2spLCBibG9jay0+aXNSZWFj
aGFibGUpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9k
ZXMoKTsgKytpKQotICAgICAgICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShp
KSwgMCk7CisgICAgICAgICAgICAgICAgbV9teVJlZkNvdW50cy5hZGQoYmxvY2stPm5vZGUoaSks
IDApOwogICAgICAgICB9Ci0gICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGFjY2VwdGFibGVOb2RlczsK
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJs
b2NrIHx8ICFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5ub2RlKGkpOwotICAgICAgICAgICAgICAgIGFjY2VwdGFibGVOb2Rlcy5hZGQobm9k
ZSk7CisgICAgICAgICAgICAgICAgbV9hY2NlcHRhYmxlTm9kZXMuYWRkKG5vZGUpOwogICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVXBzaWxvbikg
eworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG1fZ3JhcGgubV9mb3JtID09
IFNTQSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5waGkoKS0+c2hvdWxkR2VuZXJh
dGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbXlSZWZDb3VudHMuZmluZChub2RlKS0+
dmFsdWUrKzsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAg
ICAgICAgICAgICAvLyBQaGkgY2hpbGRyZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQu
CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYg
YmxvY2stPmlzUGhpSW5kZXgoaSkpCkBAIC0xMDgsMjIgKzExMiwyOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbXlSZWZDb3Vu
dHMuZmluZChlZGdlLm5vZGUoKSktPnZhbHVlKys7CisgICAgICAgICAgICAgICAgICAgIG1fbXlS
ZWZDb3VudHMuZmluZChlZGdlLm5vZGUoKSktPnZhbHVlKys7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJbiBTU0EsIGFsbCBlZGdlcyBtdXN0IGhhc1Jlc3VsdCgp
LgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5o
YXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
Ly8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFudG9tLCBHZXRMb2NhbCwgb3IgUGhpLCBteSBjaGls
ZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAg
ICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YShtX2dyYXBoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSwgZWRnZSksIGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEobV9ncmFwaCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUsIGVkZ2UpLCBlZGdlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwg
ZWRnZSksIGVkZ2UtPm9wKCkgIT0gU2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2Ut
Pmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gTG9jYWxseVVuaWZpZWQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKQEAgLTE0OCw2ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzUmVzdWx0KCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBTU0E6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTU3LDkgKzE3MCw0NCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2sgfHwg
IWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2Nr
LT5udW1Ob2RlcygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
Pm5vZGUoaSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09
IEV4YWN0UmVmQ291bnQpCisgICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBtX215
UmVmQ291bnRzLmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBub2RlLT5y
ZWZDb3VudCgpLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChtX2dyYXBoLm1fZm9ybSkgeworICAgICAgICBjYXNlIExvYWRTdG9yZToKKyAg
ICAgICAgY2FzZSBUaHJlYWRlZENQUzoKKyAgICAgICAgICAgIHZhbGlkYXRlQ1BTKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFNTQToKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgU1NBIHZlcmlmaWNhdGlvbi4KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBHcmFwaCYgbV9ncmFw
aDsKKyAgICBHcmFwaER1bXBNb2RlIG1fZ3JhcGhEdW1wTW9kZTsKKyAgICAKKyAgICBIYXNoTWFw
PE5vZGUqLCB1bnNpZ25lZD4gbV9teVJlZkNvdW50czsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2Fj
Y2VwdGFibGVOb2RlczsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlQ1BTKCkKKyAgICB7CisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSGFz
aFNldDxOb2RlKj4gcGhpc0luVGhpc0Jsb2NrOwpAQCAtMTcwLDE1ICsyMTgsMTEgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwogICAgICAgICAg
ICAgICAgIGlmIChibG9jay0+aXNQaGlJbmRleChpKSkKICAgICAgICAgICAgICAgICAgICAgcGhp
c0luVGhpc0Jsb2NrLmFkZChub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3Jl
ZkNvdW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCkKLSAgICAgICAgICAgICAgICAgICAgVl9FUVVB
TCgobm9kZSksIG15UmVmQ291bnRzLmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgp
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5v
ZGUpLCBub2RlLT5yZWZDb3VudCgpLCAxKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAg
ICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGFjY2VwdGFibGVOb2Rl
cy5jb250YWlucyhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZSwgZWRnZSksIG1fYWNjZXB0YWJsZU5vZGVzLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMjgsNyAr
MjcyLDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAw
OyBrIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsraykgewogICAgICAgICAgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0gYmxvY2stPnByZWRlY2Vzc29yc1trXTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChibG9jay0+cHJlZGVjZXNzb3JzW2td
KSwgcHJldkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChibG9jay0+
cHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQobG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBo
aSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vz
c29ycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZh
aWxhYmxlLgpAQCAtMjc0LDE3ICszMTcsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgoc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihhcmd1bWVudFRvT3BlcmFuZChpKSksIGJsb2NrKSwg
IWJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5hcmd1bWVudChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGFyZ3VtZW50VG9PcGVy
YW5kKGkpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEo
bV9ncmFwaCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRl
ZENQUykKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxS
ZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJhbmQoaSkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSkt
Pmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJhbmQoaSkpLCBibG9j
ayksICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMuYXJndW1l
bnQoaSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMuYXJndW1l
bnQoaSkgPSBub3RTZXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
aSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkgfHwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCBibG9j
ayksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQotICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpKSwgYmxvY2sp
LCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRU
YWlsLmxvY2FsKGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCBibG9jayksICFi
bG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAKICAgICAgICAgICAg
ICAgICBnZXRMb2NhbFBvc2l0aW9ucy5sb2NhbChpKSA9IG5vdFNldDsKICAgICAgICAgICAgICAg
ICBzZXRMb2NhbFBvc2l0aW9ucy5sb2NhbChpKSA9IG5vdFNldDsKQEAgLTMyMSw3ICszNjQsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgLy8gSWdub3JlIEdldExvY2FsJ3MgdGhhdCB3ZSBrbm93IHRvIGJlIGRlYWQsIGJ1dCB0
aGF0IHRoZSBncmFwaAogICAgICAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IHlldCBrbm93IHRv
IGJlIGRlYWQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghbXlSZWZDb3VudHMuZ2V0KG5vZGUp
KQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbXlSZWZDb3VudHMuZ2V0KG5vZGUpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlLCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPT0gbm90U2V0KTsKQEAgLTM1NSwxMCArMzk4LDYgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgfQogICAgIAotcHJpdmF0ZToKLSAgICBHcmFwaCYgbV9ncmFwaDsKLSAgICBHcmFwaER1bXBN
b2RlIG1fZ3JhcGhEdW1wTW9kZTsKLSAgICAKICAgICB2b2lkIGNoZWNrT3BlcmFuZCgKICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2ssIE9wZXJhbmRzPHNpemVfdD4mIGdldExvY2FsUG9zaXRpb25z
LAogICAgICAgICBPcGVyYW5kczxzaXplX3Q+JiBzZXRMb2NhbFBvc2l0aW9ucywgaW50IG9wZXJh
bmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNkZWZpbmUgREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gKIAogI2luY2x1ZGUgIkRGR0RvdWJs
ZUZvcm1hdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHRmx1c2hGb3JtYXQuaCIKICNpbmNsdWRlICJE
RkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlNwZWN1bGF0
ZWRUeXBlLmgiCkBAIC0zMTgsNiArMzE5LDI5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNo
ZWNrQW5kU2V0KG1fZmxhZ3MsIG1fZmxhZ3MgfCBuZXdGbGFncyk7CiAgICAgfQogICAgIAorICAg
IEZsdXNoRm9ybWF0IGZsdXNoRm9ybWF0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChmaW5kKCkg
PT0gdGhpcyk7CisgICAgICAgIAorICAgICAgICBpZiAoIXNob3VsZFVuYm94SWZQb3NzaWJsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRKU1ZhbHVlOworICAgICAgICAKKyAgICAgICAg
aWYgKHNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRE
b3VibGU7CisgICAgICAgIAorICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gYXJn
dW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkSW50MzI7CisgICAgICAgIAor
ICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICBy
ZXR1cm4gRmx1c2hlZENlbGw7CisgICAgICAgIAorICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3Vs
YXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gRmx1c2hlZEJvb2xlYW47Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gRmx1c2hlZEpTVmFsdWU7CisgICAgfQorICAgIAogcHJp
dmF0ZToKICAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBh
bnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKICAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUgb3Bl
cmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAx
NTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShO
b2RlKiBub2RlKQogICAgIGNhc2UgSnVtcDoKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBj
YXNlIEZvcndhcmRGb3JjZU9TUkV4aXQ6CisgICAgY2FzZSBQaGk6CisgICAgY2FzZSBVcHNpbG9u
OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0
QXJyYXlMZW5ndGg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAi
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIK
KyNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0Lmgi
CiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiRlRMVmFsdWVTb3VyY2UuaCIKQEAg
LTYxLDEwICs2Miw2IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQogICAg
ICAgICAsIG1faGVhcHMoc3RhdGUuY29udGV4dCkKICAgICAgICAgLCBtX291dChzdGF0ZS5jb250
ZXh0KQotICAgICAgICAsIG1fbG9jYWxzQm9vbGVhbihPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwgbV9sb2NhbHMzMihPcGVyYW5k
c0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwg
bV9sb2NhbHM2NChPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQpCi0gICAgICAgICwgbV9sb2NhbHNEb3VibGUoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fdmFsdWVTb3VyY2VzKE9w
ZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKICAgICAg
ICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAg
ICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCkBAIC03NCw2ICs3MSw4IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGxvd2VyKCkKICAgICB7CisgICAgICAgIG1fZ3JhcGgubV9k
b21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAgCiAgICAgICAg
IG1fZnRsU3RhdGUubW9kdWxlID0KICAgICAgICAgICAgIExMVk1Nb2R1bGVDcmVhdGVXaXRoTmFt
ZUluQ29udGV4dCgianNCb2R5IiwgbV9mdGxTdGF0ZS5jb250ZXh0KTsKICAgICAgICAgCkBAIC04
NSwxNSArODQsOSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX3Byb2xvZ3VlID0gYXBw
ZW5kQmFzaWNCbG9jayhtX2Z0bFN0YXRlLmNvbnRleHQsIG1fZnRsU3RhdGUuZnVuY3Rpb24pOwog
ICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IG1fbG9jYWxzQm9vbGVhbi5zaXplKCk7IGluZGV4LS07KSB7Ci0gICAgICAgICAg
ICBtX2xvY2Fsc0Jvb2xlYW5baW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBt
X291dC5ib29sZWFuKTsKLSAgICAgICAgICAgIG1fbG9jYWxzMzJbaW5kZXhdID0gYnVpbGRBbGxv
Y2EobV9vdXQubV9idWlsZGVyLCBtX291dC5pbnQzMik7Ci0gICAgICAgICAgICBtX2xvY2FsczY0
W2luZGV4XSA9IGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgbV9vdXQuaW50NjQpOwotICAg
ICAgICAgICAgbV9sb2NhbHNEb3VibGVbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWls
ZGVyLCBtX291dC5kb3VibGVUeXBlKTsKLSAgICAgICAgfQorICAgICAgICBjcmVhdGVQaGlWYXJp
YWJsZXMoKTsKICAgICAgICAgCiAgICAgICAgIG1faW5pdGlhbGl6YXRpb24gPSBhcHBlbmRCYXNp
Y0Jsb2NrKG1fZnRsU3RhdGUuY29udGV4dCwgbV9mdGxTdGF0ZS5mdW5jdGlvbik7Ci0gICAgICAg
IG1fYXJndW1lbnRDaGVja3MgPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuY29udGV4dCwg
bV9mdGxTdGF0ZS5mdW5jdGlvbik7CiAKICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5wYXJh
bSgwKTsKICAgICAgICAgbV90YWdUeXBlTnVtYmVyID0gbV9vdXQuY29uc3RJbnQ2NChUYWdUeXBl
TnVtYmVyKTsKQEAgLTEwNCwxOSArOTcsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFt
X2hpZ2hCbG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fYmxv
Y2tzLmFkZChtX2hpZ2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9jayAiLCAqbV9o
aWdoQmxvY2spKSk7Ci0gICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygpOwotICAg
ICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9hcmd1bWVudENoZWNrcywgbG93QmxvY2so
bV9ncmFwaC5ibG9jaygwKSkpOwotCi0gICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMo
KTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ncmFwaC5ibG9jaygw
KSkpOwotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KQotICAgICAgICAg
ICAgY29tcGlsZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+
IGRlcHRoRmlyc3Q7CisgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIo
ZGVwdGhGaXJzdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgY29tcGlsZUJsb2NrKGRlcHRoRmlyc3RbaV0pOwog
ICAgICAgICAKICAgICAgICAgLy8gQW5kIG5vdyBjb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24g
YmxvY2suCiAgICAgICAgIGxpbmtPU1JFeGl0c0FuZENvbXBsZXRlSW5pdGlhbGl6YXRpb25CbG9j
a3MoKTsKQEAgLTEyOSw5OSArMTE1LDUxIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAKLSAg
ICB2b2lkIGFkZEZsdXNoZWRMb2NhbE9wUm9vdHMoKQorICAgIHZvaWQgY3JlYXRlUGhpVmFyaWFi
bGVzKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gbV9oaWdoQmxv
Y2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9o
aWdoQmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBG
bHVzaCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFkZEZsdXNoZWRM
b2NhbE9wKG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xvc2VPdmVy
Rmx1c2hlZExvY2FsT3BzKCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICghbV9mbHVzaGVkTG9jYWxP
cFdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZmx1c2hl
ZExvY2FsT3BXb3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29y
a2xpc3QucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9m
bHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRGbHVzaGVkTG9jYWxF
ZGdlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbE9w
KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFp
bnMobm9kZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZmx1c2hlZExvY2FsT3Bz
LmFkZChub2RlKTsKLSAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmFwcGVuZChub2Rl
KTsKLSAgICB9Ci0gICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxFZGdlKE5vZGUqLCBFZGdlIGVkZ2Up
Ci0gICAgewotICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChlZGdlLm5vZGUoKSk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgdHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50cygpCi0gICAgewotICAgICAg
ICAvLyBXaGlsZSBjaGVja2luZyBhcmd1bWVudHMsIGV2ZXJ5dGhpbmcgaXMgaW4gdGhlIHN0YWNr
LgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhbHVlU291cmNlcy5zaXplKCk7IGktLTsp
Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0
YWNrKTsKLSAgICAgICAgCi0gICAgICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4oMCk7Ci0g
ICAgICAgIG1fbm9kZSA9IDA7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgIGlmICgh
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgLy8gSWYgaXQncyBjYXB0dXJlZCB0
aGVuIHdlJ2xsIGJlIGFjY2Vzc2luZyBpdCB0aHJvdWdoIGxvYWRzIGFuZCBzdG9yZXMKLSAgICAg
ICAgICAgIC8vIGFueXdheSAtIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gdHJhbnNmZXJpbmcgaXQgb3V0
LgotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2Fk
NjQoYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIXZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikp
IHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1
ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuc2V0KHVuYm94SW50MzIoanNWYWx1ZSksIG1fbG9jYWxzMzIub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlz
Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RD
ZWxsKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1f
bG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGlzQm9v
bGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RC
b29sZWFuKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHVuYm94Qm9v
bGVhbihqc1ZhbHVlKSwgbV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsg
bm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFBoaSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgTFR5cGUgdHlwZTsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgewor
ICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdE51bWJlcjoKKyAgICAgICAgICAgICAgICAg
ICAgdHlwZSA9IG1fb3V0LmRvdWJsZVR5cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gbV9vdXQuaW50MzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIHR5
cGUgPSBtX291dC5ib29sZWFuOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1f
b3V0LmludDY0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbV9waGlzLmFkZChub2RlLCBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIHR5
cGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuc2V0
KGpzVmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUJsb2NrKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCkKKyAgICB2b2lkIGNvbXBpbGVCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0g
ICAgICAgIG1faGlnaEJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAg
ZGF0YUxvZygiQ29tcGlsaW5nIGJsb2NrICIsICpibG9jaywgIlxuIik7CisgICAgICAgIAorICAg
ICAgICBtX2hpZ2hCbG9jayA9IGJsb2NrOwogICAgICAgICBpZiAoIW1faGlnaEJsb2NrKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbG93QmxvY2sg
PSBtX2Jsb2Nrcy5nZXQobV9oaWdoQmxvY2spOwogICAgICAgICAKICAgICAgICAgbV9uZXh0SGln
aEJsb2NrID0gMDsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IG5leHRCbG9ja0luZGV4ID0gYmxv
Y2tJbmRleCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytuZXh0
QmxvY2tJbmRleCkgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBt
X2hpZ2hCbG9jay0+aW5kZXggKyAxOyBuZXh0QmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9IG1f
Z3JhcGguYmxvY2sobmV4dEJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKG1fbmV4dEhpZ2hC
bG9jaykKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0MSwxMSArMTc5LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JCbG9jaygpOwog
ICAgICAgICAKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5jbGVhcigpOwotICAgICAgICBtX2pzVmFs
dWVWYWx1ZXMuY2xlYXIoKTsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmNsZWFyKCk7Ci0gICAg
ICAgIG1fc3RvcmFnZVZhbHVlcy5jbGVhcigpOwotICAgICAgICBtX3RpbWVUb0xpdmUuY2xlYXIo
KTsKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKICAgICAgICAgCiAg
ICAgICAgIG1fc3RhdGUucmVzZXQoKTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2so
bV9oaWdoQmxvY2spOwpAQCAtMjc0LDEyICsyMDgsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgbV9k
aXJlY3Rpb24gPSAobV9ub2RlLT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkgPyBGb3J3YXJk
U3BlY3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOwogICAgICAgICAKICAgICAgICAgc3dp
dGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBVcHNpbG9uOgorICAgICAgICAgICAg
Y29tcGlsZVVwc2lsb24oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBoaToK
KyAgICAgICAgICAgIGNvbXBpbGVQaGkoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb21waWxlSlNDb25zdGFudCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgICAgICAgICBj
b21waWxlV2Vha0pTQ29uc3RhbnQoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEdldEFyZ3VtZW50OgorICAgICAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50KCk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNvbXBpbGVH
ZXRMb2NhbCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00NDUsOCArMzg4LDggQEAgcHJpdmF0
ZToKICAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIERG
R19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgdXNlKTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChtX25vZGUtPmhhc1Jlc3VsdCgpKQotICAgICAgICAgICAgbV90aW1lVG9MaXZl
LmFkZChtX25vZGUsIG1fbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgaWYgKG1f
bm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKQorICAgICAgICAgICAgbV9saXZlLmFkZChtX25vZGUp
OwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEV4ZWN1dGVFZmZlY3RzKQogICAgICAgICAg
ICAgbV9zdGF0ZS5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOwpAQCAtNDU0LDczICszOTcsMTE2
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKKyAgICB2b2lk
IGNvbXBpbGVVcHNpbG9uKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBkZXN0aW5hdGlvbiA9IG1f
cGhpcy5nZXQobV9ub2RlLT5waGkoKSk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAg
ICAgICAgbV9vdXQuc2V0KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAg
ICBtX291dC5zZXQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgICAgICBt
X291dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgICAgIG1fb3V0
LnNldChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgbV9vdXQuc2V0
KGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHZvaWQgY29tcGlsZVBoaSgpCisgICAgeworICAgICAgICBMVmFsdWUgc291cmNlID0gbV9w
aGlzLmdldChtX25vZGUpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmZsYWdz
KCkgJiBOb2RlUmVzdWx0TWFzaykgeworICAgICAgICBjYXNlIE5vZGVSZXN1bHROdW1iZXI6Cisg
ICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZ2V0KHNvdXJjZSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgc2V0SW50MzIo
bV9vdXQuZ2V0KHNvdXJjZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9k
ZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmdldChzb3VyY2Up
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUobV9vdXQuZ2V0KHNvdXJjZSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgdm9p
ZCBjb21waWxlSlNDb25zdGFudCgpCiAgICAgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9n
cmFwaC52YWx1ZU9mSlNDb25zdGFudChtX25vZGUpOwogICAgICAgICBpZiAodmFsdWUuaXNEb3Vi
bGUoKSkKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmNvbnN0
RG91YmxlKHZhbHVlLmFzRG91YmxlKCkpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5j
b25zdERvdWJsZSh2YWx1ZS5hc0RvdWJsZSgpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSkpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuY29uc3RJbnQ2NChK
U1ZhbHVlOjplbmNvZGUodmFsdWUpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVdl
YWtKU0NvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2Rl
LCB3ZWFrUG9pbnRlcihtX25vZGUtPndlYWtDb25zdGFudCgpKSk7CisgICAgICAgIHNldEpTVmFs
dWUod2Vha1BvaW50ZXIobV9ub2RlLT53ZWFrQ29uc3RhbnQoKSkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudCgpCisgICAgeworICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
aW50IG9wZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFuZCgpOworCisgICAgICAgIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9CisgICAgICAgICAgICBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCisgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3Byb2ZpbGVkQmxvY2ssCisgICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVL
ZXkoMCwgb3BlcmFuZCkpOworCisgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0
KGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgICAgIHN3aXRjaCAodXNlS2luZEZvcih2YXJp
YWJsZS0+Zmx1c2hGb3JtYXQoKSkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgcHJv
ZmlsZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAgICAgICBzZXRJbnQzMih1bmJveElu
dDMyKGpzVmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxVc2U6
CisgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNW
YWx1ZSksIHByb2ZpbGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CisgICAgICAgICAgICBzZXRKU1Zh
bHVlKGpzVmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQm9vbGVhblVz
ZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShq
c1ZhbHVlKSwgcHJvZmlsZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKKyAgICAgICAgICAgIHNl
dEJvb2xlYW4odW5ib3hCb29sZWFuKGpzVmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGpzVmFsdWUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0TG9jYWwoKQogICAgIHsKLSAgICAgICAgLy8g
R2V0TG9jYWwgaXMgb25lIG9mIHRoZSBmZXcgbm9kZXMgdGhhdCBtYXkgYmUgbGVmdCBiZWhpbmQs
IHdpdGggIXNob3VsZEdlbmVyYXRlKCkuCi0gICAgICAgIGlmICghbV9ub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBHZXRMb2NhbHMgYXJpc2Ug
b25seSBmb3IgY2FwdHVyZWQgdmFyaWFibGVzLgogICAgICAgICAKICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVBy
ZWRpY3Rpb24oKTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlh
YmxlcygpLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOwogICAgICAgICAKLSAgICAgICAgaWYg
KHByZWRpY3Rpb24gPT0gU3BlY05vbmUpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZShJbmFkZXF1
YXRlQ292ZXJhZ2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHRyYXAgaW5zdGVhZC4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzODMKLSAgICAgICAgICAgIHRlcm1pbmF0ZShJbmFkZXF1
YXRlQ292ZXJhZ2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpOwogICAgICAgICAKLSAgICAgICAg
aWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb24odmFsdWUubV92YWx1ZSkpCi0gICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5h
ZGQobV9ub2RlLCBtX291dC5sb2FkMzIocGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1f
bm9kZSwgbV9vdXQubG9hZDY0KGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYWJs
ZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+
c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBtX2RvdWJsZVZhbHVl
cy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHNEb3VibGUub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIExvY2FscyB0aGF0IGFyZSBtYXJrZWQgc2hvdWxkVW5i
b3hJZlBvc3NpYmxlKCkgdGhhdCBhcmVuJ3QgYWxzbyBmb3JjZWQgdG8KLSAgICAgICAgICAgIC8v
IHVzZSBkb3VibGUgZm9ybWF0LCBhbmQgdGhhdCBoYXZlIHRoZSByaWdodCBwcmVkaWN0aW9uLCB3
aWxsIGFsd2F5cyBiZQotICAgICAgICAgICAgLy8gc3BlY3VsYXRlZCBvbiBTZXRMb2NhbCBhbmQg
d2lsbCBhbHdheXMgYmUgc3RvcmVkIGludG8gYW4gYXBwcm9wcmlhdGVseQotICAgICAgICAgICAg
Ly8gdHlwZWQgcmVmZXJlbmNlIExWYWx1ZS4KLSAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCht
X25vZGUsIG1fb3V0LmdldChtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgbV9i
b29sZWFuVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmdldChtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAvLyBXZSBza2lwIHRoZSBDZWxsIGNhc2UgaGVyZSBiZWNhdXNl
IHRoYXQgZ2V0cyB0cmVhdGVkIGlkZW50aWNhbGx5IHRvCi0gICAgICAgICAgICAvLyBKU1ZhbHVl
cywgc2luY2UgY2VsbHMgYXJlIHN0b3JlZCB1bnRhZ2dlZC4KLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmdldChtX2xvY2FsczY0
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAgICAgIGlmIChpc0ludDMyU3BlY3Vs
YXRpb24odmFsdWUubV92YWx1ZSkpCisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIo
cGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkp
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlU2V0TG9jYWwoKQpAQCAtNTI5LDY0ICs1
MTUsNDAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7
Ci0gICAgICAgIGJvb2wgbmVlZHNGbHVzaGluZyA9IG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5z
KG1fbm9kZSk7CiAgICAgICAgIAogICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQ
b3NzaWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZv
cm1hdCgpKSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHNE
b3VibGUub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChu
ZWVkc0ZsdXNoaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZh
bHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2Uo
RG91YmxlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNv
dXJjZShEb3VibGVJbkxvY2Fscyk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUo
dmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBt
X3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERv
dWJsZUluSlNTdGFjayk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2FsczMyLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVz
aGluZykgewotICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2Fk
Rm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3Rh
Y2spOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
U291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDMySW5M
b2NhbHMpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRGb3Io
dmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXND
ZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKICAgICAgICAgICAgICAgICBMVmFsdWUgdmFs
dWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIG1fb3V0LnNl
dCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQu
c3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZh
bHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9y
ZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAg
ICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJj
ZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0g
ICAgICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSksIG1f
bG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2
NChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwotICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pLAorICAgICAgICAgICAgICAgICAg
ICBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUlu
SlNTdGFjayk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgewotICAgICAg
ICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkp
OwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7Ci0g
ICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVl
U291cmNlKFZhbHVlSW5Mb2NhbHMpOworICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRy
ZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KCkKQEAgLTYyMCwxOSArNTgyLDE4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMigpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUlu
dGVnZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuYWRkKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAg
ICAgICAgc2V0SW50MzIobV9vdXQuYWRkKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5hZGRXaXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7CiAgICAgICAgICAg
ICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJl
c3VsdCwgMSkpOwotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5l
eHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5leHRy
YWN0VmFsdWUocmVzdWx0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJs
ZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0RG91
YmxlKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUFkZChsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTY1MSwxOSArNjEyLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobV9ub2RlLT5hcml0aE5v
ZGVGbGFncygpKSkgewotICAgICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwg
bV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIobV9vdXQu
c3ViKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5zdWJXaXRo
T3ZlcmZsb3czMihsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3cs
IG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOwotICAgICAgICAg
ICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAw
KSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAg
ICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAgICAg
IG1fb3V0LmRvdWJsZVN1Yihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTcw
MywxMyArNjYzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHNldEludDMyKHJlc3VsdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZh
bHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0RG91Ymxl
KAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU11bChsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTgwMCwxMyArNzU5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvbmUsIGxhc3ROZXh0KTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5waGkobV9vdXQu
aW50MzIsIHJlc3VsdHMpKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LnBoaShtX291dC5p
bnQzMiwgcmVzdWx0cykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1
ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgK
ICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVEaXYobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQx
KCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC04OTEsMTMgKzg0OSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhkb25lLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQucGhpKG1fb3V0Lmlu
dDMyLCByZXN1bHRzKSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50
MzIsIHJlc3VsdHMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVz
LmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXREb3VibGUoCiAg
ICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlUmVtKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgp
KSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtOTE1LDggKzg3Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUg
bGVmdCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgTFZhbHVlIHJp
Z2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAg
ICAgIHNldEludDMyKAogICAgICAgICAgICAgICAgIG1fb3V0LnNlbGVjdCgKICAgICAgICAgICAg
ICAgICAgICAgbV9ub2RlLT5vcCgpID09IEFyaXRoTWluCiAgICAgICAgICAgICAgICAgICAgICAg
ICA/IG1fb3V0Lmxlc3NUaGFuKGxlZnQsIHJpZ2h0KQpAQCAtOTUwLDcgKzkwNiw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
ICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQucGhpKG1fb3V0LmRvdWJs
ZVR5cGUsIHJlc3VsdHMpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkobV9vdXQu
ZG91YmxlVHlwZSwgcmVzdWx0cykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtOTcxLDEyICs5MjcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmVxdWFs
KHJlc3VsdCwgbV9vdXQuY29uc3RJbnQzMigxIDw8IDMxKSkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBz
ZXRJbnQzMihyZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1
ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZG91YmxlQWJzKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgp
KSkpOworICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmRvdWJsZUFicyhsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDEoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKQEAgLTEwMDMsMTIgKzk1OSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0g
ICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5kb3VibGVOZWcobG93
RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQu
ZG91YmxlTmVnKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTAyMCw0NyArOTc2LDM4IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0QW5kKCkKICAgICB7Ci0gICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLCBtX291dC5iaXRBbmQobG93SW50MzIo
bV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAg
IHNldEludDMyKG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50
MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0
T3IoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25v
ZGUsIG1fb3V0LmJpdE9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMigpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRPcihsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlQml0WG9yKCkKICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1
ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLCBtX291dC5iaXRYb3IobG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgIHNldElu
dDMyKG1fb3V0LmJpdFhvcihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9u
b2RlLT5jaGlsZDIoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0UlNoaWZ0
KCkKICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2Rl
LAotICAgICAgICAgICAgbV9vdXQuYVNocigKLSAgICAgICAgICAgICAgICBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9u
b2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOworICAgICAgICBzZXRJbnQz
MihtX291dC5hU2hyKAorICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisg
ICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0
LmNvbnN0SW50MzIoMzEpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVCaXRMU2hp
ZnQoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25v
ZGUsCi0gICAgICAgICAgICBtX291dC5zaGwoCi0gICAgICAgICAgICAgICAgbG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKKyAgICAgICAgc2V0SW50
MzIobV9vdXQuc2hsKAorICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisg
ICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0
LmNvbnN0SW50MzIoMzEpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVCaXRVUlNo
aWZ0KCkKICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9u
b2RlLAotICAgICAgICAgICAgbV9vdXQubFNocigKLSAgICAgICAgICAgICAgICBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIo
bV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOworICAgICAgICBzZXRJ
bnQzMihtX291dC5sU2hyKAorICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSks
CisgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1f
b3V0LmNvbnN0SW50MzIoMzEpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVVSW50
MzJUb051bWJlcigpCkBAIC0xMDY4LDE0ICsxMDE1LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgIGlmICgh
bm9kZUNhblNwZWN1bGF0ZUludGVnZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewotICAg
ICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQudW5zaWduZWRUb0RvdWJs
ZSh2YWx1ZSkpOworICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnVuc2lnbmVkVG9Eb3VibGUo
dmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgc3BlY3VsYXRlRm9yd2FyZCgKICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIDAs
IG1fb3V0Lmxlc3NUaGFuKHZhbHVlLCBtX291dC5pbnQzMlplcm8pLAogICAgICAgICAgICAgRm9y
bWF0dGVkVmFsdWUoVmFsdWVGb3JtYXRVSW50MzIsIHZhbHVlKSk7Ci0gICAgICAgIG1faW50MzJW
YWx1ZXMuYWRkKG1fbm9kZSwgdmFsdWUpOworICAgICAgICBzZXRJbnQzMih2YWx1ZSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZUludDMyVG9Eb3VibGUoKQpAQCAtMTA4Nyw3ICsxMDM0
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gY29udGVtcG9yYW5lb3VzIGxvdy1sZXZlbCByZXBy
ZXNlbnRhdGlvbnMuIFNvLCB0aGlzIGdpdmVzIGNoaWxkMSBhIGRvdWJsZQogICAgICAgICAvLyBy
ZXByZXNlbnRhdGlvbiBhbmQgdGhlbiBmb3J3YXJkcyB0aGF0IHJlcHJlc2VudGF0aW9uIHRvIG1f
bm9kZS4KICAgICAgICAgCi0gICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIGxvd0Rv
dWJsZShtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIHNldERvdWJsZShsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDEoKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVj
dHVyZSgpCkBAIC0xMjE1LDggKzExNjIsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29t
cGlsZUdldEJ1dHRlcmZseSgpCiAgICAgewotICAgICAgICBtX3N0b3JhZ2VWYWx1ZXMuYWRkKAot
ICAgICAgICAgICAgbV9ub2RlLCBtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSksIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7CisgICAgICAgIHNldFN0b3JhZ2UobV9v
dXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTT2JqZWN0X2J1
dHRlcmZseSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcnJheUxlbmd0aCgp
CkBAIC0xMjI1LDggKzExNzEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOiB7Ci0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAg
ICBtX25vZGUsIG1fb3V0LmxvYWQzMihsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX2hl
YXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0
LmxvYWQzMihsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX2hlYXBzLkJ1dHRlcmZseV9w
dWJsaWNMZW5ndGgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTEyNTYsNyArMTIwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHN0
b3JhZ2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIG1fb3V0LmludFB0ciksCiAgICAgICAgICAgICAg
ICAgICAgIG1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMigpKS5tX3ZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCAwLCBtX291dC5p
c1plcm82NChyZXN1bHQpKTsKLSAgICAgICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1f
bm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMjg4
LDcgKzEyMzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21I
b2xlLCBub1ZhbHVlKCksIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVO
b3RFcXVhbE9yVW5vcmRlcmVkKHJlc3VsdCwgcmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzODgsOCArMTMzMyw3IEBAIHByaXZhdGU6
CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0KICAgICAgICAgICAgIG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YVttX25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAg
ICAgICAgIAotICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2Rl
LAorICAgICAgICBzZXRKU1ZhbHVlKAogICAgICAgICAgICAgbV9vdXQubG9hZDY0KAogICAgICAg
ICAgICAgICAgIG1fb3V0LmFkZHJlc3MoCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcHMucHJv
cGVydGllc1tkYXRhLmlkZW50aWZpZXJOdW1iZXJdLApAQCAtMTQxMiw3ICsxMzU2LDcgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRHbG9iYWxWYXIoKQogICAgIHsKLSAgICAg
ICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0
ZShtX25vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LmxvYWQ2NChtX291dC5hYnNvbHV0ZShtX25vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSkpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVQdXRHbG9iYWxWYXIoKQpAQCAtMTQzNywzMCArMTM4
MSwyNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgudmFsdWVPZkpT
Q29uc3RhbnQobV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkpLmlzTnVsbCgpKTsKICAgICAgICAgbWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJZklzU3RpbGxWYWxpZCgpOwotICAgICAgICBt
X2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLCBlcXVhbE51bGxPclVuZGVm
aW5lZCgKKyAgICAgICAgc2V0Qm9vbGVhbigKKyAgICAgICAgICAgIGVxdWFsTnVsbE9yVW5kZWZp
bmVkKAogICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2Us
IEVxdWFsTnVsbE9yVW5kZWZpbmVkKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNv
bXBhcmVTdHJpY3RFcSgpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtp
bmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAg
ICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAg
ICAgbV9vdXQuZXF1YWwobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAg
ICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAg
ICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwo
bG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkp
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKE9iamVjdFVzZSkpIHsKICAgICAgICAgICAgIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50SWZJc1N0aWxsVmFsaWQoKTsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQo
Ci0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAg
ICAgICAgICAgICBtX291dC5lcXVhbCgKICAgICAgICAgICAgICAgICAgICAgbG93Tm9uTnVsbE9i
amVjdChtX25vZGUtPmNoaWxkMSgpKSwKICAgICAgICAgICAgICAgICAgICAgbG93Tm9uTnVsbE9i
amVjdChtX25vZGUtPmNoaWxkMigpKSkpOwpAQCAtMTQ3NywxOSArMTQxOCwxNiBAQCBwcml2YXRl
OgogICAgICAgICBpZiAoY29uc3RhbnQuaXNVbmRlZmluZWRPck51bGwoKQogICAgICAgICAgICAg
JiYgIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SWZJc1N0aWxsVmFsaWQoKSkgewog
ICAgICAgICAgICAgaWYgKGNvbnN0YW50LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9i
b29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICAgICAgbV9ub2RlLCBlcXVhbE51bGxP
clVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGwp
KTsKKyAgICAgICAgICAgICAgICBzZXRCb29sZWFuKGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9k
ZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsTnVsbCkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQo
Y29uc3RhbnQuaXNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRk
KAotICAgICAgICAgICAgICAgIG1fbm9kZSwgZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5j
aGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxVbmRlZmluZWQpKTsKKyAgICAgICAgICAg
IHNldEJvb2xlYW4oZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2Vs
bHNBcmVGYWxzZSwgRXF1YWxVbmRlZmluZWQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAg
IG1fbm9kZSwKKyAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgIG1fb3V0LmVxdWFsKAog
ICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksCiAgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnQpKSkpOwpAQCAt
MTQ5OCwxNSArMTQzNiwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVMZXNz
KCkKICAgICB7CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkp
IHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9u
b2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5sZXNz
VGhhbihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
aWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpIHsKLSAgICAgICAgICAgIG1f
Ym9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAg
c2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVMZXNzVGhhbihsb3dEb3Vi
bGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNTE3LDE1ICsxNDUzLDEzIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBjb21waWxlQ29tcGFyZUxlc3NFcSgpCiAgICAgewogICAgICAgICBpZiAo
bV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xl
YW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJv
b2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQubGVzc1RoYW5PckVxdWFsKGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5pc0Jp
bmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFk
ZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAg
ICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUxlc3NUaGFuT3JFcXVhbCgKICAgICAgICAgICAgICAg
ICAgICAgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1MzcsMTUgKzE0NzEsMTMgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlR3JlYXRlcigpCiAgICAgewogICAgICAgICBp
ZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jv
b2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNl
dEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZ3JlYXRlclRoYW4obG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRk
KAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAg
ICAgICAgICAgICAgbV9vdXQuZG91YmxlR3JlYXRlclRoYW4oCiAgICAgICAgICAgICAgICAgICAg
IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTU3LDE2ICsxNDg5LDE0IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjb21waWxlQ29tcGFyZUdyZWF0ZXJFcSgpCiAgICAgewogICAgICAgICBpZiAo
bV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xl
YW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJv
b2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZ3JlYXRlclRoYW5PckVxdWFsKAogICAgICAg
ICAgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2Rl
LT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpIHsKLSAgICAg
ICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAg
ICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWwoCiAgICAgICAgICAgICAgICAgICAgIGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47
CkBAIC0xNTc3LDcgKzE1MDcsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUxv
Z2ljYWxOb3QoKQogICAgIHsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChtX25vZGUsIG1f
b3V0LmJpdE5vdChib29saWZ5KG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgIHNldEJvb2xl
YW4obV9vdXQuYml0Tm90KGJvb2xpZnkobV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlSnVtcCgpCkBAIC0xOTMxLDYgKzE4NjEsMTQgQEAgcHJpdmF0ZToK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVCYWNrd2FyZCgKKyAgICAgICAgRXhpdEtp
bmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUgcHJvZmlsZSwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgeworICAg
ICAgICBhcHBlbmRPU1JFeGl0KAorICAgICAgICAgICAga2luZCwgbG93VmFsdWUsIHByb2ZpbGUs
IGZhaWxDb25kaXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24sIEZvcm1hdHRlZFZhbHVlKCkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUJhY2t3YXJkKAogICAgICAgICBFeGl0S2lu
ZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUg
ZmFpbENvbmRpdGlvbikKICAgICB7CiAgICAgICAgIGFwcGVuZE9TUkV4aXQoCkBAIC0xOTk5LDE0
ICsxOTM3LDE3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUs
IG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBJ
bnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKSk7CiAgICAgICAgIAot
ICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoTFZh
bHVlIGJveGVkUmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKKyAg
ICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9k
ZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5n
ZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIExWYWx1ZSBib3hlZFJlc3VsdCA9IHZhbHVlLnZhbHVlKCk7CiAgICAgICAgICAgICBGVExf
VFlQRV9DSEVDSygKICAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUoYm94ZWRSZXN1bHQpLCBl
ZGdlLCBTcGVjSW50MzIsIGlzTm90SW50MzIoYm94ZWRSZXN1bHQpKTsKICAgICAgICAgICAgIExW
YWx1ZSByZXN1bHQgPSB1bmJveEludDMyKGJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAgICAgICAgc2V0SW50MzIo
ZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICB9CiAKQEAgLTIwMTksMTAgKzE5NjAsMTIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFT
U0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgaXND
ZWxsKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHVuY2hl
Y2tlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAg
IExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgdW5j
aGVja2VkVmFsdWUgPSB2YWx1ZS52YWx1ZSgpOwogICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0so
Ci0gICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHVuY2hlY2tlZFJlc3VsdCksIGVkZ2UsIFNw
ZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2VkUmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm4g
dW5jaGVja2VkUmVzdWx0OworICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh1bmNoZWNrZWRW
YWx1ZSksIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2VkVmFsdWUpKTsKKyAgICAg
ICAgICAgIHJldHVybiB1bmNoZWNrZWRWYWx1ZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIShtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0Nl
bGwpKTsKQEAgLTIwNjEsMTQgKzIwMDQsMTcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFT
U0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRn
ZS51c2VLaW5kKCkgPT0gQm9vbGVhblVzZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVl
IHJlc3VsdCA9IG1fYm9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3Vs
dCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgIExvd2VyZWRO
b2RlVmFsdWUgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAg
ICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7
CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2Rl
KCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSB1
bmJveGVkUmVzdWx0ID0gdmFsdWUudmFsdWUoKTsKICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNL
KAogICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh1bmJveGVkUmVzdWx0KSwgZWRnZSwgU3Bl
Y0Jvb2xlYW4sIGlzTm90Qm9vbGVhbih1bmJveGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gdW5ib3hCb29sZWFuKHVuYm94ZWRSZXN1bHQpOwotICAgICAgICAgICAgbV9i
b29sZWFuVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldEJv
b2xlYW4oZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMjA4MSwxNiArMjAyNywyMSBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbiB8fCBpc0RvdWJsZShlZGdlLnVzZUtpbmQoKSkpOwogICAgICAgICAKLSAgICAgICAg
aWYgKExWYWx1ZSByZXN1bHQgPSBtX2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgaW50
UmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gbV9vdXQuaW50VG9Eb3VibGUoaW50UmVzdWx0KTsKLSAgICAgICAgICAg
IG1fZG91YmxlVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgTG93ZXJl
ZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fZG91YmxlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAg
ICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgp
OworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUo
KSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJl
c3VsdCA9IG1fb3V0LmludFRvRG91YmxlKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgc2V0
RG91YmxlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSBib3hlZFJlc3VsdCA9IG1f
anNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgIHZhbHVlID0gbV9qc1Zh
bHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkg
eworICAgICAgICAgICAgTFZhbHVlIGJveGVkUmVzdWx0ID0gdmFsdWUudmFsdWUoKTsKKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiRG91YmxlIHVuYm94aW5nIGludCBjYXNlIikpOwogICAgICAgICAgICAgTEJhc2lj
QmxvY2sgZG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRG91YmxlIHVuYm94aW5n
IGRvdWJsZSBjYXNlIikpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGUgdW5ib3hpbmcgY29udGludWF0aW9uIikpOwpA
QCAtMjExNSw3ICsyMDY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBpbnRUb0RvdWJsZSwg
dW5ib3hlZERvdWJsZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVz
LmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldERvdWJsZShlZGdlLm5v
ZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC0yMTI4LDI0ICsyMDc5LDI4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBB
U1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVk
Z2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1
ZSByZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1
bHQgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBib3hJbnQzMih1bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1fanNWYWx1
ZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgIExvd2VyZWROb2RlVmFs
dWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYg
KGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAg
ICAgIAorICAgICAgICB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAg
ICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
Ym94SW50MzIodmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9k
ZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9ib29sZWFuVmFsdWVz
LmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hCb29s
ZWFuKHVuYm94ZWRSZXN1bHQpOwotICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChlZGdl
Lm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVk
Z2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gYm94Qm9vbGVhbih2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQg
PSBtX2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gYm94RG91YmxlKHVuYm94ZWRSZXN1bHQpOwotICAgICAgICAgICAgbV9qc1ZhbHVl
VmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2RvdWJs
ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsK
KyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hEb3VibGUodmFsdWUudmFsdWUoKSk7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIxNTUsMTEgKzIxMTAsMTIg
QEAgcHJpdmF0ZToKICAgICAKICAgICBMVmFsdWUgbG93U3RvcmFnZShFZGdlIGVkZ2UpCiAgICAg
ewotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fc3RvcmFnZVZhbHVlcy5nZXQoZWRnZS5u
b2RlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgTG93ZXJlZE5vZGVW
YWx1ZSB2YWx1ZSA9IG1fc3RvcmFnZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBp
ZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKICAg
ICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOwotICAgICAgICBt
X3N0b3JhZ2VWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAgICBzZXRTdG9y
YWdlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
ICAgICAKQEAgLTIyNDIsNiArMjE5OCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTnVtYmVy
VXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKGVkZ2UpOwogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xl
YW4oZWRnZSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KQEAgLTIzNDIsNiAr
MjMwMSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZG91YmxlVmFsdWUodmFsdWUpLCBlZGdl
LCBTcGVjUmVhbE51bWJlciwKICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQodmFsdWUsIHZhbHVlKSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlQm9v
bGVhbihFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBsb3dCb29sZWFuKGVkZ2UpOworICAgIH0K
IAogICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQo
KQogICAgIHsKQEAgLTI0MzAsMjIgKzIzOTQsMTUgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29s
IGlzTGl2ZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWdu
ZWQ+OjppdGVyYXRvciBpdGVyID0gbV90aW1lVG9MaXZlLmZpbmQobm9kZSk7Ci0gICAgICAgIEFT
U0VSVChpdGVyICE9IG1fdGltZVRvTGl2ZS5lbmQoKSk7Ci0gICAgICAgIHJldHVybiAhIWl0ZXIt
PnZhbHVlOworICAgICAgICByZXR1cm4gbV9saXZlLmNvbnRhaW5zKG5vZGUpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHVzZShFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBpZiAoIWVkZ2UtPmhh
c1Jlc3VsdCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NE
YXRhKCkpOworICAgICAgICBBU1NFUlQoZWRnZS0+aGFzUmVzdWx0KCkpOworICAgICAgICBpZiAo
IWVkZ2UuZG9lc0tpbGwoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV90
aW1lVG9MaXZlLmZpbmQoZWRnZS5ub2RlKCkpOwotICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3Rp
bWVUb0xpdmUuZW5kKCkpOwotICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUpOwotICAgICAgICBp
dGVyLT52YWx1ZS0tOworICAgICAgICBtX2xpdmUucmVtb3ZlKGVkZ2Uubm9kZSgpKTsKICAgICB9
CiAgICAgCiAgICAgLy8gV3JhcHBlciB1c2VkIG9ubHkgZm9yIERGR19OT0RFX0RPX1RPX0NISUxE
UkVOCkBAIC0yNDYyLDYzICsyNDE5LDM0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXpl
T1NSRXhpdFN0YXRlRm9yQmxvY2soKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV92YWx1ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9oaWdoQmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKLSAgICAgICAgICAgIGlmICghbm9kZSkg
ewotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNl
SXNEZWFkKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQXJndW1lbnRzQWxpYXMoKSkgewotICAgICAg
ICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoQXJndW1lbnRzU291cmNl
KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBUaGlzIHZhbHVlIHdpbGwgaGF2ZSBiZWVuIGZsdXNoZWQgdG8gdGhlIEpTU3Rh
Y2sgaW4gc29tZSBmb3JtIG9yCi0gICAgICAgICAgICAgICAgLy8gYW5vdGhlci4KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3Nz
aWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91
YmxlRm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNl
KEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBtX2hp
Z2hCbG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZFtpXTsKKyAgICAgICAgICAgIHN3aXRjaCAo
Zm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERlYWRGbHVzaDogeworICAgICAgICAgICAgICAg
IC8vIE11c3QgY29uc2lkZXIgYXZhaWxhYmxlIG5vZGVzIGluc3RlYWQuCisgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZFtpXTsK
KyAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbaV0gPSBWYWx1ZVNvdXJjZShub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRV
bmJveElmUG9zc2libGUoKSkgewotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxk
VXNlRG91YmxlRm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNb
aV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkxvY2Fscyk7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoSW50MzJJbkxvY2Fscyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKEJvb2xlYW5JbkxvY2Fscyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToK
KyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKERvdWJsZUlu
SlNTdGFjayk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVh
bjoKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgICAgICAgICAgbV92
YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkxvY2Fscyk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCkBAIC0yNTI2LDYgKzI0NTQsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgRXhp
dEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZh
bHVlIGZhaWxDb25kaXRpb24sCiAgICAgICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
biwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCiAgICAgeworICAgICAgICBhcHBlbmRPU1JFeGl0
KAorICAgICAgICAgICAga2luZCwgbG93VmFsdWUsIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAorICAgICAgICAgICAgZmFpbENvbmRpdGlvbiwgZGly
ZWN0aW9uLCByZWNvdmVyeSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgK
KyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRp
b24sIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3Zl
cnkpCisgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6ZnRsVHJhcHNPbk9TUkV4aXQoKSkgewog
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
Ik9TUiBleGl0IGZhaWxDYXNlIikpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPU1IgZXhpdCBjb250aW51YXRpb24iKSk7CkBA
IC0yNTQ2LDExICsyNDgzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG1fZnRsU3RhdGUu
aml0Q29kZS0+b3NyRXhpdC5zaXplKCkgPT0gbV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKSk7CiAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKTsKICAgICAg
ICAgCi0gICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoCi0gICAgICAg
ICAgICBPU1JFeGl0KAotICAgICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBt
X2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKLSAgICAg
ICAgICAgICAgICBtX2NvZGVPcmlnaW4sIG1fbGFzdFNldE9wZXJhbmQsIG1fdmFsdWVTb3VyY2Vz
Lm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMubnVt
YmVyT2ZMb2NhbHMoKSkpOworICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBw
ZW5kKE9TUkV4aXQoCisgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgcHJvZmls
ZSwgbV9jb2RlT3JpZ2luLCBtX2xhc3RTZXRPcGVyYW5kLAorICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXMubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZMb2NhbHMo
KSkpOwogICAgICAgICBtX2Z0bFN0YXRlLm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlv
bkluZm8oKSk7CiAgICAgICAgIAogICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKQEAgLTI2MDIsMjcgKzI1MzcsNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6CiAgICAgICAgICAgICAgICAgZXhpdC5t
X3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmFsdWVJbkxvY2FsczoKLSAgICAgICAgICAg
ICAgICBhZGRFeGl0QXJndW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50
cywgaSwgVmFsdWVGb3JtYXRKU1ZhbHVlLCBtX291dC5nZXQobV9sb2NhbHM2NFtpXSkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJbnQzMkluTG9jYWxzOgotICAg
ICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKLSAgICAgICAgICAgICAgICAgICAgZXhpdCwg
YXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEludDMyLCBtX291dC5nZXQobV9sb2NhbHMzMltpXSkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCb29sZWFuSW5Mb2Nh
bHM6Ci0gICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAotICAgICAgICAgICAgICAgICAg
ICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0Qm9vbGVhbiwgbV9vdXQuZ2V0KG1fbG9j
YWxzQm9vbGVhbltpXSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBEb3VibGVJbkxvY2FsczoKLSAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCi0gICAg
ICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXREb3VibGUsIG1f
b3V0LmdldChtX2xvY2Fsc0RvdWJsZVtpXSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBBcmd1bWVudHNTb3VyY2U6Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IGltcGxlbWVudCBQaGFudG9tQXJndW1lbnRzLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM5ODYKLSAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBTb3VyY2VJc0RlYWQ6CiAgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVl
c1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjY4
MiwxMiArMjU5NiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIHVpbnQzMlRv
TnVtYmVyID0gMDsKICAgICAgICAgICAgICAgICBOb2RlKiBkb3VibGVBc0ludDMyID0gMDsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICBI
YXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGVuZCA9IG1fdGltZVRvTGl2ZS5lbmQo
KTsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fbGl2
ZS5iZWdpbigpOworICAgICAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQg
PSBtX2xpdmUuZW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRh
dGUgPSBpdGVyLT5rZXk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9ICpp
dGVyOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZS0+Y2hpbGQxKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNh
bmRpZGF0ZS0+Y2hpbGQxKCkgIT0gbm9kZSkKQEAgLTI3MzIsMjQgKzI2NDQsMjggQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQVNTRVJUKGlzTGl2ZShub2RlKSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1faW50MzJWYWx1ZXMuZ2V0KG5v
ZGUpKSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRl
eCwgVmFsdWVGb3JtYXRJbnQzMiwgcmVzdWx0KTsKKworICAgICAgICBMb3dlcmVkTm9kZVZhbHVl
IHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5k
ZXgsIFZhbHVlRm9ybWF0SW50MzIsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fYm9v
bGVhblZhbHVlcy5nZXQobm9kZSkpIHsKLSAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0
LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEJvb2xlYW4sIHJlc3VsdCk7CisgICAgICAg
IHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQo
dmFsdWUpKSB7CisgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBp
bmRleCwgVmFsdWVGb3JtYXRCb29sZWFuLCB2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBt
X2pzVmFsdWVWYWx1ZXMuZ2V0KG5vZGUpKSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQo
ZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRKU1ZhbHVlLCByZXN1bHQpOworICAg
ICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1Zh
bGlkKHZhbHVlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50
cywgaW5kZXgsIFZhbHVlRm9ybWF0SlNWYWx1ZSwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0
ID0gbV9kb3VibGVWYWx1ZXMuZ2V0KG5vZGUpKSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1l
bnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXREb3VibGUsIHJlc3VsdCk7Cisg
ICAgICAgIHZhbHVlID0gbV9kb3VibGVWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNW
YWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVu
dHMsIGluZGV4LCBWYWx1ZUZvcm1hdERvdWJsZSwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjgyMCw3ICsyNzM2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5pbml0aWFsaXplRXhpdFRodW5rc0xpbmtC
dWZmZXIobGlua0J1ZmZlci5yZWxlYXNlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9vdXQu
anVtcChtX2FyZ3VtZW50Q2hlY2tzKTsKKyAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX2dy
YXBoLmJsb2NrKDApKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgb2JzZXJ2ZU1vdkhpbnQoTm9k
ZSogbm9kZSkKQEAgLTI4MzQsNiArMjc1MCw1NyBAQCBwcml2YXRlOgogICAgICAgICBtX3ZhbHVl
U291cmNlcy5vcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2Uobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRJbnQzMihOb2RlKiBub2RlLCBMVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBtX2ludDMyVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9k
ZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldEpTVmFsdWUo
Tm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9qc1ZhbHVlVmFsdWVz
LnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0K
KyAgICB2b2lkIHNldEJvb2xlYW4oTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbV9ib29sZWFuVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBt
X2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldFN0b3JhZ2UoTm9kZSogbm9kZSwgTFZh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBMb3dl
cmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldERv
dWJsZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2RvdWJsZVZh
bHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldEludDMyKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNl
dEludDMyKG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIHNldEpTVmFsdWUoTFZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX25vZGUsIHZhbHVlKTsKKyAgICB9
CisgICAgdm9pZCBzZXRCb29sZWFuKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEJv
b2xlYW4obV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0U3RvcmFnZShMVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBzZXRTdG9yYWdlKG1fbm9kZSwgdmFsdWUpOworICAgIH0K
KyAgICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXREb3Vi
bGUobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZChjb25zdCBM
b3dlcmVkTm9kZVZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghbV9ncmFwaC5tX2RvbWluYXRvcnMu
ZG9taW5hdGVzKHZhbHVlLmJsb2NrKCksIG1faGlnaEJsb2NrKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRk
V2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUu
aml0Q29kZS0+Y29tbW9uLndlYWtSZWZlcmVuY2VzLmFwcGVuZCgKQEAgLTI4ODEsMjcgKzI4NDgs
MjAgQEAgcHJpdmF0ZToKICAgICAKICAgICBMQmFzaWNCbG9jayBtX3Byb2xvZ3VlOwogICAgIExC
YXNpY0Jsb2NrIG1faW5pdGlhbGl6YXRpb247Ci0gICAgTEJhc2ljQmxvY2sgbV9hcmd1bWVudENo
ZWNrczsKICAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBMQmFzaWNCbG9jaz4gbV9ibG9ja3M7CiAg
ICAgCiAgICAgTFZhbHVlIG1fY2FsbEZyYW1lOwogICAgIExWYWx1ZSBtX3RhZ1R5cGVOdW1iZXI7
CiAgICAgTFZhbHVlIG1fdGFnTWFzazsKICAgICAKLSAgICBIYXNoU2V0PE5vZGUqPiBtX2ZsdXNo
ZWRMb2NhbE9wczsKLSAgICBWZWN0b3I8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsK
KyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2ludDMyVmFsdWVzOworICAg
IEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fanNWYWx1ZVZhbHVlczsKKyAgICBI
YXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2Jvb2xlYW5WYWx1ZXM7CisgICAgSGFz
aE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9zdG9yYWdlVmFsdWVzOworICAgIEhhc2hN
YXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fZG91YmxlVmFsdWVzOworICAgIEhhc2hTZXQ8
Tm9kZSo+IG1fbGl2ZTsKICAgICAKLSAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1faW50MzJW
YWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7Ci0gICAg
SGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2Jvb2xlYW5WYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2Rl
KiwgTFZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBt
X2RvdWJsZVZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gbV90aW1lVG9MaXZl
OwotICAgIAotICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHNCb29sZWFuOwotICAgIE9wZXJh
bmRzPExWYWx1ZT4gbV9sb2NhbHMzMjsKLSAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzNjQ7
Ci0gICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2Fsc0RvdWJsZTsKKyAgICBIYXNoTWFwPE5vZGUq
LCBMVmFsdWU+IG1fcGhpczsKICAgICAKICAgICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gbV92YWx1
ZVNvdXJjZXM7CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyZWROb2RlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyZWROb2RlVmFsdWUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJlZE5vZGVWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExMb3dlcmVkTm9kZVZhbHVlX2gKKyNkZWZpbmUgRlRM
TG93ZXJlZE5vZGVWYWx1ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkZU
TEFiYnJldmlhdGVkVHlwZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewor
CisvLyBSZXByZXNlbnRzIHRoZSBhY3Qgb2YgaGF2aW5nIGxvd2VyZWQgYSBERkc6Ok5vZGUgdG8g
YW4gTFZhbHVlLCBhbmQgcmVjb3JkcyB0aGUKKy8vIERGRzo6QmFzaWNCbG9jayB0aGF0IGRpZCB0
aGUgbG93ZXJpbmcuIFRoZSBMVmFsdWUgaXMgd2hhdCB3ZSB1c2UgbW9zdCBvZnRlbiwgYnV0Cisv
LyB3ZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIGluIGEgYmxvY2sgdGhhdCBpcyBkb21pbmF0
ZWQgYnkgdGhlIG9uZSB0aGF0IGRpZAorLy8gdGhlIGxvd2VyaW5nLiBXZSdyZSBndWFyYW50ZWVk
IHRoYXQgZm9yIGVhY2ggREZHOjpOb2RlLCB0aGVyZSB3aWxsIGJlIG9uZQorLy8gTG93ZXJlZE5v
ZGVWYWx1ZSB0aGF0IGFsd2F5cyBkb21pbmF0ZXMgYWxsIHVzZXMgb2YgdGhlIERGRzo6Tm9kZTsg
YnV0IHRoZXJlIG1heQorLy8gYmUgb3RoZXJzIHRoYXQgZG9uJ3QgZG9taW5hdGUgYW5kIHdlJ3Jl
IGVmZmVjdGl2ZWx5IGRvaW5nIG9wcG9ydHVuaXN0aWMgR1ZOIG9uCisvLyB0aGUgbG93ZXJpbmcg
Y29kZS4KKworY2xhc3MgTG93ZXJlZE5vZGVWYWx1ZSB7CitwdWJsaWM6CisgICAgTG93ZXJlZE5v
ZGVWYWx1ZSgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgICAgICAsIG1fYmxvY2soMCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIExvd2VyZWROb2RlVmFsdWUoTFZhbHVlIHZhbHVlLCBERkc6
OkJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgICwg
bV9ibG9jayhibG9jaykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZhbHVlKTsKKyAgICAgICAg
QVNTRVJUKG1fYmxvY2spOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyBy
ZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
aXNTZXQoKTsgfQorICAgIAorICAgIExWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KKyAgICBERkc6OkJhc2ljQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
azsgfQorICAgIAorcHJpdmF0ZToKKyAgICBMVmFsdWUgbV92YWx1ZTsKKyAgICBERkc6OkJhc2lj
QmxvY2sqIG1fYmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTExvd2VyZWROb2RlVmFsdWVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZyb21CbG9jay5o
CShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVl
RnJvbUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDEyIEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgVmFsdWVGcm9tQmxvY2sgewogcHVibGljOgor
ICAgIFZhbHVlRnJvbUJsb2NrKCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgICAgICwgbV9i
bG9jaygwKQorICAgIHsKKyAgICB9CisgICAgCiAgICAgVmFsdWVGcm9tQmxvY2soTFZhbHVlIHZh
bHVlLCBMQmFzaWNCbG9jayBibG9jaykKICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQogICAgICAg
ICAsIG1fYmxvY2soYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZh
bHVlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFZhbHVlU291cmNlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDIxICs0NSw2
IEBAIHZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICBjYXNlIERv
dWJsZUluSlNTdGFjazoKICAgICAgICAgb3V0LnByaW50KCJEb3VibGVJbkpTU3RhY2siKTsKICAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgVmFsdWVJbkxvY2FsczoKLSAgICAgICAgb3V0LnByaW50
KCJWYWx1ZUluTG9jYWxzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEludDMySW5Mb2Nh
bHM6Ci0gICAgICAgIG91dC5wcmludCgiSW50MzJJbkxvY2FscyIpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBCb29sZWFuSW5Mb2NhbHM6Ci0gICAgICAgIG91dC5wcmludCgiQm9vbGVhbklu
TG9jYWxzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIERvdWJsZUluTG9jYWxzOgotICAg
ICAgICBvdXQucHJpbnQoIkRvdWJsZUluTG9jYWxzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIEFyZ3VtZW50c1NvdXJjZToKLSAgICAgICAgb3V0LnByaW50KCJBcmd1bWVudHNTb3VyY2Ui
KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU291cmNlSXNEZWFkOgogICAgICAgICBvdXQu
cHJpbnQoIlNvdXJjZUlzRGVhZCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDExICs0MSw2IEBAIGVudW0gVmFsdWVTb3VyY2VLaW5kIHsKICAgICBWYWx1ZUluSlNT
dGFjaywKICAgICBJbnQzMkluSlNTdGFjaywKICAgICBEb3VibGVJbkpTU3RhY2ssCi0gICAgVmFs
dWVJbkxvY2FscywKLSAgICBJbnQzMkluTG9jYWxzLAotICAgIEJvb2xlYW5JbkxvY2FscywKLSAg
ICBEb3VibGVJbkxvY2FscywKLSAgICBBcmd1bWVudHNTb3VyY2UsCiAgICAgU291cmNlSXNEZWFk
LAogICAgIEhhdmVOb2RlCiB9OwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTMtMDctMTEg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBOZWVkIGEgc2hvcnQg
ZGVzY3JpcHRpb24gKE9PUFMhKS4KKyAgICAgICAgTmVlZCB0aGUgYnVnIFVSTCAoT09QUyEpLgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0hhc2hTZXQuaDoKKyAgICAg
ICAgKEhhc2hTZXQpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6OjphZGQpOgorICAg
ICAgICAoV1RGOjo9KToKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6
Ojo6SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgICogd3RmL0luc2VydGlv
bi5oOiBBZGRlZC4KKyAgICAgICAgKFdURik6CisgICAgICAgIChJbnNlcnRpb24pOgorICAgICAg
ICAoV1RGOjpJbnNlcnRpb246Okluc2VydGlvbik6CisgICAgICAgIChXVEY6Okluc2VydGlvbjo6
aW5kZXgpOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246OmVsZW1lbnQpOgorICAgICAgICAoV1RG
OjpJbnNlcnRpb246Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6OmV4ZWN1dGVJbnNlcnRpb25z
KToKKwogMjAxMy0wNy0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIGZpeCAzMi1iaXQgYnVpbGQuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDggQEAKIAkJMEZEODFBQzUxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUM0MTU0RkIy
MkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoKTsgfTsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3Ry
ZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi87IH07CiAJ
CTBGRERCRkE4MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTYxNjY2REZBMzAw
QzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi87IH07CisJCTBGRTUwNTU3MTc4N0E4MDYw
MEIzNUY4QyAvKiBJbnNlcnRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLzsg
fTsKKwkJMEZFNTA1N0YxNzkwODlGRTAwQjM1RjhDIC8qIExpc3REdW1wLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU3RTE3OTA4OUY5MDBCMzVG
OEMgLyogTGlzdER1bXAuaCAqLzsgfTsKIAkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJB
TVNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovOyB9OwogCQkxNDNGNjEy
MDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkxNDY5NDE5MjE2RUFB
RjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDY5NDE5MDE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRp
bWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTM1Miw2ICszNTQsOCBAQAogCQkwRkQ4MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZl
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAv
KiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTdHJpbmdQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU1NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluc2VydGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkU1MDU3RTE3OTA4OUY5MDBCMzVGOEMgLyogTGlzdER1bXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGlzdER1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzNFRTQxNzFC
ODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlU3Bpbkxv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRjYxMUQxNTY1RjBGOTAwREI1
MTRBIC8qIFJBTVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UkFNU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFFMTU2NUYw
RjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJBTVNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4NSwxMSArNzg5LDEz
IEBACiAJCQkJQThBNDcyQkExNTFBODI1QTAwNDEyM0ZGIC8qIEhhc2hUcmFpdHMuaCAqLywKIAkJ
CQlBOEE0NzJCQjE1MUE4MjVBMDA0MTIzRkYgLyogSGV4TnVtYmVyLmggKi8sCiAJCQkJQThBNDcy
QkMxNTFBODI1QTAwNDEyM0ZGIC8qIElubGluZUFTTS5oICovLAorCQkJCTBGRTUwNTU2MTc4N0E4
MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLywKIAkJCQlBOEE0NzJCRTE1MUE4MjVBMDA0MTIz
RkYgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE4QTQ3MkJGMTUxQTgyNUEwMDQxMjNGRiAvKiBJ
bnQzMkFycmF5LmggKi8sCiAJCQkJQThBNDcyQkQxNTFBODI1QTAwNDEyM0ZGIC8qIEludDhBcnJh
eS5oICovLAogCQkJCUE4QTQ3MkMwMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnRlZ3JhbFR5cGVkQXJy
YXlCYXNlLmggKi8sCiAJCQkJMEY0NkU2REQxNzdDQkE2QTAwRTFGNzU1IC8qIExMVk1IZWFkZXJz
LmggKi8sCisJCQkJMEZFNTA1N0UxNzkwODlGOTAwQjM1RjhDIC8qIExpc3REdW1wLmggKi8sCiAJ
CQkJQThBNDcyQzExNTFBODI1QTAwNDEyM0ZGIC8qIExpc3RIYXNoU2V0LmggKi8sCiAJCQkJQThB
NDcyQzIxNTFBODI1QTAwNDEyM0ZGIC8qIExpc3RSZWZQdHIuaCAqLywKIAkJCQlBOEE0NzJDMzE1
MUE4MjVBMDA0MTIzRkYgLyogTG9ja2VyLmggKi8sCkBAIC0xMTgxLDYgKzExODcsNyBAQAogCQkJ
CUE4QTQ3M0U4MTUxQTgyNUIwMDQxMjNGRiAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzNFQTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDRDU0OTdBRDE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0RjFEMTE1NDE1RkYxMUJFMDAyNkU5MDggLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0RkQ4NTU0NzE2MTMzRTBFMDBDNUI3MDQgLyogTWVtb3J5
SW5zdHJ1bWVudGF0aW9uQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlGM0ZC
QzcxRTE2MUFGN0JGMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRT
ZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMTMwOCw2ICsxMzE1LDcgQEAKIAkJCQk5NzRDRkM4RTE2
QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDYx
NTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRTUwNTdGMTc5MDg5RkUwMEIzNUY4QyAvKiBMaXN0RHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZDNDQ4ODMxNkZFOUZFMTAwODQ0QkU5IC8qIFByb2Nlc3NJRC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY0NkU2REUxNzdDQkE2QTAwRTFGNzU1IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvRGF0YUxvZy5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9EYXRhTG9nLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTggQEAgdm9p
ZCBkYXRhTG9nKGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJgogICAgIGRhdGFGaWxlKCkucHJp
bnQodmFsdWUxLCB2YWx1ZTIsIHZhbHVlMywgdmFsdWU0LCB2YWx1ZTUsIHZhbHVlNiwgdmFsdWU3
LCB2YWx1ZTgsIHZhbHVlOSwgdmFsdWUxMCwgdmFsdWUxMSwgdmFsdWUxMiwgdmFsdWUxMyk7CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVu
YW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBU
OCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIs
IHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0Pgordm9pZCBkYXRhTG9nKGNvbnN0IFQxJiB2YWx1
ZTEsIGNvbnN0IFQyJiB2YWx1ZTIsIGNvbnN0IFQzJiB2YWx1ZTMsIGNvbnN0IFQ0JiB2YWx1ZTQs
IGNvbnN0IFQ1JiB2YWx1ZTUsIGNvbnN0IFQ2JiB2YWx1ZTYsIGNvbnN0IFQ3JiB2YWx1ZTcsIGNv
bnN0IFQ4JiB2YWx1ZTgsIGNvbnN0IFQ5JiB2YWx1ZTksIGNvbnN0IFQxMCYgdmFsdWUxMCwgY29u
c3QgVDExJiB2YWx1ZTExLCBjb25zdCBUMTImIHZhbHVlMTIsIGNvbnN0IFQxMyYgdmFsdWUxMywg
Y29uc3QgVDE0JiB2YWx1ZTE0KQoreworICAgIGRhdGFGaWxlKCkucHJpbnQodmFsdWUxLCB2YWx1
ZTIsIHZhbHVlMywgdmFsdWU0LCB2YWx1ZTUsIHZhbHVlNiwgdmFsdWU3LCB2YWx1ZTgsIHZhbHVl
OSwgdmFsdWUxMCwgdmFsdWUxMSwgdmFsdWUxMiwgdmFsdWUxMywgdmFsdWUxNCk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0
LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlw
ZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVu
YW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTU+Cit2b2lkIGRhdGFMb2coY29uc3Qg
VDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwgY29uc3QgVDMmIHZhbHVlMywgY29uc3QgVDQm
IHZhbHVlNCwgY29uc3QgVDUmIHZhbHVlNSwgY29uc3QgVDYmIHZhbHVlNiwgY29uc3QgVDcmIHZh
bHVlNywgY29uc3QgVDgmIHZhbHVlOCwgY29uc3QgVDkmIHZhbHVlOSwgY29uc3QgVDEwJiB2YWx1
ZTEwLCBjb25zdCBUMTEmIHZhbHVlMTEsIGNvbnN0IFQxMiYgdmFsdWUxMiwgY29uc3QgVDEzJiB2
YWx1ZTEzLCBjb25zdCBUMTQmIHZhbHVlMTQsIGNvbnN0IFQxNSYgdmFsdWUxNSkKK3sKKyAgICBk
YXRhRmlsZSgpLnByaW50KHZhbHVlMSwgdmFsdWUyLCB2YWx1ZTMsIHZhbHVlNCwgdmFsdWU1LCB2
YWx1ZTYsIHZhbHVlNywgdmFsdWU4LCB2YWx1ZTksIHZhbHVlMTAsIHZhbHVlMTEsIHZhbHVlMTIs
IHZhbHVlMTMsIHZhbHVlMTQsIHZhbHVlMTUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
dXNpbmcgV1RGOjpkYXRhTG9nOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gMTUyNTgyKQorKysg
U291cmNlL1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMiArODYsMTkg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmV2ZXJzZSB0
aGUgb3JkZXIgb2YgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBzbyB0aGF0IGNhbGxlcnMKICAgICAg
ICAgLy8gY2FuIGp1c3QgcGFzcyB0aGUgdHJhbnNsYXRvciBhbmQgbGV0IHRoZSBjb21waWxlciBk
ZWR1Y2UgVC4KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3I+IEFkZFJlc3VsdCBhZGQoY29uc3QgVCYpOworICAgICAgICAKKyAgICAgICAgLy8gQXR0
ZW1wdHMgdG8gYWRkIGEgbGlzdCBvZiB0aGluZ3MgdG8gdGhlIHNldC4gUmV0dXJucyB0cnVlIGlm
IGFueSBvZgorICAgICAgICAvLyB0aGVtIGFyZSBuZXcgdG8gdGhlIHNldC4gUmV0dXJucyBmYWxz
ZSBpZiB0aGUgc2V0IGlzIHVuY2hhbmdlZC4KKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRl
cmF0b3JUeXBlPgorICAgICAgICBib29sIGFkZChJdGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9y
VHlwZSBlbmQpOwogCiAgICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYpOwogICAg
ICAgICB2b2lkIHJlbW92ZShpdGVyYXRvcik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAg
ICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJik7CisgICAgICAg
IAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaFNldCYpIGNvbnN0OwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgZnJpZW5kIHZvaWQgZGVsZXRlQWxsVmFsdWVzPD4oY29uc3QgSGFz
aFNldCYpOwpAQCAtMTkxLDYgKzE5OCwxNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUs
IFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKQorICAgIHsKKyAg
ICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoSXRlcmF0b3JUeXBlIGl0
ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
YWRkKCppdGVyKS5pc05ld0VudHJ5OworICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogICAgIGlu
bGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShpdGVyYXRvciBpdCkKICAgICB7CiAg
ICAgICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgpKQpAQCAtMjU2LDYgKzI3MywxOCBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHZlY3RvcltpXSA9ICppdDsKICAgICB9ICAK
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CisgICAg
aW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBIYXNoU2V0JiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmICgh
b3RoZXIuY29udGFpbnMoKml0ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIFdU
RgogCiB1c2luZyBXVEY6Okhhc2hTZXQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTUy
NTgyKQorKysgU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
NzAsNiArMTE3MCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHsKICAgICAgICAgLy8gQ29weSB0
aGUgaGFzaCB0YWJsZSB0aGUgZHVtYiB3YXksIGJ5IGFkZGluZyBlYWNoIGVsZW1lbnQgdG8gdGhl
IG5ldyB0YWJsZS4KICAgICAgICAgLy8gSXQgbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgdG8gY29w
eSB0aGUgdGFibGUgc2xvdHMsIGJ1dCBpdCdzIG5vdCBjbGVhciB0aGF0IGVmZmljaWVuY3kgaXMg
bmVlZGVkLgorICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBp
bXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0
cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQogICAgICAg
ICBjb25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKICAgICAgICAgZm9yIChjb25zdF9p
dGVyYXRvciBpdCA9IG90aGVyLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAg
IGFkZCgqaXQpOwpAQCAtMTIwOSw2ICsxMjExLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0
cz4KICAgICBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz4mIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6b3BlcmF0b3I9KGNvbnN0IEhhc2hUYWJsZSYg
b3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtlbHkgdGhhdCB0aGlzIGNh
biBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVzZQorICAgICAgICAvLyBI
YXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ1NQog
ICAgICAgICBIYXNoVGFibGUgdG1wKG90aGVyKTsKICAgICAgICAgc3dhcCh0bXApOwogICAgICAg
ICByZXR1cm4gKnRoaXM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0luc2VydGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbnNl
cnRpb25faAorI2RlZmluZSBJbnNlcnRpb25faAorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluc2VydGlvbiB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9u
KCkgeyB9CisgICAgCisgICAgSW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgVCBlbGVtZW50KQorICAg
ICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
OyB9CisgICAgVCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSW5zZXJ0aW9uJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2luZGV4IDwgb3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIHNpemVfdCBtX2luZGV4OworICAgIFQgbV9lbGVtZW50OworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVGFyZ2V0VmVjdG9yVHlwZSwgdHlwZW5hbWUgSW5zZXJ0aW9uVmVjdG9yVHlw
ZT4KK3ZvaWQgZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYgdGFyZ2V0LCBJbnNl
cnRpb25WZWN0b3JUeXBlJiBpbnNlcnRpb25zKQoreworICAgIGlmICghaW5zZXJ0aW9ucy5zaXpl
KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0YXJnZXQuZ3Jvdyh0YXJnZXQuc2l6ZSgpICsgaW5z
ZXJ0aW9ucy5zaXplKCkpOworICAgIHNpemVfdCBsYXN0SW5kZXggPSB0YXJnZXQuc2l6ZSgpOwor
ICAgIGZvciAoc2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gaW5zZXJ0aW9ucy5zaXplKCk7IGlu
ZGV4SW5JbnNlcnRpb25zLS07KSB7CisgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0
aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOworICAg
ICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQorICAgICAgICAg
ICAgdGFyZ2V0W2ldID0gdGFyZ2V0W2kgLSBpbmRleE9mZnNldF07CisgICAgICAgIHRhcmdldFtm
aXJzdEluZGV4XSA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmVsZW1lbnQoKTsKKyAg
ICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleDsKKyAgICB9CisgICAgaW5zZXJ0aW9ucy5yZXNp
emUoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Okluc2VydGlvbjsK
K3VzaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnM7CisKKyNlbmRpZiAvLyBJbnNlcnRpb25faApJ
bmRleDogU291cmNlL1dURi93dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9MaXN0RHVtcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvTGlzdER1bXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIExpc3REdW1wX2gKKyNkZWZpbmUgTGlz
dER1bXBfaAorCisjaW5jbHVkZSAiQ29tbWFQcmludGVyLmgiCisjaW5jbHVkZSAiUHJpbnRTdHJl
YW0uaCIKKyNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5oIgorCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIExpc3REdW1wIHsKK3B1YmxpYzoKKyAgICBM
aXN0RHVtcChjb25zdCBUJiBsaXN0LCBjb25zdCBjaGFyKiBjb21tYSkKKyAgICAgICAgOiBtX2xp
c3QobGlzdCkKKyAgICAgICAgLCBtX2NvbW1hKGNvbW1hKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBmb3Ig
KHR5cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2xpc3QuYmVnaW4oKTsgaXRlciAh
PSBtX2xpc3QuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgIG91dC5wcmludChtX2NvbW1hLCAq
aXRlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFQmIG1fbGlzdDsKKyAgICBDb21t
YVByaW50ZXIgbV9jb21tYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBNYXBE
dW1wIHsKK3B1YmxpYzoKKyAgICBNYXBEdW1wKGNvbnN0IFQmIG1hcCwgY29uc3QgY2hhciogYXJy
b3csIGNvbnN0IGNoYXIqIGNvbW1hKQorICAgICAgICA6IG1fbWFwKG1hcCkKKyAgICAgICAgLCBt
X2Fycm93KGFycm93KQorICAgICAgICAsIG1fY29tbWEoY29tbWEpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAg
IGZvciAodHlwZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fbWFwLmJlZ2luKCk7IGl0
ZXIgIT0gbV9tYXAuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgIG91dC5wcmludChtX2NvbW1h
LCBpdGVyLT5rZXksIG1fYXJyb3csIGl0ZXItPnZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIGNvbnN0IFQmIG1fbWFwOworICAgIGNvbnN0IGNoYXIqIG1fYXJyb3c7CisgICAgQ29t
bWFQcmludGVyIG1fY29tbWE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorTGlzdER1bXA8
VD4gbGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29uc3QgY2hhciogY29tbWEgPSAiLCAiKQorewor
ICAgIHJldHVybiBMaXN0RHVtcDxUPihsaXN0LCBjb21tYSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIENvbXBhcmF0b3I+CitDU3RyaW5nIHNvcnRlZExpc3REdW1wKGNvbnN0
IFQmIGxpc3QsIGNvbnN0IENvbXBhcmF0b3ImIGNvbXBhcmF0b3IsIGNvbnN0IGNoYXIqIGNvbW1h
ID0gIiwgIikKK3sKKyAgICBWZWN0b3I8dHlwZW5hbWUgVDo6VmFsdWVUeXBlPiBteUxpc3Q7Cisg
ICAgbXlMaXN0LmFwcGVuZFJhbmdlKGxpc3QuYmVnaW4oKSwgbGlzdC5lbmQoKSk7CisgICAgc3Rk
Ojpzb3J0KG15TGlzdC5iZWdpbigpLCBteUxpc3QuZW5kKCksIGNvbXBhcmF0b3IpOworICAgIFN0
cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBDb21tYVByaW50ZXIgY29tbWFQcmludGVyKGNvbW1h
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbXlMaXN0LnNpemUoKTsgKytpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWFQcmludGVyLCBteUxpc3RbaV0pOworICAgIHJldHVybiBvdXQu
dG9DU3RyaW5nKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBsZXNz
VGhhbihjb25zdCBUJiBhLCBjb25zdCBUJiBiKQoreworICAgIHJldHVybiBhIDwgYjsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK0NTdHJpbmcgc29ydGVkTGlzdER1bXAoY29uc3QgVCYgbGlz
dCwgY29uc3QgY2hhciogY29tbWEgPSAiLCAiKQoreworICAgIHJldHVybiBzb3J0ZWRMaXN0RHVt
cChsaXN0LCBsZXNzVGhhbjxUOjpWYWx1ZVR5cGU+LCBjb21tYSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitNYXBEdW1wPFQ+IG1hcER1bXAoY29uc3QgVCYgbWFwLCBjb25zdCBjaGFyKiBh
cnJvdyA9ICI9PiIsIGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIikKK3sKKyAgICByZXR1cm4gTWFw
RHVtcDxUPihtYXAsIGFycm93LCBjb21tYSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIENvbXBhcmF0b3I+CitDU3RyaW5nIHNvcnRlZE1hcER1bXAoY29uc3QgVCYgbWFwLCBj
b25zdCBDb21wYXJhdG9yJiBjb21wYXJhdG9yLCBjb25zdCBjaGFyKiBhcnJvdyA9ICI9PiIsIGNv
bnN0IGNoYXIqIGNvbW1hID0gIiwgIikKK3sKKyAgICBWZWN0b3I8dHlwZW5hbWUgVDo6S2V5VHlw
ZT4ga2V5czsKKyAgICBmb3IgKHR5cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtYXAu
YmVnaW4oKTsgaXRlciAhPSBtYXAuZW5kKCk7ICsraXRlcikKKyAgICAgICAga2V5cy5hcHBlbmQo
aXRlci0+a2V5KTsKKyAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpLCBjb21w
YXJhdG9yKTsKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgQ29tbWFQcmludGVyIGNv
bW1hUHJpbnRlcihjb21tYSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG91dC5wcmludChjb21tYVByaW50ZXIsIGtleXNbaV0sIGFycm93
LCBtYXAuZ2V0KGtleXNbaV0pKTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpsaXN0RHVtcDsKK3VzaW5nIFdURjo6c29y
dGVkTGlzdER1bXA7Cit1c2luZyBXVEY6Om1hcER1bXA7Cit1c2luZyBXVEY6OnNvcnRlZE1hcER1
bXA7CisKKyNlbmRpZiAvLyBMaXN0RHVtcF9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ByaW50
U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkocmV2
aXNpb24gMTUyNTgyKQorKysgU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAkod29ya2luZyBj
b3B5KQpAQCAtMjA3LDYgKzIwNyw0NSBAQCBwdWJsaWM6CiAgICAgICAgIHByaW50KHZhbHVlMTIp
OwogICAgICAgICBwcmludCh2YWx1ZTEzKTsKICAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1l
IFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwg
dHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0
eXBlbmFtZSBUMTQ+CisgICAgdm9pZCBwcmludChjb25zdCBUMSYgdmFsdWUxLCBjb25zdCBUMiYg
dmFsdWUyLCBjb25zdCBUMyYgdmFsdWUzLCBjb25zdCBUNCYgdmFsdWU0LCBjb25zdCBUNSYgdmFs
dWU1LCBjb25zdCBUNiYgdmFsdWU2LCBjb25zdCBUNyYgdmFsdWU3LCBjb25zdCBUOCYgdmFsdWU4
LCBjb25zdCBUOSYgdmFsdWU5LCBjb25zdCBUMTAmIHZhbHVlMTAsIGNvbnN0IFQxMSYgdmFsdWUx
MSwgY29uc3QgVDEyJiB2YWx1ZTEyLCBjb25zdCBUMTMmIHZhbHVlMTMsIGNvbnN0IFQxNCYgdmFs
dWUxNCkKKyAgICB7CisgICAgICAgIHByaW50KHZhbHVlMSk7CisgICAgICAgIHByaW50KHZhbHVl
Mik7CisgICAgICAgIHByaW50KHZhbHVlMyk7CisgICAgICAgIHByaW50KHZhbHVlNCk7CisgICAg
ICAgIHByaW50KHZhbHVlNSk7CisgICAgICAgIHByaW50KHZhbHVlNik7CisgICAgICAgIHByaW50
KHZhbHVlNyk7CisgICAgICAgIHByaW50KHZhbHVlOCk7CisgICAgICAgIHByaW50KHZhbHVlOSk7
CisgICAgICAgIHByaW50KHZhbHVlMTApOworICAgICAgICBwcmludCh2YWx1ZTExKTsKKyAgICAg
ICAgcHJpbnQodmFsdWUxMik7CisgICAgICAgIHByaW50KHZhbHVlMTMpOworICAgICAgICBwcmlu
dCh2YWx1ZTE0KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVu
YW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBU
NiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLCB0
eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQsIHR5
cGVuYW1lIFQxNT4KKyAgICB2b2lkIHByaW50KGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJiB2
YWx1ZTIsIGNvbnN0IFQzJiB2YWx1ZTMsIGNvbnN0IFQ0JiB2YWx1ZTQsIGNvbnN0IFQ1JiB2YWx1
ZTUsIGNvbnN0IFQ2JiB2YWx1ZTYsIGNvbnN0IFQ3JiB2YWx1ZTcsIGNvbnN0IFQ4JiB2YWx1ZTgs
IGNvbnN0IFQ5JiB2YWx1ZTksIGNvbnN0IFQxMCYgdmFsdWUxMCwgY29uc3QgVDExJiB2YWx1ZTEx
LCBjb25zdCBUMTImIHZhbHVlMTIsIGNvbnN0IFQxMyYgdmFsdWUxMywgY29uc3QgVDE0JiB2YWx1
ZTE0LCBjb25zdCBUMTUmIHZhbHVlMTUpCisgICAgeworICAgICAgICBwcmludCh2YWx1ZTEpOwor
ICAgICAgICBwcmludCh2YWx1ZTIpOworICAgICAgICBwcmludCh2YWx1ZTMpOworICAgICAgICBw
cmludCh2YWx1ZTQpOworICAgICAgICBwcmludCh2YWx1ZTUpOworICAgICAgICBwcmludCh2YWx1
ZTYpOworICAgICAgICBwcmludCh2YWx1ZTcpOworICAgICAgICBwcmludCh2YWx1ZTgpOworICAg
ICAgICBwcmludCh2YWx1ZTkpOworICAgICAgICBwcmludCh2YWx1ZTEwKTsKKyAgICAgICAgcHJp
bnQodmFsdWUxMSk7CisgICAgICAgIHByaW50KHZhbHVlMTIpOworICAgICAgICBwcmludCh2YWx1
ZTEzKTsKKyAgICAgICAgcHJpbnQodmFsdWUxNCk7CisgICAgICAgIHByaW50KHZhbHVlMTUpOwor
ICAgIH0KIH07CiAKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBjb25zdCBjaGFyKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206586</attachid>
            <date>2013-07-12 20:01:53 -0700</date>
            <delta_ts>2013-07-12 20:32:51 -0700</delta_ts>
            <desc>runs some more code</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>259735</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NiBA
QAorMjAxMy0wNy0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcg
VVJMIChPT1BTISkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpmaWxsKToK
KyAgICAgICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmNsZWFyKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpzZXRMaXZl
VmFsdWVzKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZW5kQmFz
aWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVj
dHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKiBk
ZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6
Omp1c3RPbmVDaGlsZCk6CisgICAgICAgIChBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKiBkZmcv
REZHQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Js
b2NrOjp+QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6ZW5zdXJl
TG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjppc0luUGhpcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6aXNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FE
YXRhOjpTU0FEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpTU0FEYXRhOjp+
U1NBRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKEJhc2lj
QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Om9wZXJhdG9yW10pOgorICAg
ICAgICAoU1NBRGF0YSk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHA6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja0luc2VydGlvblNl
dDo6QmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9u
U2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0
aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0Ojpp
bnNlcnRCZWZvcmUpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0OjpleGVj
dXRlKToKKyAgICAgICAgKiBkZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAoQmxvY2tJbnNlcnRpb25TZXQpOgorICAgICAgICAqIGRmZy9E
RkdDb21tb24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzS2lsbCk6CisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6OmtpbGxTdGF0dXNGb3JEb2VzS2lsbCk6CisgICAgICAgICog
ZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb250cmFkaWN0aW9uUHJ1bmluZ1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2U6OmlzQ29udHJhZGlj
dG9yeSk6CisgICAgICAgIChKU0M6OkRGRzo6Q29udHJhZGljdGlvblBydW5pbmdQaGFzZTo6bWFr
ZUNvbnRyYWRpY3RvcnkpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1Db250cmFkaWN0aW9u
UHJ1bmluZyk6CisgICAgICAgICogZGZnL0RGR0NvbnRyYWRpY3Rpb25QcnVuaW5nUGhhc2UuaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZTo6Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlOjpicmVha0NyaXRpY2FsRWRnZSk6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKToKKyAgICAgICAgKiBkZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
ICogZGZnL0RGR0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6ZmluZFR5cGVDaGVja1Jvb3QpOgorICAg
ICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpjb3VudE5vZGUpOgorICAgICAgICAoRENFUGhhc2Up
OgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpjb3VudEVkZ2UpOgorICAgICAgICAoSlND
OjpERkc6OkRDRVBoYXNlOjplbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKToKKyAg
ICAgICAgKiBkZmcvREZHRWRnZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0VkZ2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpFZGdl
KToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXROb2RlKToKKyAgICAgICAgKEpTQzo6REZH
OjpFZGdlOjpzZXRVc2VLaW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRQcm9vZlN0
YXR1cyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6d2lsbE5vdEhhdmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkRGRzo6RWRnZTo6d2lsbEhhdmVDaGVjayk6CisgICAgICAgIChFZGdlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpFZGdlOjpraWxsU3RhdHVzVW5jaGVja2VkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpFZGdlOjpraWxsU3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzZXRL
aWxsU3RhdHVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpkb2VzS2lsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6RWRnZTo6ZG9lc05vdEtpbGwpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6
Om1ha2VXb3JkKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hGb3JtYXQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRm
Zy9ERkdGbHVzaEZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChXVEYp
OgorICAgICAgICAqIGRmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZTo6Rmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZW5lc3NBbmFseXNp
c1BoYXNlOjpwcm9jZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVuZXNzQW5hbHlz
aXNQaGFzZTo6c2V0Rm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hMaXZlbmVzc0Fu
YWx5c2lzUGhhc2U6OmZsdXNoRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZv
cm1GbHVzaExpdmVuZXNzQW5hbHlzaXMpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaExpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgIChERkcpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjphZGRGb3JEZXB0aEZpcnN0U29ydCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmRlcHRoRmlyc3RTb3J0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Okluc2VydGlvblNldDo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKExpdmVuZXNzQW5hbHlzaXNQaGFzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnByb2Nlc3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OnBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKToKKyAgICAgICAgKiBkZmcvREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUGhpKToKKyAgICAgICAgKE5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnBoaSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dGFrZW5CbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bm90VGFrZW5CbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlOjpydW4pOgor
ICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyk6CisgICAg
ICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChTU0FDb252ZXJzaW9u
UGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6U1NBQ29udmVy
c2lvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpQ2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2FyZFBoaSk6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpRWRnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpkZWR1cGxpY2F0ZUNoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmROb2Rl
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2Fy
ZE5vZGVFZGdlKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmg6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpmbHVzaEZvcm1hdCk6Cisg
ICAgICAgIChWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93
ZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjcmVhdGVQaGlWYXJpYWJs
ZXMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjaGVja0FyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVVwc2lsb24pOgorICAgICAgICAoTG93ZXJE
RkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUGhp
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUpTQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlV2Vha0pTQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQWRkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoU3ViKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTXVsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoRGl2KToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTW9kKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTWluT3JNYXgpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhBYnMpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhOZWdhdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQml0QW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZUJpdE9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUJpdFhvcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVCaXRSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlQml0TFNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUJpdFVSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
VUludDMyVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlSW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVHZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZUNvbXBhcmVFcUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVDb21wYXJlU3RyaWN0RXFDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzcyk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzc0VxKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVHcmVhdGVyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVHcmVhdGVyRXEpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0ludDMyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Q2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06Omxvd0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpsb3dEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dKU1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc0xpdmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjp1c2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppbml0
aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjplbWl0T1NSRXhpdENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjphZGRFeGl0QXJndW1lbnRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6c2V0SW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpz
ZXRKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c2V0Qm9vbGVh
bik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNldFN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzZXREb3VibGUpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc1ZhbGlkKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJl
ZE5vZGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChMb3dlcmVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjpMb3dlcmVkTm9k
ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJlZE5vZGVWYWx1ZTo6b3BlcmF0b3IhKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJlZE5vZGVWYWx1ZTo6YmxvY2spOgorICAgICAgICAqIGZ0bC9GVExWYWx1ZUZyb21CbG9j
ay5oOgorICAgICAgICAoSlNDOjpGVEw6OlZhbHVlRnJvbUJsb2NrOjpWYWx1ZUZyb21CbG9jayk6
CisgICAgICAgIChWYWx1ZUZyb21CbG9jayk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlU291cmNl
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgICog
ZnRsL0ZUTFZhbHVlU291cmNlLmg6CisKIDIwMTMtMDctMTEgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlc3VycmVjdCB0aGUgQ0xvb3AgTExJTlQgb24gdGhlIEZU
TCBicmFuY2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUy
NTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMyArMTcwLDEzIEBACiAJCTBG
NDZFNkI5MTc2Rjg5REIwMEUxRjc1NSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUg
LyogRlRMU3dpdGNoQ2FzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNDZFNkM1MTc2RjhBNUUwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZD
MjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovOyB9OwogCQkwRjQ2RTZD
NjE3NkY4QTYwMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBE
RkdMYXp5SlNWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGNDZFNkVGMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdBbmFseXNpcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RUUxNzdDRTk1
QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi87IH07Ci0JCTBGNDZFNkYzMTc3Q0YwRDIwMEUx
Rjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxM
b29wcy5jcHAgKi87IH07Ci0JCTBGNDZFNkY0MTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFs
TG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ2RTZEOTE3N0NCOTAwMDBF
MUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZENzE3N0NCOEZDMDBFMUY3NTUgLyogTExWTURpc2Fz
c2VtYmxlci5jcHAgKi87IH07CiAJCTBGNDZFNkUzMTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlz
YXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkU0MTc3Q0Mz
NjYwMEUxRjc1NSAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUxMTc3Q0MzNjYwMEUxRjc1NSAvKiBVRGlz
ODZEaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ2RTZFNTE3N0NDMzY2MDBFMUY3NTUgLyogWDg2RGlzYXNzZW1ibGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUy
MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwICovOyB9OworCQkwRjQ2RTZF
RjE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkVFMTc3Q0U5NUEwMEUxRjc1NSAvKiBERkdB
bmFseXNpcy5oICovOyB9OworCQkwRjQ2RTZGMzE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJh
bExvb3BzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDZFNkYxMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovOyB9Owor
CQkwRjQ2RTZGNDE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZGMjE3N0NGMEQyMDBF
MUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CiAJ
CTBGNEUxQTBFMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTBDMTcz
QUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLzsgfTsKIAkJMEY0
RTFBMEYxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEUxQTBEMTczQUVEREMw
MDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1Myw2ICszNTMsMjEgQEAKIAkJMEZEREJG
QjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4
IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2
QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9Owor
CQkwRkU1MDU1OTE3ODdBQTg5MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTU4MTc4N0FB
ODgwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTVDMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1NUQxNzg3QjBDRjAw
QjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1NjMxNzhGNUIwNTAwQjM1RjhDIC8qIERG
R0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhDIC8qIERGR0Jhc2ljQmxvY2suY3BwICovOyB9
OworCQkwRkU1MDU3MTE3OEY1QjUzMDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NjQx
NzhGNUI1MzAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEZF
NTA1NzQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTY3MTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdGbHVzaEZvcm1hdC5jcHAgKi87IH07CisJCTBGRTUwNTc1MTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNTA1NjgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1
NzYxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTY5MTc4
RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi87IH07
CisJCTBGRTUwNTc3MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
NTA1NkExNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1
NzgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2QjE3OEY1QjUz
MDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1
NzkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NkMxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTdBMTc4RjVCNTMwMEIzNUY4QyAv
KiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZEMTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1N0IxNzhG
NUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZFMTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1N0MxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2RjE3OEY1QjUzMDBCMzVGOEMgLyogREZH
U1NBQ29udmVyc2lvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1N0QxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NzAxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZl
cnNpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUz
NDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi87IH07CiAJ
CTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzRBMTcyM0NE
QTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE4
NiwxMyArMTIwMSwxMyBAQAogCQkwRjQ2RTZCNzE3NkY4OUQ5MDBFMUY3NTUgLyogRlRMU3dpdGNo
Q2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTd2l0Y2hDYXNlLmg7
IHBhdGggPSBmdGwvRlRMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3BwOyBwYXRoID0g
ZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcvREZHTGF6eUpT
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RUUxNzdDRTk1QTAw
RTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29w
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9v
cHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBh
dGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIuY3BwOyBwYXRo
ID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZFMDE3N0NDMzY2MDBFMUY3NTUgLyogTExWTURpc2Fzc2VtYmxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1ibGVyLmg7IHBh
dGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQ2RTZFMTE3N0NDMzY2MDBFMUY3NTUgLyogVURpczg2RGlzYXNzZW1ibGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5o
OyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjQ2RTZFMjE3N0NDMzY2MDBFMUY3NTUgLyogWDg2RGlzYXNzZW1i
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4NkRpc2Fzc2Vt
Ymxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0Fu
YWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0FuYWx5c2lzLmg7
IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY0NkU2RjExNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuY3BwOyBwYXRoID0g
ZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBhdGggPSBkZmcvREZHTmF0
dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkzQUY4MTZEMENB
RDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNEUxQTBDMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjRFMUEwRDE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzg0LDYgKzEzOTksMjEgQEAKIAkJMEZEREJGQjMxNjY2RUVENTAw
QzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBkZmcvREZHQmxv
Y2tJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NUEx
Nzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAvKiBE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTUwNTYyMTc4RjVCMDUwMEIzNUY4QyAvKiBERkdCYXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Jhc2ljQmxvY2suY3BwOyBwYXRoID0gZGZnL0RG
R0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2NDE3
OEY1QjUzMDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmxvY2tJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0g
ZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNTA1NjcxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZsdXNoRm9ybWF0LmNwcDsgcGF0aCA9
IGRmZy9ERkdGbHVzaEZvcm1hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTUwNTY4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbHVzaEZvcm1hdC5oOyBwYXRoID0gZGZnL0RGR0ZsdXNo
Rm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTY5MTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2QTE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1
c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1
MDU2QjE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkMxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkQxNzhGNUI1MzAwQjM1
RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTZFMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU3MDE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29u
dmVyc2lvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NTQUNv
bnZlcnNpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RB
NTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTA5RkQx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0aW9ucy5oOyBwYXRoID0gZnRsL0ZUTEFiYnJldmlh
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NjIsMTAgKzI5OTIsMTMg
QEAKIAkJCQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmgg
Ki8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCisJCQkJMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhD
IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLAogCQkJCTBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERG
R0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCiAJCQkJMEZEMjgxMjUxNzc5M0JFMzAwQkJCMEYzIC8q
IERGR0JpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEZEMjgxMjYxNzc5M0JFMzAwQkJCMEYzIC8q
IERGR0JpbmFyeVN3aXRjaC5oICovLAorCQkJCTBGRTUwNTY0MTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdCbG9ja0luc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhD
IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJMEY4MzY0QjUxNjRCMEMwRTAwNTMz
MjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oICovLAogCQkJCTg2RUM5REI0MTMyOERGODIwMDJC
MkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yOTg1LDYgKzMwMTgsOCBAQAog
CQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5o
ICovLAogCQkJCTBGQkUwRjZCMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5oICovLAorCQkJCTBGRTUwNTVBMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU1QjE3ODdCMENGMDBCMzVG
OEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRF
RjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5
NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEYyRkM3NzAxNkUxMkY2RjAwMzhE
OTc2IC8qIERGR0RDRVBoYXNlLmNwcCAqLywKQEAgLTMwMTEsNiArMzA0NiwxMCBAQAogCQkJCTBG
REIyQ0Q0MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjJCREMx
MjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi8sCiAJCQkJMEYyQkRDMTMx
NTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLywKKwkJCQkwRkU1MDU2NzE3OEY1
QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuY3BwICovLAorCQkJCTBGRTUwNTY4MTc4RjVC
NTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oICovLAorCQkJCTBGRTUwNTY5MTc4RjVCNTMw
MEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgKi8sCisJCQkJMEZF
NTA1NkExNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
Ki8sCiAJCQkJODZBRTZDNEIxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCAqLywKIAkJ
CQk4NkVDOURCNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCAqLywKIAkJ
CQk4NkFFNkM0QzEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oICovLApAQCAtMzAyNSw2
ICszMDY0LDggQEAKIAkJCQkwRkRCMkNENjE3NDJEODA0MDA3QjNDMUIgLyogREZHSklURmluYWxp
emVyLmggKi8sCiAJCQkJMEY0NkU2QzIxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVl
LmNwcCAqLywKIAkJCQkwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUu
aCAqLywKKwkJCQkwRkU1MDU2QjE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNp
c1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU2QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmggKi8sCiAJCQkJMEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0xvbmdMaXZlZFN0YXRlLmNwcCAqLywKIAkJCQkwRkI0QjUxRDE2QjYyNzcyMDAzRjY5NkIgLyog
REZHTG9uZ0xpdmVkU3RhdGUuaCAqLywKIAkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyog
REZHTWluaWZpZWRHcmFwaC5oICovLApAQCAtMzA0MSw2ICszMDgyLDggQEAKIAkJCQkwRkE1ODFC
OTE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCAqLywKIAkJCQk4NkVDOURCRjEzMjhE
RjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJODZFQzlEQzAxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCAqLywKKwkJCQkwRkU1MDU2RDE3OEY1QjUzMDBC
MzVGOEMgLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgKi8sCisJCQkJMEZF
NTA1NkUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aCAqLywKIAkJCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwICov
LAogCQkJCTBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovLAogCQkJ
CTBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCAqLywKQEAgLTMwNzgs
NiArMzEyMSw4IEBACiAJCQkJODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0
aXZlSklULmggKi8sCiAJCQkJODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwICovLAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKKwkJCQkwRkU1MDU2RjE3OEY1QjUzMDBCMzVGOEMgLyog
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU3MDE3OEY1QjUzMDBCMzVG
OEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggKi8sCiAJCQkJMEY2Mzk0NzYxNURDRTM0NzAw
NkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLywKIAkJCQkwRkMwOTc5RjE0
NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3
MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCkBAIC0zMjk4LDYgKzMzNDMsNyBAQAogCQkJCTg2
MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjNDMDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQSUNhc3QuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRTUwNTc5MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVz
c0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NUY0MDg4MTBFN0Q1NjMwMDk0
NzM2MSAvKiBBUElTaGltcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGNjA1MTQwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjU3REU4MEUxRjUxQzUw
MDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzQwNyw2ICszNDUzLDcg
QEAKIAkJCQkwRkVBMEExRDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9y
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0Rv
dWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3RDE3OEY1QjUzMDBC
MzVGOEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQz
QzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAq
LywKQEAgLTM0MjgsNiArMzQ3NSw3IEBACiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8q
IERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0
MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUZDOUFCMTY4
MUEzQjYwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkU1MDU3NzE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEUxQTEyMTczQUYwN0IwMDdFRTJEMyAv
KiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1
QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZD
OTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNDQ0LDYgKzM0OTIsNyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIw
MDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDcxNTIy
ODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkU1MDU1RDE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8q
IERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2
OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRE
QkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zNTkxLDYgKzM2NDAsOCBAQAogCQkJCTBGNzY2RDM1MTVBRTI1M0IwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRTUwNTc1MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaEZvcm1hdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NTkxNzg3QUE4OTAwQjM1RjhDIC8qIERGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzJGRkQ2NDEzOTk4NUE4MDBFNTM2NUEg
LyogS2V5d29yZExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3MkEwRUQxQ0U2OTAw
RjFGNjgxIC8qIExhYmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjAwOTdBNjBFQkFCQjU4MDA3
QTcyOTcgLyogTGFiZWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzA4LDYgKzM3NTksNyBA
QAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGREIyQ0RFMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3QjE3OEY1QjUzMDBCMzVGOEMgLyog
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
Q0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyMzVCREIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBI
ZWFkZXJzICovLApAQCAtNDE5NCw2ICs0MjQ2LDcgQEAKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4
ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREIyQ0Q5MTc0
MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRTUwNTc4MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3M0Q3QUUxNjVBMTQyRDAwQUNBQjcx
IC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTY5QTA3
OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjhGOTQ0MDE2Njc2MzMwMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTQyMjUsOSArNDI3OCwxMSBAQAogCQkJCTBGQzA5NzZFMTQ2OEFCNTEwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzQxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMjM1QkQ4MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9y
bWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAw
QzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0
NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRTUwNTcxMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
Q0FyZ3VtZW50R2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkM1NTcwMTQ3MzhGMzUw
MDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlE
MTZCNzJBMDgwMDVERjk1QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MzQ2
LDYgKzQ0MDEsNyBAQAogCQkJCTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRS
ZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc4ODAxNDAxNDcxQUQ5MjAwNDFCMDE2IC8qIEpT
RGF0ZU1hdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDYxMDdFQzI3MTAwNURCQzhE
IC8qIEpTRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzYxNzhGNUI1MzAw
QjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDM4Myw2ICs0NDM5LDcgQEAKIAkJCQlC
Q0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5NUFCODM0MjBEQTQzMjI1MDBCQzgzRjMgLyogTGVnYWN5
UHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1N0MxNzhGNUI1MzAwQjM1RjhD
IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFC
MDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3
NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC00NDA1LDcgKzQ0NjIsOSBAQAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAv
KiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBC
MDJFODYgLyogTWFya1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3
RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTdB
MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNEMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0
aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTVDMTc4N0IwQ0YwMEIzNUY4QyAv
KiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RDI4MTI3MTc3OTNCRTUwMEJCQjBGMyAvKiBERkdCaW5hcnlTd2l0Y2guY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQkYyRkYxNTYwRjA2QTAwOEU5MjIy
IC8qIE5hbWVDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0MTcsNiArNDQ3Niw3
IEBACiAJCQkJNjU1RUIyOUIxMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVzQ29kZWdlbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQ2OURFMjEwN0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTMxMDdFQzdFNzAwNjUwNDQ2IC8q
IE51bWJlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU2MzE3OEY1QjA1MDBC
MzVGOEMgLyogREZHQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFNDEw
N0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg2RjNFRUJFMTY4Q0RFOTMwMDc3QjkyQSAvKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTE0NDY5REU1MTA3RUM3RTcwMDY1MDQ0NiAvKiBPYmplY3RDb25zdHJ1
Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0cyB7CiAgICAgc3RhdGljIFQgZGVmYXVsdFZh
bHVlKCkgeyByZXR1cm4gVCgpOyB9Ci0gICAgc3RhdGljIHZvaWQgZHVtcChjb25zdCBUJiB2YWx1
ZSwgUHJpbnRTdHJlYW0mIG91dCkgeyB2YWx1ZS5kdW1wKG91dCk7IH0KKyAgICBzdGF0aWMgdm9p
ZCBkdW1wKGNvbnN0IFQmIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0KSB7IG91dC5wcmludCh2YWx1
ZSk7IH0KIH07CiAKIGVudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQsIExvY2FsT3Bl
cmFuZCB9OwpAQCAtMjA5LDEyICsyMDksMjUgQEAgcHVibGljOgogICAgICAgICBzZXRMb2NhbEZp
cnN0VGltZShvcGVyYW5kLCB2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2xlYXIoKQor
ICAgIHZvaWQgZmlsbChUIHZhbHVlKQogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRzW2ld
ID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0g
dmFsdWU7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7Cisg
ICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNs
ZWFyKCkKKyAgICB7CisgICAgICAgIGZpbGwoVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSk7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYW5kcyYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBvdGhlci5udW1i
ZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAgQVNTRVJUKG51bWJlck9mTG9jYWxzKCkgPT0gb3Ro
ZXIubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHMgPT0gb3RoZXIubV9hcmd1bWVudHMgJiYgbV9sb2NhbHMgPT0gb3RoZXIubV9sb2NhbHM7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2
aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTYgQEAgdm9pZCBBYnN0cmFjdFN0
YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJh
Y3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSBiYXNpY0Jsb2NrLT5zc2EtPnZhbHVlc0F0SGVhZC5i
ZWdpbigpOworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3Ig
ZW5kID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQuZW5kKCk7CisgICAgICAgIGZvciAo
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBmb3JOb2RlKGl0ZXItPmtleSkg
PSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5oYXNDbG9iYmVyYWJs
ZVN0YXRlKCkpCisgICAgICAgICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCiAgICAgYmFzaWNCbG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZh
bHNlOwogICAgIGJhc2ljQmxvY2stPmNmYUhhc1Zpc2l0ZWQgPSB0cnVlOwogICAgIG1fYmxvY2sg
PSBiYXNpY0Jsb2NrOwpAQCAtODMsMTMgKzkzLDI4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKEJhc2kKICAgICBtX2N1cnJlbnROb2RlID0gMDsKIH0KIAotdm9pZCBBYnN0
cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKK3N0YXRpYyB2b2lkIHNldExpdmVW
YWx1ZXMoSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4mIHZhbHVlcywgSGFzaFNldDxOb2Rl
Kj4mIGxpdmUpCit7CisgICAgdmFsdWVzLmNsZWFyKCk7CisgICAgCisgICAgSGFzaFNldDxOb2Rl
Kj46Oml0ZXJhdG9yIGl0ZXIgPSBsaXZlLmJlZ2luKCk7CisgICAgSGFzaFNldDxOb2RlKj46Oml0
ZXJhdG9yIGVuZCA9IGxpdmUuZW5kKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CisgICAgICAgIHZhbHVlcy5hZGQoKml0ZXIsIEFic3RyYWN0VmFsdWUoKSk7Cit9CisKK3ZvaWQg
QWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IGdy
YXBoLmJsb2NrKDApOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2NrKDApOwog
ICAgIHJvb3QtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOwogICAgIHJvb3QtPmNmYUhhc1Zpc2l0
ZWQgPSBmYWxzZTsKICAgICByb290LT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCk7ICsraSkgeworICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAg
ICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIE5vZGUqIG5vZGUgPSBy
b290LT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSk7CiAgICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IFNldEFyZ3VtZW50KTsKICAgICAgICAgaWYgKCFub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKQEAgLTExOCwxMiArMTQzLDExIEBAIHZv
aWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICAgICAgICAgIHJvb3Qt
PnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOwogICAgICAgICByb290LT52YWx1ZXNBdFRh
aWwubG9jYWwoaSkuY2xlYXIoKTsKICAgICB9Ci0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAxIDsgYmxvY2tJbmRleCA8IGdyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsK
LSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9ja0luZGV4IDwgbV9ncmFwaC5u
dW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAg
ICAgYmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKICAgICAgICAgYmxvY2stPmNmYUhh
c1Zpc2l0ZWQgPSBmYWxzZTsKICAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFs
c2U7CkBAIC0xMzcsMTIgKzE2MSwxMiBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUo
R3JhcGgmIGdyCiAgICAgICAgIH0KICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9
IGdyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgIGlmIChibG9jay0+
Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBncmFw
aC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgICAgICAgICB2YWx1
ZS5zZXRNb3N0U3BlY2lmaWMoZ3JhcGgsIGdyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ld
KTsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1
ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgdmFsdWUuc2V0TW9zdFNwZWNpZmlj
KG1fZ3JhcGgsIG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0pOworICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRG
b3JJbmRleChpKTsKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChvcGVy
YW5kKS5tZXJnZSh2YWx1ZSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBJbml0aWFsaXppbmcgQmxvY2sgIyV1LCBv
cGVyYW5kIHIlZCwgdG8gIiwgYmxvY2tJbmRleCwgb3BlcmFuZCk7CkBAIC0xNTIsNiArMTc2LDE1
IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICAgICAgfQog
ICAgICAgICBibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7CiAgICAgfQorICAgIGlmICht
X2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7
CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3NhLT52YWx1ZXNBdEhlYWQsIGJsb2Nr
LT5zc2EtPmxpdmVBdEhlYWQpOworICAgICAgICAgICAgc2V0TGl2ZVZhbHVlcyhibG9jay0+c3Nh
LT52YWx1ZXNBdFRhaWwsIGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwpOworICAgICAgICB9CisgICAg
fQogfQogCiBib29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNb2RlIG1lcmdl
TW9kZSkKQEAgLTE3MiwyMCArMjA1LDQxIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNC
bG9jayhNZXJnZU0KICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAKICAgICBpZiAobWVy
Z2VNb2RlICE9IERvbnRNZXJnZSB8fCAhQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgc3dpdGNoIChtX2dyYXBo
Lm1fZm9ybSkgeworICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOiB7CisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2lu
ZyBzdGF0ZSBmb3IgYXJndW1lbnQgJXp1LlxuIiwgYXJndW1lbnQpOworICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgc3RhdGUgZm9yIGFyZ3VtZW50ICV6dS5cbiIsIGFy
Z3VtZW50KTsKICNlbmRpZgotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24g
PSBibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMuYXJndW1l
bnQoYXJndW1lbnQpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9j
YWwgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsK
KyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1
ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VTdGF0ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMuYXJndW1lbnQoYXJndW1l
bnQpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsg
bG9jYWwgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwp
IHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAg
ICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRlIGZvciBsb2NhbCAlenUuXG4iLCBsb2Nh
bCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgTWVyZ2luZyBzdGF0ZSBmb3Ig
bG9jYWwgJXp1LlxuIiwgbG9jYWwpOwogI2VuZGlmCi0gICAgICAgICAgICBBYnN0cmFjdFZhbHVl
JiBkZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpOwotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxl
cy5sb2NhbChsb2NhbCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKKyAg
ICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1ZXNB
dFRhaWwubG9jYWwobG9jYWwpOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0
ZUF0VGFpbChkZXN0aW5hdGlvbiwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU1NBOiB7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdFRhaWwuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBibG9jay0+dmFsdWVzQXRUYWlsW2ld
Lm1lcmdlKG1fdmFyaWFibGVzW2ldKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSGFzaFNl
dDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBibG9jay0+c3NhLT5saXZlQXRUYWlsLmJlZ2luKCk7
CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gYmxvY2stPnNzYS0+
bGl2ZUF0VGFpbC5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsLmZpbmQobm9kZSktPnZhbHVlLm1l
cmdlKGZvck5vZGUobm9kZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTI5
Miw2ICszNDYsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwog
ICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBHZXRBcmd1bWVudDogeworICAgICAg
ICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IG1fdmFyaWFibGVzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
OworICAgICAgICBBU1NFUlQodmFsdWUuaXNUb3AoKSk7CisgICAgICAgIEZpbHRyYXRpb25SZXN1
bHQgcmVzdWx0ID0KKyAgICAgICAgICAgIHZhbHVlLmZpbHRlcih0eXBlRmlsdGVyRm9yKHVzZUtp
bmRGb3IodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
cmVzdWx0LCByZXN1bHQgPT0gRmlsdHJhdGlvbk9LKTsKKyAgICAgICAgZm9yTm9kZShub2RlKSA9
IHZhbHVlOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEdl
dExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBAIC0zMjMsMTMgKzM4OSwxMyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCisgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgTW92SGludEFuZENoZWNr
OiB7CiAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuIEEgTW92SGludCBpcyBl
ZmZlY3RpdmVseSBhIHByb21pc2UgdGhhdCB0aGUgU2V0TG9jYWwKICAgICAgICAgLy8gd2FzIGRl
YWQuCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBNb3ZIaW50Ogog
ICAgIGNhc2UgWm9tYmllSGludDogewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICBicmVhazsKQEAgLTE1ODYsNiArMTY1MiwxNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBQaGk6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09
IFNTQSk7CisgICAgICAgIC8vIFRoZSBzdGF0ZSBvZiB0aGlzIG5vZGUgd291bGQgaGF2ZSBhbHJl
YWR5IGJlZW4gZGVjaWRlZC4KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgVXBz
aWxvbjogeworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGZvck5vZGUo
bm9kZS0+cGhpKCkpID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICBjYXNlIEJyZWFrcG9p
bnQ6CkBAIC0xNjc4LDcgKzE3NTUsNyBAQCBpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9i
YmVyU3RydWN0CiAgICAgbV9kaWRDbG9iYmVyID0gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwg
QWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKK2Jvb2wgQWJzdHJhY3RTdGF0
ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RW
YWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTE3NjYsMjEgKzE4NDMsNDQgQEAgaW5saW5lIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgYm9v
bCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykK
K2Jvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayog
dG8pCiB7CiAgICAgQVNTRVJUKGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50
cygpID09IHRvLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgQVNT
RVJUKGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpID09IHRvLT52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgCiAgICAgYm9vbCBjaGFuZ2VkID0gZmFs
c2U7CiAgICAgCi0gICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGZyb20t
PnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gdG8tPnZhbHVlc0F0SGVhZC5hcmd1bWVu
dChhcmd1bWVudCk7Ci0gICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9j
a3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCksIHRv
LT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpLCBmcm9tLT52YXJpYWJsZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7Cisg
ICAgY2FzZSBUaHJlYWRlZENQUzogeworICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
YXJndW1lbnQpIHsKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gdG8t
PnZhbHVlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKGRlc3RpbmF0aW9uLCBmcm9tLT52YWx1ZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpLCB0by0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3Vt
ZW50KSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9t
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmxvY2FsKGxv
Y2FsKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3Mo
ZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCksIHRvLT52YXJpYWJs
ZXNBdEhlYWQubG9jYWwobG9jYWwpLCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwp
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCi0gICAgZm9yIChzaXpl
X3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2Fs
cygpOyArK2xvY2FsKSB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gdG8t
PnZhbHVlc0F0SGVhZC5sb2NhbChsb2NhbCk7Ci0gICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJp
YWJsZUJldHdlZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFpbC5sb2NhbChs
b2NhbCksIHRvLT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpLCBmcm9tLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwobG9jYWwpKTsKKyAgICAgICAgCisgICAgY2FzZSBTU0E6IHsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGZyb20tPnZhbHVlc0F0VGFpbC5zaXplKCk7IGktLTspCisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHRvLT52YWx1ZXNBdEhlYWRbaV0ubWVyZ2UoZnJvbS0+dmFsdWVzQXRU
YWlsW2ldKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVy
ID0gdG8tPnNzYS0+bGl2ZUF0SGVhZC5iZWdpbigpOworICAgICAgICBIYXNoU2V0PE5vZGUqPjo6
aXRlcmF0b3IgZW5kID0gdG8tPnNzYS0+bGl2ZUF0SGVhZC5lbmQoKTsKKyAgICAgICAgZm9yICg7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSAqaXRlcjsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gdG8tPnNzYS0+dmFsdWVzQXRIZWFkLmZpbmQobm9kZSkt
PnZhbHVlLm1lcmdlKAorICAgICAgICAgICAgICAgIGZyb20tPnNzYS0+dmFsdWVzQXRUYWlsLmZp
bmQobm9kZSktPnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmICghdG8tPmNmYUhhc1Zpc2l0ZWQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2
aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgLy8g
Q2FsbCB0aGlzIGJlZm9yZSBiZWdpbm5pbmcgQ0ZBIHRvIGluaXRpYWxpemUgdGhlIGFic3RyYWN0
IHZhbHVlcyBvZgogICAgIC8vIGFyZ3VtZW50cywgYW5kIHRvIGluZGljYXRlIHdoaWNoIGJsb2Nr
cyBzaG91bGQgYmUgbGlzdGVkIGZvciBDRkEKICAgICAvLyBleGVjdXRpb24uCi0gICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZShHcmFwaCYpOworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogCiAgICAg
Ly8gU3RhcnQgYWJzdHJhY3RseSBleGVjdXRpbmcgdGhlIGdpdmVuIGJhc2ljIGJsb2NrLiBJbml0
aWFsaXplcyB0aGUKICAgICAvLyBub3Rpb24gb2YgYWJzdHJhY3Qgc3RhdGUgdG8gd2hhdCB3ZSBi
ZWxpZXZlIGl0IHRvIGJlIGF0IHRoZSBoZWFkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5
LDYgKzk5LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBFZGdlIGNoaWxkMVVuY2hlY2tlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fd29yZHNbMF07IH0KICAgICAKKyAgICBFZGdlIGp1c3RPbmVDaGlsZCgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoISFjaGlsZDEoKSAmJiAhY2hpbGQyKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOworICAgICAgICAgICAgcmV0dXJuIGNoaWxkMSgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBFZGdlKCk7CisgICAgfQorICAgIAogICAgIHZv
aWQgaW5pdGlhbGl6ZShFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIsIEVkZ2UgY2hpbGQzKQogICAg
IHsKICAgICAgICAgY2hpbGQoMCkgPSBjaGlsZDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVj
b2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQorICAg
IDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQorICAgICwgaW5kZXgoTm9CbG9jaykKKyAg
ICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQorICAgICwgY2ZhSGFzVmlzaXRlZChmYWxzZSkKKyAgICAs
IGNmYVNob3VsZFJldmlzaXQoZmFsc2UpCisgICAgLCBjZmFGb3VuZENvbnN0YW50cyhmYWxzZSkK
KyAgICAsIGNmYURpZEZpbmlzaCh0cnVlKQorICAgICwgY2ZhQnJhbmNoRGlyZWN0aW9uKEludmFs
aWRCcmFuY2hEaXJlY3Rpb24pCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICwgaXNMaW5rZWQo
ZmFsc2UpCisjZW5kaWYKKyAgICAsIGlzUmVhY2hhYmxlKGZhbHNlKQorICAgICwgdmFyaWFibGVz
QXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICwgdmFyaWFibGVzQXRUYWlsKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzKQorICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQor
eworfQorCitCYXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygpIHsgfQorCit2b2lkIEJhc2ljQmxvY2s6
OmVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCit7CisgICAgdmFyaWFibGVzQXRI
ZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5l
d051bUxvY2Fscyk7CisgICAgdmFsdWVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMp
OworfQorCitib29sIEJhc2ljQmxvY2s6OmlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0Cit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChwaGlzW2ldID09IG5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEJhc2ljQmxvY2s6OmlzSW5CbG9jayhOb2RlKiBteU5v
ZGUpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Ob2RlcygpOyArK2kp
IHsKKyAgICAgICAgaWYgKG5vZGUoaSkgPT0gbXlOb2RlKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZW1v
dmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNl
c3NvcnNbaV0gIT0gYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcHJlZGVj
ZXNzb3JzW2ldID0gcHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgcHJlZGVjZXNzb3JzLnJl
bW92ZUxhc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBwcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNb
aV0gIT0gZnJvbSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwcmVkZWNlc3NvcnNb
aV0gPSB0bzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoIiMiLCBpbmRleCk7Cit9CisKK0Jhc2ljQmxvY2s6OlNT
QURhdGE6OlNTQURhdGEoQmFzaWNCbG9jayogYmxvY2spCisgICAgOiBmbHVzaEZvcm1hdEF0SGVh
ZChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBmbHVzaEZvcm1h
dEF0VGFpbChPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBhdmFp
bGFiaWxpdHlBdEhlYWQoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQorICAg
ICwgYXZhaWxhYmlsaXR5QXRUYWlsKE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZCkKK3sKK30KKworQmFzaWNCbG9jazo6U1NBRGF0YTo6flNTQURhdGEoKSB7IH0KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNTI1
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRl
ICJERkdWYXJpYWRpY0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDQsNDIgKzQ2LDE2IEBA
IGNsYXNzIEluc2VydGlvblNldDsKIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVk
ZWNlc3Nvckxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2Nr
PiB7Ci0gICAgQmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1B
cmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscykKLSAgICAgICAgOiBieXRlY29kZUJlZ2luKGJ5
dGVjb2RlQmVnaW4pCi0gICAgICAgICwgaW5kZXgoTm9CbG9jaykKLSAgICAgICAgLCBpc09TUlRh
cmdldChmYWxzZSkKLSAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQotICAgICAgICAsIGNm
YVNob3VsZFJldmlzaXQoZmFsc2UpCi0gICAgICAgICwgY2ZhRm91bmRDb25zdGFudHMoZmFsc2Up
Ci0gICAgICAgICwgY2ZhRGlkRmluaXNoKHRydWUpCi0gICAgICAgICwgY2ZhQnJhbmNoRGlyZWN0
aW9uKEludmFsaWRCcmFuY2hEaXJlY3Rpb24pCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAg
ICAsIGlzTGlua2VkKGZhbHNlKQotI2VuZGlmCi0gICAgICAgICwgaXNSZWFjaGFibGUoZmFsc2Up
Ci0gICAgICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAg
ICAgICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKLSAgICAgICAg
LCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgICAgICwgdmFsdWVz
QXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgIHsKLSAgICB9CisgICAgQmFzaWNC
bG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2ln
bmVkIG51bUxvY2Fscyk7CisgICAgfkJhc2ljQmxvY2soKTsKICAgICAKLSAgICB+QmFzaWNCbG9j
aygpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBu
ZXdOdW1Mb2NhbHMpCi0gICAgewotICAgICAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJlTG9jYWxz
KG5ld051bUxvY2Fscyk7Ci0gICAgICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3
TnVtTG9jYWxzKTsKLSAgICAgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2Nh
bHMpOwotICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0g
ICAgfQorICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2Fscyk7CiAgICAg
CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQogICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KICAgICBOb2RlKiYgYXQo
c2l6ZV90IGkpIHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KICAgICBOb2RlKiBhdChzaXplX3QgaSkg
Y29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5vZGUqJiBvcGVyYXRvcltdKHNpemVf
dCBpKSB7IHJldHVybiBhdChpKTsgfQogICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNv
bnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIGF0
KHNpemUoKSAtIDEpOyB9CiAgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpIHsgbV9ub2Rlcy5y
ZXNpemUoc2l6ZSk7IH0KQEAgLTk2LDQ0ICs3MiwzNCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJl
ZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgfQogICAgIGJvb2wgaXNQaGlJbmRleChzaXplX3QgaSkg
Y29uc3QgeyByZXR1cm4gaSA8IHBoaXMuc2l6ZSgpOyB9CiAgICAgCi0gICAgYm9vbCBpc0luUGhp
cyhOb2RlKiBub2RlKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwaGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAocGhpc1tpXSA9PSBub2RlKQot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0luQmxvY2soTm9kZSogbXlOb2RlKSBjb25z
dAotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Ob2RlcygpOyArK2kp
IHsKLSAgICAgICAgICAgIGlmIChub2RlKGkpID09IG15Tm9kZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAg
IGJvb2wgaXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3Q7CisgICAgYm9vbCBpc0luQmxvY2soTm9k
ZSogbXlOb2RlKSBjb25zdDsKICAgICAKICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgeyBy
ZXR1cm4gbGFzdCgpLT5udW1TdWNjZXNzb3JzKCk7IH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNp
Z25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiBsYXN0KCktPnN1Y2Nlc3NvcihpbmRl
eCk7CiAgICAgfQotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckZvckNvbmRpdGlvbihib29sIGNv
bmRpdGlvbikKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJvb2wgY29u
ZGl0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxhc3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGNvbmRpdGlvbik7CiAgICAgfQorICAgIAorICAgIHZvaWQgcmVtb3ZlUHJlZGVjZXNzb3Io
QmFzaWNCbG9jayogYmxvY2spOworICAgIHZvaWQgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxv
Y2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKIAogI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9O
T0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29t
bWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKICAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1z
IHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdyYXBoJiwgU3BlY3VsYXRlZFR5cGUgdmFs
dWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZV
TkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BUFBFTkRf
Tk9ERQogICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgIHsK
LSAgICAgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOwotICAgIH0KKyNkZWZpbmUgREZHX0RFRklO
RV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1
ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCisgICAgdGVtcGxhdGVQcmUg
dHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9uVGVybWluYWwoR3JhcGgmLCBT
cGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKKyAgICBERkdfVkFS
SUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBE
RkdfREVGSU5FX0FQUEVORF9OT0RFCisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OwogICAgIAogICAgIC8vIFRoaXMgdmFsdWUgaXMgdXNlZCBpbnRlcm5hbGx5IGZv
ciBibG9jayBsaW5raW5nIGFuZCBPU1IgZW50cnkuIEl0IGlzIG1vc3RseSBtZWFuaW5nbGVzcwog
ICAgIC8vIGZvciBvdGhlciBwdXJwb3NlcyBkdWUgdG8gaW5saW5pbmcuCkBAIC0xNjAsNiArMTI2
LDIxIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAKICAg
ICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CiAgICAgT3BlcmFuZHM8QWJz
dHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworICAgIAorICAgIHN0cnVjdCBTU0FEYXRhIHsKKyAg
ICAgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGZsdXNoRm9ybWF0QXRIZWFkOworICAgICAgICBP
cGVyYW5kczxGbHVzaEZvcm1hdD4gZmx1c2hGb3JtYXRBdFRhaWw7CisgICAgICAgIE9wZXJhbmRz
PE5vZGUqPiBhdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPE5vZGUqPiBhdmFp
bGFiaWxpdHlBdFRhaWw7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdEhlYWQ7CisgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+IGxpdmVBdFRhaWw7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIEFi
c3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJh
Y3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworICAgICAgICAKKyAgICAgICAgU1NBRGF0YShCYXNpY0Js
b2NrKik7CisgICAgICAgIH5TU0FEYXRhKCk7CisgICAgfTsKKyAgICBPd25QdHI8U1NBRGF0YT4g
c3NhOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShy
ZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDE3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04o
REZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAK
KyNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0
LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBc
CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJh
c2ljQmxvY2s6OmFwcGVuZE5vblRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUg
dHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgeyBcCisgICAgICAgIE5v
ZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJn
cyk7IFwKKyAgICAgICAgYXBwZW5kKGxhc3QoKSk7IFwKKyAgICAgICAgYXQoc2l6ZSgpIC0gMikg
PSByZXN1bHQ7IFwKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAorICAgIH0KKyAgICBERkdfVkFS
SUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKKyN1bmRlZiBE
RkdfREVGSU5FX0FQUEVORF9OT0RFCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja0luc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRp
b25TZXQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK0Jsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvblNldChHcmFwaCYg
Z3JhcGgpCisgICAgOiBtX2dyYXBoKGdyYXBoKQoreworfQorCitCbG9ja0luc2VydGlvblNldDo6
fkJsb2NrSW5zZXJ0aW9uU2V0KCkgeyB9CisKK3ZvaWQgQmxvY2tJbnNlcnRpb25TZXQ6Omluc2Vy
dChjb25zdCBCbG9ja0luc2VydGlvbiYgaW5zZXJ0aW9uKQoreworICAgIG1faW5zZXJ0aW9ucy5h
cHBlbmQoaW5zZXJ0aW9uKTsKK30KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNp
emVfdCBpbmRleCwgUGFzc1JlZlB0cjxCYXNpY0Jsb2NrPiBibG9jaykKK3sKKyAgICBpbnNlcnQo
QmxvY2tJbnNlcnRpb24oaW5kZXgsIGJsb2NrKSk7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrSW5z
ZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4KQoreworICAgIFJlZlB0cjxCYXNpY0Jsb2Nr
PiBibG9jayA9IGFkb3B0UmVmKG5ldyBCYXNpY0Jsb2NrKAorICAgICAgICBVSU5UX01BWCwKKyAg
ICAgICAgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCksCisgICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpKSk7CisgICAgYmxvY2stPmlzUmVhY2hhYmxlID0gdHJ1ZTsKKyAgICBpbnNlcnQoaW5k
ZXgsIGJsb2NrKTsKKyAgICByZXR1cm4gYmxvY2suZ2V0KCk7Cit9CisKK0Jhc2ljQmxvY2sqIEJs
b2NrSW5zZXJ0aW9uU2V0OjppbnNlcnRCZWZvcmUoQmFzaWNCbG9jayogYmVmb3JlKQoreworICAg
IHJldHVybiBpbnNlcnQoYmVmb3JlLT5pbmRleCk7Cit9CisKK2Jvb2wgQmxvY2tJbnNlcnRpb25T
ZXQ6OmV4ZWN1dGUoKQoreworICAgIGlmIChtX2luc2VydGlvbnMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2UgYWxsb3cgaW5zZXJ0aW9ucyB0byBiZSBn
aXZlbiB0byB1cyBpbiBhbnkgb3JkZXIuIFNvLCB3ZSBuZWVkIHRvCisgICAgLy8gc29ydCB0aGVt
IGJlZm9yZSBydW5uaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnMuCisgICAgc3RkOjpzb3J0KG1f
aW5zZXJ0aW9ucy5iZWdpbigpLCBtX2luc2VydGlvbnMuZW5kKCkpOworCisgICAgZXhlY3V0ZUlu
c2VydGlvbnMobV9ncmFwaC5tX2Jsb2NrcywgbV9pbnNlcnRpb25zKTsKKyAgICAKKyAgICAvLyBQ
cnVuZSBvdXQgZW1wdHkgZW50cmllcy4gVGhpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgYnV0
IGl0J3MKKyAgICAvLyBoZWFsdGh5IHRvIGtlZXAgdGhlIGJsb2NrIGxpc3QgZnJvbSBncm93aW5n
LgorICAgIHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIHNvdXJj
ZUluZGV4ID0gMDsgc291cmNlSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTspIHsKKyAg
ICAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tzb3VyY2VJ
bmRleCsrXTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEluZGV4KytdID0gYmxvY2s7CisgICAgfQorICAg
IG1fZ3JhcGgubV9ibG9ja3MucmVzaXplKHRhcmdldEluZGV4KTsKKyAgICAKKyAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgYmxvY2tzIGtub3cgdGhlaXIgbmV3IGluZGljZXMuCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAg
IG1fZ3JhcGgubV9ibG9ja3NbaV0tPmluZGV4ID0gaTsKKyAgICAKKyAgICAvLyBBbmQgZmluYWxs
eSwgaW52YWxpZGF0ZSBhbGwgYW5hbHlzZXMgdGhhdCByZWx5IG9uIHRoZSBDRkcuCisgICAgbV9n
cmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2Vy
dGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja0luc2VydGlv
blNldF9oCisjZGVmaW5lIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBXVEY6Okluc2VydGlv
bjxSZWZQdHI8QmFzaWNCbG9jaz4gPiBCbG9ja0luc2VydGlvbjsKKworY2xhc3MgQmxvY2tJbnNl
cnRpb25TZXQgeworcHVibGljOgorICAgIEJsb2NrSW5zZXJ0aW9uU2V0KEdyYXBoJiBncmFwaCk7
CisgICAgfkJsb2NrSW5zZXJ0aW9uU2V0KCk7CisgICAgCisgICAgdm9pZCBpbnNlcnQoY29uc3Qg
QmxvY2tJbnNlcnRpb24mIGluc2VydGlvbik7CisgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4
LCBQYXNzUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrKTsKKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnQo
c2l6ZV90IGluZGV4KTsKKyAgICBCYXNpY0Jsb2NrKiBpbnNlcnRCZWZvcmUoQmFzaWNCbG9jayog
YmVmb3JlKTsKKyAgICAKKyAgICBib29sIGV4ZWN1dGUoKTsKKworcHJpdmF0ZToKKyAgICBHcmFw
aCYgbV9ncmFwaDsKKyAgICBWZWN0b3I8QmxvY2tJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIEFT
U0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyB8fCBtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpOwogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gR2xvYmFs
bHlVbmlmaWVkKTsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV2
ZXJ5dGhpbmdJc0xpdmUpOwogICAgICAgICAKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAg
ICAgICAvLyBhZnRlciBhbGwgcHJlZGVjZXNzb3JzIGhhdmUgYmVlbiB2aXNpdGVkLiBPbmx5IGxv
b3BzIHdpbGwgY2F1c2UgdGhpcyBhbmFseXNpcyB0bwogICAgICAgICAvLyByZXZpc2l0IGJsb2Nr
cywgYW5kIHRoZSBhbW91bnQgb2YgcmV2aXNpdGluZyBpcyBwcm9wb3J0aW9uYWwgdG8gbG9vcCBk
ZXB0aC4KICAgICAgICAgCi0gICAgICAgIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUobV9ncmFw
aCk7CisgICAgICAgIG1fc3RhdGUuaW5pdGlhbGl6ZSgpOwogICAgICAgICAKICAgICAgICAgZG8g
ewogICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MSwxNSArMzYxLDkgQEAgcHJp
dmF0ZToKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAg
IGRhdGFMb2coCiAgICAgICAgICAgICAiRml4aW5nIHByZWRlY2Vzc29ycyBhbmQgcGhpcyBkdWUg
dG8gamV0dGlzb24gb2YgQmxvY2sgIiwgKmpldHRpc29uZWRCbG9jaywKLSAgICAgICAgICAgICIg
ZnJvbSBCbG9jayAiLCAqYmxvY2ssICIuXG4iLAorICAgICAgICAgICAgIiBmcm9tIEJsb2NrICIs
ICpibG9jaywgIi5cbiIpOwogI2VuZGlmCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKGpldHRpc29uZWRCbG9jay0+cHJlZGVjZXNzb3JzW2ldICE9IGJsb2NrKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNl
c3NvcnNbaV0gPSBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy5sYXN0KCk7Ci0gICAgICAg
ICAgICBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBqZXR0aXNvbmVkQmxvY2stPnJlbW92ZVBy
ZWRlY2Vzc29yKGJsb2NrKTsKICAgICB9CiAKICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE+IG5v
QmxvY2tzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRp
bmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzI3LDEyICszMjcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIFNldEFyZ3VtZW50
IG1heSBvbmx5IGFwcGVhciBpbiB0aGUgcm9vdCBibG9jay4KICAgICAgICAgICAgIC8vCiAgICAg
ICAgICAgICAvLyBUYWlsIHZhcmlhYmxlOiB0aGUgbGFzdCB0aGluZyB0aGF0IGhhcHBlbmVkIHRv
IHRoZSB2YXJpYWJsZSBpbiB0aGUgYmxvY2suCi0gICAgICAgICAgICAvLyBJdCBtYXkgYmUgYSBG
bHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwgU2V0TG9jYWwsIG9yIFNldEFyZ3VtZW50Lgor
ICAgICAgICAgICAgLy8gSXQgbWF5IGJlIGEgRmx1c2gsIFBoYW50b21Mb2NhbCwgR2V0TG9jYWws
IFNldExvY2FsLCBTZXRBcmd1bWVudCwgb3IgUGhpLgogICAgICAgICAgICAgLy8gU2V0QXJndW1l
bnQgbWF5IG9ubHkgYXBwZWFyIGluIHRoZSByb290IGJsb2NrLiBOb3RlIHRoYXQgaWYgdGhlcmUg
ZXZlcgogICAgICAgICAgICAgLy8gd2FzIGEgR2V0TG9jYWwgdG8gdGhlIHZhcmlhYmxlLCBhbmQg
aXQgd2FzIGZvbGxvd2VkIGJ5IFBoYW50b21Mb2NhbHMgYW5kCiAgICAgICAgICAgICAvLyBGbHVz
aGVzIGJ1dCBub3QgU2V0TG9jYWxzLCB0aGVuIHRoZSB0YWlsIHZhcmlhYmxlIHdpbGwgYmUgdGhl
IEdldExvY2FsLgogICAgICAgICAgICAgLy8gVGhpcyByZWZsZWN0cyB0aGUgZmFjdCB0aGF0IHlv
dSBvbmx5IGNhcmUgdGhhdCB0aGUgdGFpbCB2YXJpYWJsZSBpcyBhCi0gICAgICAgICAgICAvLyBG
bHVzaCBvciBQaGFudG9tTG9jYWwgaWYgbm90aGluZyBlbHNlIGludGVyZXN0aW5nIGhhcHBlbmVk
LgorICAgICAgICAgICAgLy8gRmx1c2ggb3IgUGhhbnRvbUxvY2FsIGlmIG5vdGhpbmcgZWxzZSBp
bnRlcmVzdGluZyBoYXBwZW5lZC4gTGlrZXdpc2UsIGlmCisgICAgICAgICAgICAvLyB0aGVyZSBl
dmVyIHdhcyBhIFNldExvY2FsIGFuZCBpdCB3YXMgZm9sbG93ZWQgYnkgRmx1c2hlcywgdGhlbiB0
aGUgdGFpbAorICAgICAgICAgICAgLy8gdmFyaWFibGUgd2lsbCBiZSBhIFNldExvY2FsIGFuZCBu
b3QgdGhvc2Ugc3Vic2VxdWVudCBGbHVzaGVzLgogICAgICAgICAgICAgLy8KICAgICAgICAgICAg
IC8vIENoaWxkIG9mIEdldExvY2FsOiB0aGUgb3BlcmF0aW9uIHRoYXQgdGhlIEdldExvY2FsIGtl
ZXBzIGFsaXZlLiBGb3IKICAgICAgICAgICAgIC8vIHVuY2FwdHVyZWQgbG9jYWxzLCBpdCBtYXkg
YmUgYSBQaGkgZnJvbSB0aGUgY3VycmVudCBibG9jay4gRm9yIGFyZ3VtZW50cywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDgsMTcgKzQ4LDE1IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBP
cHQKICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2FzZSBCZWZvcmVGaXhwb2ludDoKICAgICAg
ICAgb3V0LnByaW50KCJCZWZvcmVGaXhwb2ludCIpOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgRml4cG9pbnROb3RDb252ZXJnZWQ6CiAgICAgICAgIG91dC5wcmlu
dCgiRml4cG9pbnROb3RDb252ZXJnZWQiKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEZpeHBvaW50Q29udmVyZ2VkOgogICAgICAgICBvdXQucHJpbnQoIkZpeHBv
aW50Q29udmVyZ2VkIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBHcmFwaEZvcm0gZm9ybSkKQEAgLTY2LDE0
ICs2NCwxNSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgR3JhCiAgICAg
c3dpdGNoIChmb3JtKSB7CiAgICAgY2FzZSBMb2FkU3RvcmU6CiAgICAgICAgIG91dC5wcmludCgi
TG9hZFN0b3JlIik7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBU
aHJlYWRlZENQUzoKICAgICAgICAgb3V0LnByaW50KCJUaHJlYWRlZENQUyIpOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1NBOgorICAgICAg
ICBvdXQucHJpbnQoIlNTQSIpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBVbmlmaWNhdGlvblN0YXRlIHN0YXRlKQpAQCAtODEsMTQgKzgwLDEyIEBAIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVbmkKICAgICBzd2l0Y2ggKHN0YXRlKSB7
CiAgICAgY2FzZSBMb2NhbGx5VW5pZmllZDoKICAgICAgICAgb3V0LnByaW50KCJMb2NhbGx5VW5p
ZmllZCIpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgR2xvYmFs
bHlVbmlmaWVkOgogICAgICAgICBvdXQucHJpbnQoIkdsb2JhbGx5VW5pZmllZCIpOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgUmVmQ291bnRTdGF0ZSBzdGF0ZSkKQEAgLTk2LDE0ICs5MywxMiBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUmVmCiAgICAgc3dpdGNoIChzdGF0ZSkgewog
ICAgIGNhc2UgRXZlcnl0aGluZ0lzTGl2ZToKICAgICAgICAgb3V0LnByaW50KCJFdmVyeXRoaW5n
SXNMaXZlIik7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBFeGFj
dFJlZkNvdW50OgogICAgICAgICBvdXQucHJpbnQoIkV4YWN0UmVmQ291bnQiKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIFByb29mU3RhdHVzIHN0YXR1cykKQEAgLTExMSwxNCArMTA2LDEyIEBAIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm8KICAgICBzd2l0Y2ggKHN0YXR1cykgewog
ICAgIGNhc2UgSXNQcm92ZWQ6CiAgICAgICAgIG91dC5wcmludCgiSXNQcm92ZWQiKTsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE5lZWRzQ2hlY2s6CiAgICAgICAg
IG91dC5wcmludCgiTmVlZHNDaGVjayIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiwxMCBAQCBlbnVtIEdyYXBo
Rm9ybSB7CiAgICAgLy8KICAgICAvLyBUaHJlYWRlZENQUyBmb3JtIGlzIHN1aXRhYmxlIGZvciBk
YXRhIGZsb3cgYW5hbHlzaXMgKENGQSwgcHJlZGljdGlvbgogICAgIC8vIHByb3BhZ2F0aW9uKSwg
cmVnaXN0ZXIgYWxsb2NhdGlvbiwgYW5kIGNvZGUgZ2VuZXJhdGlvbi4KLSAgICBUaHJlYWRlZENQ
UworICAgIFRocmVhZGVkQ1BTLAorICAgIAorICAgIC8vIFNTQSBmb3JtLiBTZWUgREZHU1NBQ29u
dmVyc2lvblBoYXNlLmggZm9yIGEgZGVzY3JpcHRpb24uCisgICAgU1NBCiB9OwogCiAvLyBEZXNj
cmliZXMgdGhlIHN0YXRlIG9mIHRoZSBVbmlvbkZpbmQgc3RydWN0dXJlIG9mIFZhcmlhYmxlQWNj
ZXNzRGF0YSdzLgpAQCAtMjUwLDYgKzI1MywxOSBAQCBpbmxpbmUgUHJvb2ZTdGF0dXMgcHJvb2ZT
dGF0dXNGb3JJc1Byb3ZlCiAgICAgcmV0dXJuIGlzUHJvdmVkID8gSXNQcm92ZWQgOiBOZWVkc0No
ZWNrOwogfQogCitlbnVtIEtpbGxTdGF0dXMgeyBEb2VzTm90S2lsbCwgRG9lc0tpbGwgfTsKKwor
aW5saW5lIGJvb2wgZG9lc0tpbGwoS2lsbFN0YXR1cyBraWxsU3RhdHVzKQoreworICAgIEFTU0VS
VChraWxsU3RhdHVzID09IERvZXNOb3RLaWxsIHx8IGtpbGxTdGF0dXMgPT0gRG9lc0tpbGwpOwor
ICAgIHJldHVybiBraWxsU3RhdHVzID09IERvZXNLaWxsOworfQorCitpbmxpbmUgS2lsbFN0YXR1
cyBraWxsU3RhdHVzRm9yRG9lc0tpbGwoYm9vbCBkb2VzS2lsbCkKK3sKKyAgICByZXR1cm4gZG9l
c0tpbGwgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPgogYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsNyAr
MzcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IEFTU0VSVCghbm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAg
IEFTU0VSVCghbm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1ZSk7
CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApAQCAtMzg5LDcgKzM4OSw3
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBmb3IgKDsgaW5kZXhJbkJsb2NrIDwgYmxvY2st
PnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGlmICghbm9kZS0+aGFzTG9jYWwoKSkK
KyAgICAgICAgICAgIGlmICghbm9kZS0+aGFzTG9jYWwobV9ncmFwaCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAobm9kZS0+bG9jYWwoKSAhPSBvcGVyYW5kKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVh
a2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNp
bmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAg
IENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNl
KGdyYXBoLCAiY3JpdGljYWwgZWRnZSBicmVha2luZyIpCisgICAgICAgICwgbV9pbnNlcnRpb25T
ZXQoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IEFuIGVkZ2UgQS0+QiBpcyBjcml0aWNhbCBpZiBBIGhhcyBtdWx0aXBsZSBzdWNjZXNzb3IgYW5k
IEIgaGFzIG11bHRpcGxlCisgICAgICAgICAgICAvLyBwcmVkZWNlc3NvcnMuIFRodXMgd2UgZmFp
bCBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIG11bHRpcGxlIHN1Y2Nlc3NvcnMuCisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChibG9jay0+bnVtU3VjY2Vzc29ycygpIDw9IDEpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiogc3VjY2Vzc29yID0gJmJsb2NrLT5zdWNjZXNzb3IoaSk7CisgICAgICAgICAg
ICAgICAgaWYgKCgqc3VjY2Vzc29yKS0+cHJlZGVjZXNzb3JzLnNpemUoKSA8PSAxKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBicmVha0NyaXRpY2FsRWRnZShibG9jaywgc3VjY2Vzc29yKTsgCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5leGVjdXRl
KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgYnJlYWtDcml0aWNhbEVkZ2UoQmFzaWNC
bG9jayogcHJlZGVjZXNzb3IsIEJhc2ljQmxvY2sqKiBzdWNjZXNzb3IpCisgICAgeworICAgICAg
ICBtX2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBwYWQg
PSBtX2luc2VydGlvblNldC5pbnNlcnRCZWZvcmUoKnN1Y2Nlc3Nvcik7CisgICAgICAgIHBhZC0+
YXBwZW5kTm9kZSgKKyAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCAoKnN1Y2Nl
c3NvciktPmF0KDApLT5jb2RlT3JpZ2luLCBPcEluZm8oKnN1Y2Nlc3NvcikpOworICAgICAgICBw
YWQtPnByZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgICAgICAoKnN1Y2Nlc3Nv
ciktPnJlcGxhY2VQcmVkZWNlc3NvcihwcmVkZWNlc3NvciwgcGFkKTsKKyAgICAgICAgCisgICAg
ICAgICpzdWNjZXNzb3IgPSBwYWQ7CisgICAgfQorICAgIAorICAgIEJsb2NrSW5zZXJ0aW9uU2V0
IG1faW5zZXJ0aW9uU2V0OworfTsKKworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmco
R3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcg
Q3JpdGljYWwgRWRnZSBCcmVha2luZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFz
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNh
bEVkZ2VCcmVha2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Ny
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorI2RlZmluZSBERkdDcml0aWNhbEVkZ2VCcmVha2lu
Z1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisK
Ky8vIEluc2VydHMgZHVtbXkgYmFzaWMgYmxvY2tzIHRvIGJyZWFrIGNyaXRpY2FsIGVkZ2VzLiBB
biBlZGdlIEEtPkIgaXMKKy8vIGNyaXRpY2FsIGlmIEEgaGFzIG11bHRpcGxlIHN1Y2Nlc3NvcnMg
YW5kIEIgaGFzIG11bHRpcGxlIHByZWRlc3NvcnMuCisKK2Jvb2wgcGVyZm9ybUNyaXRpY2FsRWRn
ZUJyZWFraW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQ
aGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRo
cmVhZGVkQ1BTIHx8IG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAogICAgICAgICAv
LyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9j
a3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBAIC03NSwxMCArNzcsMzEgQEAgcHVibGljOgogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICB3aGlsZSAoIW1fd29ya2xpc3QuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgICAg
ICBtX3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNz
IGl0J3MgcmVmJ2VkLgotICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFw
aCwgbm9kZSwgY291bnRFZGdlKTsKKyAgICAgICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0KCk7
CisgICAgICAgICAgICAgICAgbV93b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9u
IHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCisgICAgICAgICAgICAgICAgREZHX05P
REVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291bnRFZGdlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkg
eworICAgICAgICAgICAgICAgIC8vIEZpbmQgUGhpLT5VcHNpbG9uIGVkZ2VzLCB3aGljaCBhcmUg
cmVwcmVzZW50ZWQgYXMgbWV0YS1kYXRhIGluIHRoZQorICAgICAgICAgICAgICAgIC8vIFVwc2ls
b24uCisgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7
IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnBoaSgpLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvdW50Tm9kZShub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9j
a3MoKTsgKytibG9ja0luZGV4KSB7CkBAIC05NCw4ICsxMTcsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS5pc1Byb3ZlZCgpIHx8IG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6IHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKChub2RlLT5vcCgpID09IFNldExvY2FsKSA9PSAobV9ncmFwaC5t
X2Zvcm0gPT0gVGhyZWFkZWRDUFMpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLndpbGxOb3RIYXZlQ2hlY2soKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgVUludDMyVG9OdW1iZXIgaXMgZGVhZCBidXQg
aXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZCBpc24ndDsgaWYgc28gdGhlbiB3
ZSBzaG91bGQgTW92SGludCB0aGUgY2hpbGQuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpCkBAIC0xMTcsOCArMTQyLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRo
cmVhZGVkQ1BTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZWF2ZSB0aGVtIGFzIG5v
dCBzaG91bGRHZW5lcmF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgZGVm
YXVsdDogewpAQCAtMTI2LDcgKzE1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4
IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgubV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWVkZ2UgfHwgZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2Up
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlIHx8IGVkZ2Uud2lsbE5vdEhh
dmVDaGVjaygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIGVkZ2UpOwpAQCAt
MTU4LDIxICsxODUsMjUgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZl
IGFuICJ1bnByb3ZlZCIgdW50eXBlZCB1c2UgZm9yIGNvZGUgdGhhdCBpcyB1bnJlYWNoYWJsZS4g
VGhlIENGQQogICAgICAgICAvLyB3aWxsIGp1c3Qgbm90IGhhdmUgZ290dGVuIGFyb3VuZCB0byBp
dC4KLSAgICAgICAgaWYgKGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5
cGVkVXNlKQorICAgICAgICBpZiAoZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGlmICghZWRnZS0+cG9zdGZpeFJlZigpKQogICAgICAgICAgICAg
bV93b3JrbGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNv
dW50Tm9kZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPnBvc3RmaXhSZWYo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV93b3JrbGlzdC5hcHBlbmQobm9kZSk7
CisgICAgfQorICAgIAogICAgIHZvaWQgY291bnRFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCiAgICAg
ewogICAgICAgICAvLyBEb24ndCBjb3VudCBlZGdlcyB0aGF0IGFyZSBhbHJlYWR5IGNvdW50ZWQg
Zm9yIHRoZWlyIHR5cGUgY2hlY2tzLgotICAgICAgICBpZiAoIShlZGdlLmlzUHJvdmVkKCkgfHwg
ZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAotICAgICAgICBpZiAoZWRnZS0+cG9zdGZpeFJlZigpKQorICAgICAgICBpZiAoZWRnZS53
aWxsSGF2ZUNoZWNrKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fd29ya2xpc3Qu
YXBwZW5kKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgY291bnROb2RlKGVkZ2Uubm9kZSgpKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKE5v
ZGUqIG5vZGUpCkBAIC0xODEsNyArMjEyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2Ug
ZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOwogICAgICAgICAgICAgaWYgKCFlZGdlKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGVkZ2UuaXNQcm92ZWQo
KSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgaWYgKGVkZ2Uu
d2lsbE5vdEhhdmVDaGVjaygpKQogICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92
ZUVkZ2UoaS0tKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdFZGdlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdFZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQCB2b2lkIEVk
Z2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAgICAgICAgIG91dC5wcmludCgi
Q2hlY2s6Iik7CiAgICAgICAgIG91dC5wcmludCh1c2VLaW5kKCksICI6Iik7CiAgICAgfQorICAg
IGlmIChkb2VzS2lsbCgpKQorICAgICAgICBvdXQucHJpbnQoIktpbGw6Iik7CiAgICAgb3V0LnBy
aW50KG5vZGUoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShy
ZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEyIEBAIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAK
IGNsYXNzIEVkZ2UgewogcHVibGljOgotICAgIGV4cGxpY2l0IEVkZ2UoTm9kZSogbm9kZSA9IDAs
IFVzZUtpbmQgdXNlS2luZCA9IFVudHlwZWRVc2UsIFByb29mU3RhdHVzIHByb29mU3RhdHVzID0g
TmVlZHNDaGVjaykKKyAgICBleHBsaWNpdCBFZGdlKE5vZGUqIG5vZGUgPSAwLCBVc2VLaW5kIHVz
ZUtpbmQgPSBVbnR5cGVkVXNlLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cyA9IE5lZWRzQ2hlY2ss
IEtpbGxTdGF0dXMga2lsbFN0YXR1cyA9IERvZXNOb3RLaWxsKQogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlLCB1c2VLaW5kLCBwcm9vZlN0
YXR1cykpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlLCB1c2VLaW5kLCBw
cm9vZlN0YXR1cywga2lsbFN0YXR1cykpCiAjZWxzZQogICAgICAgICA6IG1fbm9kZShub2RlKQot
ICAgICAgICAsIG1fZW5jb2RlZFdvcmQobWFrZVdvcmQodXNlS2luZCwgcHJvb2ZTdGF0dXMpKQor
ICAgICAgICAsIG1fZW5jb2RlZFdvcmQobWFrZVdvcmQodXNlS2luZCwgcHJvb2ZTdGF0dXMsIGtp
bGxTdGF0dXMpKQogI2VuZGlmCiAgICAgewogICAgIH0KQEAgLTYxLDcgKzYxLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSwgdXNlS2luZCgpLCBwcm9v
ZlN0YXR1cygpKTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUsIHVzZUtp
bmQoKSwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1cygpKTsKICNlbHNlCiAgICAgICAgIG1fbm9k
ZSA9IG5vZGU7CiAjZW5kaWYKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICB1bnNpZ25lZCBtYXNrZWQgPSBtX2VuY29kZWRXb3JkICYg
KCgoMSA8PCBzaGlmdCgpKSAtIDEpKTsKLSAgICAgICAgdW5zaWduZWQgc2hpZnRlZCA9IG1hc2tl
ZCA+PiAxOworICAgICAgICB1bnNpZ25lZCBzaGlmdGVkID0gbWFza2VkID4+IDI7CiAjZWxzZQog
ICAgICAgICB1bnNpZ25lZCBzaGlmdGVkID0gc3RhdGljX2Nhc3Q8VXNlS2luZD4obV9lbmNvZGVk
V29yZCkgPj4gMTsKICNlbmRpZgpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBBU1NFUlQobm9kZSgpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBtX2VuY29k
ZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kLCBwcm9vZlN0YXR1cygpKTsKKyAgICAg
ICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCwgcHJvb2ZTdGF0dXMo
KSwga2lsbFN0YXR1cygpKTsKICNlbHNlCiAgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29y
ZCh1c2VLaW5kLCBwcm9vZlN0YXR1cygpKTsKICNlbmRpZgpAQCAtMTA4LDkgKzEwOCw5IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlKCkpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQoKSwgcHJv
b2ZTdGF0dXMpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSgpLCB1c2VL
aW5kKCksIHByb29mU3RhdHVzLCBraWxsU3RhdHVzKCkpOwogI2Vsc2UKLSAgICAgICAgbV9lbmNv
ZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMpOworICAgICAgICBtX2Vu
Y29kZWRXb3JkID0gbWFrZVdvcmQodXNlS2luZCgpLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cygp
KTsKICNlbmRpZgogICAgIH0KICAgICBib29sIGlzUHJvdmVkKCkgY29uc3QKQEAgLTEyMiw2ICsx
MjIsMzYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcHJvb2ZTdGF0dXMoKSA9PSBOZWVkc0No
ZWNrOwogICAgIH0KICAgICAKKyAgICBib29sIHdpbGxOb3RIYXZlQ2hlY2soKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzUHJvdmVkKCkgfHwgdXNlS2luZCgpID09IFVudHlwZWRVc2U7
CisgICAgfQorICAgIGJvb2wgd2lsbEhhdmVDaGVjaygpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gIXdpbGxOb3RIYXZlQ2hlY2soKTsKKyAgICB9CisgICAgCisgICAgS2lsbFN0YXR1cyBr
aWxsU3RhdHVzVW5jaGVja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraWxsU3Rh
dHVzRm9yRG9lc0tpbGwobV9lbmNvZGVkV29yZCAmIDIpOworICAgIH0KKyAgICBLaWxsU3RhdHVz
IGtpbGxTdGF0dXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUoKSk7CisgICAg
ICAgIHJldHVybiBraWxsU3RhdHVzVW5jaGVja2VkKCk7CisgICAgfQorICAgIHZvaWQgc2V0S2ls
bFN0YXR1cyhLaWxsU3RhdHVzIGtpbGxTdGF0dXMpCisgICAgeworICAgICAgICBBU1NFUlQobm9k
ZSgpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdv
cmQobm9kZSgpLCB1c2VLaW5kKCksIHByb29mU3RhdHVzKCksIGtpbGxTdGF0dXMpOworI2Vsc2UK
KyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMo
KSwga2lsbFN0YXR1cyk7CisjZW5kaWYKKyAgICB9CisgICAgYm9vbCBkb2VzS2lsbCgpIGNvbnN0
IHsgcmV0dXJuIERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1cygpKTsgfQorICAgIGJvb2wgZG9lc05v
dEtpbGwoKSBjb25zdCB7IHJldHVybiAhZG9lc0tpbGwoKTsgfQorICAgIAogICAgIGJvb2wgaXNT
ZXQoKSBjb25zdCB7IHJldHVybiAhIW5vZGUoKTsgfQogICAgIAogICAgIHR5cGVkZWYgdm9pZCog
RWRnZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGU7CkBAIC0xNDgsMjIgKzE3OCwyMiBAQCBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBBZGphY2VuY3lMaXN0OwogICAgIAogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNjsgfQorICAgIHN0YXRp
YyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDc7IH0KICAgICAKLSAgICBzdGF0aWMgdWludHB0
cl90IG1ha2VXb3JkKE5vZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJv
b2ZTdGF0dXMpCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChOb2RlKiBub2RlLCBVc2VL
aW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3RhdHVzLCBLaWxsU3RhdHVzIGtpbGxTdGF0
dXMpCiAgICAgewogICAgICAgICBBU1NFUlQoc2l6ZW9mKG5vZGUpID09IDgpOwogICAgICAgICB1
aW50cHRyX3Qgc2hpZnRlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkgPDwg
c2hpZnQoKTsKICAgICAgICAgQVNTRVJUKChzaGlmdGVkVmFsdWUgPj4gc2hpZnQoKSkgPT0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpOwogICAgICAgICBBU1NFUlQodXNlS2luZCA+PSAw
ICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7Ci0gICAgICAgIEFTU0VSVCgoc3RhdGljX2Nhc3Q8
dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMSkgPD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gc2hpZnRlZFZhbHVlIHwgKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMSkgfCBERkc6OmlzUHJvdmVkKHByb29mU3RhdHVz
KTsKKyAgICAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KExhc3RVc2VLaW5kKSA8
PCAyKSA8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigyKSA8PCBzaGlmdCgpKSk7CisgICAgICAg
IHJldHVybiBzaGlmdGVkVmFsdWUgfCAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8
PCAyKSB8IChERkc6OmRvZXNLaWxsKGtpbGxTdGF0dXMpIDw8IDEpIHwgREZHOjppc1Byb3ZlZChw
cm9vZlN0YXR1cyk7CiAgICAgfQogICAgIAogI2Vsc2UKLSAgICBzdGF0aWMgdWludHB0cl90IG1h
a2VXb3JkKFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMpCisgICAgc3Rh
dGljIHVpbnRwdHJfdCBtYWtlV29yZChVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29m
U3RhdHVzLCBLaWxsU3RhdHVzIGtpbGxTdGF0dXMpCiAgICAgewotICAgICAgICByZXR1cm4gKHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMSkgfCBERkc6OmlzUHJvdmVkKHByb29m
U3RhdHVzKTsKKyAgICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQp
IDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1cykgPDwgMSkgfCBERkc6OmlzUHJvdmVk
KHByb29mU3RhdHVzKTsKICAgICB9CiAgICAgCiAgICAgTm9kZSogbV9ub2RlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI1
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBWYWx1
ZVRvSW50MzI6IHsKICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9m
aXRhYmxlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
c2V0T3BBbmREZWZhdWx0RmxhZ3MoSWRlbnRpdHkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC05MDEsNiArOTAyLDggQEAgcHJpdmF0ZToK
IAogICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAgICBjYXNlIFBoaToKKyAgICAg
ICAgY2FzZSBVcHNpbG9uOgorICAgICAgICBjYXNlIEdldEFyZ3VtZW50OgogICAgICAgICBjYXNl
IEZvcndhcmRJbnQzMlRvRG91YmxlOgogICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6
CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRmx1c2hGb3JtYXQu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
Rmx1c2hGb3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBE
ZWFkRmx1c2g6CisgICAgICAgIG91dC5wcmludCgiRGVhZEZsdXNoIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkSW50
MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAg
b3V0LnByaW50KCJGbHVzaGVkRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZs
dXNoZWRDZWxsOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRDZWxsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNo
ZWRCb29sZWFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgor
ICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRKU1ZhbHVlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHRmx1c2hGb3JtYXRfaAorI2RlZmluZSBERkdGbHVzaEZvcm1hdF9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHTm9kZUZsYWdzLmgiCisjaW5jbHVkZSAiREZHVXNlS2luZC5oIgorI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Vu
dW0gRmx1c2hGb3JtYXQgeworICAgIERlYWRGbHVzaCwKKyAgICBGbHVzaGVkSW50MzIsCisgICAg
Rmx1c2hlZERvdWJsZSwKKyAgICBGbHVzaGVkQ2VsbCwKKyAgICBGbHVzaGVkQm9vbGVhbiwKKyAg
ICBGbHVzaGVkSlNWYWx1ZQorfTsKKworaW5saW5lIE5vZGVGbGFncyByZXN1bHRGb3IoRmx1c2hG
b3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBEZWFkRmx1
c2g6CisgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAg
ICAgICByZXR1cm4gTm9kZVJlc3VsdEpTOworICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAg
ICByZXR1cm4gTm9kZVJlc3VsdEludDMyOworICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAg
ICAgcmV0dXJuIE5vZGVSZXN1bHROdW1iZXI7CisgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAg
ICAgICAgcmV0dXJuIE5vZGVSZXN1bHRCb29sZWFuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitpbmxpbmUgVXNlS2luZCB1c2VL
aW5kRm9yKEZsdXNoRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAg
IGNhc2UgRGVhZEZsdXNoOgorICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIHJldHVy
biBVbnR5cGVkVXNlOworICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIHJldHVybiBDZWxs
VXNlOworICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICByZXR1cm4gSW50MzJVc2U7Cisg
ICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICByZXR1cm4gTnVtYmVyVXNlOworICAgIGNh
c2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgIHJldHVybiBCb29sZWFuVXNlOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBVbnR5cGVkVXNlOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6Rmx1c2hGb3JtYXQpOworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHRmx1c2hGb3JtYXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZH
UGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHVibGljOgorICAgIEZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBn
cmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImZsdXNoLWxpdmVuZXNzIGFuYWx5c2lzIikK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgLy8gTGl2ZW5lc3Mg
aXMgYSBiYWNrd2FyZHMgYW5hbHlzaXM7IHRoZSByb290cyBhcmUgdGhlIGJsb2NrcyB0aGF0Cisg
ICAgICAgIC8vIGVuZCBpbiBhIHRlcm1pbmFsIChSZXR1cm4vVGhyb3cvVGhyb3dSZWZlcmVuY2VF
cnJvcikuIEZvciBub3csIHdlCisgICAgICAgIC8vIHVzZSBhIGZpeHBvaW50IGZvcm11bGF0aW9u
IHNpbmNlIGxpdmVuZXNzIGlzIGEgcmFwaWQgYW5hbHlzaXMgd2l0aAorICAgICAgICAvLyBjb252
ZXJnZW5jZSBndWFyYW50ZWVkIGFmdGVyIE8oY29ubmVjdGl2aXR5KS4KKyAgICAgICAgCisgICAg
ICAgIC8vIFN0YXJ0IGJ5IGFzc3VtaW5nIHRoYXQgZXZlcnl0aGluZyBpcyBkZWFkLgorICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBibG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZC5maWxs
KERlYWRGbHVzaCk7CisgICAgICAgICAgICBibG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0VGFpbC5m
aWxsKERlYWRGbHVzaCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KQorICAgICAgICAg
ICAgICAgIHByb2Nlc3MoYmxvY2tJbmRleCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLmJsb2NrKDApLT5z
c2EtPmZsdXNoRm9ybWF0QXRIZWFkLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1f
Z3JhcGguYmxvY2soMCktPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWRbaV0gPT0gRGVhZEZsdXNoKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICAgICAiQmFkIGZsdXNoIGxpdmVuZXNzIGFuYWx5c2lzIHJlc3VsdDogbm90IGFsbCBsb2Nh
bHMgZGVhZCBhdCByb290OiAiLAorICAgICAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soMCktPnNz
YS0+Zmx1c2hGb3JtYXRBdEhlYWQsICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiSVIgYXQg
dGltZSBvZiBlcnJvcjpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCkKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIG1fbGl2ZSA9IGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRUYWlsOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBu
b2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Cisg
ICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDog
eworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZh
cmlhYmxlLT5sb2NhbCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSwgRGVhZEZsdXNoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7CisgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IHZhcmlh
YmxlLT5mbHVzaEZvcm1hdCgpOworICAgICAgICAgICAgICAgIHNldEZvck5vZGUobm9kZSwgdmFy
aWFibGUtPmxvY2FsKCksIGZvcm1hdCwgZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICBibG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZCA9IG1fbGl2ZTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tp
XTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IG1fbGl2ZS5zaXplKCk7IGotLTspIHsK
KyAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCYgcHJlZGVjZXNzb3JGb3JtYXQgPSBwcmVkZWNl
c3Nvci0+c3NhLT5mbHVzaEZvcm1hdEF0VGFpbFtqXTsKKyAgICAgICAgICAgICAgICBGbHVzaEZv
cm1hdCBteUZvcm1hdCA9IG1fbGl2ZVtqXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBUaHJlZSBwb3NzaWJpbGl0aWVzOgorICAgICAgICAgICAgICAgIC8vIDEpIFByZWRl
Y2Vzc29yIGZvcm1hdCBpcyBEZWFkLCBpbiB3aGljaCBjYXNlIGl0IGFjcXVpcmVzIG91ciBmb3Jt
YXQuCisgICAgICAgICAgICAgICAgLy8gMikgUHJlZGVjZXNzb3IgZm9ybWF0IGlzIGlkZW50aWNh
bCB0byBvdXIgZm9ybWF0LCBpbiB3aGljaCBjYXNlIHdlCisgICAgICAgICAgICAgICAgLy8gICAg
ZG8gbm90aGluZy4KKyAgICAgICAgICAgICAgICAvLyAzKSBQcmVkZWNlc3NvciBmb3JtYXQgaXMg
ZGlmZmVyZW50IGZyb20gb3VyIGZvcm1hdCBhbmQgaXQncyBub3QgRGVhZCwKKyAgICAgICAgICAg
ICAgICAvLyAgICBpbiB3aGljaCBjYXNlIHdlIGhhdmUgYW4gZXJyb25lb3VzIHNldCBvZiBGbHVz
aGVzIGFuZCBTZXRMb2NhbHMuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KHByZWRlY2Vzc29yRm9ybWF0ID09IERlYWRGbHVzaCkgeworICAgICAgICAgICAgICAgICAgICBw
cmVkZWNlc3NvckZvcm1hdCA9IG15Rm9ybWF0OworICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKHByZWRlY2Vzc29yRm9ybWF0ID09IG15Rm9ybWF0KQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgICAgICAgICAiQmFkIEZsdXNoIG1lcmdlIGF0IGVkZ2UgIiwgKnByZWRlY2Vzc29y
LCAiIC0+ICIsICpibG9jaywKKyAgICAgICAgICAgICAgICAgICAgIiwgbG9jYWwgdmFyaWFibGUg
ciIsIG1fbGl2ZS5vcGVyYW5kRm9ySW5kZXgoaiksICI6ICIsICpwcmVkZWNlc3NvciwKKyAgICAg
ICAgICAgICAgICAgICAgIiBoYXMgIiwgcHJlZGVjZXNzb3JGb3JtYXQsICIgYW5kICIsICpibG9j
aywgIiBoYXMgIiwgbXlGb3JtYXQsICIuXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJ
UiBhdCB0aW1lIG9mIGVycm9yOlxuIik7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7
CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICB2b2lkIHNldEZvck5vZGUoTm9kZSogbm9kZSwgaW50IG9wZXJhbmQsIEZs
dXNoRm9ybWF0IG5vZGVGb3JtYXQsIEZsdXNoRm9ybWF0IG5ld0Zvcm1hdCkKKyAgICB7CisgICAg
ICAgIEZsdXNoRm9ybWF0JiBjdXJyZW50Rm9ybWF0ID0gbV9saXZlLm9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgIAorICAgICAgICAvLyBEbyBzb21lIHVzZWZ1bCB2ZXJpZmljYXRpb24gaGVyZS4g
SXQncyBPSyBpZiB3ZSB0aGluayB0aGF0IHRoZQorICAgICAgICAvLyBmbHVzaCBmb3JtYXQgaXMg
ZGVhZCBhdCB0aGUgdGltZSB0aGF0IHdlIHNlZSB0aGUgbm9kZS4gQnV0IGl0J3MKKyAgICAgICAg
Ly8gbm90IE9LIGlmIGJvdGggdGhlIG5vZGUgYW5kIG1fbGl2ZSBzZWUgYSBGbHVzaEZvcm1hdCBh
bmQgdGhleSBkbworICAgICAgICAvLyBub3QgYWdyZWUgb24gaXQuCisgICAgICAgIAorICAgICAg
ICBpZiAoY3VycmVudEZvcm1hdCA9PSBEZWFkRmx1c2ggfHwgY3VycmVudEZvcm1hdCA9PSBub2Rl
Rm9ybWF0KSB7CisgICAgICAgICAgICBjdXJyZW50Rm9ybWF0ID0gbmV3Rm9ybWF0OworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgIkJhZCBGbHVzaCBtZXJnZSBhdCBub2RlICIsIG5vZGUsICIsIHIiLCBvcGVyYW5k
LCAiOiBub2RlIGNsYWltcyAiLCBub2RlRm9ybWF0LAorICAgICAgICAgICAgIiBidXQgYmFja3dh
cmRzIGZsb3cgY2xhaW1zICIsIGN1cnJlbnRGb3JtYXQsICIuXG4iKTsKKyAgICAgICAgZGF0YUxv
ZygiSVIgYXQgdGltZSBvZiBlcnJvcjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgRmx1c2hGb3JtYXQgZmx1c2hGb3JtYXQo
Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+Zmx1c2hGb3JtYXQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtX2NoYW5nZWQ7Cisg
ICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IG1fbGl2ZTsKK307CisKK2Jvb2wgcGVyZm9ybUZsdXNo
TGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkRGRyBGbHVzaC1MaXZlbmVzcyBBbmFseXNpcyBQaGFzZSIpOworICAgIHJl
dHVybiBydW5QaGFzZTxGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZT4oZ3JhcGgpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorI2RlZmluZSBE
RkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbXB1
dGVzIEJhc2ljQmxvY2s6OnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQKKworYm9vbCBwZXJmb3JtRmx1
c2hMaXZlbmVzc0FuYWx5c2lzKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRmx1c2hMaXZlbmVz
c0FuYWx5c2lzUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJGdW5j
dGlvbkV4ZWN1dGFibGVEdW1wLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
PHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogI2lmIEVO
QUJMRShERkdfSklUKQogCkBAIC0yMTYsOCArMjE3LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJpZCIsIHN0b3Jh
Z2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtzdG9yYWdl
QWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKICAgICAgICAgb3V0LnByaW50KCIs
ICIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSk7CiAg
ICAgfQotICAgIEFTU0VSVChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT5o
YXNMb2NhbCgpKTsKLSAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpIHsKKyAg
ICBBU1NFUlQobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSA9PSBub2RlLT5oYXNM
b2NhbCgqdGhpcykpOworICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMp
KSB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGludCBvcGVyYW5kID0gdmFyaWFibGVB
Y2Nlc3NEYXRhLT5vcGVyYW5kKCk7CiAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVy
YW5kKSkKQEAgLTIzNSw2ICsyMzYsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNJbmRleGluZ1R5cGUoKSkKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBJbmRleGluZ1R5cGVEdW1wKG5vZGUtPmluZGV4aW5nVHlwZSgp
KSk7CisgICAgaWYgKG5vZGUtPmhhc1BoaSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJe
Iiwgbm9kZS0+cGhpKCktPmluZGV4KCkpOwogICAgIGlmIChub2RlLT5oYXNFeGVjdXRpb25Db3Vu
dGVyKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2RlLT5leGVjdXRp
b25Db3VudGVyKCkpKTsKICAgICBpZiAob3AgPT0gSlNDb25zdGFudCkgewpAQCAtMjYwLDcgKzI2
Myw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICBvdXQu
cHJpbnQoIikiKTsKIAogICAgIGlmICghc2tpcHBlZCkgewotICAgICAgICBpZiAobm9kZS0+aGFz
VmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKnRoaXMpKQogICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRpY3RpbmcgIiwgU3Bl
Y3VsYXRpb25EdW1wKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkgPyAiLCBm
b3JjaW5nIGRvdWJsZSIgOiAiIik7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmhhc0hlYXBQcmVk
aWN0aW9uKCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgcHJlZGljdGluZyAiLCBTcGVjdWxh
dGlvbkR1bXAobm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSkpOwpAQCAtMzEzLDIzICszMTYsMjUg
QEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgICAgICAgICAg
b3V0LnByaW50KCJcbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIG91dC5wcmludChwcmVmaXgs
ICIgIFBoaSBOb2RlczoiKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhpc1tpXTsK
LSAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9k
ZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG91
dC5wcmludCgiIEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPnJlZkNvdW50KCks
ICI+LT4oIik7Ci0gICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSkgewotICAgICAgICAgICAg
b3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOwotICAgICAgICAgICAg
aWYgKHBoaU5vZGUtPmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAi
LCBwaGlOb2RlLT5jaGlsZDIoKS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBoaU5v
ZGUtPmNoaWxkMygpKQotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5v
ZGUtPmNoaWxkMygpLT5pbmRleCgpKTsKKyAgICBpZiAoIWJsb2NrLT5waGlzLmlzRW1wdHkoKSkg
eworICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQaGkgTm9kZXM6Iik7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhpc1tpXTsKKyAgICAgICAgICAgIGlmICghcGhp
Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlz
T25seSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG91dC5wcmludCgi
IEAiLCBwaGlOb2RlLT5pbmRleCgpLCAiPCIsIHBoaU5vZGUtPnJlZkNvdW50KCksICI+LT4oIik7
CisgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIkAiLCBwaGlOb2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpKSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQyKCktPmluZGV4KCkpOworICAgICAgICAgICAgICAgICAg
ICBpZiAocGhpTm9kZS0+Y2hpbGQzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMygpLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQucHJpbnQoIikiLCBpICsgMSA8IGJsb2Nr
LT5waGlzLnNpemUoKSA/ICIsIiA6ICIiKTsKICAgICAgICAgfQotICAgICAgICBvdXQucHJpbnQo
IikiLCBpICsgMSA8IGJsb2NrLT5waGlzLnNpemUoKSA/ICIsIiA6ICIiKTsKKyAgICAgICAgb3V0
LnByaW50KCJcbiIpOwogICAgIH0KLSAgICBvdXQucHJpbnQoIlxuIik7CiB9CiAKIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKQEAgLTM0MywyOSArMzQ4LDU3IEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBkdW1wQmxvY2tIZWFkZXIob3V0LCAiIiwgYmxvY2ssIER1
bXBBbGxQaGlzKTsKLSAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYmVmb3JlOiAiKTsKLSAgICAg
ICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQotICAgICAgICAgICAgZHVtcE9wZXJhbmRzKGJs
b2NrLT52YWx1ZXNBdEhlYWQsIG91dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dC5w
cmludCgiPGVtcHR5PiIpOwotICAgICAgICBvdXQucHJpbnQoIlxuIik7Ci0gICAgICAgIG91dC5w
cmludCgiICB2YXIgbGlua3M6ICIpOwotICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZCwgb3V0KTsKLSAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICBzd2l0
Y2ggKG1fZm9ybSkgeworICAgICAgICBjYXNlIExvYWRTdG9yZToKKyAgICAgICAgY2FzZSBUaHJl
YWRlZENQUzogeworICAgICAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYmVmb3JlOiAiKTsKKyAg
ICAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKKyAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoYmxvY2stPnZhbHVlc0F0SGVhZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CisgICAgICAgICAgICBvdXQucHJpbnQoIlxuIik7
CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgdmFyIGxpbmtzOiAiKTsKKyAgICAgICAgICAgIGR1
bXBPcGVyYW5kcyhibG9jay0+dmFyaWFibGVzQXRIZWFkLCBvdXQpOworICAgICAgICAgICAgb3V0
LnByaW50KCJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFNTQTogeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2st
PnNzYSk7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgRmx1c2ggZm9ybWF0OiAiLCBibG9jay0+
c3NhLT5mbHVzaEZvcm1hdEF0SGVhZCwgIlxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAg
QXZhaWxhYmlsaXR5OiAiLCBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQsICJcbiIpOwor
ICAgICAgICAgICAgb3V0LnByaW50KCIgIExpdmU6ICIsIG5vZGVMaXN0RHVtcChibG9jay0+c3Nh
LT5saXZlQXRIZWFkKSwgIlxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgVmFsdWVzOiAi
LCBub2RlTWFwRHVtcChibG9jay0+c3NhLT52YWx1ZXNBdEhlYWQpLCAiXG4iKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9IH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGR1bXBDb2RlT3JpZ2luKG91dCwgIiIs
IGxhc3ROb2RlLCBibG9jay0+YXQoaSkpOwogICAgICAgICAgICAgZHVtcChvdXQsICIiLCBibG9j
ay0+YXQoaSkpOwogICAgICAgICAgICAgbGFzdE5vZGUgPSBibG9jay0+YXQoaSk7CiAgICAgICAg
IH0KLSAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYWZ0ZXI6ICIpOwotICAgICAgICBpZiAoYmxv
Y2stPmNmYUhhc1Zpc2l0ZWQpCi0gICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVl
c0F0VGFpbCwgb3V0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0LnByaW50KCI8ZW1w
dHk+Iik7Ci0gICAgICAgIG91dC5wcmludCgiXG4iKTsKLSAgICAgICAgb3V0LnByaW50KCIgIHZh
ciBsaW5rczogIik7Ci0gICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFyaWFibGVzQXRUYWls
LCBvdXQpOwotICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgIHN3aXRjaCAobV9mb3Jt
KSB7CisgICAgICAgIGNhc2UgTG9hZFN0b3JlOgorICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOiB7
CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgdmFycyBhZnRlcjogIik7CisgICAgICAgICAgICBp
ZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KGJsb2Nr
LT52YWx1ZXNBdFRhaWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5w
cmludCgiPGVtcHR5PiIpOworICAgICAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICAg
ICAgb3V0LnByaW50KCIgIHZhciBsaW5rczogIik7CisgICAgICAgICAgICBkdW1wT3BlcmFuZHMo
YmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgb3V0KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXG4i
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBTU0E6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrLT5zc2EpOworICAg
ICAgICAgICAgb3V0LnByaW50KCIgIEZsdXNoIGZvcm1hdDogIiwgYmxvY2stPnNzYS0+Zmx1c2hG
b3JtYXRBdFRhaWwsICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIEF2YWlsYWJpbGl0
eTogIiwgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLCAiXG4iKTsKKyAgICAgICAgICAg
IG91dC5wcmludCgiICBMaXZlOiAiLCBub2RlTGlzdER1bXAoYmxvY2stPnNzYS0+bGl2ZUF0VGFp
bCksICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIFZhbHVlczogIiwgbm9kZU1hcER1
bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsKSwgIlxuIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfSB9CiAgICAgfQogfQogCkBAIC00NzgsNiArNTExLDI4IEBAIHZvaWQgR3JhcGg6
OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2MKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
IH0KKwordm9pZCBHcmFwaDo6YWRkRm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sq
PiYgcmVzdWx0LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEhhc2hTZXQ8QmFz
aWNCbG9jayo+JiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBpZiAoc2Vlbi5jb250
YWlucyhibG9jaykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZXN1bHQuYXBwZW5kKGJs
b2NrKTsKKyAgICB3b3JrbGlzdC5hcHBlbmQoYmxvY2spOworICAgIHNlZW4uYWRkKGJsb2NrKTsK
K30KKwordm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoVmVjdG9yPEJhc2lj
QmxvY2sqPiYgcmVzdWx0KQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0
OworICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHNlZW47CisgICAgYWRkRm9yRGVwdGhGaXJzdFNv
cnQocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkpOworICAgIHdoaWxlICghd29ya2xp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFr
ZUxhc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMo
KTsgaS0tOykKKyAgICAgICAgICAgIGFkZEZvckRlcHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xp
c3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNzb3IoaSkpOworICAgIH0KK30KICAgICAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgIGRldGhyZWFkKCk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRh
KCkpOworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRo
aXMpKTsKICAgICAgICAgbm9kZS0+Y29udmVydFRvQ29uc3RhbnQoY29uc3RhbnROdW1iZXIpOwog
ICAgIH0KICAgICAKQEAgLTQwMSw3ICs0MDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAg
ICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5j
b2RlT3JpZ2luKTsKICAgICAgICAgCi0gICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgpKSB7Cisg
ICAgICAgIGlmIChub2RlLT5oYXNMb2NhbCgqdGhpcykpIHsKICAgICAgICAgICAgIGlmICghb3Bl
cmFuZElzQXJndW1lbnQobm9kZS0+bG9jYWwoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChub2RlLT5sb2Nh
bCgpKTsKQEAgLTY0MSw2ICs2NDEsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBpbnZhbGlk
YXRlQ0ZHKCk7CiAgICAgCisgICAgdm9pZCBnZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihWZWN0
b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpOworICAgIAogICAgIFByb2ZpbGVyOjpDb21waWxhdGlv
biogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KICAg
ICAKICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFu
LmlkZW50aWZpZXJzOyB9CkBAIC02NzksNiArNjgxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29y
a2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IpOworICAgIHZvaWQgYWRk
Rm9yRGVwdGhGaXJzdFNvcnQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0LCBWZWN0b3I8QmFz
aWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEhhc2hTZXQ8QmFzaWNCbG9jayo+JiBzZWVuLCBCYXNp
Y0Jsb2NrKik7CiAgICAgCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRl
SW50ZWdlciwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMjYgKzMxLDEyIEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdHcmFw
aC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotY2xhc3MgSW5zZXJ0aW9uIHsK
LXB1YmxpYzoKLSAgICBJbnNlcnRpb24oKSB7IH0KLSAgICAKLSAgICBJbnNlcnRpb24oc2l6ZV90
IGluZGV4LCBOb2RlKiBlbGVtZW50KQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAg
ICwgbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzaXplX3QgaW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Ci0gICAgTm9kZSogZWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZWxlbWVudDsgfQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9pbmRleDsKLSAg
ICBOb2RlKiBtX2VsZW1lbnQ7Ci19OwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxOb2RlKj4gSW5z
ZXJ0aW9uOwogCiBjbGFzcyBJbnNlcnRpb25TZXQgewogcHVibGljOgpAQCAtODEsMjAgKzY3LDcg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKICAg
ICB7Ci0gICAgICAgIGlmICghbV9pbnNlcnRpb25zLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgYmxvY2stPmdyb3coYmxvY2stPnNpemUoKSArIG1faW5zZXJ0aW9ucy5zaXpl
KCkpOwotICAgICAgICBzaXplX3QgbGFzdEluZGV4ID0gYmxvY2stPnNpemUoKTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaW5kZXhJbkluc2VydGlvbnMgPSBtX2luc2VydGlvbnMuc2l6ZSgpOyBpbmRl
eEluSW5zZXJ0aW9ucy0tOykgewotICAgICAgICAgICAgSW5zZXJ0aW9uJiBpbnNlcnRpb24gPSBt
X2luc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdOwotICAgICAgICAgICAgc2l6ZV90IGZpcnN0
SW5kZXggPSBpbnNlcnRpb24uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOwotICAgICAgICAg
ICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IGxhc3RJbmRleDsgLS1pID4gZmlyc3RJbmRleDspCi0gICAgICAg
ICAgICAgICAgYmxvY2stPmF0KGkpID0gYmxvY2stPmF0KGkgLSBpbmRleE9mZnNldCk7Ci0gICAg
ICAgICAgICBibG9jay0+YXQoZmlyc3RJbmRleCkgPSBpbnNlcnRpb24uZWxlbWVudCgpOwotICAg
ICAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleDsKLSAgICAgICAgfQotICAgICAgICBtX2lu
c2VydGlvbnMucmVzaXplKDApOworICAgICAgICBleGVjdXRlSW5zZXJ0aW9ucygqYmxvY2ssIG1f
aW5zZXJ0aW9ucyk7CiAgICAgfQogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlz
aXNQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgor
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTGl2ZW5lc3NBbmFseXNpc1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdy
YXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAibGl2ZW5lc3MgYW5hbHlzaXMiKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBMaXZlbmVzcyBpcyBhIGJh
Y2t3YXJkcyBhbmFseXNpczsgdGhlIHJvb3RzIGFyZSB0aGUgYmxvY2tzIHRoYXQKKyAgICAgICAg
Ly8gZW5kIGluIGEgdGVybWluYWwgKFJldHVybi9UaHJvdy9UaHJvd1JlZmVyZW5jZUVycm9yKS4g
Rm9yIG5vdywgd2UKKyAgICAgICAgLy8gdXNlIGEgZml4cG9pbnQgZm9ybXVsYXRpb24gc2luY2Ug
bGl2ZW5lc3MgaXMgYSByYXBpZCBhbmFseXNpcyB3aXRoCisgICAgICAgIC8vIGNvbnZlcmdlbmNl
IGd1YXJhbnRlZWQgYWZ0ZXIgTyhjb25uZWN0aXZpdHkpLgorICAgICAgICAKKyAgICAgICAgLy8g
U3RhcnQgYnkgYXNzdW1pbmcgdGhhdCBldmVyeXRoaW5nIGlzIGRlYWQuCisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9ja0luZGV4KTsKKyAgICAgICAg
fSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbV9ncmFwaC5ibG9j
aygwKS0+c3NhLT5saXZlQXRIZWFkLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICAgICAiQmFkIGxpdmVuZXNzIGFuYWx5c2lzIHJlc3VsdDogbGl2ZSBhdCBy
b290IGlzIG5vdCBlbXB0eTogIiwKKyAgICAgICAgICAgICAgICBub2RlTGlzdER1bXAobV9ncmFw
aC5ibG9jaygwKS0+c3NhLT5saXZlQXRIZWFkKSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9n
KCJJUiBhdCB0aW1lIG9mIGVycm9yOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsK
KyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoQmxvY2tJbmRleCBi
bG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4g
YmUgaW1wcm92ZWQsIGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAgICAgICAgLy8gSGFz
aFNldHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKKyAg
ICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246CisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gICAgbjogVXBzaWxvbigkcCwgQHgpCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBuIGFuZCB1c2VzIEB4Lgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhpOgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVzZSBub3IgYSBkZWYuCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2RlOgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwg
QGMuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICAgICAgY2FzZSBVcHNpbG9uOiB7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9k
ZS0+cGhpKCk7CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShwaGkpOworICAgICAgICAg
ICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICAgICAgbV9saXZlLmFkZChu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShub2RlKTsKKyAgICAg
ICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRDaGls
ZFVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChtX2xpdmUgPT0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisgICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KQorICAgICAgICAg
ICAgYmxvY2stPnByZWRlY2Vzc29yc1tpXS0+c3NhLT5saXZlQXRUYWlsLmFkZChtX2xpdmUuYmVn
aW4oKSwgbV9saXZlLmVuZCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRDaGlsZFVzZShO
b2RlKiwgRWRnZSYgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZENoaWxkVXNlKGVkZ2UpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGFkZENoaWxkVXNlKEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAg
ICBlZGdlLnNldEtpbGxTdGF0dXMobV9saXZlLmFkZChlZGdlLm5vZGUoKSkuaXNOZXdFbnRyeSA/
IERvZXNLaWxsIDogRG9lc05vdEtpbGwpOworICAgIH0KKyAgICAKKyAgICBib29sIG1fY2hhbmdl
ZDsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7Cit9OworCitib29sIHBlcmZvcm1MaXZlbmVz
c0FuYWx5c2lzKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1Jl
Z2lvbigiREZHIExpdmVuZXNzIEFuYWx5c2lzIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNl
PExpdmVuZXNzQW5hbHlzaXNQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTGl2ZW5lc3NBbmFseXNp
c1BoYXNlX2gKKyNkZWZpbmUgREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdD
b21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFw
aDsKKworLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5saXZlQXRIZWFkL2xpdmVBdFRhaWwu
CisKK2Jvb2wgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVO
QUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdOb2Rl
QWxsb2NhdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTM3LDYg
KzM4LDI1IEBAIHVuc2lnbmVkIE5vZGU6OmluZGV4KCkgY29uc3QKICAgICByZXR1cm4gTm9kZUFs
bG9jYXRvcjo6YWxsb2NhdG9yT2YodGhpcyktPmluZGV4T2YodGhpcyk7CiB9CiAKK2Jvb2wgTm9k
ZTo6aGFzVmFyaWFibGVBY2Nlc3NEYXRhKEdyYXBoJiBncmFwaCkKK3sKKyAgICBzd2l0Y2ggKG9w
KCkpIHsKKyAgICBjYXNlIFBoaToKKyAgICAgICAgcmV0dXJuIGdyYXBoLm1fZm9ybSAhPSBTU0E7
CisgICAgY2FzZSBHZXRMb2NhbDoKKyAgICBjYXNlIFNldExvY2FsOgorICAgIGNhc2UgTW92SGlu
dDoKKyAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAg
Y2FzZSBTZXRBcmd1bWVudDoKKyAgICBjYXNlIEZsdXNoOgorICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBX
VEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1MjU4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw5ICs0NSwxMSBAQAogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlU2V0LmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisjaW5jbHVkZSA8
d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xh
c3MgR3JhcGg7CiBzdHJ1Y3QgQmFzaWNCbG9jazsKIAogc3RydWN0IFN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhIHsKQEAgLTQ5OCwzMiArNTAwLDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBib29sIGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpCisgICAgYm9vbCBo
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoR3JhcGgmKTsKKyAgICBib29sIGhhc0xvY2FsKEdyYXBoJiBn
cmFwaCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAob3AoKSkgewotICAgICAgICBjYXNlIEdldExv
Y2FsOgotICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAg
ICAgIGNhc2UgTW92SGludEFuZENoZWNrOgotICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6Ci0gICAg
ICAgIGNhc2UgUGhpOgotICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgotICAgICAgICBjYXNlIEZs
dXNoOgotICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIGJvb2wgaGFzTG9jYWwoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICByZXR1cm4gaGFzVmFyaWFibGVBY2Nl
c3NEYXRhKGdyYXBoKTsKICAgICB9CiAgICAgCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1ZhcmlhYmxlQWNjZXNz
RGF0YSgpKTsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmFyaWFibGVBY2Nlc3NE
YXRhKj4obV9vcEluZm8pLT5maW5kKCk7CiAgICAgfQogICAgIApAQCAtNTM4LDYgKzUyMiwxNyBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNQaGkoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gVXBzaWxvbjsKKyAgICB9CisgICAgCisgICAgTm9kZSogcGhp
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNQaGkoKSk7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8Tm9kZSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNJZGVu
dGlmaWVyKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewpAQCAtNzczLDE2ICs3Njgs
MTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBtX29wSW5mbzIgPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihibG9jayk7CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2so
KQorICAgIEJhc2ljQmxvY2sqJiB0YWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNp
Y0Jsb2NrKj4obV9vcEluZm8pOworICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Js
b2NrKio+KCZtX29wSW5mbyk7CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIG5vdFRha2Vu
QmxvY2soKQorICAgIEJhc2ljQmxvY2sqJiBub3RUYWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChpc0JyYW5jaCgpKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Js
b2NrKj4obV9vcEluZm8yKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9j
ayoqPigmbV9vcEluZm8yKTsKICAgICB9CiAgICAgCiAgICAgU3dpdGNoRGF0YSogc3dpdGNoRGF0
YSgpCkBAIC04MDUsNyArODAwLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICBCYXNp
Y0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKGlz
U3dpdGNoKCkpIHsKICAgICAgICAgICAgIGlmIChpbmRleCA8IHN3aXRjaERhdGEoKS0+Y2FzZXMu
c2l6ZSgpKQpAQCAtODIwLDExICs4MTUsMTEgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAgICAg
cmV0dXJuIG5vdFRha2VuQmxvY2soKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIHJldHVybiB0YWtlbkJsb2NrKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAg
QmFzaWNCbG9jayogc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJvb2wgY29uZGl0aW9uKQorICAgIEJh
c2ljQmxvY2sqJiBzdWNjZXNzb3JGb3JDb25kaXRpb24oYm9vbCBjb25kaXRpb24pCiAgICAgewog
ICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7CiAgICAgICAgIHJldHVybiBjb25kaXRpb24gPyB0
YWtlbkJsb2NrKCkgOiBub3RUYWtlbkJsb2NrKCk7CkBAIC0xMzk5LDYgKzEzOTQsMjMgQEAgcHVi
bGljOgogICAgIE5vZGUqIHJlcGxhY2VtZW50OwogfTsKIAoraW5saW5lIGJvb2wgbm9kZUNvbXBh
cmF0b3IoTm9kZSogYSwgTm9kZSogYikKK3sKKyAgICByZXR1cm4gYS0+aW5kZXgoKSA8IGItPmlu
ZGV4KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitDU3RyaW5nIG5vZGVMaXN0RHVtcChj
b25zdCBUJiBub2RlTGlzdCkKK3sKKyAgICByZXR1cm4gc29ydGVkTGlzdER1bXAobm9kZUxpc3Qs
IG5vZGVDb21wYXJhdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0NTdHJpbmcgbm9k
ZU1hcER1bXAoY29uc3QgVCYgbm9kZU1hcCkKK3sKKyAgICByZXR1cm4gc29ydGVkTWFwRHVtcChu
b2RlTWFwLCBub2RlQ29tcGFyYXRvcik7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVGbGFncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlRmxhZ3MuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVGbGFncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIGR1bXBOb2RlRmxhZ3MoUHJpbnRT
dHJlYW0mIG91dCwgTm9kZUZsYWdzIGZsYWdzKQogewotICAgIGlmICghKGZsYWdzIF4gTm9kZURv
ZXNOb3RFeGl0KSkgeworICAgIGlmICghKChmbGFncyAmIH5Ob2RlUmVsZXZhbnRUb09TUikgXiBO
b2RlRG9lc05vdEV4aXQpKSB7CiAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw5IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhNb3ZIaW50QW5kQ2hlY2ssIE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlRXhpdHNGb3J3YXJkKSBcCiAgICAgbWFjcm8oTW92SGludCwgTm9kZURvZXNO
b3RFeGl0KSBcCiAgICAgbWFjcm8oWm9tYmllSGludCwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAg
bWFjcm8oR2V0QXJndW1lbnQsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFBoYW50b20sIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhVcHNpbG9uLCBOb2RlRG9lc05vdEV4aXQgfCBO
b2RlUmVsZXZhbnRUb09TUikgXAogICAgIG1hY3JvKFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9k
ZVJlbGV2YW50VG9PU1IpIFwKICAgICBtYWNybyhGbHVzaCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBoYW50b21Mb2NhbCwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVEb2VzTm90RXhpdCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgor
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJPU1IgYXZhaWxhYmls
aXR5IGFuYWx5c2lzIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAg
ICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0OworICAgICAgICBtX2dyYXBoLmdldEJs
b2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtpXTsKKyAgICAgICAgICAgIGJsb2Nr
LT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5maWxsKDApOworICAgICAgICAgICAgYmxvY2stPnNz
YS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3RbaV07CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFdlIGVkaXQgYXZhaWxhYmlsaXR5QXRUYWlsIGluLXBsYWNlLCBi
dXQgZmlyc3QgaW5pdGlhbGl6ZSBpdCB0bworICAgICAgICAgICAgLy8gYXZhaWxhYmlsaXR5QXRI
ZWFkLgorICAgICAgICAgICAgT3BlcmFuZHM8Tm9kZSo+JiBhdmFpbGFiaWxpdHkgPSBibG9jay0+
c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWw7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHkgPSBibG9j
ay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytu
b2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAg
ICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKKyAgICAgICAgICAgICAgICAgICAg
YXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CisgICAg
ICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGot
LTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3Vj
Y2Vzc29yKGopOworICAgICAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiYgc3VjY2Vzc29yQXZh
aWxhYmlsaXR5ID0gc3VjY2Vzc29yLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSBhdmFpbGFiaWxpdHkuc2l6ZSgpOyBrLS07KSB7Cisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9IGF2YWlsYWJpbGl0eVtrXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFteU5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghc3Vj
Y2Vzc29yLT5zc2EtPmxpdmVBdEhlYWQuY29udGFpbnMobXlOb2RlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IG92ZXJ3cml0ZSBhdmFpbGFiaWxpdHkgd2l0aCBh
IGJvZ3VzIG5vZGUKKyAgICAgICAgICAgICAgICAgICAgLy8gYXQgbWVyZ2UgcG9pbnRzLiBUaGlz
IGlzIGZpbmUsIHNpbmNlIG1lcmdlIHBvaW50cyBoYXZlCisgICAgICAgICAgICAgICAgICAgIC8v
IE1vdkhpbnQoUGhpKSdzIHRvIHdvcmsgYXJvdW5kIHRoaXMuIFRoZSBvdXRjb21lIG9mIHRoaXMg
aXMKKyAgICAgICAgICAgICAgICAgICAgLy8geW91IG1pZ2h0IGhhdmUgYSBwcm9ncmFtIGluIHdo
aWNoIGEgbm9kZSBoYXBwZW5zIHRvIHJlbWFpbgorICAgICAgICAgICAgICAgICAgICAvLyBsaXZl
IGludG8gc29tZSBibG9jayBCLCBhbmQgc2VwYXJhdGVseSAoZHVlIHRvIGNvcHkKKyAgICAgICAg
ICAgICAgICAgICAgLy8gcHJvcGFnYXRpb24pIGp1c3Qgb25lIG9mIHRoZSBwcmVkZWNlc3NvcnMg
b2YgQiBpc3N1ZWQgYQorICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50IHB1dHRpbmcgdGhh
dCBub2RlIGludG8gc29tZSBsb2NhbC4gVGhlbiBpbiBCIHdlIG1pZ2h0CisgICAgICAgICAgICAg
ICAgICAgIC8vIHRoaW5rIHRoYXQgdGhhdCBub2RlIGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQg
bG9jYWwuIE9mCisgICAgICAgICAgICAgICAgICAgIC8vIGNvdXJzZSBpZiB0aGF0IGxvY2FsIHdh
cyBhY3R1YWxseSBsaXZlIGluIEIsIEIgd291bGQgaGF2ZSBhCisgICAgICAgICAgICAgICAgICAg
IC8vIFBoaSBmb3IgaXQuIFNvIGVzc2VudGlhbGx5IHdlJ2xsIGhhdmUgT1NSIGV4aXQgZHJvcHBp
bmcgdGhpcworICAgICAgICAgICAgICAgICAgICAvLyBub2RlJ3MgdmFsdWUgaW50byB0aGUgbG9j
YWwgd2hlbiB3ZSBvdGhlcndpc2UgKGluIHRoZSBERkcpCisgICAgICAgICAgICAgICAgICAgIC8v
IHdvdWxkIGhhdmUgZHJvcHBlZCB1bmRlZmluZWQgaW50byB0aGUgbG9jYWwuIFRoaXMgc2VlbXMK
KyAgICAgICAgICAgICAgICAgICAgLy8gaGFybWxlc3MuCisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3JBdmFpbGFiaWxpdHlba10gPSBteU5vZGU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1PU1JBdmFpbGFiaWxp
dHlBbmFseXNpcyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdS
ZWdpb24oIkRGRyBPU1IgQXZhaWxhYmlsaXR5IEFuYWx5c2lzIFBoYXNlIik7CisgICAgcmV0dXJu
IHJ1blBoYXNlPE9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2U+KGdyYXBoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VfaAorI2Rl
ZmluZSBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24u
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKwor
Ly8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhp
cyByZWxpZXMgb24gbGl2ZW5lc3MKKy8vIGFuYWx5c2lzIHBoYXNlIGhhdmluZyBiZWVuIHJ1biBh
bmQgdGhlIGdyYXBoIG5vdCBoYXZpbmcgYmVlbiB0cmFuc2Zvcm1lZAorLy8gYWZ0ZXIgdGhhdC4K
KworYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgmKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYs
MTcgQEAKICNpbmNsdWRlICJERkdDUFNSZXRocmVhZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZH
Q1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIgorI2luY2x1
ZGUgIkRGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdEQ0VQaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR0ZhaWxlZEZpbmFsaXplci5oIgorI2luY2x1ZGUgIkRGR0ZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlLmgiCisjaW5jbHVkZSAiREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRG
R1VuaWZpY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgpAQCAtMTgyLDIy
ICsxODcsMjIgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAg
IGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludENvbnZlcmdlZDsKIAogICAgIHBlcmZvcm1T
dG9yZUVsaW1pbmF0aW9uKGRmZyk7Ci0gICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7Ci0g
ICAgCi0gICAgLy8gTm90ZSB0aGF0IERDRSBpcyBuZWNlc3NhcnkgZXZlbiBpbiB0aGUgRlRMLCBi
ZWNhdXNlIG9ubHkgd2Uga25vdyB3aGF0IGlzCi0gICAgLy8gbGl2ZS1pbi1ieXRlY29kZS4gVGhl
IEZUTCB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHdoZW4gT1NSIGV4aXQKLSAg
ICAvLyB2YWx1ZXMgc2hvdWxkIGJlIHdpcmVkIHRvIExWYWx1ZXMsIHZlcnN1cyBiZWluZyB3aXJl
ZCB0byBFeGl0VmFsdWU6OmRlYWQoKS4KLSAgICAvLyBUaGlzIGlzIGRpc3RpbmN0IGZyb20gd2hh
dCBab21iaWVIaW50IGdpdmVzIHVzOiBab21iaWVIaW50IHNheXMgdGhhdCB0aGUKLSAgICAvLyB2
YWx1ZSBpbiB0aGUgZ2l2ZW4gYnl0ZWNvZGUgbG9jYWwgaXMgYWx3YXlzIGRlYWQ7IHRoZSByZWZl
cmVuY2UgY291bnRzIHRoYXQKLSAgICAvLyBEQ0UgcHJvZHVjZXMgdGVsbCB1cyB0aGF0IHRoZSB2
YWx1ZSBpcyBsaXZlIGZvciBhIHdoaWxlIGJ1dCBldmVudHVhbGx5Ci0gICAgLy8gZGllcywgYW5k
IGl0IHRlbGxzIHVzIGV4YWN0bHkgd2hlbiB0aGUgZGVhdGggcG9pbnQgaXMuCi0gICAgcGVyZm9y
bURDRShkZmcpOwogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUV4
cGVyaW1lbnRhbEZUTCgpCiAgICAgICAgICYmIGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlv
bgogICAgICAgICAmJiBGVEw6OmNhbkNvbXBpbGUoZGZnKSkgewogICAgICAgICAKKyAgICAgICAg
cGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKGRmZyk7CisgICAgICAgIHBlcmZvcm1DUFNSZXRo
cmVhZGluZyhkZmcpOworICAgICAgICBwZXJmb3JtU1NBQ29udmVyc2lvbihkZmcpOworICAgICAg
ICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOworICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7
CisgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsgLy8gV2UgcmVseSBvbiB0aGlzIHRvIGNvbnZlcnQg
ZGVhZCBTZXRMb2NhbHMgaW50byB0aGUgYXBwcm9wcmlhdGUgaGludCwgYW5kIHRvIGtpbGwgZGVh
ZCBjb2RlIHRoYXQgd29uJ3QgYmUgcmVjb2duaXplZCBhcyBkZWFkIGJ5IExMVk0uCisgICAgICAg
IHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1GbHVzaExpdmVu
ZXNzQW5hbHlzaXMoZGZnKTsKKyAgICAgICAgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
KGRmZyk7CisgICAgICAgIAogICAgICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGgg
anVzdCBiZWZvcmUgRlRMIGxvd2VyaW5nOiIpOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6
IFN1cHBvcnQgT1NSIGVudHJ5LgpAQCAtMjE1LDYgKzIyMCw4IEBAIFBsYW46OkNvbXBpbGF0aW9u
UGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CiAgICAgCisgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CisgICAgcGVyZm9ybURDRShk
ZmcpOwogICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRmZyk7CiAgICAgZHVt
cEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGFmdGVyIG9wdGltaXphdGlvbjoiKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSkpOwogICAgICAgICAgICAg
ICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPmhhc0xvY2FsKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5oYXNMb2NhbChtX2dyYXBoKSk7CiAgICAgICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3QoCiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uRnJv
bVZhbHVlKG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0pKTsKICAgICAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcyLDE0ICs0NzIsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBab21iaWVIaW50OiB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJl
IHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAg
IC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4KLSAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNhc2Ug
UGhpOgogICAgICAgICAgICAgLy8gUGhpcyBzaG91bGQgbm90IGJlIHZpc2libGUgaGVyZSBzaW5j
ZSB3ZSdyZSBpdGVyYXRpbmcgdGhlIGFsbC1idXQtUGhpJ3MKICAgICAgICAgICAgIC8vIHBhcnQg
b2YgYmFzaWMgYmxvY2tzLgotICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFVwc2lsb246CisgICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6CisgICAg
ICAgICAgICAvLyBUaGVzZSBkb24ndCBnZXQgaW5zZXJ0ZWQgdW50aWwgd2UgZ28gaW50byBTU0Eu
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRTY29wZToKQEAgLTU0MCw3ICs1NDYsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMYXN0
Tm9kZVR5cGU6Ci0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVm
YXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgor
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5j
bHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVibGlj
IFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgCitw
dWJsaWM6CisgICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQ
aGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikKKyAgICAgICAgLCBtX2luc2VydGlvblNldChn
cmFwaCkKKyAgICAgICAgLCBtX2NoYW5nZWQoZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBib29sIHJ1bigpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9y
bSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNo
IFNldExvY2FsJ3MgbmVlZCBmbHVzaGluZy4gTmVlZCB0byBkbyB0aGlzIHdoaWxlIHRoZQorICAg
ICAgICAvLyBQaGkgZ3JhcGggaXMgc3RpbGwgaW50YWN0LgorICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRl
eC0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGbHVzaCkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYWRkRmx1c2hlZExvY2FsT3Aobm9k
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKCFtX2ZsdXNoZWRM
b2NhbE9wV29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9m
bHVzaGVkTG9jYWxPcFdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBBU1NFUlQobV9m
bHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpOworICAgICAgICAgICAgREZHX05PREVfRE9f
VE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkRmx1c2hlZExvY2FsRWRnZSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEVsaW1pbmF0ZSBhbGwgZHVwbGljYXRlIG9yIHNlbGYt
cG9pbnRpbmcgUGhpIGVkZ2VzLiBUaGlzIG1lYW5zIHRoYXQKKyAgICAgICAgLy8gd2UgdHJhbnNm
b3JtOgorICAgICAgICAvLworICAgICAgICAvLyBwOiBQaGkoQG4xLCBAbjIsIEBuMykKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gaW50bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gcDogUGhpKEB4
KQorICAgICAgICAvLworICAgICAgICAvLyBpZiBlYWNoIEBuaSBpbiB7QG4xLCBAbjIsIEBuM30g
aXMgZWl0aGVyIGVxdWFsIHRvIEBwIHRvIGlzIGVxdWFsCisgICAgICAgIC8vIHRvIEB4LCBmb3Ig
ZXhhY3RseSBvbmUgb3RoZXIgQHguIEFkZGl0aW9uYWxseSwgdHJpdmlhbCBQaGlzIChpLmUuCisg
ICAgICAgIC8vIHA6IFBoaShAeCkpIGFyZSBmb3J3YXJkZWQsIHNvIHRoYXQgaWYgaGF2ZSBhbiBl
ZGdlIHRvIHN1Y2ggQHAsIHdlCisgICAgICAgIC8vIHJlcGxhY2UgaXQgd2l0aCBAeC4gVGhpcyBs
b29wIGRvZXMgdGhpcyBmb3IgUGhpcyBvbmx5OyBsYXRlciB3ZSBkbworICAgICAgICAvLyBzdWNo
IGZvcndhcmRpbmcgZm9yIFBoaSByZWZlcmVuY2VzIGZvdW5kIGluIG90aGVyIG5vZGVzLgorICAg
ICAgICAvLworICAgICAgICAvLyBTZWUgQXljb2NrIGFuZCBIb3JzcG9vbCBpbiBDQycwMCBmb3Ig
YSBiZXR0ZXIgZGVzY3JpcHRpb24gb2Ygd2hhdAorICAgICAgICAvLyB3ZSdyZSBkb2luZyBoZXJl
LgorICAgICAgICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBo
aUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yd2Fy
ZFBoaUNoaWxkcmVuKHBoaSk7CisgICAgICAgICAgICAgICAgICAgIGRlZHVwbGljYXRlQ2hpbGRy
ZW4ocGhpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hp
bGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBGb3IgZWFjaCBiYXNpYyBibG9j
aywgZm9yIGVhY2ggbG9jYWwgbGl2ZSBhdCB0aGUgaGVhZCBvZiB0aGF0IGJsb2NrLAorICAgICAg
ICAvLyBmaWd1cmUgb3V0IHdoYXQgbm9kZSB3ZSBzaG91bGQgYmUgcmVmZXJyaW5nIHRvIGluc3Rl
YWQgb2YgdGhhdCBsb2NhbC4KKyAgICAgICAgLy8gSWYgaXQgdHVybnMgb3V0IHRvIGJlIGEgbm9u
LXRyaXZpYWwgUGhpLCBtYWtlIHN1cmUgdGhhdCB3ZSBjcmVhdGUgYW4KKyAgICAgICAgLy8gU1NB
IFBoaSBhbmQgVXBzaWxvbnMgaW4gcHJlZGVjZXNzb3IgYmxvY2tzLiBXZSByZXVzZQorICAgICAg
ICAvLyBCYXNpY0Jsb2NrOjp2YXJpYWJsZXNBdEhlYWQgZm9yIHRyYWNraW5nIHdoaWNoIG5vZGVz
IHRvIHJlZmVyIHRvLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07
CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUG9p
c29uIHRoaXMgZW50cnkgaW4gdmFyaWFibGVzQXRIZWFkIGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAg
ICAgICAgICAgICAgICAgLy8gd2FudCBhbnlvbmUgdG8gdHJ5IHRvIHJlZmVyIHRvIGl0LCBpZiB0
aGUgdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gY2FwdHVyZWQuCisgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSAwOworICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBQaGk6CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAg
ICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAg
ICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFBoaSB8fCBub2Rl
LT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdl
ID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChlZGdlKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVkZ2Uubm9kZSgpOyAvLyBJ
dCdzIHNvbWV0aGluZyBmcm9tIGEgZGlmZmVyZW50IGJhc2ljIGJsb2NrLgorICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgYSBub24tdHJp
dmlhbCBQaGkuCisgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2
YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVGbGFn
cyByZXN1bHQgPSByZXN1bHRGb3IoZm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVz
ZUtpbmQgdXNlS2luZCA9IHVzZUtpbmRGb3IoZm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoMCwgU3BlY05vbmUsIFBoaSwgbm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCgobm9kZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNrKSA9PSBy
ZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tOykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxv
Y2stPnByZWRlY2Vzc29yc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWNl
c3Nvci0+YXBwZW5kTm9uVGVybWluYWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBibG9jay0+bGFzdCgpLT5jb2RlT3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZSksIEVkZ2UocHJlZGVj
ZXNzb3ItPnZhcmlhYmxlc0F0VGFpbFtpXSwgdXNlS2luZCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZSkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSBub2RlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlZh
cmlhYmxlcyBhdCBoZWFkIGFmdGVyIFNTQSBQaGkgaW5zZXJ0aW9uOlxuIik7CisgICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsICpi
bG9jaywgIjogIiwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgIlxuIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdmFyaWFibGVz
QXRIZWFkIGluIGVhY2ggYmxvY2sgcmVmZXJzIHRvIGVpdGhlcjoKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gMSkgQSBuZXcgU1NBIHBoaSBpbiB0aGUgY3VycmVudCBibG9jay4KKyAgICAgICAgLy8g
MikgQSBTZXRBcmd1bWVudCwgd2hpY2ggd2lsbCBzb29uIGdldCBjb252ZXJ0ZWQgaW50byBhIEdl
dEFyZ3VtZW50LgorICAgICAgICAvLyAzKSBBbiBvbGQgQ1BTIHBoaSBpbiBhIGRpZmZlcmVudCBi
bG9jay4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGlu
ZyBmb3IgKDEpIGFuZCAoMiksIGJ1dCB3ZSBkbyBuZWVkIHRvCisgICAgICAgIC8vIGRvIGEgcmVw
bGFjZW1lbnQgZm9yICgzKS4KKyAgICAgICAgCisgICAgICAgIC8vIENsZWFyIGFsbCByZXBsYWNl
bWVudHMsIHNpbmNlIG90aGVyIHBoYXNlcyBtYXkgaGF2ZSB1c2VkIHRoZW0uCisgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRl
eC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5z
aXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4
XS0+cmVwbGFjZW1lbnQgPSAwOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgICAgICAgICAgYmxvY2stPmF0
KG5vZGVJbmRleCktPnJlcGxhY2VtZW50ID0gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gRm9yIGFsbCBvZiB0aGUgb2xkIENQUyBQaGlzLCBmaWd1cmUgb3V0IHdoYXQgdGhleSBj
b3JyZXNwb25kIHRvIGluIFNTQS4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07CisgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICJDb25zaWRlcmluZyAiLCBwaGksICIsIGZvciByIiwgcGhp
LT5sb2NhbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIiwgYW5kIGl0cyByZXBsYWNlbWVu
dCBpbiAiLCAqYmxvY2ssICIsICIsCisgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFy
aWFibGVzQXRIZWFkLm9wZXJhbmQocGhpLT5sb2NhbCgpKSwgIlxuIik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHBoaS0+cmVwbGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVz
QXRIZWFkLm9wZXJhbmQocGhpLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gTm93IG1ha2Ugc3VyZSB0aGF0IGFsbCB2YXJpYWJsZXNBdEhl
YWQgaW4gZWFjaCBibG9jayBwb2ludHMgdG8gdGhlCisgICAgICAgIC8vIGNhbm9uaWNhbCBTU0Eg
dmFsdWUuIFByaW9yIHRvIHRoaXMsIHZhcmlhYmxlc0F0SGVhZFtsb2NhbF0gbWF5IHBvaW50IHRv
CisgICAgICAgIC8vIGFuIG9sZCBDUFMgUGhpIGluIGEgZGlmZmVyZW50IGJsb2NrLgorICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PnZhcmlhYmxlc0F0SGVhZFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHdoaWxlIChub2RlLT5yZXBs
YWNlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnJlcGxhY2VtZW50Owor
ICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSBub2RlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAg
ICAgICAgICAgZGF0YUxvZygiVmFyaWFibGVzIGF0IGhlYWQgYWZ0ZXIgY29udmVyZ2VuY2U6XG4i
KTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgIiwgKmJsb2NrLCAiOiAiLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCAiXG4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ29udmVydCBv
cGVyYXRpb25zIG92ZXIgbG9jYWxzIGludG8gb3BlcmF0aW9ucyBvdmVyIFNTQSBub2Rlcy4KKyAg
ICAgICAgLy8gLSBHZXRMb2NhbCBvdmVyIGNhcHR1cmVkIHZhcmlhYmxlcyBsb3NlIHRoZWlyIHBo
aXMuCisgICAgICAgIC8vIC0gR2V0TG9jYWwgb3ZlciB1bmNhcHR1cmVkIHZhcmlhYmxlcyBkaWUg
YW5kIGdldCByZXBsYWNlZCB3aXRoIHJlZmVyZW5jZXMKKyAgICAgICAgLy8gICB0byB0aGUgbm9k
ZSBzcGVjaWZpZWQgYnkgdmFyaWFibGVzQXRIZWFkLgorICAgICAgICAvLyAtIFNldExvY2FsIGdl
dHMgTm9kZU11c3RHZW5lcmF0ZSBpZiBpdCdzIGZsdXNoZWQsIG9yIHR1cm5zIGludG8gYQorICAg
ICAgICAvLyAgIE1vdkhpbnQgb3RoZXJ3aXNlLgorICAgICAgICAvLyAtIEZsdXNoIGxvc2VzIGl0
cyBjaGlsZHJlbiBidXQgcmVtYWlucywgYmVjYXVzZSB3ZSB3YW50IHRvIGtub3cgd2hlbiBhCisg
ICAgICAgIC8vICAgZmx1c2hlZCBTZXRMb2NhbCdzIHZhbHVlIGlzIG5vIGxvbmdlciBuZWVkZWQu
IFRoaXMgYWxzbyBtYWtlcyBpdCBzaW1wbGVyCisgICAgICAgIC8vICAgdG8gcmVhc29uIGFib3V0
IHRoZSBmb3JtYXQgb2YgYSBsb2NhbCwgc2luY2Ugd2UgY2FuIGp1c3QgZm9sZCBpdCBpbnRvIHRo
ZQorICAgICAgICAvLyAgIGJhY2t3YXJkcyBhbmFseXNpcyB0aGF0IExpdmVuZXNzQW5hbHlzaXNQ
aGFzZSBkb2VzLiBBcyBwYXJ0IG9mIHRoZQorICAgICAgICAvLyAgIGJhY2t3YXJkcyBhbmFseXNp
cywgd2Ugc2F5IHRoYXQgdGhlIHR5cGUgb2YgYSBsb2NhbCBjYW4gYmUgZWl0aGVyCisgICAgICAg
IC8vICAgaW50MzIsIGRvdWJsZSwgdmFsdWUsIG9yIGRlYWQuCisgICAgICAgIC8vIC0gUGhhbnRv
bUxvY2FsIGJlY29tZXMgUGhhbnRvbSwgYW5kIGl0cyBjaGlsZCBpcyB3aGF0ZXZlciBpcyBzcGVj
aWZpZWQKKyAgICAgICAgLy8gICBieSB2YXJpYWJsZXNBdEhlYWQuCisgICAgICAgIC8vIC0gU2V0
QXJndW1lbnQgdHVybnMgaW50byBHZXRBcmd1bWVudC4KKyAgICAgICAgLy8gLSBVcHNpbG9ucyBn
ZXQgdGhlaXIgY2hpbGRyZW4gZml4ZWQgdG8gcmVmZXIgdG8gdGhlIHRydWUgdmFsdWUgb2YgdGhh
dCBsb2NhbAorICAgICAgICAvLyAgIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBQcmlvciB0byB0
aGlzIGxvb3AsIFVwc2lsb25zIHdpbGwgcmVmZXIgdG8KKyAgICAgICAgLy8gICB2YXJpYWJsZUF0
VGFpbFtvcGVyYW5kXSwgd2hpY2ggbWF5IGJlIGFueSBvZiBGbHVzaCwgUGhhbnRvbUxvY2FsLCBH
ZXRMb2NhbCwKKyAgICAgICAgLy8gICBTZXRMb2NhbCwgU2V0QXJndW1lbnQsIG9yIFBoaS4gV2Ug
YWNjb21wbGlzaCB0aGlzIGJ5IHNldHRpbmcgdGhlCisgICAgICAgIC8vICAgcmVwbGFjZW1lbnQg
cG9pbnRlcnMgb2YgYWxsIG9mIHRob3NlIG5vZGVzIHRvIHJlZmVyIHRvIGVpdGhlcgorICAgICAg
ICAvLyAgIHZhcmlhYmxlc0F0SGVhZFtvcGVyYW5kXSwgb3IgdGhlIGNoaWxkIG9mIHRoZSBTZXRM
b2NhbC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJs
b2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+cmVwbGFjZW1lbnQgPQorICAgICAg
ICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQoYmxvY2stPnBoaXNb
cGhpSW5kZXhdLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAg
ICAgICAgIEFTU0VSVCghYmxvY2stPmF0KG5vZGVJbmRleCktPnJlcGxhY2VtZW50KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5k
ZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IG1fZmx1c2hlZExvY2FsT3BzLmNv
bnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhO
b2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludCk7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOyAv
LyBPbmx5IGZvciBVcHNpbG9ucy4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdl
dExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0IHNlZW1zIHRlbXB0aW5nIHRvIGp1
c3QgZG8gZm9yd2FyZFBoaShHZXRMb2NhbCksIGV4Y2VwdCB0aGF0IHdlCisgICAgICAgICAgICAg
ICAgICAgIC8vIGNvdWxkIGhhdmUgY3JlYXRlZCBhIG5ldyAoU1NBKSBQaGksIGFuZCB0aGUgR2V0
TG9jYWwgY291bGQgc3RpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVmZXJyaW5nIHRv
IGFuIG9sZCAoQ1BTKSBQaGkuIFVzZXMgdmFyaWFibGVzQXRIZWFkIHRvIHRlbGwgdXMgd2hhdAor
ICAgICAgICAgICAgICAgICAgICAvLyB0byByZWZlciB0by4KKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9t
KCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBjYXNlIEZsdXNoOiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBmb3IgVXBz
aWxvbnMuIEFuIFVwc2lsb24gd2lsbCBvbmx5IHJlZmVyIHRvIGEgRmx1c2ggaWYKKyAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlcmUgd2VyZSBubyBTZXRMb2NhbHMgb3IgR2V0TG9jYWxzIGluIHRo
ZSBibG9jay4KKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS5zZXROb2RlKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBmb3IgVXBzaWxvbnMuIEFuIFVwc2lsb24g
d2lsbCBvbmx5IHJlZmVyIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gUGhhbnRvbUxvY2Fs
IGlmIHRoZXJlIHdlcmUgbm8gU2V0TG9jYWxzIG9yIEdldExvY2FscyBpbiB0aGUgYmxvY2suCisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIFNldEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKEdldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
bWVyZ2VGbGFncyhyZXN1bHRGb3Iobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9y
bWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBGcmVlIGFsbCBwaGlzIGFuZCByZXNldCB2YXJpYWJsZXMgdmVjdG9ycy4KKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9j
a0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5w
aGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9j
YXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgICAgICBibG9jay0+cGhp
cy5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5jbGVhcigpOwor
ICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5jbGVhcigpOworICAgICAgICAgICAg
YmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0
SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnNzYSA9IGFkb3B0UHRyKG5ldyBCYXNp
Y0Jsb2NrOjpTU0FEYXRhKGJsb2NrKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1f
Z3JhcGgubV9hcmd1bWVudHMuY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9m
b3JtID0gU1NBOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
dm9pZCBmb3J3YXJkUGhpQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKKyAgICAgICAg
ICAgIEVkZ2UmIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIGlm
ICghZWRnZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fY2hhbmdl
ZCB8PSBmb3J3YXJkUGhpRWRnZShlZGdlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBO
b2RlKiBmb3J3YXJkUGhpKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUGhpOiB7
CisgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxk
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWRnZS5ub2RlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgYm9vbCBmb3J3YXJkUGhpRWRnZShFZGdlJiBlZGdlKQorICAgIHsKKyAg
ICAgICAgTm9kZSogbmV3Tm9kZSA9IGZvcndhcmRQaGkoZWRnZS5ub2RlKCkpOworICAgICAgICBp
ZiAobmV3Tm9kZSA9PSBlZGdlLm5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBkZWR1cGxpY2F0ZUNoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytp
KSB7CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAg
ICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChlZGdlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1v
dmVFZGdlKGktLSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IGkgKyAxOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGopID09IGVkZ2UpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShqLS0pOworICAgICAgICAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbE9wKE5vZGUq
IG5vZGUpCisgICAgeworICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9k
ZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fZmx1c2hlZExvY2FsT3BzLmFkZChu
b2RlKTsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAg
ICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAg
CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIEhhc2hTZXQ8Tm9kZSo+IG1f
Zmx1c2hlZExvY2FsT3BzOworICAgIFZlY3RvcjxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcFdvcmts
aXN0OworICAgIGJvb2wgbV9jaGFuZ2VkOworfTsKKworYm9vbCBwZXJmb3JtU1NBQ29udmVyc2lv
bihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRG
RyBTU0EgQ29udmVyc2lvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxTU0FDb252ZXJz
aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorI2RlZmluZSBERkdTU0FD
b252ZXJzaW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBH
cmFwaDsKKworLy8gQ29udmVydCBUaHJlYWRlZENQUyBmb3JtIGludG8gU1NBIGZvcm0uIFRoaXMg
cmVzdWx0cyBpbiBhIGZvcm0gdGhhdCBoYXM6CisvLworLy8gLSBSb3VnaGx5IG1pbmltYWwgUGhp
J3MuIFdlIHVzZSB0aGUgQXljb2NrICYgSG9yc3Bvb2wgZml4cG9pbnQgZm9yCisvLyAgIGNvbnZl
cnRpbmcgdGhlIENQUyBtYXhpbWFsIFBoaXMgaW50byBTU0EgbWluaW1hbCBQaGlzLCB3aXRoIHRo
ZSBjYXZlYXQKKy8vICAgdGhhdCBpcnJlZHVjaWJsZSBjb250cm9sIGZsb3cgbWF5IHJlc3VsdCBp
biBzb21lIG1pc3NlZCBvcHBvcnR1bml0aWVzCisvLyAgIGZvciBQaGkgcmVkdWN0aW9uLgorLy8K
Ky8vIC0gTm8gdXNlcyBvZiBHZXRMb2NhbC9TZXRMb2NhbCBleGNlcHQgZm9yIGNhcHR1cmVkIHZh
cmlhYmxlcyBhbmQgZmx1c2hlcy4KKy8vICAgQWZ0ZXIgdGhpcywgYW55IHJlbWFpbmluZyBTZXRM
b2NhbCBtZWFucyBGbHVzaC4gRmx1c2ggbm9kZXMgYXJlCisvLyAgIGVsaW1pbmF0ZWQuIFBoYW50
b21Mb2NhbHMgYmVjb21lIFBoYW50b21zLiBOb2RlcyBtYXkgbWF5IGhhdmUgY2hpbGRyZW4KKy8v
ICAgdGhhdCBhcmUgaW4gYW5vdGhlciBiYXNpYyBibG9jay4KKy8vCisvLyAtIE1vdkhpbnRzIGFy
ZSB1c2VkIGZvciBPU1IgaW5mb3JtYXRpb24sIGFuZCBhcmUgdGhlbXNlbHZlcyBtaW5pbWFsLgor
Ly8gICBBIE1vdkhpbnQgd2lsbCBvY2N1ciBhdCBzb21lIHBvaW50IGFmdGVyIHRoZSBhc3NpZ25p
bmcsIGFuZCBhdCBQaGkKKy8vICAgcG9pbnRzLgorLy8KKy8vIC0gVW5saWtlIGNvbnZlbnRpb25h
bCBTU0EgaW4gd2hpY2ggUGhpIGZ1bmN0aW9ucyByZWZlciB0byBwcmVkZWNlc3NvcnMKKy8vICAg
YW5kIHZhbHVlcywgb3VyIFNTQSB1c2VzIFVwc2lsb24gZnVuY3Rpb25zIHRvIGluZGljYXRlIHZh
bHVlcyBpbgorLy8gICBwcmVkZWNlc3NvcnMuIEEgbWVyZ2Ugd2lsbCBsb29rIGxpa2U6CisvLwor
Ly8gICBsYWJlbEE6CisvLyAgICAgICBhOiBUaGluZ3koLi4uKQorLy8gICAgICAgYjogVXBzaWxv
biheZSwgQGEpCisvLyAgICAgICBKdW1wKGxhYmVsQykKKy8vCisvLyAgIGxhYmVsQjoKKy8vICAg
ICAgIGM6IE90aGVyVGhpbmd5KC4uLikKKy8vICAgICAgIGQ6IFVwc2lsb24oXmUsIEBjKQorLy8g
ICAgICAgSnVtcChsYWJlbEMpCisvLworLy8gICBsYWJlbEM6CisvLyAgICAgICBlOiBQaGkoKQor
Ly8KKy8vICAgTm90ZSB0aGF0IHRoZSBQaGkgaGFzIG5vIGNoaWxkcmVuLCBidXQgdGhlIHByZWRl
Y2Vzc29ycyBoYXZlIFVwc2lsb25zCisvLyAgIHRoYXQgaGF2ZSBhIHdlYWsgcmVmZXJlbmNlIHRv
IHRoZSBQaGkgKF5lIGluc3RlYWQgb2YgQGU7IHdlIHN0b3JlIGl0CisvLyAgIGluIHRoZSBPcElu
Zm8gcmF0aGVyIHRoYW4gdGhlIEFkamFjZW5jeUxpc3QpLiBUaGluayBvZiB0aGUgVXBzaWxvbgor
Ly8gICBhcyAiYXNzaWduaW5nIiB0byB0aGUgInZhcmlhYmxlIiBhc3NvY2lhdGVkIHdpdGggdGhl
IFBoaSwgYW5kIHRoYXQKKy8vICAgdGhpcyBpcyB0aGUgb25lIHBsYWNlIGluIFNTQSBmb3JtIHdo
ZXJlIHlvdSBjYW4gaGF2ZSBtdWx0aXBsZQorLy8gICBhc3NpZ25tZW50cy4KKy8vCisvLyAgIFRo
aXMgaW1wbGllcyBzb21lIG90aGVyIGxvb3NlbmluZ3Mgb2YgU1NBLiBGb3IgZXhhbXBsZSwgYW4g
VXBzaWxvbgorLy8gICBtYXkgcHJlY2VkZSBhIFBoaSBpbiB0aGUgc2FtZSBiYXNpYyBibG9jazsg
dGhpcyBtYXkgYXJpc2UgYWZ0ZXIgQ0ZHCisvLyAgIHNpbXBsaWZpY2F0aW9uLiBBbHRob3VnaCBp
dCdzIHByb2ZpdGFibGUgZm9yIENGRyBzaW1wbGlmaWNhdGlvbiAob3IKKy8vICAgc29tZSBvdGhl
ciBwaGFzZSkgdG8gcmVtb3ZlIHRoZXNlLCBpdCdzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuIEFz
CisvLyAgIHdlbGwsIHRoaXMgZm9ybSBhbGxvd3MgdGhlIFVwc2lsb24gdG8gYmUgaW4gYW55IGJs
b2NrIHRoYXQgZG9taW5hdGVzCisvLyAgIHRoZSBwcmVkZWNlc3NvciBibG9jayBvZiB0aGUgUGhp
LCB3aGljaCBhbGxvd3MgZm9yIGJsb2NrIHNwbGl0dGluZyB0bworLy8gICBpZ25vcmUgdGhlIHBv
c3NpYmlsaXR5IG9mIGludHJvZHVjaW5nIGFuIGV4dHJhIGVkZ2UgYmV0d2VlbiB0aGUgUGhpCisv
LyAgIGFuZCB0aGUgcHJlZGVjZXNzb3IgKHRob3VnaCBub3JtYWwgU1NBIHdvdWxkIGFsbG93IHRo
aXMsIGFsc28sIHdpdGgKKy8vICAgdGhlIGNhdmVhdCB0aGF0IHRoZSBQaGkgcHJlZGVjZXNzb3Ig
YmxvY2sgbGlzdHMgd291bGQgaGF2ZSB0byBiZQorLy8gICB1cGRhdGVkKS4KKy8vCisvLyAgIFRo
ZSBlYXNpZXN0IHdheSB0byBjb252ZXJ0IGZyb20gdGhpcyBTU0EgZm9ybSBpbnRvIGEgZGlmZmVy
ZW50IFNTQQorLy8gICBmb3JtIGlzIHRvIHJlZG8gU1NBIGNvbnZlcnNpb24gZm9yIFBoaSBmdW5j
dGlvbnMuIFRoYXQgaXMsIHRyZWF0IGVhY2gKKy8vICAgUGhpIGluIG91ciBJUiBhcyBhIG5vbi1T
U0EgdmFyaWFibGUgaW4gdGhlIGZvcmVpZ24gSVIgKHNvLCBhcyBhbgorLy8gICBhbGxvY2EgaW4g
TExWTSBJUiwgZm9yIGV4YW1wbGUpOyB0aGUgVXBzaWxvbnMgdGhhdCByZWZlciB0byB0aGUgUGhp
CisvLyAgIGJlY29tZSBzdG9yZXMgYW5kIHRoZSBQaGlzIHRoZW1zZWx2ZXMgYmVjb21lIGxvYWRz
LgorLy8KKy8vICAgRnVuIGZhY3Q6IFVwc2lsb24gaXMgc28gbmFtZWQgYmVjYXVzZSBpdCBjb21l
cyBiZWZvcmUgUGhpIGluIHRoZQorLy8gICBhbHBoYWJldC4gSXQgY2FuIGJlIHdyaXR0ZW4gYXMg
IlkiLgorCitib29sIHBlcmZvcm1TU0FDb252ZXJzaW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHU1NBQ29udmVyc2lvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTI1ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Mzk1LDcgKzQzOTUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2Ug
UGhpOgogICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGJyZWFrOwogCkBAIC00ODI5LDYgKzQ4Mjgs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJy
ZWFrOwogCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CisgICAgY2FzZSBQaGk6CisgICAgY2FzZSBV
cHNpbG9uOgorICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTUy
NTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDI5Niw3ICs0Mjk2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgRmx1c2g6Ci0gICAgY2Fz
ZSBQaGk6CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBCcmVha3BvaW50OgpAQCAtNDY5MCw2
ICs0Njg5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CisgICAgY2FzZSBQ
aGk6CisgICAgY2FzZSBVcHNpbG9uOgorICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNTI1
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODEsMjQgKzgxLDI4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFZfRVFVQUwo
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIDApLCBzdGF0aWNfY2FzdDxOb2RlKj4o
MCksIHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSk7CiAgICAgICAgIAogICAgICAgICAv
LyBWYWxpZGF0ZSByZWYgY291bnRzIGFuZCB1c2VzLgotICAgICAgICBIYXNoTWFwPE5vZGUqLCB1
bnNpZ25lZD4gbXlSZWZDb3VudHM7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewog
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwotICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IFZBTElEQVRFKChibG9jayksIGJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpCi0gICAgICAgICAgICAg
ICAgbXlSZWZDb3VudHMuYWRkKGJsb2NrLT5ub2RlKGkpLCAwKTsKKyAgICAgICAgICAgICAgICBt
X215UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShpKSwgMCk7CiAgICAgICAgIH0KLSAgICAgICAg
SGFzaFNldDxOb2RlKj4gYWNjZXB0YWJsZU5vZGVzOwogICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2Nr
SW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJs
ZSkKKyAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kp
IHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPm5vZGUoaSk7Ci0gICAgICAg
ICAgICAgICAgYWNjZXB0YWJsZU5vZGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICBtX2Fj
Y2VwdGFibGVOb2Rlcy5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBVcHNpbG9uKSB7CisgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlKSwgbV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPnBoaSgpLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9teVJlZkNvdW50cy5maW5kKG5vZGUpLT52YWx1ZSsrOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1D
aGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBjaGlsZHJl
biBpbiBMb2FkU3RvcmUgZm9ybSBhcmUgaW52YWxpZC4KICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiBibG9jay0+aXNQaGlJbmRleChpKSkKQEAg
LTEwOCwyMiArMTEyLDI4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdl
KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBteVJlZkNvdW50cy5maW5kKGVkZ2Uubm9kZSgpKS0+dmFs
dWUrKzsKKyAgICAgICAgICAgICAgICAgICAgbV9teVJlZkNvdW50cy5maW5kKGVkZ2Uubm9kZSgp
KS0+dmFsdWUrKzsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElu
IFNTQSwgYWxsIGVkZ2VzIG11c3QgaGFzUmVzdWx0KCkuCisgICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgSSdtIGEgRmx1c2gsIFBo
YW50b20sIEdldExvY2FsLCBvciBQaGksIG15IGNoaWxkcmVuIHNob3VsZCBoYXNSZXN1bHQoKS4K
ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1Zh
cmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlLCBlZGdlKSwgZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5o
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+b3AoKSAhPSBTZXRM
b2NhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBQaGk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRn
ZSksIGVkZ2UtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1f
Z3JhcGgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fdW5pZmljYXRp
b25TdGF0ZSA9PSBMb2NhbGx5VW5pZmllZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRn
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwpA
QCAtMTQ4LDYgKzE1OCw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VGhyZWFkZWRDUFM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUs
IGVkZ2UpLCBlZGdlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTQToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBA
IC0xNTcsOSArMTcwLDQ0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkg
ewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxvY2stPmlzUmVhY2hhYmxlKQorICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bU5vZGVzKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bm9kZShpKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCkKKyAgICAgICAg
ICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG1fbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2Rl
LT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5vZGUtPnJlZkNvdW50KCksIDEpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3Jt
KSB7CisgICAgICAgIGNhc2UgTG9hZFN0b3JlOgorICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOgor
ICAgICAgICAgICAgdmFsaWRhdGVDUFMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgU1NBOgorICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBT
U0EgdmVyaWZpY2F0aW9uLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIEdyYXBoRHVtcE1vZGUgbV9n
cmFwaER1bXBNb2RlOworICAgIAorICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBtX215UmVm
Q291bnRzOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fYWNjZXB0YWJsZU5vZGVzOworICAgIAorICAg
IHZvaWQgdmFsaWRhdGVDUFMoKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4
KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJ
bmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBwaGlzSW5UaGlzQmxv
Y2s7CkBAIC0xNzAsMTUgKzIxOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbm9kZXNJ
blRoaXNCbG9jay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5pc1BoaUlu
ZGV4KGkpKQogICAgICAgICAgICAgICAgICAgICBwaGlzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwot
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcmVmQ291bnRTdGF0ZSA9PSBFeGFjdFJlZkNv
dW50KQotICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbXlSZWZDb3VudHMuZ2V0
KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5vZGUtPnJlZkNvdW50KCksIDEp
OwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNo
aWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9n
cmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlLCBlZGdlKSwgYWNjZXB0YWJsZU5vZGVzLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSk7
CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgbV9hY2NlcHRhYmxl
Tm9kZXMuY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTIyOCw3ICsyNzIsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKTsgKytrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2
QmxvY2sgPSBibG9jay0+cHJlZGVjZXNzb3JzW2tdOwogICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOwotICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Qmxv
Y2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2Rl
ID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0
byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFibGUuCkBAIC0yNzQsMTcgKzMxNywx
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkxvY2FscygpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkg
ewotICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KGFyZ3VtZW50VG9PcGVyYW5kKGkpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5h
cmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5oYXNWYXJp
YWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJhbmQoaSkpLCBibG9jayksICFibG9jay0+
dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJn
dW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQotICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihhcmd1bWVudFRvT3BlcmFu
ZChpKSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSkgfHwgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkp
OworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihhcmd1bWVudFRvT3BlcmFuZChpKSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpKS0+aGFz
VmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5hcmd1bWVudChpKSA9IG5vdFNldDsKICAgICAgICAg
ICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5hcmd1bWVudChpKSA9IG5vdFNldDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBWQUxJREFU
RSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5sb2NhbChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpLT5o
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdEhl
YWQubG9jYWwoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKS0+aGFzVmFyaWFi
bGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zv
cm0gPT0gVGhyZWFkZWRDUFMpCi0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaSktPmhhc1ZhcmlhYmxl
QWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4oaSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9j
YWwoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nl
c3NEYXRhKG1fZ3JhcGgpKTsKIAogICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLmxv
Y2FsKGkpID0gbm90U2V0OwogICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLmxvY2Fs
KGkpID0gbm90U2V0OwpAQCAtMzIxLDcgKzM2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgR2V0TG9jYWwn
cyB0aGF0IHdlIGtub3cgdG8gYmUgZGVhZCwgYnV0IHRoYXQgdGhlIGdyYXBoCiAgICAgICAgICAg
ICAgICAgICAgIC8vIGRvZXNuJ3QgeWV0IGtub3cgdG8gYmUgZGVhZC4KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFteVJlZkNvdW50cy5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIGlm
ICghbV9teVJlZkNvdW50cy5nZXQobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BT
KQogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9j
YWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBub3RTZXQpOwpAQCAtMzU1LDEw
ICszOTgsNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi1wcml2YXRlOgotICAg
IEdyYXBoJiBtX2dyYXBoOwotICAgIEdyYXBoRHVtcE1vZGUgbV9ncmFwaER1bXBNb2RlOwotICAg
IAogICAgIHZvaWQgY2hlY2tPcGVyYW5kKAogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jaywgT3Bl
cmFuZHM8c2l6ZV90PiYgZ2V0TG9jYWxQb3NpdGlvbnMsCiAgICAgICAgIE9wZXJhbmRzPHNpemVf
dD4mIHNldExvY2FsUG9zaXRpb25zLCBpbnQgb3BlcmFuZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTUy
NTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBERkdWYXJpYWJsZUFj
Y2Vzc0RhdGFfaAogCiAjaW5jbHVkZSAiREZHRG91YmxlRm9ybWF0U3RhdGUuaCIKKyNpbmNsdWRl
ICJERkdGbHVzaEZvcm1hdC5oIgogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUg
Ik9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKQEAgLTMxOCw2ICszMTks
MjkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY2hlY2tBbmRTZXQobV9mbGFncywgbV9mbGFn
cyB8IG5ld0ZsYWdzKTsKICAgICB9CiAgICAgCisgICAgRmx1c2hGb3JtYXQgZmx1c2hGb3JtYXQo
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZpbmQoKSA9PSB0aGlzKTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghc2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gRmx1
c2hlZEpTVmFsdWU7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkVXNlRG91YmxlRm9ybWF0
KCkpCisgICAgICAgICAgICByZXR1cm4gRmx1c2hlZERvdWJsZTsKKyAgICAgICAgCisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBhcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwor
ICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAg
cmV0dXJuIEZsdXNoZWRJbnQzMjsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0NlbGxTcGVjdWxh
dGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkQ2VsbDsKKyAgICAg
ICAgCisgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAg
ICAgICAgIHJldHVybiBGbHVzaGVkQm9vbGVhbjsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBG
bHVzaGVkSlNWYWx1ZTsKKyAgICB9CisgICAgCiBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgc2xp
Z2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0
aAogICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUg
c2FtZSBwcmVkaWN0aW9uLiBCdXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiAr
ODIsOCBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBKdW1w
OgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgRm9yd2FyZEZvcmNlT1NSRXhpdDoK
KyAgICBjYXNlIFBoaToKKyAgICBjYXNlIFVwc2lsb246CiAgICAgICAgIC8vIFRoZXNlIGFyZSBP
Sy4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lv
biAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIK
ICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgorI2luY2x1ZGUgIkZUTExvd2VyZWROb2Rl
VmFsdWUuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIK
ICNpbmNsdWRlICJGVExWYWx1ZVNvdXJjZS5oIgpAQCAtNjEsMTAgKzYyLDYgQEAgcHVibGljOgog
ICAgICAgICAsIG1fZnRsU3RhdGUoc3RhdGUpCiAgICAgICAgICwgbV9oZWFwcyhzdGF0ZS5jb250
ZXh0KQogICAgICAgICAsIG1fb3V0KHN0YXRlLmNvbnRleHQpCi0gICAgICAgICwgbV9sb2NhbHNC
b29sZWFuKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVh
ZCkKLSAgICAgICAgLCBtX2xvY2FsczMyKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2so
MCktPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAgLCBtX2xvY2FsczY0KE9wZXJhbmRzTGlrZSwg
c3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAgLCBtX2xvY2Fs
c0RvdWJsZShPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQpCiAgICAgICAgICwgbV92YWx1ZVNvdXJjZXMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAgICAgLCBtX2V4aXRUaHVua0dlbmVy
YXRvcihzdGF0ZSkKQEAgLTc0LDYgKzcxLDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgbG93
ZXIoKQogICAgIHsKKyAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNz
YXJ5KG1fZ3JhcGgpOworICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5tb2R1bGUgPQogICAg
ICAgICAgICAgTExWTU1vZHVsZUNyZWF0ZVdpdGhOYW1lSW5Db250ZXh0KCJqc0JvZHkiLCBtX2Z0
bFN0YXRlLmNvbnRleHQpOwogICAgICAgICAKQEAgLTg1LDE1ICs4NCw5IEBAIHB1YmxpYzoKICAg
ICAgICAgCiAgICAgICAgIG1fcHJvbG9ndWUgPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUu
Y29udGV4dCwgbV9mdGxTdGF0ZS5mdW5jdGlvbik7CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1f
cHJvbG9ndWUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gbV9sb2NhbHNCb29sZWFu
LnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAgICAgIG1fbG9jYWxzQm9vbGVhbltpbmRleF0g
PSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmJvb2xlYW4pOwotICAgICAgICAg
ICAgbV9sb2NhbHMzMltpbmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0
LmludDMyKTsKLSAgICAgICAgICAgIG1fbG9jYWxzNjRbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9v
dXQubV9idWlsZGVyLCBtX291dC5pbnQ2NCk7Ci0gICAgICAgICAgICBtX2xvY2Fsc0RvdWJsZVtp
bmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmRvdWJsZVR5cGUpOwot
ICAgICAgICB9CisgICAgICAgIGNyZWF0ZVBoaVZhcmlhYmxlcygpOwogICAgICAgICAKICAgICAg
ICAgbV9pbml0aWFsaXphdGlvbiA9IGFwcGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5jb250ZXh0
LCBtX2Z0bFN0YXRlLmZ1bmN0aW9uKTsKLSAgICAgICAgbV9hcmd1bWVudENoZWNrcyA9IGFwcGVu
ZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5jb250ZXh0LCBtX2Z0bFN0YXRlLmZ1bmN0aW9uKTsKIAog
ICAgICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0LnBhcmFtKDApOwogICAgICAgICBtX3RhZ1R5cGVO
dW1iZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1iZXIpOwpAQCAtMTA0LDE5ICs5Nywx
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIW1faGlnaEJsb2NrKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgbV9ibG9ja3MuYWRkKG1faGlnaEJsb2NrLCBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkJsb2NrICIsICptX2hpZ2hCbG9jaykpKTsKLSAgICAgICAgICAg
IGFkZEZsdXNoZWRMb2NhbE9wUm9vdHMoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
Y2xvc2VPdmVyRmx1c2hlZExvY2FsT3BzKCk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhtX2FyZ3VtZW50Q2hlY2tzLCBsb3dCbG9jayhtX2dyYXBoLmJsb2NrKDApKSk7Ci0KLSAg
ICAgICAgdHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50cygpOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuanVtcChsb3dCbG9jayhtX2dyYXBoLmJsb2NrKDApKSk7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJs
b2NrcygpOyArK2Jsb2NrSW5kZXgpCi0gICAgICAgICAgICBjb21waWxlQmxvY2soYmxvY2tJbmRl
eCk7CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKKyAgICAgICAgbV9n
cmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBjb21waWxlQmxvY2soZGVwdGhGaXJzdFtpXSk7CiAgICAgICAgIAogICAgICAgICAvLyBBbmQg
bm93IGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBibG9jay4KICAgICAgICAgbGlua09TUkV4
aXRzQW5kQ29tcGxldGVJbml0aWFsaXphdGlvbkJsb2NrcygpOwpAQCAtMTI5LDk5ICsxMTUsNTIg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIAotICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsT3BS
b290cygpCisgICAgdm9pZCBjcmVhdGVQaGlWYXJpYWJsZXMoKQogICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSBtX2hpZ2hCbG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTsp
IHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9jay0+YXQobm9kZUluZGV4KTsK
LSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IEZsdXNoKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgYWRkRmx1c2hlZExvY2FsT3Aobm9kZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbG9zZU92ZXJGbHVzaGVkTG9jYWxPcHMoKQotICAgIHsK
LSAgICAgICAgd2hpbGUgKCFtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBOb2RlKiBub2RlID0gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0Lmxhc3QoKTsK
LSAgICAgICAgICAgIG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhu
b2RlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVO
KG1fZ3JhcGgsIG5vZGUsIGFkZEZsdXNoZWRMb2NhbEVkZ2UpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgYWRkRmx1c2hlZExvY2FsT3AoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9mbHVzaGVkTG9jYWxPcHMuYWRkKG5vZGUpOwotICAgICAgICBtX2Zs
dXNoZWRMb2NhbE9wV29ya2xpc3QuYXBwZW5kKG5vZGUpOwotICAgIH0KLSAgICB2b2lkIGFkZEZs
dXNoZWRMb2NhbEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIGFkZEZsdXNo
ZWRMb2NhbE9wKGVkZ2Uubm9kZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCB0cmFuc2ZlckFu
ZENoZWNrQXJndW1lbnRzKCkKLSAgICB7Ci0gICAgICAgIC8vIFdoaWxlIGNoZWNraW5nIGFyZ3Vt
ZW50cywgZXZlcnl0aGluZyBpcyBpbiB0aGUgc3RhY2suCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fdmFsdWVTb3VyY2VzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwotICAgICAgICAKLSAgICAgICAg
bV9jb2RlT3JpZ2luID0gQ29kZU9yaWdpbigwKTsKLSAgICAgICAgbV9ub2RlID0gMDsKLSAgICAg
ICAgCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1f
YXJndW1lbnRzW2ldOwotICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgICAgICAvLyBJZiBpdCdzIGNhcHR1cmVkIHRoZW4gd2UnbGwgYmUgYWNjZXNzaW5nIGl0
IHRocm91Z2ggbG9hZHMgYW5kIHN0b3JlcwotICAgICAgICAgICAgLy8gYW55d2F5IC0gdGhlcmUn
cyBubyBwb2ludCBpbiB0cmFuc2ZlcmluZyBpdCBvdXQuCi0gICAgICAgICAgICBpZiAodmFyaWFi
bGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKHZhcmlhYmxlLT5s
b2NhbCgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxk
VW5ib3hJZlBvc3NpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghdmFy
aWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50
QXdhcmVQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBz
cGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlz
Tm90SW50MzIoanNWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hJ
bnQzMihqc1ZhbHVlKSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlv
bikpIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNW
YWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOwotICAgICAgICAg
ICAgICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlv
bikpIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNW
YWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwotICAgICAg
ICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hCb29sZWFuKGpzVmFsdWUpLCBtX2xvY2Fsc0Jv
b2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgIT0gUGhpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBMVHlwZSB0eXBlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNrKSB7CisgICAgICAgICAgICAgICAgY2FzZSBOb2Rl
UmVzdWx0TnVtYmVyOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gbV9vdXQuZG91YmxlVHlw
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBOb2Rl
UmVzdWx0SW50MzI6CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtX291dC5pbnQzMjsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0
Qm9vbGVhbjoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmJvb2xlYW47CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEpT
OgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gbV9vdXQuaW50NjQ7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3BoaXMuYWRkKG5vZGUs
IGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgdHlwZSkpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9p
ZCBjb21waWxlQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHZvaWQgY29tcGlsZUJs
b2NrKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgbV9oaWdoQmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5h
YmxlZCgpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nIGJsb2NrICIsICpibG9jaywg
IlxuIik7CisgICAgICAgIAorICAgICAgICBtX2hpZ2hCbG9jayA9IGJsb2NrOwogICAgICAgICBp
ZiAoIW1faGlnaEJsb2NrKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAg
TEJhc2ljQmxvY2sgbG93QmxvY2sgPSBtX2Jsb2Nrcy5nZXQobV9oaWdoQmxvY2spOwogICAgICAg
ICAKICAgICAgICAgbV9uZXh0SGlnaEJsb2NrID0gMDsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4
IG5leHRCbG9ja0luZGV4ID0gYmxvY2tJbmRleCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytuZXh0QmxvY2tJbmRleCkgeworICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggbmV4dEJsb2NrSW5kZXggPSBtX2hpZ2hCbG9jay0+aW5kZXggKyAxOyBuZXh0QmxvY2tJbmRl
eCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKICAgICAgICAgICAg
IG1fbmV4dEhpZ2hCbG9jayA9IG1fZ3JhcGguYmxvY2sobmV4dEJsb2NrSW5kZXgpOwogICAgICAg
ICAgICAgaWYgKG1fbmV4dEhpZ2hCbG9jaykKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0
MSwxMSArMTgwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGluaXRpYWxpemVPU1JF
eGl0U3RhdGVGb3JCbG9jaygpOwogICAgICAgICAKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5jbGVh
cigpOwotICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuY2xlYXIoKTsKLSAgICAgICAgbV9ib29sZWFu
VmFsdWVzLmNsZWFyKCk7Ci0gICAgICAgIG1fc3RvcmFnZVZhbHVlcy5jbGVhcigpOwotICAgICAg
ICBtX3RpbWVUb0xpdmUuY2xlYXIoKTsKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2
ZUF0SGVhZDsKICAgICAgICAgCiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKICAgICAgICAgbV9z
dGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxvY2spOwpAQCAtMjc0LDEyICsyMDksMjEgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9kaXJlY3Rpb24gPSAobV9ub2RlLT5mbGFncygpICYgTm9kZUV4
aXRzRm9yd2FyZCkgPyBGb3J3YXJkU3BlY3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOwog
ICAgICAgICAKICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBV
cHNpbG9uOgorICAgICAgICAgICAgY29tcGlsZVVwc2lsb24oKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgIGNvbXBpbGVQaGkoKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb21waWxl
SlNDb25zdGFudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2Vha0pTQ29u
c3RhbnQ6CiAgICAgICAgICAgICBjb21waWxlV2Vha0pTQ29uc3RhbnQoKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdldEFyZ3VtZW50OgorICAgICAgICAgICAgY29tcGlsZUdl
dEFyZ3VtZW50KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
ICAgICAgICAgICAgIGNvbXBpbGVHZXRMb2NhbCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00
NDUsOCArMzg5LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9k
ZSwgdXNlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmhhc1Jlc3VsdCgpKQotICAg
ICAgICAgICAgbV90aW1lVG9MaXZlLmFkZChtX25vZGUsIG1fbm9kZS0+YWRqdXN0ZWRSZWZDb3Vu
dCgpKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKQorICAgICAgICAg
ICAgbV9saXZlLmFkZChtX25vZGUpOwogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEV4ZWN1
dGVFZmZlY3RzKQogICAgICAgICAgICAgbV9zdGF0ZS5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgp
OwpAQCAtNDU0LDczICszOTgsMTE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVVcHNpbG9uKCkKKyAgICB7CisgICAgICAgIExW
YWx1ZSBkZXN0aW5hdGlvbiA9IG1fcGhpcy5nZXQobV9ub2RlLT5waGkoKSk7CisgICAgICAgIAor
ICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNh
c2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMSgpKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW50MzJVc2U6CisgICAgICAgICAgICBtX291dC5zZXQobG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJvb2xl
YW5Vc2U6CisgICAgICAgICAgICBtX291dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgp
KSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbFVz
ZToKKyAgICAgICAgICAgIG1fb3V0LnNldChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0
aW5hdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgor
ICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIGRlc3Rp
bmF0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVBoaSgpCisgICAgeworICAgICAg
ICBMVmFsdWUgc291cmNlID0gbV9waGlzLmdldChtX25vZGUpOworICAgICAgICAKKyAgICAgICAg
c3dpdGNoIChtX25vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgeworICAgICAgICBjYXNl
IE5vZGVSZXN1bHROdW1iZXI6CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZ2V0KHNvdXJj
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgor
ICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuZ2V0KHNvdXJjZSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAgICBzZXRCb29s
ZWFuKG1fb3V0LmdldChzb3VyY2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE5vZGVSZXN1bHRKUzoKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuZ2V0KHNvdXJjZSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgCiAgICAgdm9pZCBjb21waWxlSlNDb25zdGFudCgpCiAgICAgewogICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX25vZGUpOwogICAg
ICAgICBpZiAodmFsdWUuaXNEb3VibGUoKSkKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFk
ZChtX25vZGUsIG1fb3V0LmNvbnN0RG91YmxlKHZhbHVlLmFzRG91YmxlKCkpKTsKKyAgICAgICAg
ICAgIHNldERvdWJsZShtX291dC5jb25zdERvdWJsZSh2YWx1ZS5hc0RvdWJsZSgpKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5j
b25zdEludDY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpKTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZVdlYWtKU0NvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIG1fanNW
YWx1ZVZhbHVlcy5hZGQobV9ub2RlLCB3ZWFrUG9pbnRlcihtX25vZGUtPndlYWtDb25zdGFudCgp
KSk7CisgICAgICAgIHNldEpTVmFsdWUod2Vha1BvaW50ZXIobV9ub2RlLT53ZWFrQ29uc3RhbnQo
KSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudCgpCisgICAgewor
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgaW50IG9wZXJhbmQgPSB2YXJpYWJsZS0+b3BlcmFuZCgpOwor
CisgICAgICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9CisgICAgICAg
ICAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQoCisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2ssCisgICAgICAgICAgICAgICAgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoMCwgb3BlcmFuZCkpOworCisgICAgICAgIExWYWx1ZSBq
c1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOworCisgICAgICAgIHN3
aXRjaCAodXNlS2luZEZvcih2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpIHsKKyAgICAgICAgY2Fz
ZSBJbnQzMlVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZShqc1ZhbHVlKSwgcHJvZmlsZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAg
ICAgICBzZXRJbnQzMih1bmJveEludDMyKGpzVmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIHByb2ZpbGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGpzVmFsdWUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgcHJvZmlsZSwgaXNOb3RCb29sZWFuKGpzVmFs
dWUpKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4odW5ib3hCb29sZWFuKGpzVmFsdWUpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGpzVmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0TG9jYWwo
KQogICAgIHsKLSAgICAgICAgLy8gR2V0TG9jYWwgaXMgb25lIG9mIHRoZSBmZXcgbm9kZXMgdGhh
dCBtYXkgYmUgbGVmdCBiZWhpbmQsIHdpdGggIXNob3VsZEdlbmVyYXRlKCkuCi0gICAgICAgIGlm
ICghbV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAvLyBHZXRMb2NhbHMgYXJpc2Ugb25seSBmb3IgY2FwdHVyZWQgdmFyaWFibGVzLgogICAgICAg
ICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJp
YWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gU3BlY05vbmUpIHsKLSAgICAgICAg
ICAgIHRlcm1pbmF0ZShJbmFkZXF1YXRlQ292ZXJhZ2UpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyYXAgaW5zdGVhZC4KLSAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzODMKLSAgICAgICAg
ICAgIHRlcm1pbmF0ZShJbmFkZXF1YXRlQ292ZXJhZ2UpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkg
ewotICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5tX3ZhbHVlKSkKLSAg
ICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmxvYWQzMihwYXls
b2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5sb2FkNjQoYWRkcmVzc0Zv
cih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkg
ewotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewot
ICAgICAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmdldChtX2xv
Y2Fsc0RvdWJsZS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTG9j
YWxzIHRoYXQgYXJlIG1hcmtlZCBzaG91bGRVbmJveElmUG9zc2libGUoKSB0aGF0IGFyZW4ndCBh
bHNvIGZvcmNlZCB0bwotICAgICAgICAgICAgLy8gdXNlIGRvdWJsZSBmb3JtYXQsIGFuZCB0aGF0
IGhhdmUgdGhlIHJpZ2h0IHByZWRpY3Rpb24sIHdpbGwgYWx3YXlzIGJlCi0gICAgICAgICAgICAv
LyBzcGVjdWxhdGVkIG9uIFNldExvY2FsIGFuZCB3aWxsIGFsd2F5cyBiZSBzdG9yZWQgaW50byBh
biBhcHByb3ByaWF0ZWx5Ci0gICAgICAgICAgICAvLyB0eXBlZCByZWZlcmVuY2UgTFZhbHVlLgot
ICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAg
ICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZ2V0KG1fbG9jYWxzMzIu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpIHsKLSAgICAgICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKG1fbm9kZSwgbV9v
dXQuZ2V0KG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFdlIHNr
aXAgdGhlIENlbGwgY2FzZSBoZXJlIGJlY2F1c2UgdGhhdCBnZXRzIHRyZWF0ZWQgaWRlbnRpY2Fs
bHkgdG8KLSAgICAgICAgICAgIC8vIEpTVmFsdWVzLCBzaW5jZSBjZWxscyBhcmUgc3RvcmVkIHVu
dGFnZ2VkLgotICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhYmxlLT5pc0Nh
cHR1cmVkKCkpOwogICAgICAgICAKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUs
IG1fb3V0LmdldChtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7CisgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24odmFsdWUubV92YWx1ZSkpCisgICAgICAgICAgICBz
ZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRkcmVzc0Zv
cih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlU2V0
TG9jYWwoKQpAQCAtNTI5LDY0ICs1MTYsNDAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3Vt
ZW50QXdhcmVQcmVkaWN0aW9uKCk7Ci0gICAgICAgIGJvb2wgbmVlZHNGbHVzaGluZyA9IG1fZmx1
c2hlZExvY2FsT3BzLmNvbnRhaW5zKG1fbm9kZSk7CiAgICAgICAgIAogICAgICAgICBpZiAodmFy
aWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAodmFyaWFi
bGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZh
bHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIG1fb3V0
LnNldCh2YWx1ZSwgbV9sb2NhbHNEb3VibGUub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwot
ICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkxvY2Fscyk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjayk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaXNJbnQz
MlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2V0
KHZhbHVlLCBtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAg
ICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewotICAgICAgICAgICAgICAgICAgICBtX291dC5z
dG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFs
dWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
IFZhbHVlU291cmNlKEludDMySW5Mb2NhbHMpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3Jl
MzIodmFsdWUsIHBheWxvYWRGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNl
KEludDMySW5KU1N0YWNrKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKICAgICAg
ICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+
bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsKKyAgICAg
ICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0
aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0Jvb2xlYW4o
bV9ub2RlLT5jaGlsZDEoKSksIG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuc3RvcmU2NChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBhZGRy
ZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpT
U3RhY2spOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVl
SW5Mb2NhbHMpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4obV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICAg
ICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
LAorICAgICAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Cisg
ICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBpZiAodmFyaWFibGUtPmlz
Q2FwdHVyZWQoKSkgewotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zv
cih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnNldCh2
YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGlm
IChuZWVkc0ZsdXNoaW5nKSB7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRy
ZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOworICAgICAgICBtX291
dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAg
IG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2Uo
VmFsdWVJbkpTU3RhY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KCkK
QEAgLTYyMCwxOSArNTgzLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQg
PSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewot
ICAgICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuYWRkKGxlZnQs
IHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuYWRkKGxlZnQsIHJpZ2h0
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5hZGRXaXRoT3ZlcmZsb3czMihsZWZ0
LCByaWdodCk7CiAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwg
bV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOwotICAgICAgICAgICAgbV9pbnQzMlZhbHVl
cy5hZGQobV9ub2RlLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CisgICAgICAgICAg
ICBzZXRJbnQzMihtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7
Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2Rl
LAorICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUFk
ZChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigp
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTY1MSwxOSArNjEzLDE4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMigpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUlu
dGVnZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAg
ICAgICAgc2V0SW50MzIobV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5zdWJXaXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7CiAgICAgICAgICAg
ICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJl
c3VsdCwgMSkpOwotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5l
eHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5leHRy
YWN0VmFsdWUocmVzdWx0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJs
ZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0RG91
YmxlKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZVN1Yihsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTcwMywxMyArNjY0LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0g
ICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAor
ICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU11bChs
b3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTgwMCwxMyArNzYwLDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvbmUsIGxh
c3ROZXh0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9u
b2RlLCBtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsKKyAgICAgICAgICAgIHNldElu
dDMyKG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cykpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAg
ICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAg
ICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVEaXYobG93
RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04OTEsMTMgKzg1MCwxMiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhkb25lLCBsYXN0
TmV4dCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9k
ZSwgbV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7CisgICAgICAgICAgICBzZXRJbnQz
MihtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAgICAg
ICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAg
ICAgICAgICBzZXREb3VibGUoCiAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlUmVtKGxvd0Rv
dWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtOTE1LDggKzg3Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAg
ICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEludDMyKAogICAgICAgICAgICAgICAgIG1fb3V0
LnNlbGVjdCgKICAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5vcCgpID09IEFyaXRoTWluCiAg
ICAgICAgICAgICAgICAgICAgICAgICA/IG1fb3V0Lmxlc3NUaGFuKGxlZnQsIHJpZ2h0KQpAQCAt
OTUwLDcgKzkwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwg
bV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIHJlc3VsdHMpKTsKKyAgICAgICAgICAgIHNldERv
dWJsZShtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgcmVzdWx0cykpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtOTcxLDEyICs5MjgsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1Zh
bHVlKCksIDAsIG1fb3V0LmVxdWFsKHJlc3VsdCwgbV9vdXQuY29uc3RJbnQzMigxIDw8IDMxKSkp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHJl
c3VsdCk7CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAg
ICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZG91YmxlQWJzKGxvd0Rv
dWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmRv
dWJsZUFicyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEwMDMsMTIgKzk2MCwxMiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jl
c3VsdCwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldEludDMyKHJlc3Vs
dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQobV9ub2Rl
LCBtX291dC5kb3VibGVOZWcobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAg
ICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlTmVnKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgp
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTAy
MCw0NyArOTc3LDM4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0QW5kKCkK
ICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLCBt
X291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlQml0T3IoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5h
ZGQoCi0gICAgICAgICAgICBtX25vZGUsIG1fb3V0LmJpdE9yKGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBzZXRJbnQzMiht
X291dC5iaXRPcihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5j
aGlsZDIoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0WG9yKCkKICAgICB7
Ci0gICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLCBtX291dC5i
aXRYb3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQy
KCkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmJpdFhvcihsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlQml0UlNoaWZ0KCkKICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMuYWRk
KAotICAgICAgICAgICAgbV9ub2RlLAotICAgICAgICAgICAgbV9vdXQuYVNocigKLSAgICAgICAg
ICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgICAgICBtX291
dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEp
KSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5hU2hyKAorICAgICAgICAgICAgbG93SW50MzIo
bV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9u
b2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVCaXRMU2hpZnQoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5h
ZGQoCi0gICAgICAgICAgICBtX25vZGUsCi0gICAgICAgICAgICBtX291dC5zaGwoCi0gICAgICAg
ICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAgbV9v
dXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMx
KSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQuc2hsKAorICAgICAgICAgICAgbG93SW50MzIo
bV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9u
b2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVCaXRVUlNoaWZ0KCkKICAgICB7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMu
YWRkKAotICAgICAgICAgICAgbV9ub2RlLAotICAgICAgICAgICAgbV9vdXQubFNocigKLSAgICAg
ICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgICAgICBt
X291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIo
MzEpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5sU2hyKAorICAgICAgICAgICAgbG93SW50
MzIobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIo
bV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJlcigpCkBAIC0xMDY4LDE0ICsxMDE2LDE0IEBA
IHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQx
KCkpOwogCiAgICAgICAgIGlmICghbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobV9ub2RlLT5hcml0
aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwg
bV9vdXQudW5zaWduZWRUb0RvdWJsZSh2YWx1ZSkpOworICAgICAgICAgICAgc2V0RG91YmxlKG1f
b3V0LnVuc2lnbmVkVG9Eb3VibGUodmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRlRm9yd2FyZCgKICAgICAgICAgICAgIE92
ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFuKHZhbHVlLCBtX291dC5pbnQzMlpl
cm8pLAogICAgICAgICAgICAgRm9ybWF0dGVkVmFsdWUoVmFsdWVGb3JtYXRVSW50MzIsIHZhbHVl
KSk7Ci0gICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgdmFsdWUpOworICAgICAgICBz
ZXRJbnQzMih2YWx1ZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUludDMyVG9Eb3Vi
bGUoKQpAQCAtMTA4Nyw3ICsxMDM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gY29udGVtcG9y
YW5lb3VzIGxvdy1sZXZlbCByZXByZXNlbnRhdGlvbnMuIFNvLCB0aGlzIGdpdmVzIGNoaWxkMSBh
IGRvdWJsZQogICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBhbmQgdGhlbiBmb3J3YXJkcyB0aGF0
IHJlcHJlc2VudGF0aW9uIHRvIG1fbm9kZS4KICAgICAgICAgCi0gICAgICAgIG1fZG91YmxlVmFs
dWVzLmFkZChtX25vZGUsIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIHNl
dERvdWJsZShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpOwogICAgIH0KICAgICAKICAgICB2
b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpCkBAIC0xMjE1LDggKzExNjMsNyBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEJ1dHRlcmZseSgpCiAgICAgewotICAgICAgICBt
X3N0b3JhZ2VWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLCBtX291dC5sb2FkUHRyKGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7Cisg
ICAgICAgIHNldFN0b3JhZ2UobV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVHZXRBcnJheUxlbmd0aCgpCkBAIC0xMjI1LDggKzExNzIsNyBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAg
ICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBtX2ludDMyVmFsdWVz
LmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsIG1fb3V0LmxvYWQzMihsb3dTdG9yYWdlKG1f
bm9kZS0+Y2hpbGQyKCkpLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpKTsKKyAgICAg
ICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQyKCkp
LCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEyNTYsNyArMTIwMiw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIG1fb3V0Lmlu
dFB0ciksCiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxk
MigpKS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKExvYWRGcm9tSG9sZSwg
bm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm82NChyZXN1bHQpKTsKLSAgICAgICAgICAgICAgICBt
X2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBzZXRK
U1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC0xMjg4LDcgKzEyMzQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIDAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHJlc3VsdCwgcmVzdWx0KSk7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZCht
X25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEzODgs
OCArMTMzNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0K
ICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVttX25vZGUtPnN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAgIAotICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRk
KAotICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICBzZXRKU1ZhbHVlKAogICAgICAgICAgICAg
bV9vdXQubG9hZDY0KAogICAgICAgICAgICAgICAgIG1fb3V0LmFkZHJlc3MoCiAgICAgICAgICAg
ICAgICAgICAgIG1faGVhcHMucHJvcGVydGllc1tkYXRhLmlkZW50aWZpZXJOdW1iZXJdLApAQCAt
MTQxMiw3ICsxMzU3LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRHbG9i
YWxWYXIoKQogICAgIHsKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0
LmxvYWQ2NChtX291dC5hYnNvbHV0ZShtX25vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSkpOworICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShtX25vZGUtPnJlZ2lz
dGVyUG9pbnRlcigpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVQdXRHbG9iYWxW
YXIoKQpAQCAtMTQzNywzMCArMTM4MiwyNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkpLmlz
TnVsbCgpKTsKICAgICAgICAgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJZklzU3Rp
bGxWYWxpZCgpOwotICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9u
b2RlLCBlcXVhbE51bGxPclVuZGVmaW5lZCgKKyAgICAgICAgc2V0Qm9vbGVhbigKKyAgICAgICAg
ICAgIGVxdWFsTnVsbE9yVW5kZWZpbmVkKAogICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQx
KCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsTnVsbE9yVW5kZWZpbmVkKSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVTdHJpY3RFcSgpCiAgICAgewogICAgICAgICBpZiAo
bV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xl
YW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJv
b2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwobG93SW50MzIobV9ub2RlLT5jaGls
ZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2lu
ZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAg
ICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAg
ICAgbV9vdXQuZG91YmxlRXF1YWwobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3Vi
bGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpIHsKICAgICAgICAgICAgIG1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SWZJc1N0aWxsVmFsaWQoKTsKLSAgICAgICAgICAg
IG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAg
ICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5lcXVhbCgKICAgICAgICAgICAg
ICAgICAgICAgbG93Tm9uTnVsbE9iamVjdChtX25vZGUtPmNoaWxkMSgpKSwKICAgICAgICAgICAg
ICAgICAgICAgbG93Tm9uTnVsbE9iamVjdChtX25vZGUtPmNoaWxkMigpKSkpOwpAQCAtMTQ3Nywx
OSArMTQxOSwxNiBAQCBwcml2YXRlOgogICAgICAgICBpZiAoY29uc3RhbnQuaXNVbmRlZmluZWRP
ck51bGwoKQogICAgICAgICAgICAgJiYgIW1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50
SWZJc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAgaWYgKGNvbnN0YW50LmlzTnVsbCgpKSB7
Ci0gICAgICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICAg
ICAgbV9ub2RlLCBlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxs
c0FyZUZhbHNlLCBFcXVhbE51bGwpKTsKKyAgICAgICAgICAgICAgICBzZXRCb29sZWFuKGVxdWFs
TnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFs
TnVsbCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQuaXNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAg
ICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwgZXF1YWxOdWxs
T3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxVbmRl
ZmluZWQpKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oZXF1YWxOdWxsT3JVbmRlZmluZWQobV9u
b2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxVbmRlZmluZWQpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9ib29sZWFuVmFs
dWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgc2V0Qm9vbGVhbigKICAgICAg
ICAgICAgIG1fb3V0LmVxdWFsKAogICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSksCiAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNv
ZGUoY29uc3RhbnQpKSkpOwpAQCAtMTQ5OCwxNSArMTQzNywxMyBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZUNvbXBhcmVMZXNzKCkKICAgICB7CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQo
Ci0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAg
ICAgICAgICAgICBtX291dC5sZXNzVGhhbihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVz
ZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAg
bV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5k
b3VibGVMZXNzVGhhbihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNTE3
LDE1ICsxNDU0LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlQ29tcGFyZUxlc3NFcSgp
CiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7
Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9k
ZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQubGVzc1Ro
YW5PckVxdWFsKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewotICAgICAgICAg
ICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAg
ICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUxlc3NUaGFuT3JF
cXVhbCgKICAgICAgICAgICAgICAgICAgICAgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBs
b3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1
MzcsMTUgKzE0NzIsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlR3JlYXRl
cigpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2Up
KSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1f
bm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZ3Jl
YXRlclRoYW4obG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAg
ICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAg
ICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlR3JlYXRlclRoYW4o
CiAgICAgICAgICAgICAgICAgICAgIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91
YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTU3LDE2
ICsxNDkwLDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlQ29tcGFyZUdyZWF0ZXJFcSgp
CiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7
Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9k
ZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZ3JlYXRl
clRoYW5PckVxdWFsKAogICAgICAgICAgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5k
KE51bWJlclVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAg
ICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAg
ICBtX291dC5kb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwoCiAgICAgICAgICAgICAgICAgICAgIGxv
d0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTc3LDcgKzE1MDgsNyBAQCBwcml2YXRlOgogICAg
IAogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoKQogICAgIHsKLSAgICAgICAgbV9ib29sZWFu
VmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmJpdE5vdChib29saWZ5KG1fbm9kZS0+Y2hpbGQxKCkp
KSk7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQuYml0Tm90KGJvb2xpZnkobV9ub2RlLT5jaGls
ZDEoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlSnVtcCgpCkBAIC0xOTMxLDYg
KzE4NjIsMTQgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVCYWNr
d2FyZCgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSwKKyAgICAgICAgTFZhbHVlIGZhaWxD
b25kaXRpb24pCisgICAgeworICAgICAgICBhcHBlbmRPU1JFeGl0KAorICAgICAgICAgICAga2lu
ZCwgbG93VmFsdWUsIHByb2ZpbGUsIGZhaWxDb25kaXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24s
IEZvcm1hdHRlZFZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUJhY2t3
YXJkKAogICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9k
ZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7CiAgICAgICAgIGFwcGVu
ZE9TUkV4aXQoCkBAIC0xOTk5LDE0ICsxOTM4LDE3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8
IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bklu
dDMyVXNlKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1faW50MzJW
YWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoTFZhbHVlIGJveGVkUmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdl
dChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50
MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAgICB2YWx1
ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxp
ZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSBib3hlZFJlc3VsdCA9IHZhbHVlLnZhbHVl
KCk7CiAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKICAgICAgICAgICAgICAgICBqc1ZhbHVl
VmFsdWUoYm94ZWRSZXN1bHQpLCBlZGdlLCBTcGVjSW50MzIsIGlzTm90SW50MzIoYm94ZWRSZXN1
bHQpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEludDMyKGJveGVkUmVzdWx0
KTsKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwor
ICAgICAgICAgICAgc2V0SW50MzIoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKQEAgLTIwMTksMTAgKzE5NjEsMTIgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24gfHwgaXNDZWxsKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgICAgIAotICAg
ICAgICBpZiAoTFZhbHVlIHVuY2hlY2tlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRn
ZS5ub2RlKCkpKSB7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVW
YWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Cisg
ICAgICAgICAgICBMVmFsdWUgdW5jaGVja2VkVmFsdWUgPSB2YWx1ZS52YWx1ZSgpOwogICAgICAg
ICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHVuY2hl
Y2tlZFJlc3VsdCksIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2VkUmVzdWx0KSk7
Ci0gICAgICAgICAgICByZXR1cm4gdW5jaGVja2VkUmVzdWx0OworICAgICAgICAgICAgICAgIGpz
VmFsdWVWYWx1ZSh1bmNoZWNrZWRWYWx1ZSksIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwodW5j
aGVja2VkVmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB1bmNoZWNrZWRWYWx1ZTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShtX3N0YXRlLmZvck5vZGUo
ZWRnZSkubV90eXBlICYgU3BlY0NlbGwpKTsKQEAgLTIwNjEsMTQgKzIwMDUsMTcgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gQm9vbGVhblVzZSk7CiAgICAgICAg
IAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fYm9vbGVhblZhbHVlcy5nZXQoZWRnZS5u
b2RlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgCi0gICAgICAgIGlm
IChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkp
KSB7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0
KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9IG1fanNWYWx1
ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsK
KyAgICAgICAgICAgIExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gdmFsdWUudmFsdWUoKTsKICAgICAg
ICAgICAgIEZUTF9UWVBFX0NIRUNLKAogICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh1bmJv
eGVkUmVzdWx0KSwgZWRnZSwgU3BlY0Jvb2xlYW4sIGlzTm90Qm9vbGVhbih1bmJveGVkUmVzdWx0
KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hCb29sZWFuKHVuYm94ZWRSZXN1
bHQpOwotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0
KTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjA4MSwxNiArMjAy
OCwyMSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2Rl
ID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBpc0RvdWJsZShlZGdlLnVzZUtpbmQoKSkp
OwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2RvdWJsZVZhbHVlcy5n
ZXQoZWRnZS5ub2RlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChMVmFsdWUgaW50UmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2Rl
KCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuaW50VG9Eb3VibGUoaW50
UmVzdWx0KTsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVz
dWx0KTsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fZG91YmxlVmFsdWVzLmdl
dChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2ludDMy
VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgewor
ICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmludFRvRG91YmxlKHZhbHVlLnZhbHVl
KCkpOworICAgICAgICAgICAgc2V0RG91YmxlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKExW
YWx1ZSBib3hlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Cisg
ICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAg
IGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIGJveGVkUmVzdWx0ID0g
dmFsdWUudmFsdWUoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRG91YmxlIHVuYm94aW5nIGludCBjYXNlIikp
OwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgZG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiRG91YmxlIHVuYm94aW5nIGRvdWJsZSBjYXNlIikpOwogICAgICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGUgdW5ib3hp
bmcgY29udGludWF0aW9uIikpOwpAQCAtMjExNSw3ICsyMDY3LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5kb3Vi
bGVUeXBlLCBpbnRUb0RvdWJsZSwgdW5ib3hlZERvdWJsZSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHNldERvdWJsZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMTI4LDI0ICsyMDgwLDI4IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSkp
IHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hJbnQzMih1bmJveGVkUmVzdWx0KTsK
LSAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7Cisg
ICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9IG1faW50MzJWYWx1ZXMu
Z2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gYm94SW50MzIodmFsdWUudmFsdWUoKSk7CisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVz
dWx0ID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIExW
YWx1ZSByZXN1bHQgPSBib3hCb29sZWFuKHVuYm94ZWRSZXN1bHQpOwotICAgICAgICAgICAgbV9q
c1ZhbHVlVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBt
X2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFs
dWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94Qm9vbGVhbih2YWx1ZS52YWx1
ZSgpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAo
TFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7
Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94RG91YmxlKHVuYm94ZWRSZXN1bHQpOwot
ICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAg
ICAgICAgdmFsdWUgPSBtX2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBp
ZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hEb3Vi
bGUodmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9kZSgpLCBy
ZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAK
QEAgLTIxNTUsMTEgKzIxMTEsMTIgQEAgcHJpdmF0ZToKICAgICAKICAgICBMVmFsdWUgbG93U3Rv
cmFnZShFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fc3Rv
cmFnZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fc3RvcmFnZVZhbHVlcy5nZXQoZWRn
ZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1
cm4gdmFsdWUudmFsdWUoKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dD
ZWxsKGVkZ2UpOwotICAgICAgICBtX3N0b3JhZ2VWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1
bHQpOworICAgICAgICBzZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKQEAgLTIyNDIsNiArMjE5OSw5IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyKGVk
Z2UpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oZWRnZSk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIH0KQEAgLTIzNDIsNiArMjMwMiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZG91
YmxlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjUmVhbE51bWJlciwKICAgICAgICAgICAgIG1fb3V0
LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQodmFsdWUsIHZhbHVlKSk7CiAgICAgfQorICAgIAor
ICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBsb3dC
b29sZWFuKGVkZ2UpOworICAgIH0KIAogICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnRJc1N0aWxsVmFsaWQoKQogICAgIHsKQEAgLTI0MzAsMjIgKzIzOTUsMTUgQEAgcHJp
dmF0ZToKICAgICAKICAgICBib29sIGlzTGl2ZShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
SGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV90aW1lVG9MaXZlLmZp
bmQobm9kZSk7Ci0gICAgICAgIEFTU0VSVChpdGVyICE9IG1fdGltZVRvTGl2ZS5lbmQoKSk7Ci0g
ICAgICAgIHJldHVybiAhIWl0ZXItPnZhbHVlOworICAgICAgICByZXR1cm4gbV9saXZlLmNvbnRh
aW5zKG5vZGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIHVzZShFZGdlIGVkZ2UpCiAgICAgewot
ICAgICAgICBpZiAoIWVkZ2UtPmhhc1Jlc3VsdCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWRn
ZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICBBU1NFUlQoZWRnZS0+aGFzUmVz
dWx0KCkpOworICAgICAgICBpZiAoIWVkZ2UuZG9lc0tpbGwoKSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+
OjppdGVyYXRvciBpdGVyID0gbV90aW1lVG9MaXZlLmZpbmQoZWRnZS5ub2RlKCkpOwotICAgICAg
ICBBU1NFUlQoaXRlciAhPSBtX3RpbWVUb0xpdmUuZW5kKCkpOwotICAgICAgICBBU1NFUlQoaXRl
ci0+dmFsdWUpOwotICAgICAgICBpdGVyLT52YWx1ZS0tOworICAgICAgICBtX2xpdmUucmVtb3Zl
KGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAgCiAgICAgLy8gV3JhcHBlciB1c2VkIG9ubHkgZm9y
IERGR19OT0RFX0RPX1RPX0NISUxEUkVOCkBAIC0yNDYyLDYzICsyNDIwLDM0IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBpbml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2soKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV92YWx1ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9oaWdoQmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKLSAg
ICAgICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGlj
dGlvbigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQXJndW1l
bnRzQWxpYXMoKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVT
b3VyY2UoQXJndW1lbnRzU291cmNlKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJj
ZShTb3VyY2VJc0RlYWQpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFp
bnMobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHZhbHVlIHdpbGwgaGF2ZSBiZWVu
IGZsdXNoZWQgdG8gdGhlIEpTU3RhY2sgaW4gc29tZSBmb3JtIG9yCi0gICAgICAgICAgICAgICAg
Ly8gYW5vdGhlci4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFi
bGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2
YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291
cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBGbHVz
aEZvcm1hdCBmb3JtYXQgPSBtX2hpZ2hCbG9jay0+c3NhLT5mbHVzaEZvcm1hdEF0SGVhZFtpXTsK
KyAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERlYWRGbHVz
aDogeworICAgICAgICAgICAgICAgIC8vIE11c3QgY29uc2lkZXIgYXZhaWxhYmxlIG5vZGVzIGlu
c3RlYWQuCisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0Rl
YWQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNv
dXJjZShWYWx1ZUluSlNTdGFjayk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShub2RlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewotICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkxvY2Fscyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rp
b24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2UoSW50MzJJbkxvY2Fscyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOworICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
IChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEJvb2xlYW5JbkxvY2Fscyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAg
ICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6
CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUlu
SlNTdGFjayk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJ
bkxvY2Fscyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yNTI2LDYgKzI0NTUsMTUgQEAg
cHJpdmF0ZToKICAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUs
IE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24sCiAgICAgICAgIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCiAgICAgewor
ICAgICAgICBhcHBlbmRPU1JFeGl0KAorICAgICAgICAgICAga2luZCwgbG93VmFsdWUsIG1fZ3Jh
cGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAorICAgICAgICAg
ICAgZmFpbENvbmRpdGlvbiwgZGlyZWN0aW9uLCByZWNvdmVyeSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFs
dWUgbG93VmFsdWUsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgcHJvZmlsZSwKKyAgICAg
ICAgTFZhbHVlIGZhaWxDb25kaXRpb24sIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
Rm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCisgICAgewogICAgICAgICBpZiAoT3B0aW9uczo6ZnRs
VHJhcHNPbk9TUkV4aXQoKSkgewogICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIk9TUiBleGl0IGZhaWxDYXNlIikpOwogICAgICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPU1IgZXhp
dCBjb250aW51YXRpb24iKSk7CkBAIC0yNTQ2LDExICsyNDg0LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgQVNTRVJUKG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkgPT0gbV9mdGxTdGF0
ZS5vc3JFeGl0LnNpemUoKSk7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbV9mdGxTdGF0ZS5v
c3JFeGl0LnNpemUoKTsKICAgICAgICAgCi0gICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3Ny
RXhpdC5hcHBlbmQoCi0gICAgICAgICAgICBPU1JFeGl0KAotICAgICAgICAgICAgICAgIGtpbmQs
IGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVG
b3IoaGlnaFZhbHVlKSwKLSAgICAgICAgICAgICAgICBtX2NvZGVPcmlnaW4sIG1fbGFzdFNldE9w
ZXJhbmQsIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICAg
ICAgbV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAgICBtX2Z0bFN0YXRl
LmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCisgICAgICAgICAgICBraW5kLCBsb3dW
YWx1ZS5mb3JtYXQoKSwgcHJvZmlsZSwgbV9jb2RlT3JpZ2luLCBtX2xhc3RTZXRPcGVyYW5kLAor
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV92YWx1ZVNv
dXJjZXMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLm9zckV4aXQuYXBw
ZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CiAgICAgICAgIAogICAgICAgICBPU1JFeGl0
JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKQEAgLTI2MDIsMjcg
KzI1MzgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6CiAg
ICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNE
b3VibGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmFsdWVJ
bkxvY2FsczoKLSAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCi0gICAgICAgICAgICAg
ICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRKU1ZhbHVlLCBtX291dC5nZXQo
bV9sb2NhbHM2NFtpXSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBJbnQzMkluTG9jYWxzOgotICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKLSAgICAg
ICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEludDMyLCBtX291
dC5nZXQobV9sb2NhbHMzMltpXSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBCb29sZWFuSW5Mb2NhbHM6Ci0gICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50
KAotICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0Qm9v
bGVhbiwgbV9vdXQuZ2V0KG1fbG9jYWxzQm9vbGVhbltpXSkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBEb3VibGVJbkxvY2FsczoKLSAgICAgICAgICAgICAgICBh
ZGRFeGl0QXJndW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwg
VmFsdWVGb3JtYXREb3VibGUsIG1fb3V0LmdldChtX2xvY2Fsc0RvdWJsZVtpXSkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcmd1bWVudHNTb3VyY2U6Ci0gICAg
ICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBQaGFudG9tQXJndW1lbnRzLgotICAgICAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM5
ODYKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTb3VyY2VJc0RlYWQ6CiAgICAgICAg
ICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjY4MiwxMiArMjU5NywxMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIE5vZGUqIHVpbnQzMlRvTnVtYmVyID0gMDsKICAgICAgICAgICAgICAgICBOb2RlKiBk
b3VibGVBc0ludDMyID0gMDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBIYXNo
TWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuYmVnaW4o
KTsKLSAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGVu
ZCA9IG1fdGltZVRvTGl2ZS5lbmQoKTsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6
aXRlcmF0b3IgaXRlciA9IG1fbGl2ZS5iZWdpbigpOworICAgICAgICAgICAgICAgIEhhc2hTZXQ8
Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBtX2xpdmUuZW5kKCk7CiAgICAgICAgICAgICAgICAgZm9y
ICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVy
LT52YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBpdGVyLT5rZXk7CisgICAgICAgICAgICAgICAgICAg
IE5vZGUqIGNhbmRpZGF0ZSA9ICppdGVyOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRp
ZGF0ZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+Y2hpbGQxKCkgIT0gbm9kZSkKQEAgLTI3MzIs
MjQgKzI2NDUsMjggQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQVNT
RVJUKGlzTGl2ZShub2RlKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9
IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUpKSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQo
ZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRJbnQzMiwgcmVzdWx0KTsKKworICAg
ICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQobm9kZSk7Cisg
ICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50
KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SW50MzIsIHZhbHVlLnZhbHVlKCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAo
TFZhbHVlIHJlc3VsdCA9IG1fYm9vbGVhblZhbHVlcy5nZXQobm9kZSkpIHsKLSAgICAgICAgICAg
IGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEJvb2xl
YW4sIHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChub2RlKTsK
KyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBhZGRFeGl0QXJndW1l
bnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRCb29sZWFuLCB2YWx1ZS52YWx1
ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
aWYgKExWYWx1ZSByZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KG5vZGUpKSB7Ci0gICAgICAg
ICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRK
U1ZhbHVlLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobm9k
ZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFy
Z3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SlNWYWx1ZSwgdmFsdWUu
dmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9kb3VibGVWYWx1ZXMuZ2V0KG5vZGUpKSB7Ci0gICAg
ICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3Jt
YXREb3VibGUsIHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9kb3VibGVWYWx1ZXMuZ2V0KG5v
ZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGFkZEV4aXRB
cmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdERvdWJsZSwgdmFsdWUu
dmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjgyMCw3ICsy
NzM3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5pbml0
aWFsaXplRXhpdFRodW5rc0xpbmtCdWZmZXIobGlua0J1ZmZlci5yZWxlYXNlKCkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgbV9vdXQuanVtcChtX2FyZ3VtZW50Q2hlY2tzKTsKKyAgICAgICAgbV9v
dXQuanVtcChsb3dCbG9jayhtX2dyYXBoLmJsb2NrKDApKSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgb2JzZXJ2ZU1vdkhpbnQoTm9kZSogbm9kZSkKQEAgLTI4MzQsNiArMjc1MSw1NyBAQCBwcml2
YXRlOgogICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3Vy
Y2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRJbnQz
MihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2ludDMyVmFsdWVz
LnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0K
KyAgICB2b2lkIHNldEpTVmFsdWUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbV9qc1ZhbHVlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBt
X2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldEJvb2xlYW4oTm9kZSogbm9kZSwgTFZh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9ib29sZWFuVmFsdWVzLnNldChub2RlLCBMb3dl
cmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldFN0
b3JhZ2UoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9zdG9yYWdl
VmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwor
ICAgIH0KKyAgICB2b2lkIHNldERvdWJsZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBtX2RvdWJsZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1
ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEludDMyKExWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHNldEludDMyKG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2
b2lkIHNldEpTVmFsdWUoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZSht
X25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXRCb29sZWFuKExWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHNldEJvb2xlYW4obV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZv
aWQgc2V0U3RvcmFnZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRTdG9yYWdlKG1f
bm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBzZXREb3VibGUobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNWYWxpZChjb25zdCBMb3dlcmVkTm9kZVZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICgh
bV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKHZhbHVlLmJsb2NrKCksIG1faGlnaEJsb2Nr
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKICAgICB7
CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLndlYWtSZWZlcmVuY2VzLmFwcGVu
ZCgKQEAgLTI4ODEsMjcgKzI4NDksMjAgQEAgcHJpdmF0ZToKICAgICAKICAgICBMQmFzaWNCbG9j
ayBtX3Byb2xvZ3VlOwogICAgIExCYXNpY0Jsb2NrIG1faW5pdGlhbGl6YXRpb247Ci0gICAgTEJh
c2ljQmxvY2sgbV9hcmd1bWVudENoZWNrczsKICAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBMQmFz
aWNCbG9jaz4gbV9ibG9ja3M7CiAgICAgCiAgICAgTFZhbHVlIG1fY2FsbEZyYW1lOwogICAgIExW
YWx1ZSBtX3RhZ1R5cGVOdW1iZXI7CiAgICAgTFZhbHVlIG1fdGFnTWFzazsKICAgICAKLSAgICBI
YXNoU2V0PE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wczsKLSAgICBWZWN0b3I8Tm9kZSo+IG1fZmx1
c2hlZExvY2FsT3BXb3JrbGlzdDsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVl
PiBtX2ludDMyVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1f
anNWYWx1ZVZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2Jv
b2xlYW5WYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9zdG9y
YWdlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fZG91Ymxl
VmFsdWVzOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fbGl2ZTsKICAgICAKLSAgICBIYXNoTWFwPE5v
ZGUqLCBMVmFsdWU+IG1faW50MzJWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBt
X2pzVmFsdWVWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2Jvb2xlYW5WYWx1
ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7Ci0gICAgSGFz
aE1hcDxOb2RlKiwgTFZhbHVlPiBtX2RvdWJsZVZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCB1
bnNpZ25lZD4gbV90aW1lVG9MaXZlOwotICAgIAotICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2Nh
bHNCb29sZWFuOwotICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHMzMjsKLSAgICBPcGVyYW5k
czxMVmFsdWU+IG1fbG9jYWxzNjQ7Ci0gICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2Fsc0RvdWJs
ZTsKKyAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fcGhpczsKICAgICAKICAgICBPcGVyYW5k
czxWYWx1ZVNvdXJjZT4gbV92YWx1ZVNvdXJjZXM7CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyZWROb2RlVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyZWROb2RlVmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJl
ZE5vZGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExMb3dlcmVkTm9k
ZVZhbHVlX2gKKyNkZWZpbmUgRlRMTG93ZXJlZE5vZGVWYWx1ZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNC
bG9jay5oIgorI2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBSZXByZXNlbnRzIHRoZSBhY3Qgb2YgaGF2aW5nIGxv
d2VyZWQgYSBERkc6Ok5vZGUgdG8gYW4gTFZhbHVlLCBhbmQgcmVjb3JkcyB0aGUKKy8vIERGRzo6
QmFzaWNCbG9jayB0aGF0IGRpZCB0aGUgbG93ZXJpbmcuIFRoZSBMVmFsdWUgaXMgd2hhdCB3ZSB1
c2UgbW9zdCBvZnRlbiwgYnV0CisvLyB3ZSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIGluIGEg
YmxvY2sgdGhhdCBpcyBkb21pbmF0ZWQgYnkgdGhlIG9uZSB0aGF0IGRpZAorLy8gdGhlIGxvd2Vy
aW5nLiBXZSdyZSBndWFyYW50ZWVkIHRoYXQgZm9yIGVhY2ggREZHOjpOb2RlLCB0aGVyZSB3aWxs
IGJlIG9uZQorLy8gTG93ZXJlZE5vZGVWYWx1ZSB0aGF0IGFsd2F5cyBkb21pbmF0ZXMgYWxsIHVz
ZXMgb2YgdGhlIERGRzo6Tm9kZTsgYnV0IHRoZXJlIG1heQorLy8gYmUgb3RoZXJzIHRoYXQgZG9u
J3QgZG9taW5hdGUgYW5kIHdlJ3JlIGVmZmVjdGl2ZWx5IGRvaW5nIG9wcG9ydHVuaXN0aWMgR1ZO
IG9uCisvLyB0aGUgbG93ZXJpbmcgY29kZS4KKworY2xhc3MgTG93ZXJlZE5vZGVWYWx1ZSB7Citw
dWJsaWM6CisgICAgTG93ZXJlZE5vZGVWYWx1ZSgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAg
ICAgICAsIG1fYmxvY2soMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIExvd2VyZWROb2RlVmFs
dWUoTFZhbHVlIHZhbHVlLCBERkc6OkJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fdmFs
dWUodmFsdWUpCisgICAgICAgICwgbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3ZhbHVlKTsKKyAgICAgICAgQVNTRVJUKG1fYmxvY2spOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIExWYWx1ZSB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBERkc6OkJhc2ljQmxvY2sqIGJsb2NrKCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIAorcHJpdmF0ZToKKyAgICBMVmFsdWUgbV92
YWx1ZTsKKyAgICBERkc6OkJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZU
TExvd2VyZWROb2RlVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFZhbHVlRnJvbUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExWYWx1ZUZyb21CbG9jay5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgVmFsdWVG
cm9tQmxvY2sgewogcHVibGljOgorICAgIFZhbHVlRnJvbUJsb2NrKCkKKyAgICAgICAgOiBtX3Zh
bHVlKDApCisgICAgICAgICwgbV9ibG9jaygwKQorICAgIHsKKyAgICB9CisgICAgCiAgICAgVmFs
dWVGcm9tQmxvY2soTFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9jayBibG9jaykKICAgICAgICAgOiBt
X3ZhbHVlKHZhbHVlKQogICAgICAgICAsIG1fYmxvY2soYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkocmV2aXNpb24gMTUyNTgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDIxICs0NSw2IEBAIHZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkKICAgICBjYXNlIERvdWJsZUluSlNTdGFjazoKICAgICAgICAgb3V0LnByaW50KCJE
b3VibGVJbkpTU3RhY2siKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVmFsdWVJbkxvY2Fs
czoKLSAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluTG9jYWxzIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEludDMySW5Mb2NhbHM6Ci0gICAgICAgIG91dC5wcmludCgiSW50MzJJbkxvY2Fs
cyIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBCb29sZWFuSW5Mb2NhbHM6Ci0gICAgICAg
IG91dC5wcmludCgiQm9vbGVhbkluTG9jYWxzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IERvdWJsZUluTG9jYWxzOgotICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUluTG9jYWxzIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIEFyZ3VtZW50c1NvdXJjZToKLSAgICAgICAgb3V0LnBy
aW50KCJBcmd1bWVudHNTb3VyY2UiKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU291cmNl
SXNEZWFkOgogICAgICAgICBvdXQucHJpbnQoIlNvdXJjZUlzRGVhZCIpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCShy
ZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0MSw2IEBAIGVudW0gVmFsdWVTb3VyY2VL
aW5kIHsKICAgICBWYWx1ZUluSlNTdGFjaywKICAgICBJbnQzMkluSlNTdGFjaywKICAgICBEb3Vi
bGVJbkpTU3RhY2ssCi0gICAgVmFsdWVJbkxvY2FscywKLSAgICBJbnQzMkluTG9jYWxzLAotICAg
IEJvb2xlYW5JbkxvY2FscywKLSAgICBEb3VibGVJbkxvY2FscywKLSAgICBBcmd1bWVudHNTb3Vy
Y2UsCiAgICAgU291cmNlSXNEZWFkLAogICAgIEhhdmVOb2RlCiB9OwpJbmRleDogU291cmNlL1dU
Ri9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE1MjU4MikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjggQEAKKzIwMTMtMDctMTEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gKE9PUFMhKS4KKyAgICAgICAgTmVlZCB0
aGUgYnVnIFVSTCAoT09QUyEpLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
d3RmL0hhc2hTZXQuaDoKKyAgICAgICAgKEhhc2hTZXQpOgorICAgICAgICAoV1RGKToKKyAgICAg
ICAgKFdURjo6OjphZGQpOgorICAgICAgICAoV1RGOjo9KToKKyAgICAgICAgKiB3dGYvSGFzaFRh
YmxlLmg6CisgICAgICAgIChXVEY6Ojo6SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6PSk6Cisg
ICAgICAgICogd3RmL0luc2VydGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdURik6CisgICAgICAg
IChJbnNlcnRpb24pOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246Okluc2VydGlvbik6CisgICAg
ICAgIChXVEY6Okluc2VydGlvbjo6aW5kZXgpOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246OmVs
ZW1lbnQpOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246Om9wZXJhdG9yPCk6CisgICAgICAgIChX
VEY6OmV4ZWN1dGVJbnNlcnRpb25zKToKKwogMjAxMy0wNy0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCAzMi1iaXQgYnVpbGQuCklu
ZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1
MjU4MikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKIAkJMEZEODFBQzUxNTRGQjIyRTAwOTgzRTcyIC8q
IEZhc3RCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1
RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmlu
dFN0cmVhbS5jcHAgKi87IH07CiAJCTBGRERCRkE4MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQ
cmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi87IH07
CisJCTBGRTUwNTU3MTc4N0E4MDYwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4
QyAvKiBJbnNlcnRpb24uaCAqLzsgfTsKKwkJMEZFNTA1N0YxNzkwODlGRTAwQjM1RjhDIC8qIExp
c3REdW1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkU1MDU3RTE3OTA4OUY5MDBCMzVGOEMgLyogTGlzdER1bXAuaCAqLzsgfTsKIAkJMTQzRjYxMUYx
NTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUu
Y3BwICovOyB9OwogCQkxNDNGNjEyMDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUUxNTY1RjBG
OTAwREI1MTRBIC8qIFJBTVNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9
OyB9OwogCQkxNDY5NDE5MjE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDY5NDE5MDE2RUFBRjZE
MDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM1Miw2ICszNTQsOCBAQAogCQkwRkQ4MUFDNDE1NEZCMjJF
MDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGYXN0Qml0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERC
RkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQ
cmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdQcmlu
dFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU1NjE3ODdBODAy
MDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc2VydGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU3RTE3OTA4OUY5MDBCMzVGOEMgLyogTGlz
dER1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlzdER1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFQzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCeXRlU3BpbkxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTc4NSwxMSArNzg5LDEzIEBACiAJCQkJQThBNDcyQkExNTFBODI1QTAwNDEyM0ZGIC8q
IEhhc2hUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzJCQjE1MUE4MjVBMDA0MTIzRkYgLyogSGV4TnVt
YmVyLmggKi8sCiAJCQkJQThBNDcyQkMxNTFBODI1QTAwNDEyM0ZGIC8qIElubGluZUFTTS5oICov
LAorCQkJCTBGRTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLywKIAkJCQlB
OEE0NzJCRTE1MUE4MjVBMDA0MTIzRkYgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE4QTQ3MkJG
MTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQzMkFycmF5LmggKi8sCiAJCQkJQThBNDcyQkQxNTFBODI1
QTAwNDEyM0ZGIC8qIEludDhBcnJheS5oICovLAogCQkJCUE4QTQ3MkMwMTUxQTgyNUEwMDQxMjNG
RiAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmggKi8sCiAJCQkJMEY0NkU2REQxNzdDQkE2QTAw
RTFGNzU1IC8qIExMVk1IZWFkZXJzLmggKi8sCisJCQkJMEZFNTA1N0UxNzkwODlGOTAwQjM1RjhD
IC8qIExpc3REdW1wLmggKi8sCiAJCQkJQThBNDcyQzExNTFBODI1QTAwNDEyM0ZGIC8qIExpc3RI
YXNoU2V0LmggKi8sCiAJCQkJQThBNDcyQzIxNTFBODI1QTAwNDEyM0ZGIC8qIExpc3RSZWZQdHIu
aCAqLywKIAkJCQlBOEE0NzJDMzE1MUE4MjVBMDA0MTIzRkYgLyogTG9ja2VyLmggKi8sCkBAIC0x
MTgxLDYgKzExODcsNyBAQAogCQkJCUE4QTQ3M0U4MTUxQTgyNUIwMDQxMjNGRiAvKiBNYXRoRXh0
cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFQTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDU0OTdBRDE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFU
aW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5z
ZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjFEMTE1NDE1RkYxMUJFMDAyNkU5MDggLyog
TWVtb3J5SW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RkQ4NTU0NzE2MTMz
RTBFMDBDNUI3MDQgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uQXJyYXlCdWZmZXJWaWV3LmggaW4g
SGVhZGVycyAqLywKIAkJCQlGM0ZCQzcxRTE2MUFGN0JGMDBCQjRCRDQgLyogTWVtb3J5SW5zdHJ1
bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMTMwOCw2ICsxMzE1
LDcgQEAKIAkJCQk5NzRDRkM4RTE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDc0NDYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTdGMTc5MDg5RkUwMEIzNUY4QyAvKiBMaXN0RHVt
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNDQ4ODMxNkZFOUZFMTAwODQ0QkU5IC8qIFByb2Nl
c3NJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NkU2REUxNzdDQkE2QTAwRTFGNzU1IC8qIExM
Vk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9E
YXRhTG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGF0YUxvZy5oCShyZXZpc2lv
biAxNTI1ODIpCisrKyBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExOCw2ICsxMTgsMTggQEAgdm9pZCBkYXRhTG9nKGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQy
JgogICAgIGRhdGFGaWxlKCkucHJpbnQodmFsdWUxLCB2YWx1ZTIsIHZhbHVlMywgdmFsdWU0LCB2
YWx1ZTUsIHZhbHVlNiwgdmFsdWU3LCB2YWx1ZTgsIHZhbHVlOSwgdmFsdWUxMCwgdmFsdWUxMSwg
dmFsdWUxMiwgdmFsdWUxMyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBU
MiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5
cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwgdHlwZW5h
bWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0Pgordm9pZCBk
YXRhTG9nKGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJiB2YWx1ZTIsIGNvbnN0IFQzJiB2YWx1
ZTMsIGNvbnN0IFQ0JiB2YWx1ZTQsIGNvbnN0IFQ1JiB2YWx1ZTUsIGNvbnN0IFQ2JiB2YWx1ZTYs
IGNvbnN0IFQ3JiB2YWx1ZTcsIGNvbnN0IFQ4JiB2YWx1ZTgsIGNvbnN0IFQ5JiB2YWx1ZTksIGNv
bnN0IFQxMCYgdmFsdWUxMCwgY29uc3QgVDExJiB2YWx1ZTExLCBjb25zdCBUMTImIHZhbHVlMTIs
IGNvbnN0IFQxMyYgdmFsdWUxMywgY29uc3QgVDE0JiB2YWx1ZTE0KQoreworICAgIGRhdGFGaWxl
KCkucHJpbnQodmFsdWUxLCB2YWx1ZTIsIHZhbHVlMywgdmFsdWU0LCB2YWx1ZTUsIHZhbHVlNiwg
dmFsdWU3LCB2YWx1ZTgsIHZhbHVlOSwgdmFsdWUxMCwgdmFsdWUxMSwgdmFsdWUxMiwgdmFsdWUx
MywgdmFsdWUxNCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlw
ZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1l
IFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDEx
LCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTU+
Cit2b2lkIGRhdGFMb2coY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwgY29uc3Qg
VDMmIHZhbHVlMywgY29uc3QgVDQmIHZhbHVlNCwgY29uc3QgVDUmIHZhbHVlNSwgY29uc3QgVDYm
IHZhbHVlNiwgY29uc3QgVDcmIHZhbHVlNywgY29uc3QgVDgmIHZhbHVlOCwgY29uc3QgVDkmIHZh
bHVlOSwgY29uc3QgVDEwJiB2YWx1ZTEwLCBjb25zdCBUMTEmIHZhbHVlMTEsIGNvbnN0IFQxMiYg
dmFsdWUxMiwgY29uc3QgVDEzJiB2YWx1ZTEzLCBjb25zdCBUMTQmIHZhbHVlMTQsIGNvbnN0IFQx
NSYgdmFsdWUxNSkKK3sKKyAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlMSwgdmFsdWUyLCB2YWx1
ZTMsIHZhbHVlNCwgdmFsdWU1LCB2YWx1ZTYsIHZhbHVlNywgdmFsdWU4LCB2YWx1ZTksIHZhbHVl
MTAsIHZhbHVlMTEsIHZhbHVlMTIsIHZhbHVlMTMsIHZhbHVlMTQsIHZhbHVlMTUpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpkYXRhTG9nOwpJbmRleDogU291cmNlL1dU
Ri93dGYvSGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAko
cmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NiwxMiArODYsMTkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBz
byB0aGF0IGNhbGxlcnMKICAgICAgICAgLy8gY2FuIGp1c3QgcGFzcyB0aGUgdHJhbnNsYXRvciBh
bmQgbGV0IHRoZSBjb21waWxlciBkZWR1Y2UgVC4KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+IEFkZFJlc3VsdCBhZGQoY29uc3QgVCYpOworICAg
ICAgICAKKyAgICAgICAgLy8gQXR0ZW1wdHMgdG8gYWRkIGEgbGlzdCBvZiB0aGluZ3MgdG8gdGhl
IHNldC4gUmV0dXJucyB0cnVlIGlmIGFueSBvZgorICAgICAgICAvLyB0aGVtIGFyZSBuZXcgdG8g
dGhlIHNldC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgc2V0IGlzIHVuY2hhbmdlZC4KKyAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgorICAgICAgICBib29sIGFkZChJdGVyYXRv
clR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpOwogCiAgICAgICAgIHZvaWQgcmVtb3ZlKGNv
bnN0IFZhbHVlVHlwZSYpOwogICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvcik7CiAgICAgICAg
IHZvaWQgY2xlYXIoKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoY29uc3Qg
VmFsdWVUeXBlJik7CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFz
aFNldCYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIHZvaWQgZGVsZXRl
QWxsVmFsdWVzPD4oY29uc3QgSGFzaFNldCYpOwpAQCAtMTkxLDYgKzE5OCwxNiBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKyAgICBpbmxp
bmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRv
clR5cGUgZW5kKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
IGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gYWRkKCppdGVyKS5pc05ld0VudHJ5OworICAgICAgICByZXR1
cm4gY2hhbmdlZDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPgogICAgIGlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShp
dGVyYXRvciBpdCkKICAgICB7CiAgICAgICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgp
KQpAQCAtMjU2LDYgKzI3MywxOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHZlY3Rv
cltpXSA9ICppdDsKICAgICB9ICAKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0
b3I9PShjb25zdCBIYXNoU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChzaXpl
KCkgIT0gb3RoZXIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBm
b3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZCgpOyArK2l0ZXIp
IHsKKyAgICAgICAgICAgIGlmICghb3RoZXIuY29udGFpbnMoKml0ZXIpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Okhhc2hTZXQ7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNo
VGFibGUuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNzAsNiArMTE3MCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
IHsKICAgICAgICAgLy8gQ29weSB0aGUgaGFzaCB0YWJsZSB0aGUgZHVtYiB3YXksIGJ5IGFkZGlu
ZyBlYWNoIGVsZW1lbnQgdG8gdGhlIG5ldyB0YWJsZS4KICAgICAgICAgLy8gSXQgbWlnaHQgYmUg
bW9yZSBlZmZpY2llbnQgdG8gY29weSB0aGUgdGFibGUgc2xvdHMsIGJ1dCBpdCdzIG5vdCBjbGVh
ciB0aGF0IGVmZmljaWVuY3kgaXMgbmVlZGVkLgorICAgICAgICAvLyBGSVhNRTogSXQncyBsaWtl
bHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0aGF0IHVz
ZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExODQ1NQogICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsK
ICAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9IG90aGVyLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKICAgICAgICAgICAgIGFkZCgqaXQpOwpAQCAtMTIwOSw2ICsxMjExLDggQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
dHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFp
dHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KICAgICBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz4mIEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6b3BlcmF0
b3I9KGNvbnN0IEhhc2hUYWJsZSYgb3RoZXIpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogSXQn
cyBsaWtlbHkgdGhhdCB0aGlzIGNhbiBiZSBpbXByb3ZlZCwgZm9yIHN0YXRpYyBhbmFseXNlcyB0
aGF0IHVzZQorICAgICAgICAvLyBIYXNoU2V0cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExODQ1NQogICAgICAgICBIYXNoVGFibGUgdG1wKG90aGVyKTsKICAgICAg
ICAgc3dhcCh0bXApOwogICAgICAgICByZXR1cm4gKnRoaXM7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9JbnNlcnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBJbnNlcnRpb25faAorI2RlZmluZSBJbnNlcnRpb25faAorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluc2VydGlvbiB7Citw
dWJsaWM6CisgICAgSW5zZXJ0aW9uKCkgeyB9CisgICAgCisgICAgSW5zZXJ0aW9uKHNpemVfdCBp
bmRleCwgVCBlbGVtZW50KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9l
bGVtZW50KGVsZW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzaXplX3QgaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgVCBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSW5zZXJ0aW9uJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZGV4IDwgb3RoZXIubV9pbmRl
eDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHNpemVfdCBtX2luZGV4OworICAgIFQgbV9l
bGVtZW50OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0VmVjdG9yVHlwZSwgdHlwZW5h
bWUgSW5zZXJ0aW9uVmVjdG9yVHlwZT4KK3ZvaWQgZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVj
dG9yVHlwZSYgdGFyZ2V0LCBJbnNlcnRpb25WZWN0b3JUeXBlJiBpbnNlcnRpb25zKQoreworICAg
IGlmICghaW5zZXJ0aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKyAgICB0YXJnZXQuZ3Jv
dyh0YXJnZXQuc2l6ZSgpICsgaW5zZXJ0aW9ucy5zaXplKCkpOworICAgIHNpemVfdCBsYXN0SW5k
ZXggPSB0YXJnZXQuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0g
aW5zZXJ0aW9ucy5zaXplKCk7IGluZGV4SW5JbnNlcnRpb25zLS07KSB7CisgICAgICAgIHNpemVf
dCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uaW5kZXgoKSArIGlu
ZGV4SW5JbnNlcnRpb25zOworICAgICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5z
ZXJ0aW9ucyArIDE7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZp
cnN0SW5kZXg7KQorICAgICAgICAgICAgdGFyZ2V0W2ldID0gdGFyZ2V0W2kgLSBpbmRleE9mZnNl
dF07CisgICAgICAgIHRhcmdldFtmaXJzdEluZGV4XSA9IGluc2VydGlvbnNbaW5kZXhJbkluc2Vy
dGlvbnNdLmVsZW1lbnQoKTsKKyAgICAgICAgbGFzdEluZGV4ID0gZmlyc3RJbmRleDsKKyAgICB9
CisgICAgaW5zZXJ0aW9ucy5yZXNpemUoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6Okluc2VydGlvbjsKK3VzaW5nIFdURjo6ZXhlY3V0ZUluc2VydGlvbnM7CisKKyNl
bmRpZiAvLyBJbnNlcnRpb25faApJbmRleDogU291cmNlL1dURi93dGYvTGlzdER1bXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIExp
c3REdW1wX2gKKyNkZWZpbmUgTGlzdER1bXBfaAorCisjaW5jbHVkZSAiQ29tbWFQcmludGVyLmgi
CisjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5o
IgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIExpc3RE
dW1wIHsKK3B1YmxpYzoKKyAgICBMaXN0RHVtcChjb25zdCBUJiBsaXN0LCBjb25zdCBjaGFyKiBj
b21tYSkKKyAgICAgICAgOiBtX2xpc3QobGlzdCkKKyAgICAgICAgLCBtX2NvbW1hKGNvbW1hKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBmb3IgKHR5cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
X2xpc3QuYmVnaW4oKTsgaXRlciAhPSBtX2xpc3QuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAg
IG91dC5wcmludChtX2NvbW1hLCAqaXRlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0
IFQmIG1fbGlzdDsKKyAgICBDb21tYVByaW50ZXIgbV9jb21tYTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitjbGFzcyBNYXBEdW1wIHsKK3B1YmxpYzoKKyAgICBNYXBEdW1wKGNvbnN0IFQm
IG1hcCwgY29uc3QgY2hhciogYXJyb3csIGNvbnN0IGNoYXIqIGNvbW1hKQorICAgICAgICA6IG1f
bWFwKG1hcCkKKyAgICAgICAgLCBtX2Fycm93KGFycm93KQorICAgICAgICAsIG1fY29tbWEoY29t
bWEpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGZvciAodHlwZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG1fbWFwLmJlZ2luKCk7IGl0ZXIgIT0gbV9tYXAuZW5kKCk7ICsraXRlcikKKyAgICAgICAg
ICAgIG91dC5wcmludChtX2NvbW1hLCBpdGVyLT5rZXksIG1fYXJyb3csIGl0ZXItPnZhbHVlKTsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IFQmIG1fbWFwOworICAgIGNvbnN0IGNo
YXIqIG1fYXJyb3c7CisgICAgQ29tbWFQcmludGVyIG1fY29tbWE7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorTGlzdER1bXA8VD4gbGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29uc3QgY2hh
ciogY29tbWEgPSAiLCAiKQoreworICAgIHJldHVybiBMaXN0RHVtcDxUPihsaXN0LCBjb21tYSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbXBhcmF0b3I+CitDU3RyaW5n
IHNvcnRlZExpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnN0IENvbXBhcmF0b3ImIGNvbXBhcmF0
b3IsIGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIikKK3sKKyAgICBWZWN0b3I8dHlwZW5hbWUgVDo6
VmFsdWVUeXBlPiBteUxpc3Q7CisgICAgbXlMaXN0LmFwcGVuZFJhbmdlKGxpc3QuYmVnaW4oKSwg
bGlzdC5lbmQoKSk7CisgICAgc3RkOjpzb3J0KG15TGlzdC5iZWdpbigpLCBteUxpc3QuZW5kKCks
IGNvbXBhcmF0b3IpOworICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBDb21tYVByaW50
ZXIgY29tbWFQcmludGVyKGNvbW1hKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbXlM
aXN0LnNpemUoKTsgKytpKQorICAgICAgICBvdXQucHJpbnQoY29tbWFQcmludGVyLCBteUxpc3Rb
aV0pOworICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitpbmxpbmUgYm9vbCBsZXNzVGhhbihjb25zdCBUJiBhLCBjb25zdCBUJiBiKQoreworICAg
IHJldHVybiBhIDwgYjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0NTdHJpbmcgc29ydGVk
TGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29uc3QgY2hhciogY29tbWEgPSAiLCAiKQoreworICAg
IHJldHVybiBzb3J0ZWRMaXN0RHVtcChsaXN0LCBsZXNzVGhhbjxUOjpWYWx1ZVR5cGU+LCBjb21t
YSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitNYXBEdW1wPFQ+IG1hcER1bXAoY29uc3Qg
VCYgbWFwLCBjb25zdCBjaGFyKiBhcnJvdyA9ICI9PiIsIGNvbnN0IGNoYXIqIGNvbW1hID0gIiwg
IikKK3sKKyAgICByZXR1cm4gTWFwRHVtcDxUPihtYXAsIGFycm93LCBjb21tYSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbXBhcmF0b3I+CitDU3RyaW5nIHNvcnRlZE1h
cER1bXAoY29uc3QgVCYgbWFwLCBjb25zdCBDb21wYXJhdG9yJiBjb21wYXJhdG9yLCBjb25zdCBj
aGFyKiBhcnJvdyA9ICI9PiIsIGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIikKK3sKKyAgICBWZWN0
b3I8dHlwZW5hbWUgVDo6S2V5VHlwZT4ga2V5czsKKyAgICBmb3IgKHR5cGVuYW1lIFQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtYXAuYmVnaW4oKTsgaXRlciAhPSBtYXAuZW5kKCk7ICsraXRlcikK
KyAgICAgICAga2V5cy5hcHBlbmQoaXRlci0+a2V5KTsKKyAgICBzdGQ6OnNvcnQoa2V5cy5iZWdp
bigpLCBrZXlzLmVuZCgpLCBjb21wYXJhdG9yKTsKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7
CisgICAgQ29tbWFQcmludGVyIGNvbW1hUHJpbnRlcihjb21tYSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG91dC5wcmludChjb21tYVBy
aW50ZXIsIGtleXNbaV0sIGFycm93LCBtYXAuZ2V0KGtleXNbaV0pKTsKKyAgICByZXR1cm4gb3V0
LnRvQ1N0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpsaXN0
RHVtcDsKK3VzaW5nIFdURjo6c29ydGVkTGlzdER1bXA7Cit1c2luZyBXVEY6Om1hcER1bXA7Cit1
c2luZyBXVEY6OnNvcnRlZE1hcER1bXA7CisKKyNlbmRpZiAvLyBMaXN0RHVtcF9oCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvUHJpbnRTdHJlYW0uaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL1dURi93dGYvUHJp
bnRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDYgKzIwNyw0NSBAQCBwdWJsaWM6CiAg
ICAgICAgIHByaW50KHZhbHVlMTIpOwogICAgICAgICBwcmludCh2YWx1ZTEzKTsKICAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywg
dHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVu
YW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1l
IFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQ+CisgICAgdm9pZCBwcmludChjb25zdCBU
MSYgdmFsdWUxLCBjb25zdCBUMiYgdmFsdWUyLCBjb25zdCBUMyYgdmFsdWUzLCBjb25zdCBUNCYg
dmFsdWU0LCBjb25zdCBUNSYgdmFsdWU1LCBjb25zdCBUNiYgdmFsdWU2LCBjb25zdCBUNyYgdmFs
dWU3LCBjb25zdCBUOCYgdmFsdWU4LCBjb25zdCBUOSYgdmFsdWU5LCBjb25zdCBUMTAmIHZhbHVl
MTAsIGNvbnN0IFQxMSYgdmFsdWUxMSwgY29uc3QgVDEyJiB2YWx1ZTEyLCBjb25zdCBUMTMmIHZh
bHVlMTMsIGNvbnN0IFQxNCYgdmFsdWUxNCkKKyAgICB7CisgICAgICAgIHByaW50KHZhbHVlMSk7
CisgICAgICAgIHByaW50KHZhbHVlMik7CisgICAgICAgIHByaW50KHZhbHVlMyk7CisgICAgICAg
IHByaW50KHZhbHVlNCk7CisgICAgICAgIHByaW50KHZhbHVlNSk7CisgICAgICAgIHByaW50KHZh
bHVlNik7CisgICAgICAgIHByaW50KHZhbHVlNyk7CisgICAgICAgIHByaW50KHZhbHVlOCk7Cisg
ICAgICAgIHByaW50KHZhbHVlOSk7CisgICAgICAgIHByaW50KHZhbHVlMTApOworICAgICAgICBw
cmludCh2YWx1ZTExKTsKKyAgICAgICAgcHJpbnQodmFsdWUxMik7CisgICAgICAgIHByaW50KHZh
bHVlMTMpOworICAgICAgICBwcmludCh2YWx1ZTE0KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5
cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFt
ZSBUOSwgdHlwZW5hbWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUg
VDEzLCB0eXBlbmFtZSBUMTQsIHR5cGVuYW1lIFQxNT4KKyAgICB2b2lkIHByaW50KGNvbnN0IFQx
JiB2YWx1ZTEsIGNvbnN0IFQyJiB2YWx1ZTIsIGNvbnN0IFQzJiB2YWx1ZTMsIGNvbnN0IFQ0JiB2
YWx1ZTQsIGNvbnN0IFQ1JiB2YWx1ZTUsIGNvbnN0IFQ2JiB2YWx1ZTYsIGNvbnN0IFQ3JiB2YWx1
ZTcsIGNvbnN0IFQ4JiB2YWx1ZTgsIGNvbnN0IFQ5JiB2YWx1ZTksIGNvbnN0IFQxMCYgdmFsdWUx
MCwgY29uc3QgVDExJiB2YWx1ZTExLCBjb25zdCBUMTImIHZhbHVlMTIsIGNvbnN0IFQxMyYgdmFs
dWUxMywgY29uc3QgVDE0JiB2YWx1ZTE0LCBjb25zdCBUMTUmIHZhbHVlMTUpCisgICAgeworICAg
ICAgICBwcmludCh2YWx1ZTEpOworICAgICAgICBwcmludCh2YWx1ZTIpOworICAgICAgICBwcmlu
dCh2YWx1ZTMpOworICAgICAgICBwcmludCh2YWx1ZTQpOworICAgICAgICBwcmludCh2YWx1ZTUp
OworICAgICAgICBwcmludCh2YWx1ZTYpOworICAgICAgICBwcmludCh2YWx1ZTcpOworICAgICAg
ICBwcmludCh2YWx1ZTgpOworICAgICAgICBwcmludCh2YWx1ZTkpOworICAgICAgICBwcmludCh2
YWx1ZTEwKTsKKyAgICAgICAgcHJpbnQodmFsdWUxMSk7CisgICAgICAgIHByaW50KHZhbHVlMTIp
OworICAgICAgICBwcmludCh2YWx1ZTEzKTsKKyAgICAgICAgcHJpbnQodmFsdWUxNCk7CisgICAg
ICAgIHByaW50KHZhbHVlMTUpOworICAgIH0KIH07CiAKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206589</attachid>
            <date>2013-07-12 20:32:51 -0700</date>
            <delta_ts>2013-07-12 22:42:33 -0700</delta_ts>
            <desc>it works.</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>266988</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNjA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0OSBA
QAorMjAxMy0wNy0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgaGF2ZSBhbiBTU0EgZm9ybSBmb3IgdXNlIGJ5IEZUTAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MzM4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBB
ZGRzIGFuIFNTQSBmb3JtIHRvIHRoZSBERkcuIFdlIGNhbiBjb252ZXJ0IFRocmVhZGVkQ1BTIGZv
cm0gaW50byBTU0EgZm9ybQorICAgICAgICBhZnRlciBicmVha2luZyBjcml0aWNhbCBlZGdlcy4g
VGhlIGNvbnZlcnNpb24gYWxnb3JpdGhtIGZvbGxvd3MgQXljb2NrIGFuZAorICAgICAgICBIb3Jz
cG9vbCwgYW5kIHRoZSBTU0EgZm9ybSBpdHNlbGYgZm9sbG93cyBzb21ldGhpbmcgSSd2ZSBkb25l
IGJlZm9yZSwgd2hlcmUKKyAgICAgICAgaW5zdGVhZCBvZiBoYXZpbmcgUGhpIGZ1bmN0aW9ucyBz
cGVjaWZ5IGlucHV0IG5vZGVzIGNvcnJlc3BvbmRpbmcgdG8gYmxvY2sKKyAgICAgICAgcHJlZGVj
ZXNzb3JzLCB3ZSBpbnN0ZWFkIGhhdmUgVXBzaWxvbiBmdW5jdGlvbnMgaW4gdGhlIHByZWRlY2Vz
c29ycyB0aGF0CisgICAgICAgIHNwZWNpZnkgd2hpY2ggdmFsdWUgaW4gdGhhdCBibG9jayBnb2Vz
IGludG8gd2hpY2ggc3Vic2VxdWVudCBQaGkuIFVwc2lsb25zCisgICAgICAgIGRvbid0IGhhdmUg
dG8gZG9taW5hdGUgUGhpcyAodXN1YWxseSB0aGV5IGRvbid0KSBhbmQgdGhleSBjb3JyZXNwb25k
IHRvIGEKKyAgICAgICAgbm9uLVNTQSAibW92IiBpbnRvIHRoZSBQaGkncyAidmFyaWFibGUiLiBU
aGlzIGdpdmVzIGFsbCBvZiB0aGUgZ29vZAorICAgICAgICBwcm9wZXJ0aWVzIG9mIFNTQSwgd2hp
bGUgZW5zdXJpbmcgdGhhdCBhIGJ1bmNoIG9mIENGRyB0cmFuc2Zvcm1hdGlvbnMgZG9uJ3QKKyAg
ICAgICAgaGF2ZSB0byBiZSBTU0EtYXdhcmUuCisgICAgICAgIAorICAgICAgICBTbyBmYXIgdGhl
IG9ubHkgREZHIHBoYXNlcyB0aGF0IGFyZSBTU0EtYXdhcmUgYXJlIERDRSBhbmQgQ0ZBLiBDRkcK
KyAgICAgICAgc2ltcGxpZmljYXRpb24gaXMgcHJvYmFibHkgU1NBLWF3YXJlIGJ5IGRlZmF1bHQs
IHRob3VnaCBJIGhhdmVuJ3QgdHJpZWQgaXQuCisgICAgICAgIENvbnN0YW50IGZvbGRpbmcgcHJv
YmFibHkgbmVlZHMgYSBmZXcgdHdlYWtzLCBidXQgaXMgbGlrZWx5IHJlYWR5LiBEaXR0bworICAg
ICAgICBmb3IgQ1NFLCB0aG91Z2ggaXQncyBub3QgY2xlYXIgdGhhdCB3ZSdkIHdhbnQgdG8gdXNl
IGJsb2NrLWxvY2FsIENTRSB3aGVuCisgICAgICAgIHdlIGNvdWxkIGJlIGRvaW5nIEdWTi4KKyAg
ICAgICAgCisgICAgICAgIEN1cnJlbnRseSBvbmx5IHRoZSBGVEwgY2FuIGdlbmVyYXRlIGNvZGUg
ZnJvbSB0aGUgU1NBIGZvcm0sIGFuZCB0aGVyZSBpcyBubworICAgICAgICB3YXkgdG8gY29udmVy
dCBmcm9tIFNTQSB0byBUaHJlYWRlZENQUyBvciBMb2FkU3RvcmUuIFRoZXJlIHByb2JhYmx5IHdp
bGwKKyAgICAgICAgbmV2ZXIgYmUgc3VjaCBhIGNhcGFiaWxpdHkuCisgICAgICAgIAorICAgICAg
ICBJbiBvcmRlciB0byBoYW5kbGUgT1NSIGV4aXQgc3RhdGUgaW4gdGhlIFNTQSwgd2UgcGxhY2Ug
TW92SGludHMgYXQgUGhpCisgICAgICAgIHBvaW50cy4gT3RoZXIgdGhhbiB0aGF0LCB5b3UgY2Fu
IHJlY29uc3RydWN0IHN0YXRlLWF0LWV4aXQgYnkgZm9yd2FyZAorICAgICAgICBwcm9wYWdhdGlu
ZyBNb3ZIaW50cy4gTm90ZSB0aGF0IE1vdkhpbnQgaXMgdGhlIG5ldyBTZXRMb2NhbCBpbiBTU0Eu
CisgICAgICAgIFNldExvY2FsIGFuZCBHZXRMb2NhbCBvbmx5IHN1cnZpdmUgaW50byBTU0EgaWYg
dGhleSBhcmUgb24gY2FwdHVyZWQKKyAgICAgICAgdmFyaWFibGVzLCBvciBpbiB0aGUgY2FzZSBv
ZiBmbHVzaGVzLiBBICJsaXZlIFNldExvY2FsIiB3aWxsIGJlCisgICAgICAgIE5vZGVNdXN0R2Vu
ZXJhdGUgYW5kIHdpbGwgYWx3YXlzIGNvcnJlc3BvbmQgdG8gYSBmbHVzaC4gQ29tcHV0aW5nIHRo
ZQorICAgICAgICBzdGF0ZS1hdC1leGl0IHJlcXVpcmVzIHJ1bm5pbmcgU1NBIGxpdmVuZXNzIGFu
YWx5c2lzLCBPU1IgYXZhaWxhYmlsaXR5CisgICAgICAgIGFuYWx5c2lzLCBhbmQgZmx1c2ggbGl2
ZW5lc3MgYW5hbHlzaXMuIFRoZSBGVEwgcnVucyBhbGwgb2YgdGhlc2UgcHJpb3IgdG8KKyAgICAg
ICAgZ2VuZXJhdGluZyBjb2RlLiBXaGlsZSBPU1IgZXhpdCBjb250aW51ZXMgdG8gYmUgdHJpY2t5
LCBtdWNoIG9mIHRoZSBsb2dpYworICAgICAgICBpcyBub3cgZmFjdG9yZWQgaW50byBzZXBhcmF0
ZSBwaGFzZXMgYW5kIHRoZSBiYWNrZW5kIGhhcyB0byBkbyBsZXNzIHdvcmsKKyAgICAgICAgdG8g
cmVhc29uIGFib3V0IHdoYXQgaGFwcGVuZWQgb3V0c2lkZSBvZiB0aGUgYmFzaWMgYmxvY2sgdGhh
dCBpcyBiZWluZworICAgICAgICBsb3dlcmVkLgorICAgICAgICAKKyAgICAgICAgQ29udmVyc2lv
biBmcm9tIERGRyBTU0EgdG8gTExWTSBTU0EgaXMgZG9uZSBieSBlbnN1cmluZyB0aGF0IHdlIGdl
bmVyYXRlCisgICAgICAgIGNvZGUgaW4gZGVwdGgtZmlyc3Qgb3JkZXIsIHRodXMgZ3VhcmFudGVl
aW5nIHRoYXQgYSBub2RlIHdpbGwgYWx3YXlzIGJlCisgICAgICAgIGxvd2VyZWQgKGFuZCBoZW5j
ZSBoYXZlIGEgTFZhbHVlKSBiZWZvcmUgYW55IG9mIHRoZSBibG9ja3MgZG9taW5hdGVkIGJ5Cisg
ICAgICAgIHRoYXQgbm9kZSdzIGJsb2NrIGhhdmUgY29kZSBnZW5lcmF0ZWQuIEZvciBVcHNpbG9u
L1BoaSwgd2UganVzdCB1c2UKKyAgICAgICAgYWxsb2NhJ3MuIFdlIGNvdWxkIGRvIHNvbWV0aGlu
ZyBtb3JlIGNsZXZlciB0aGVyZSwgYnV0IGl0J3MgcHJvYmFibHkgbm90CisgICAgICAgIHdvcnRo
IGl0LCBhdCBsZWFzdCBub3Qgbm93LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hpbGUg
dGhlIFNTQSBmb3JtIGlzIGN1cnJlbnRseSBvbmx5IGJlaW5nIGNvbnZlcnRlZCB0byBMTFZNIElS
LAorICAgICAgICB0aGVyZSBpcyBub3RoaW5nIHRoYXQgcHJldmVudHMgdXMgZnJvbSBjb25zaWRl
cmluZyBvdGhlciBiYWNrZW5kcyBpbiB0aGUKKyAgICAgICAgZnV0dXJlIC0gd2l0aCB0aGUgY2F2
ZWF0IHRoYXQgdGhpcyBmb3JtIGlzIGRlc2lnbmVkIHRvIGJlIGZpcnN0IGxvd2VyZWQgdG8KKyAg
ICAgICAgYSBsb3dlci1sZXZlbCBTU0EgYmVmb3JlIGFjdHVhbCBtYWNoaW5lIGNvZGUgZ2VuZXJh
dGlvbiBjb21tZW5jZXMuIFNvIHdlCisgICAgICAgIG91Z2h0IHRvIGVpdGhlciB1c2UgTExWTSAo
dGhlIGludGVuZGVkIHBhdGgpIG9yIHdlIHdpbGwgaGF2ZSB0byB3cml0ZSBvdXIKKyAgICAgICAg
b3duIFNTQSBsb3ctbGV2ZWwgYmFja2VuZC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcnVucyBh
bGwgb2YgdGhlIGNvZGUgdGhhdCB0aGUgRlRMIHdhcyBrbm93biB0byBydW4gcHJldmlvdXNseS4g
Tm8KKyAgICAgICAgY2hhbmdlIGluIHBlcmZvcm1hbmNlIGZvciBub3cuIEJ1dCBpdCBkb2VzIG9w
ZW4gc29tZSBleGNpdGluZworICAgICAgICBwb3NzaWJpbGl0aWVzIQorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9PcGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpPcGVyYW5kVmFsdWVUcmFpdHM6OmR1bXApOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZmlsbCk6CisgICAgICAgIChPcGVyYW5kcyk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpjbGVhcik6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpzZXRMaXZlVmFsdWVzKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6ZW5kQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdl
U3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlKToK
KyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAoQWJzdHJhY3RTdGF0
ZSk6CisgICAgICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBZGphY2VuY3lMaXN0OjpqdXN0T25lQ2hpbGQpOgorICAgICAgICAoQWRqYWNlbmN5TGlzdCk6
CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChK
U0M6OkRGRzo6QmFzaWNCbG9jazo6fkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6OmVuc3VyZUxvY2Fscyk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6
aXNJblBoaXMpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmlzSW5CbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChK
U0M6OkRGRzo6QmFzaWNCbG9jazo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6U1NBRGF0YTo6U1NBRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6U1NB
RGF0YTo6flNTQURhdGEpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAg
IChCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpvcGVyYXRvcltd
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3IpOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckZvckNvbmRpdGlvbik6CisgICAgICAgIChT
U0FEYXRhKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDoKKyAgICAgICAg
KERGRyk6CisgICAgICAgICogZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDogQWRkZWQuCisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0OjpCbG9j
a0luc2VydGlvblNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6On5C
bG9ja0luc2VydGlvblNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6
Omluc2VydCk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydEJl
Zm9yZSk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgor
ICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5oOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChCbG9ja0luc2VydGlvblNldCk6CisgICAgICAgICogZGZnL0RGR0NGQVBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cnVuKToKKyAgICAgICAgKiBk
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhh
c2U6OmNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDb21tb24u
Y3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHQ29t
bW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0tpbGwpOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjpraWxsU3RhdHVzRm9yRG9lc0tpbGwpOgorICAgICAgICAqIGRmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRG
b2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50
Rm9sZGluZ1BoYXNlOjppc0NhcHR1cmVkQXRPckFmdGVyKToKKyAgICAgICAgKiBkZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkNyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2U6OkNyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UpOgorICAgICAg
ICAoSlNDOjpERkc6OkNyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChK
U0M6OkRGRzo6Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZTo6YnJlYWtDcml0aWNhbEVkZ2UpOgor
ICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyk6CisgICAgICAg
ICogZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdEQ0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
RENFUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6RENFUGhhc2U6OmZpbmRUeXBlQ2hl
Y2tSb290KToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6Y291bnROb2RlKToKKyAgICAg
ICAgKERDRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6Y291bnRFZGdlKToK
KyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6ZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21D
aGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR0VkZ2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkVkZ2U6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdFZGdlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6RWRnZTo6RWRnZSk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6c2V0Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6RWRnZTo6dXNlS2luZFVuY2hlY2tlZCk6CisgICAgICAgIChKU0M6
OkRGRzo6RWRnZTo6c2V0VXNlS2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6c2V0UHJv
b2ZTdGF0dXMpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6OndpbGxOb3RIYXZlQ2hlY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkVkZ2U6OndpbGxIYXZlQ2hlY2spOgorICAgICAgICAoRWRnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6a2lsbFN0YXR1c1VuY2hlY2tlZCk6CisgICAgICAg
IChKU0M6OkRGRzo6RWRnZTo6a2lsbFN0YXR1cyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6
c2V0S2lsbFN0YXR1cyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6ZG9lc0tpbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OkVkZ2U6OmRvZXNOb3RLaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpF
ZGdlOjpzaGlmdCk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6bWFrZVdvcmQpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaEZvcm1hdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
ZGZnL0RGR0ZsdXNoRm9ybWF0Lmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpyZXN1bHRGb3IpOgorICAgICAgICAoSlNDOjpERkc6OnVzZUtpbmRGb3IpOgorICAg
ICAgICAoV1RGKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2Uu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChGbHVzaExpdmVuZXNzQW5hbHlz
aXNQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2U6
OkZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZTo6cHJvY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2U6OnNldEZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpmbHVzaEZvcm1hdCk6CisgICAgICAgIChKU0M6OkRGRzo6
cGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyk6CisgICAgICAgICogZGZnL0RGR0ZsdXNoTGl2
ZW5lc3NBbmFseXNpc1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZEZvckRlcHRoRmlyc3RTb3J0KToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6Z2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb252ZXJ0VG9Db25z
dGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlUHJvZmlsZUZvcik6CisgICAg
ICAgIChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0luc2VydGlvblNldC5oOgorICAgICAgICAo
REZHKToKKyAgICAgICAgKEpTQzo6REZHOjpJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgorICAgICAg
ICAqIGRmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChMaXZlbmVzc0FuYWx5c2lzUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6
OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRG
Rzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpwcm9jZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpM
aXZlbmVzc0FuYWx5c2lzUGhhc2U6OmFkZENoaWxkVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpw
ZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyk6CisgICAgICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlz
aXNQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR05vZGUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0YSk6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChERkcpOgor
ICAgICAgICAoTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTG9jYWwpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzUGhpKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwaGkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnRha2VuQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Om5vdFRha2VuQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN1Y2Nlc3Nvcik6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yRm9yQ29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpub2RlQ29tcGFyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUxp
c3REdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpub2RlTWFwRHVtcCk6CisgICAgICAgICogZGZn
L0RGR05vZGVGbGFncy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZHVtcE5vZGVGbGFncyk6Cisg
ICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAoT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZSk6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6T1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXMpOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmg6
IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZn
L0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJl
ZGljdGlvbkluamVjdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKFNTQUNvbnZlcnNpb25Q
aGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpTU0FDb252ZXJz
aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6cnVuKToK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmRQaGlDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpKToK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmRQaGlFZGdlKToK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmRlZHVwbGljYXRlQ2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6YWRkRmx1c2hlZExv
Y2FsT3ApOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6YWRkRmx1c2hl
ZExvY2FsRWRnZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybVNTQUNvbnZlcnNpb24pOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhbGlkYXRlOjp2YWxpZGF0ZSk6CisgICAgICAgIChWYWxpZGF0ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlQ1BTKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpm
bHVzaEZvcm1hdCk6CisgICAgICAgIChWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGZ0
bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgor
ICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
cmVhdGVQaGlWYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlQmxvY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
Tm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVVcHNpbG9u
KToKKyAgICAgICAgKExvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZVBoaSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmNvbXBpbGVKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZVdlYWtKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZVNldExvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZUFkZCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0
aFN1Yik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aE11
bCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aERpdik6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aE1vZCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aE1pbk9yTWF4KToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoQWJzKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTmVnYXRlKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJpdEFuZCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRPcik6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRYb3IpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQml0UlNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUJpdExTaGlmdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRVUlNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZVVJbnQzMlRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlRXFDb25zdGFudCk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ29tcGFyZVN0cmljdEVxQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ29tcGFyZUxl
c3MpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ29tcGFyZUxl
c3NFcSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJl
R3JlYXRlcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21w
YXJlR3JlYXRlckVxKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxh
dGVCYWNrd2FyZCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0ludDMy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Q2VsbCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpsb3dEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpsb3dKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6bG93U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1
bGF0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUJvb2xl
YW4pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc0xpdmUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp1c2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjppbml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2spOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6ZW1pdE9TUkV4aXRDYWxsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6YWRkRXhpdEFyZ3VtZW50Rm9yTm9kZSk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmxpbmtPU1JFeGl0c0FuZENvbXBsZXRlSW5pdGlhbGl6YXRp
b25CbG9ja3MpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzZXRJbnQzMik6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNldEpTVmFsdWUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzZXRCb29sZWFuKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6c2V0U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OnNldERvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmlzVmFsaWQpOgorICAgICAgICAqIGZ0bC9GVExMb3dlcmVkTm9kZVZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAoRlRMKToKKyAgICAgICAgKExvd2VyZWROb2RlVmFsdWUpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyZWROb2RlVmFsdWU6Okxvd2VyZWROb2RlVmFsdWUpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyZWROb2RlVmFsdWU6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlcmVkTm9kZVZhbHVlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyZWRO
b2RlVmFsdWU6OnZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjpi
bG9jayk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmg6CisgICAgICAgIChKU0M6
OkZUTDo6VmFsdWVGcm9tQmxvY2s6OlZhbHVlRnJvbUJsb2NrKToKKyAgICAgICAgKFZhbHVlRnJv
bUJsb2NrKToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVTb3VyY2UuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OlZhbHVlU291cmNlOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVTb3VyY2Uu
aDoKKwogMjAxMy0wNy0xMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVzdXJyZWN0IHRoZSBDTG9vcCBMTElOVCBvbiB0aGUgRlRMIGJyYW5jaC4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZGODlEQjAwRTFG
NzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0Y2hDYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2
QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIwMEUxRjc1NSAv
KiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAwMEUxRjc1NSAv
KiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY0NkU2RUYx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5h
bHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxM
b29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLzsgfTsKLQkJ
MEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdDRjBEMjAwRTFG
NzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBMTFZNRGlzYXNz
ZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsK
IAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUwMTc3Q0MzNjYw
MEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4
NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkU1
MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAwRTFGNzU1IC8q
IFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEwMEUxRjc1NSAv
KiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi87IH07CisJ
CTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjExNzdDRjBEMjAw
RTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0MTc3Q0YwRDIw
MEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFs
TG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAw
ODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUxNzNBRUREQzAw
N0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VFMkQzIC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FFRERDMDA3RUUy
RDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVk
U3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMzUzLDYgKzM1MywyMSBAQAogCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYg
LyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9ucy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUIxNDM2QUIy
MzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQTE0
MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi87IH07CisJCTBGRTUwNTU5MTc4N0FBODkw
MEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhDIC8qIERGR0Js
b2NrSW5zZXJ0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZFNTA1NUMxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5n
UGhhc2UuY3BwICovOyB9OworCQkwRkU1MDU1RDE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNTA1NUIxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRkU1MDU2MzE3OEY1QjA1MDBCMzVGOEMgLyogREZHQmFzaWNCbG9jay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2MjE3OEY1
QjA1MDBCMzVGOEMgLyogREZHQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRTUwNTcxMTc4RjVC
NTMwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2NDE3OEY1QjUzMDBCMzVGOEMgLyog
REZHQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRkU1MDU3NDE3OEY1QjUzMDBCMzVG
OEMgLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFNTA1NjcxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0
LmNwcCAqLzsgfTsKKwkJMEZFNTA1NzUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2
ODE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU3NjE3OEY1QjUzMDBCMzVGOEMg
LyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NjkxNzhGNUI1MzAwQjM1RjhDIC8qIERG
R0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1NzcxNzhGNUI1
MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2QTE3OEY1QjUzMDBCMzVG
OEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU3ODE3OEY1QjUzMDBCMzVGOEMg
LyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZCMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuY3BwICovOyB9OworCQkwRkU1MDU3OTE3OEY1QjUzMDBCMzVGOEMg
LyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZFNTA1N0ExNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFNTA1NkQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuY3BwICovOyB9OworCQkwRkU1MDU3QjE3OEY1QjUzMDBCMzVGOEMgLyogREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NkUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU3QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2Uu
Y3BwICovOyB9OworCQkwRkU1MDU3RDE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29udmVyc2lv
blBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkU1MDU3MDE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFODUzNEIxNzIz
Q0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUg
LyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLzsgfTsKIAkJMEZFODUzNEMxNzIzQ0RBNTAw
QjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGRUEwQTA4MTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMDlG
RDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTg2LDEzICsxMjAxLDEzIEBACiAJ
CTBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0Y2hDYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFN3aXRjaENhc2UuaDsgcGF0aCA9IGZ0bC9GVExTd2l0
Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdMYXp5SlNWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZHTGF6eUpTVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3
NTUgLyogREZHTGF6eUpTVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHTGF6eUpTVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdMYXp5SlNWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlz
aXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQW5hbHlzaXMuaDsgcGF0
aCA9IGRmZy9ERkdBbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjQ2
RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5jcHA7IHBhdGggPSBkZmcv
REZHTmF0dXJhbExvb3BzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2
RjIxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuaDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFs
TG9vcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NkU2RDcxNzdDQjhGQzAw
RTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gTExWTURpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExW
TURpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIuaDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9M
TFZNRGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDZFNkUx
MTc3Q0MzNjYwMEUxRjc1NSAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gVURpczg2RGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkaXNhc3NlbWJs
ZXIvVURpczg2RGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDZFNkUyMTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWDg2RGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRp
c2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlzaXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQW5hbHlzaXMuaDsgcGF0aCA9IGRmZy9ERkdBbmFs
eXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ2RTZGMTE3N0NGMEQyMDBF
MUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5jcHA7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3Bz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RjIxNzdDRjBEMjAwRTFG
NzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdOYXR1cmFsTG9vcHMuaDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJj
ZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJj
ZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RTFBMEMxNzNB
RUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEUxQTBEMTczQUVEREMwMDdFRTJEMyAvKiBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEz
ODQsNiArMTM5OSwyMSBAQAogCQkwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAx
OTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2
QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyog
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFr
aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NjIxNzhGNUIwNTAwQjM1
RjhDIC8qIERGR0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQmFzaWNCbG9jay5jcHA7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9jay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTY0MTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdCbG9ja0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdCbG9ja0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcvREZHQmxvY2tJbnNlcnRp
b25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2NzE3OEY1QjUz
MDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHRmx1c2hGb3JtYXQuY3BwOyBwYXRoID0gZGZnL0RGR0ZsdXNoRm9ybWF0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NjgxNzhGNUI1MzAwQjM1
RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0ZsdXNoRm9ybWF0Lmg7IHBhdGggPSBkZmcvREZHRmx1c2hGb3JtYXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NjkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdG
bHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRTUwNTZBMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbHVzaExpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTZCMTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9E
RkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkU1MDU2QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkU1MDU2RDE3OEY1QjUzMDBCMzVGOEMgLyogREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFNTA1NkUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5oOyBwYXRoID0gZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkYxNzhGNUI1
MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRTUwNTcwMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU1NBQ29udmVyc2lvblBoYXNlLmg7IHBh
dGggPSBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVz
aXJlZFdhdGNocG9pbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMgLyog
RlRMQWJicmV2aWF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExB
YmJyZXZpYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMQWJicmV2aWF0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjk2MiwxMCArMjk5MiwxMyBAQAogCQkJCTBGQzA5NzZDMTQ2
OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLywKIAkJCQkwRjcxNENBMTE2
RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJ
CQkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuaCAqLywKKwkJCQkwRkU1MDU2MjE3OEY1QjA1MDBCMzVGOEMgLyogREZHQmFzaWNCbG9jay5j
cHAgKi8sCiAJCQkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAq
LywKIAkJCQkwRkQ1NjUyMjE2QUI3ODBBMDAxOTc2NTMgLyogREZHQmFzaWNCbG9ja0lubGluZXMu
aCAqLywKIAkJCQkwRkQyODEyNTE3NzkzQkUzMDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNoLmNw
cCAqLywKIAkJCQkwRkQyODEyNjE3NzkzQkUzMDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNoLmgg
Ki8sCisJCQkJMEZFNTA1NjQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmNwcCAqLywKKwkJCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGly
ZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNv
ZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiArMzAxOCw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhF
RjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIx
NkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBG
QkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJ
CQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhh
c2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJMEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERG
R0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NF
UGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2Uu
Y3BwICovLApAQCAtMzAxMSw2ICszMDQ2LDEwIEBACiAJCQkJMEZEQjJDRDQxNzQyRDgwNDAwN0Iz
QzFCIC8qIERGR0ZpbmFsaXplci5oICovLAogCQkJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAv
KiBERkdGaXh1cFBoYXNlLmNwcCAqLywKIAkJCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyog
REZHRml4dXBQaGFzZS5oICovLAorCQkJCTBGRTUwNTY3MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdG
bHVzaEZvcm1hdC5jcHAgKi8sCisJCQkJMEZFNTA1NjgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0Zs
dXNoRm9ybWF0LmggKi8sCisJCQkJMEZFNTA1NjkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU2QTE3OEY1QjUzMDBCMzVG
OEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLywKIAkJCQk4NkFFNkM0QjEz
NkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICovLAogCQkJCTg2RUM5REI2MTMyOERGODIw
MDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovLAogCQkJCTg2QUU2QzRDMTM2QTExRTQw
MDk2MzAxMiAvKiBERkdHUFJJbmZvLmggKi8sCkBAIC0zMDI1LDYgKzMwNjQsOCBAQAogCQkJCTBG
REIyQ0Q2MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjQ2
RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovLAogCQkJCTBGNDZF
NkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oICovLAorCQkJCTBGRTUwNTZC
MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwICovLAorCQkJ
CTBGRTUwNTZDMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAq
LywKIAkJCQkwRkI0QjUxQzE2QjYyNzcyMDAzRjY5NkIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3Bw
ICovLAogCQkJCTBGQjRCNTFEMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdMb25nTGl2ZWRTdGF0ZS5o
ICovLAogCQkJCTBGMkJEQzNEMTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmgg
Ki8sCkBAIC0zMDQxLDYgKzMwODIsOCBAQAogCQkJCTBGQTU4MUI5MTUwRTk1MkEwMEI5QTJEOSAv
KiBERkdOb2RlVHlwZS5oICovLAogCQkJCTg2RUM5REJGMTMyOERGODIwMDJCMkFENyAvKiBERkdP
cGVyYXRpb25zLmNwcCAqLywKIAkJCQk4NkVDOURDMDEzMjhERjgyMDAyQjJBRDcgLyogREZHT3Bl
cmF0aW9ucy5oICovLAorCQkJCTBGRTUwNTZEMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU2RTE3OEY1QjUzMDBCMzVG
OEMgLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oICovLAogCQkJCTBGRDgyRTUy
MTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi8sCiAJCQkJMEZEODJFNTMxNDFE
QUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggKi8sCiAJCQkJMEZDMDk3OEUxNDZBNkY2MzAw
Q0YyNDQyIC8qIERGR09TUkV4aXQuY3BwICovLApAQCAtMzA3OCw2ICszMTIxLDggQEAKIAkJCQk4
NkVDOURDMzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLywKIAkJCQk4
Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgKi8s
CiAJCQkJODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
ICovLAorCQkJCTBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhh
c2UuY3BwICovLAorCQkJCTBGRTUwNTcwMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJz
aW9uUGhhc2UuaCAqLywKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGQzA5NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBE
RkdUaHVua3MuY3BwICovLAogCQkJCTBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVu
a3MuaCAqLywKQEAgLTMyOTgsNiArMzM0Myw3IEBACiAJCQkJODYwMTYxRTMwRjNBODNDMTAwRjg0
NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTVG
MEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNFNTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFNTA1NzkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY1RjQwODgxMEU3RDU2MzAwOTQ3MzYxIC8qIEFQSVNoaW1zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDA3LDYgKzM0NTMsNyBAQAogCQkJCTBGRUEwQTFEMTcw
OEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRTUwNTdEMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252
ZXJzaW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNDODI4MTQxMTVENEYwMEZEODFD
QiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3
QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBE
NEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQyOCw2ICszNDc1
LDcgQEAKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21w
aWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERG
R09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTc3MTc4
RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY0RTFBMTIxNzNBRjA3QjAwN0VFMkQzIC8qIERGR0Rlc2lyZWRTdHJ1Y3R1
cmVDaGFpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAv
KiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMy
IC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTM0
NDQsNiArMzQ5Miw3IEBACiAJCQkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERGR1ZhbGlk
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0NzE1MjI4MDI1MDBDRDg5MTAgLyogREZH
VmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQ5NEYyRjE3MUUz
RTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTVEMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCREM0ODE1MjI4MDI5MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZF
RiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLywKQEAgLTM1OTEs
NiArMzY0MCw4IEBACiAJCQkJMEY3NjZEMzUxNUFFMjUzQjAwOEYzNjNFIC8qIEp1bXBSZXBsYWNl
bWVudFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVC
MkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NzUx
NzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkU1MDU1OTE3ODdBQTg5MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3MkZGRDY0MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTk2MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3Bl
LmggaW4gSGVhZGVycyAqLywKQEAgLTM3MDgsNiArMzc1OSw3IEBACiAJCQkJMTQ3NEMzM0IxNkFB
MkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJD
REUxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0pJVEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRTUwNTdCMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYx
QzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJEQjE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlG
QzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MTk0
LDYgKzQyNDYsNyBAQAogCQkJCTBGMEI4M0IwMTRCQ0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0lu
Zm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEQjJDRDkxNzQyRDgwNDAwN0IzQzFCIC8qIERG
R0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMz
MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1
NzgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjczRDdBRTE2NUExNDJEMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHVi
Um91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NjlBMDc5NjBFRDFEM0FFMDBGMUY2ODEg
LyogQ29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQwMTY2NzYzMzAwMEQ2
MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDIyNSw5ICs0Mjc4
LDExIEBACiAJCQkJMEZDMDk3NkUxNDY4QUI1MTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVscGVy
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcgLyogREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRDgxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkU1MDU3NDE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzEx
NzhGNUI1MzAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMjM1QkQxMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExDQXJndW1lbnRHZXR0ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQzU1NzAxNDczOEYzNTAwMTIxRTRGIC8qIERGR0NvZGVC
bG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUQxNkI3MkEwODAwNURGOTVCIC8q
IERGR0NvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzNDYsNiArNDQwMSw3IEBACiAJCQkJ
MTRCRDVBMzAwQTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5Nzg4MDE0MDE0NzFBRDkyMDA0MUIwMTYgLyogSlNEYXRlTWF0aC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VDMjcxMDA1REJDOEQgLyogSlNGdW5jdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU3NjE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4RTNBNTkwREY5
Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQyMTA3RUMz
NzYwMDQyN0E0OCAvKiBKU0dsb2JhbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU5
RDE3QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC00MzgzLDYgKzQ0MzksNyBAQAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4
Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2NzkxNEY1QzQ2
QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk1QUI4MzQyMERBNDMyMjUwMEJDODNGMyAvKiBMZWdhY3lQcm9maWxlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkU1MDU3QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OEYyMUIwMTA3RUM1NDEwMDQyRUMyQyAv
KiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc1NzE1OTE0QTIwMDA0Q0I5RkYg
LyogTGlua0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0UyRUE2QzBGQjQ2MENGMDA2
MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0MDUsNyArNDQ2
Miw5IEBACiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYxMDdFQzdFNzAwNjUwNDQ2IC8qIE1hdGhP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1N0ExNzhGNUI1MzAwQjM1RjhDIC8q
IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTAyMTNFM0QxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFNTA1NUMxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEMjgxMjcxNzc5M0JFNTAwQkJC
MEYzIC8qIERGR0JpbmFyeVN3aXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3RDE0
RjVDRkQ2MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkVCRjJGRjE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9y
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDQxNyw2ICs0NDc2LDcgQEAKIAkJCQk2NTVFQjI5QjEw
Q0UyNTgxMDAxQTk5MEUgLyogTm9kZXNDb2RlZ2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
NDY5REUyMTA3RUM3RTcwMDY1MDQ0NiAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDQ2OURFMzEwN0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRTUwNTYzMTc4RjVCMDUwMEIzNUY4QyAvKiBERkdCYXNpY0Js
b2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REU0MTA3RUM3RTcwMDY1MDQ0NiAvKiBO
dW1iZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZGM0VFQkUxNjhDREU5MzAw
NzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0
NjlERTUxMDdFQzdFNzAwNjUwNDQ2IC8qIE9iamVjdENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJl
dmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5k
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBPcGVyYW5kVmFsdWUKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgT3BlcmFu
ZFZhbHVlVHJhaXRzIHsKICAgICBzdGF0aWMgVCBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiBUKCk7
IH0KLSAgICBzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IFQmIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0
KSB7IHZhbHVlLmR1bXAob3V0KTsgfQorICAgIHN0YXRpYyB2b2lkIGR1bXAoY29uc3QgVCYgdmFs
dWUsIFByaW50U3RyZWFtJiBvdXQpIHsgb3V0LnByaW50KHZhbHVlKTsgfQogfTsKIAogZW51bSBP
cGVyYW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07CkBAIC0yMDksMTIg
KzIwOSwyNSBAQCBwdWJsaWM6CiAgICAgICAgIHNldExvY2FsRmlyc3RUaW1lKG9wZXJhbmQsIHZh
bHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjbGVhcigpCisgICAgdm9pZCBmaWxsKFQgdmFs
dWUpCiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRW
YWx1ZSgpOworICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSB2YWx1ZTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1f
bG9jYWxzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICAgICAgICAgIG1fbG9jYWxz
W2ldID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAg
ICAgZmlsbChUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IE9wZXJhbmRzJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChudW1iZXJPZkFyZ3VtZW50cygpID09IG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOwor
ICAgICAgICBBU1NFUlQobnVtYmVyT2ZMb2NhbHMoKSA9PSBvdGhlci5udW1iZXJPZkxvY2Fscygp
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cyA9PSBvdGhlci5tX2FyZ3Vt
ZW50cyAmJiBtX2xvY2FscyA9PSBvdGhlci5tX2xvY2FsczsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NCw2ICs3NCwxNiBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9j
ayhCYXNpCiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09
IFNTQSkgeworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3Ig
aXRlciA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmJlZ2luKCk7CisgICAgICAgIEhh
c2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+OjppdGVyYXRvciBlbmQgPSBiYXNpY0Jsb2NrLT5z
c2EtPnZhbHVlc0F0SGVhZC5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKKyAgICAgICAgICAgIGZvck5vZGUoaXRlci0+a2V5KSA9IGl0ZXItPnZhbHVlOworICAg
ICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLmhhc0Nsb2JiZXJhYmxlU3RhdGUoKSkKKyAgICAgICAg
ICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
ICAgICBiYXNpY0Jsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7CiAgICAgYmFzaWNCbG9j
ay0+Y2ZhSGFzVmlzaXRlZCA9IHRydWU7CiAgICAgbV9ibG9jayA9IGJhc2ljQmxvY2s7CkBAIC04
MywxMyArOTMsMjggQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQog
ICAgIG1fY3VycmVudE5vZGUgPSAwOwogfQogCi12b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxp
emUoR3JhcGgmIGdyYXBoKQorc3RhdGljIHZvaWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUq
LCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBIYXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3sKKyAgICB2
YWx1ZXMuY2xlYXIoKTsKKyAgICAKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9
IGxpdmUuYmVnaW4oKTsKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbGl2ZS5l
bmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgdmFsdWVzLmFk
ZCgqaXRlciwgQWJzdHJhY3RWYWx1ZSgpKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjppbml0
aWFsaXplKCkKIHsKLSAgICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxvY2soMCk7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7CiAgICAgcm9vdC0+Y2ZhU2hvdWxk
UmV2aXNpdCA9IHRydWU7CiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwogICAgIHJv
b3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAg
IGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0
SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZSA9IHJvb3QtPnZhcmlhYmxlc0F0SGVh
ZC5hcmd1bWVudChpKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQp
OwogICAgICAgICBpZiAoIW5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVbmJveElm
UG9zc2libGUoKSkgewpAQCAtMTE4LDEyICsxNDMsMTEgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpp
bml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2Fs
KGkpLmNsZWFyKCk7CiAgICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigp
OwogICAgIH0KLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9ja0luZGV4
IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2Nr
SW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICBibG9jay0+Y2ZhU2hvdWxk
UmV2aXNpdCA9IGZhbHNlOwogICAgICAgICBibG9jay0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwog
ICAgICAgICBibG9jay0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKQEAgLTEzNywxMiArMTYx
LDEyIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICAgICAg
fQogICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gZ3JhcGgubV9wbGFuLm9zckVu
dHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9IG1f
Z3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyYXBoLm1fcGxhbi5tdXN0SGFuZGxl
VmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9n
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSB2YWx1ZTsKLSAgICAgICAgICAgIHZhbHVlLnNldE1vc3RTcGVjaWZpYyhn
cmFwaCwgZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0pOwotICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aSk7CisgICAgICAgICAgICB2YWx1ZS5zZXRNb3N0U3BlY2lmaWMobV9ncmFwaCwgbV9ncmFwaC5t
X3BsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG1f
Z3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAg
ICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpLm1lcmdlKHZhbHVlKTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICBk
YXRhTG9nRigiICAgIEluaXRpYWxpemluZyBCbG9jayAjJXUsIG9wZXJhbmQgciVkLCB0byAiLCBi
bG9ja0luZGV4LCBvcGVyYW5kKTsKQEAgLTE1Miw2ICsxNzYsMTUgQEAgdm9pZCBBYnN0cmFjdFN0
YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICB9CiAgICAgICAgIGJsb2NrLT5jZmFT
aG91bGRSZXZpc2l0ID0gdHJ1ZTsKICAgICB9CisgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNT
QSkgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBzZXRMaXZl
VmFsdWVzKGJsb2NrLT5zc2EtPnZhbHVlc0F0SGVhZCwgYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCk7
CisgICAgICAgICAgICBzZXRMaXZlVmFsdWVzKGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCwgYmxv
Y2stPnNzYS0+bGl2ZUF0VGFpbCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayhNZXJnZU1vZGUgbWVyZ2VNb2RlKQpAQCAtMTcyLDIwICsy
MDUsNDEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrKE1lcmdlTQogICAgIGJv
b2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIAogICAgIGlmIChtZXJnZU1vZGUgIT0gRG9udE1lcmdl
IHx8ICFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAw
OyBhcmd1bWVudCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsg
Kythcmd1bWVudCkgeworICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7CisgICAgICAg
IGNhc2UgVGhyZWFkZWRDUFM6IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7
ICsrYXJndW1lbnQpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
Ci0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRlIGZvciBhcmd1bWVu
dCAlenUuXG4iLCBhcmd1bWVudCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAg
TWVyZ2luZyBzdGF0ZSBmb3IgYXJndW1lbnQgJXp1LlxuIiwgYXJndW1lbnQpOwogI2VuZGlmCi0g
ICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1ZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRl
QXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChh
cmd1bWVudCk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRl
c3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAg
IE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRlIGZvciBsb2NhbCAlenUuXG4iLCBsb2Nh
bCk7CiAjZW5kaWYKLSAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxv
Y2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFibGVzLmxvY2FsKGxvY2FsKSwgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7
CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9u
LCBtX3ZhcmlhYmxlcy5sb2NhbChsb2NhbCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
bG9jYWwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTU0E6IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0VGFpbC5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IGJsb2NrLT52YWx1ZXNBdFRhaWxbaV0ubWVyZ2UobV92YXJpYWJsZXNb
aV0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3Ig
aXRlciA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuYmVnaW4oKTsKKyAgICAgICAgICAgIEhhc2hT
ZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBibG9jay0+c3NhLT5saXZlQXRUYWlsLmVuZCgpOwor
ICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBibG9jay0+
c3NhLT52YWx1ZXNBdFRhaWwuZmluZChub2RlKS0+dmFsdWUubWVyZ2UoZm9yTm9kZShub2RlKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMjkyLDYgKzM0NiwxOCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIGZvck5vZGUobm9k
ZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIEdldEFyZ3VtZW50OiB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1f
Zm9ybSA9PSBTU0EpOworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
bV92YXJpYWJsZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgIEFTU0VSVCh2
YWx1ZS5pc1RvcCgpKTsKKyAgICAgICAgRmlsdHJhdGlvblJlc3VsdCByZXN1bHQgPQorICAgICAg
ICAgICAgdmFsdWUuZmlsdGVyKHR5cGVGaWx0ZXJGb3IodXNlS2luZEZvcih2YXJpYWJsZS0+Zmx1
c2hGb3JtYXQoKSkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSBG
aWx0cmF0aW9uT0spOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGJy
ZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKQEAgLTMyMywxMyArMzg5LDEzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBj
YXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKICAgICAgICAgLy8gRG9u
J3QgbmVlZCB0byBkbyBhbnl0aGluZy4gQSBNb3ZIaW50IGlzIGVmZmVjdGl2ZWx5IGEgcHJvbWlz
ZSB0aGF0IHRoZSBTZXRMb2NhbAogICAgICAgICAvLyB3YXMgZGVhZC4KICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50
OiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTU4Niw2ICsxNjUyLDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVj
dHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgLy8g
VGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLgor
ICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBVcHNpbG9uOiB7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGZv
ck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5waGkoKSkgPSB2YWx1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEZsdXNoOgogICAg
IGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQnJlYWtwb2ludDoKQEAgLTE2NzgsNyArMTc1
NSw3IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJTdHJ1Y3QKICAgICBtX2Rp
ZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0
YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZh
cmlhYmxlLCBOb2RlKiBub2RlKQorYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWls
KEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBO
b2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTc2NiwyMSArMTg0Myw0NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRl
QXRUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1l
cmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQorYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKIHsKICAgICBBU1NFUlQo
ZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCkgPT0gdG8tPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVz
QXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpKTsKICAgICAKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAKLSAgICBmb3Ig
KHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJv
bS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5h
cmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkpOworICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICBjYXNlIFRocmVhZGVkQ1BT
OiB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJpYWJsZUJldHdl
ZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCksIHRvLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpLCBmcm9tLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20tPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBk
ZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9jYWwpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJvbS0+
dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2Nh
bCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2Fs
IDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKLSAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmxvY2Fs
KGxvY2FsKTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyhk
ZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkp
OworICAgICAgICAKKyAgICBjYXNlIFNTQTogeworICAgICAgICBmb3IgKHNpemVfdCBpID0gZnJv
bS0+dmFsdWVzQXRUYWlsLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gdG8t
PnZhbHVlc0F0SGVhZFtpXS5tZXJnZShmcm9tLT52YWx1ZXNBdFRhaWxbaV0pOworICAgICAgICAK
KyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSB0by0+c3NhLT5saXZlQXRI
ZWFkLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSB0by0+
c3NhLT5saXZlQXRIZWFkLmVuZCgpOworICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRl
cikgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSB0by0+c3NhLT52YWx1ZXNBdEhlYWQuZmluZChub2RlKS0+dmFsdWUubWVyZ2UoCisgICAg
ICAgICAgICAgICAgZnJvbS0+c3NhLT52YWx1ZXNBdFRhaWwuZmluZChub2RlKS0+dmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgaWYgKCF0by0+Y2ZhSGFzVmlzaXRlZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsIHRoaXMgYmVmb3JlIGJl
Z2lubmluZyBDRkEgdG8gaW5pdGlhbGl6ZSB0aGUgYWJzdHJhY3QgdmFsdWVzIG9mCiAgICAgLy8g
YXJndW1lbnRzLCBhbmQgdG8gaW5kaWNhdGUgd2hpY2ggYmxvY2tzIHNob3VsZCBiZSBsaXN0ZWQg
Zm9yIENGQQogICAgIC8vIGV4ZWN1dGlvbi4KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKEdy
YXBoJik7CisgICAgdm9pZCBpbml0aWFsaXplKCk7CiAKICAgICAvLyBTdGFydCBhYnN0cmFjdGx5
IGV4ZWN1dGluZyB0aGUgZ2l2ZW4gYmFzaWMgYmxvY2suIEluaXRpYWxpemVzIHRoZQogICAgIC8v
IG5vdGlvbiBvZiBhYnN0cmFjdCBzdGF0ZSB0byB3aGF0IHdlIGJlbGlldmUgaXQgdG8gYmUgYXQg
dGhlIGhlYWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5
TGlzdC5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FkamFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksMTUgQEAgcHVibGlj
OgogICAgIAogICAgIEVkZ2UgY2hpbGQxVW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV93b3Jk
c1swXTsgfQogICAgIAorICAgIEVkZ2UganVzdE9uZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICghIWNoaWxkMSgpICYmICFjaGlsZDIoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFj
aGlsZDMoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEVkZ2UoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXplKEVkZ2Ug
Y2hpbGQxLCBFZGdlIGNoaWxkMiwgRWRnZSBjaGlsZDMpCiAgICAgewogICAgICAgICBjaGlsZCgw
KSA9IGNoaWxkMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQg
bnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCisgICAgOiBieXRlY29kZUJlZ2luKGJ5
dGVjb2RlQmVnaW4pCisgICAgLCBpbmRleChOb0Jsb2NrKQorICAgICwgaXNPU1JUYXJnZXQoZmFs
c2UpCisgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQorICAgICwgY2ZhU2hvdWxkUmV2aXNpdChm
YWxzZSkKKyAgICAsIGNmYUZvdW5kQ29uc3RhbnRzKGZhbHNlKQorICAgICwgY2ZhRGlkRmluaXNo
KHRydWUpCisgICAgLCBjZmFCcmFuY2hEaXJlY3Rpb24oSW52YWxpZEJyYW5jaERpcmVjdGlvbikK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgLCBpc0xpbmtlZChmYWxzZSkKKyNlbmRpZgorICAg
ICwgaXNSZWFjaGFibGUoZmFsc2UpCisgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRz
LCBudW1Mb2NhbHMpCisgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMpCisgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgLCB2
YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCit7Cit9CisKK0Jhc2ljQmxvY2s6
On5CYXNpY0Jsb2NrKCkgeyB9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2ln
bmVkIG5ld051bUxvY2FscykKK3sKKyAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5l
d051bUxvY2Fscyk7CisgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2Nh
bHMpOworICAgIHZhbHVlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2
YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Cit9CisKK2Jvb2wgQmFzaWNC
bG9jazo6aXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHBoaXNbaV0gPT0gbm9kZSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgQmFzaWNCbG9jazo6aXNJbkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3QKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU5vZGVzKCk7ICsraSkgeworICAgICAgICBpZiAobm9k
ZShpKSA9PSBteU5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2lj
QmxvY2sqIGJsb2NrKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3Nv
cnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSAhPSBibG9jaykK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwcmVkZWNlc3NvcnNbaV0gPSBwcmVkZWNl
c3NvcnMubGFzdCgpOworICAgICAgICBwcmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJh
c2ljQmxvY2sqIHRvKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IHByZWRlY2Vzc29ycy5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSAhPSBmcm9tKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIHByZWRlY2Vzc29yc1tpXSA9IHRvOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgiIyIsIGluZGV4KTsKK30KKworQmFzaWNCbG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNp
Y0Jsb2NrKiBibG9jaykKKyAgICA6IGZsdXNoRm9ybWF0QXRIZWFkKE9wZXJhbmRzTGlrZSwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAsIGZsdXNoRm9ybWF0QXRUYWlsKE9wZXJhbmRzTGlr
ZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAsIGF2YWlsYWJpbGl0eUF0SGVhZChPcGVy
YW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBhdmFpbGFiaWxpdHlBdFRh
aWwoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQoreworfQorCitCYXNpY0Js
b2NrOjpTU0FEYXRhOjp+U1NBRGF0YSgpIHsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw4IEBACiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00NCw0MiArNDYsMTYgQEAgY2xhc3MgSW5zZXJ0aW9uU2V0
OwogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKIAogc3Ry
dWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKLSAgICBCYXNpY0Jsb2Nr
KHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQg
bnVtTG9jYWxzKQotICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKLSAgICAg
ICAgLCBpbmRleChOb0Jsb2NrKQotICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICAg
ICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2UpCi0gICAgICAgICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxz
ZSkKLSAgICAgICAgLCBjZmFGb3VuZENvbnN0YW50cyhmYWxzZSkKLSAgICAgICAgLCBjZmFEaWRG
aW5pc2godHJ1ZSkKLSAgICAgICAgLCBjZmFCcmFuY2hEaXJlY3Rpb24oSW52YWxpZEJyYW5jaERp
cmVjdGlvbikKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICwgaXNMaW5rZWQoZmFsc2Up
Ci0jZW5kaWYKLSAgICAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAgICAgLCB2YXJpYWJs
ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgICAgICwgdmFyaWFibGVzQXRU
YWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICAgICAsIHZhbHVlc0F0SGVhZChudW1B
cmd1bWVudHMsIG51bUxvY2FscykKLSAgICAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRz
LCBudW1Mb2NhbHMpCi0gICAgewotICAgIH0KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVj
b2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKTsKKyAg
ICB+QmFzaWNCbG9jaygpOwogICAgIAotICAgIH5CYXNpY0Jsb2NrKCkKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKLSAgICB7
Ci0gICAgICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAg
ICAgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAgICAg
ICB2YWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgICAgIHZhbHVl
c0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICB9CisgICAgdm9pZCBlbnN1
cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gIXNpemUoKTsgfQogICAgIE5vZGUqJiBhdChzaXplX3QgaSkgeyByZXR1cm4g
bV9ub2Rlc1tpXTsgfQogICAgIE5vZGUqIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX25v
ZGVzW2ldOyB9CisgICAgTm9kZSomIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIGF0KGkp
OyB9CiAgICAgTm9kZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7
IH0KICAgICBOb2RlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KICAg
ICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkgeyBtX25vZGVzLnJlc2l6ZShzaXplKTsgfQpAQCAt
OTYsNDQgKzcyLDM0IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MK
ICAgICB9CiAgICAgYm9vbCBpc1BoaUluZGV4KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBpIDwg
cGhpcy5zaXplKCk7IH0KICAgICAKLSAgICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0
Ci0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBoaXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIGlmIChwaGlzW2ldID09IG5vZGUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAK
LSAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0Ci0gICAgewotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAgaWYg
KG5vZGUoaSkgPT0gbXlOb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgYm9vbCBpc0luUGhpcyhOb2Rl
KiBub2RlKSBjb25zdDsKKyAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0Owog
ICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1
Y2Nlc3NvcnMoKTsgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBp
bmRleCkKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGxhc3QoKS0+c3VjY2Vzc29yKGluZGV4KTsKICAgICB9Ci0gICAgQmFz
aWNCbG9jayogc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJvb2wgY29uZGl0aW9uKQorICAgIEJhc2lj
QmxvY2sqJiBzdWNjZXNzb3JGb3JDb25kaXRpb24oYm9vbCBjb25kaXRpb24pCiAgICAgewogICAg
ICAgICByZXR1cm4gbGFzdCgpLT5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKICAg
ICB9CisgICAgCisgICAgdm9pZCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jayk7
CisgICAgdm9pZCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9j
ayogdG8pOwogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRl
bXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZh
bHVlQXJncykgXAogICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUq
IGFwcGVuZE5vZGUoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVl
UGFyYW1zKTsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9B
UFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCi0gICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJpbnQo
IiMiLCBpbmRleCk7Ci0gICAgfQorI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBs
YXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVl
UGFyYW1zLCB2YWx1ZUFyZ3MpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRl
UG9zdCBOb2RlKiBhcHBlbmROb25UZXJtaW5hbChHcmFwaCYsIFNwZWN1bGF0ZWRUeXBlIHZhbHVl
UGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOworICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5D
VElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05P
REUKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiAg
ICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJsb2NrIGxpbmtpbmcgYW5k
IE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5IG1lYW5pbmdsZXNzCiAgICAgLy8gZm9yIG90aGVyIHB1
cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4KQEAgLTE2MCw2ICsxMjYsMjEgQEAgc3RydWN0IEJhc2lj
QmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIAogICAgIE9wZXJhbmRzPEFic3RyYWN0
VmFsdWU+IHZhbHVlc0F0SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNB
dFRhaWw7CisgICAgCisgICAgc3RydWN0IFNTQURhdGEgeworICAgICAgICBPcGVyYW5kczxGbHVz
aEZvcm1hdD4gZmx1c2hGb3JtYXRBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0
PiBmbHVzaEZvcm1hdEF0VGFpbDsKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0
eUF0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAg
ICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKKyAgICAgICAgSGFzaFNldDxOb2RlKj4g
bGl2ZUF0VGFpbDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFsdWVz
QXRIZWFkOworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdFRh
aWw7CisgICAgICAgIAorICAgICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKKyAgICAgICAgflNT
QURhdGEoKTsKKyAgICB9OworICAgIE93blB0cjxTU0FEYXRhPiBzc2E7CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE1MjU4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNiArNDMsMTcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9O
T0RFKQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKIAorI2RlZmluZSBERkdfREVGSU5F
X0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVl
UGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKKyAgICB0ZW1wbGF0ZVByZSB0
eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9u
VGVybWluYWwoR3JhcGgmIGdyYXBoLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29t
bWEgdmFsdWVQYXJhbXMpIFwKKyAgICB7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGgu
YWRkTm9kZSh0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAorICAgICAgICBhcHBl
bmQobGFzdCgpKTsgXAorICAgICAgICBhdChzaXplKCkgLSAyKSA9IHJlc3VsdDsgXAorICAgICAg
ICByZXR1cm4gcmVzdWx0OyBcCisgICAgfQorICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5D
VElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05P
REUKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmxvY2tJ
bnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KEdyYXBoJiBncmFwaCkKKyAgICA6IG1fZ3Jh
cGgoZ3JhcGgpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQo
KSB7IH0KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KGNvbnN0IEJsb2NrSW5zZXJ0
aW9uJiBpbnNlcnRpb24pCit7CisgICAgbV9pbnNlcnRpb25zLmFwcGVuZChpbnNlcnRpb24pOwor
fQorCit2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNzUmVm
UHRyPEJhc2ljQmxvY2s+IGJsb2NrKQoreworICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRl
eCwgYmxvY2spKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChz
aXplX3QgaW5kZXgpCit7CisgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYo
bmV3IEJhc2ljQmxvY2soCisgICAgICAgIFVJTlRfTUFYLAorICAgICAgICBtX2dyYXBoLmJsb2Nr
KDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgbV9ncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICBibG9j
ay0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgIGluc2VydChpbmRleCwgYmxvY2spOworICAgIHJl
dHVybiBibG9jay5nZXQoKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omlu
c2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpCit7CisgICAgcmV0dXJuIGluc2VydChiZWZv
cmUtPmluZGV4KTsKK30KKworYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCit7Cisg
ICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBv
cmRlci4gU28sIHdlIG5lZWQgdG8KKyAgICAvLyBzb3J0IHRoZW0gYmVmb3JlIHJ1bm5pbmcgV1RG
OjpleGVjdXRlSW5zZXJ0aW9ucy4KKyAgICBzdGQ6OnNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCks
IG1faW5zZXJ0aW9ucy5lbmQoKSk7CisKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2dyYXBoLm1f
YmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAorICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRy
aWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgIC8vIGhlYWx0
aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgdW5zaWduZWQgdGFy
Z2V0SW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgc291cmNlSW5kZXggPSAwOyBzb3VyY2VJ
bmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOykgeworICAgICAgICBSZWZQdHI8QmFzaWNC
bG9jaz4gYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3NvdXJjZUluZGV4KytdOworICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fZ3JhcGgubV9ibG9j
a3NbdGFyZ2V0SW5kZXgrK10gPSBibG9jazsKKyAgICB9CisgICAgbV9ncmFwaC5tX2Jsb2Nrcy5y
ZXNpemUodGFyZ2V0SW5kZXgpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9j
a3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tp
XS0+aW5kZXggPSBpOworICAgIAorICAgIC8vIEFuZCBmaW5hbGx5LCBpbnZhbGlkYXRlIGFsbCBh
bmFseXNlcyB0aGF0IHJlbHkgb24gdGhlIENGRy4KKyAgICBtX2dyYXBoLmludmFsaWRhdGVDRkco
KTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgREZH
QmxvY2tJbnNlcnRpb25TZXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSA8d3RmL0lu
c2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPFJlZlB0cjxCYXNpY0Jsb2Nr
PiA+IEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6
CisgICAgQmxvY2tJbnNlcnRpb25TZXQoR3JhcGgmIGdyYXBoKTsKKyAgICB+QmxvY2tJbnNlcnRp
b25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGluc2VydChjb25zdCBCbG9ja0luc2VydGlvbiYgaW5z
ZXJ0aW9uKTsKKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFzaWNC
bG9jaz4gYmxvY2spOworICAgIEJhc2ljQmxvY2sqIGluc2VydChzaXplX3QgaW5kZXgpOworICAg
IEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpOworICAgIAorICAg
IGJvb2wgZXhlY3V0ZSgpOworCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIFZl
Y3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdCbG9ja0luc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3Jt
ID09IFRocmVhZGVkQ1BTIHx8IG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CiAgICAgICAgIEFTU0VS
VChtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBHbG9iYWxseVVuaWZpZWQpOwogICAgICAg
ICBBU1NFUlQobV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXZlcnl0aGluZ0lzTGl2ZSk7CiAg
ICAgICAgIApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGFmdGVyIGFsbCBw
cmVkZWNlc3NvcnMgaGF2ZSBiZWVuIHZpc2l0ZWQuIE9ubHkgbG9vcHMgd2lsbCBjYXVzZSB0aGlz
IGFuYWx5c2lzIHRvCiAgICAgICAgIC8vIHJldmlzaXQgYmxvY2tzLCBhbmQgdGhlIGFtb3VudCBv
ZiByZXZpc2l0aW5nIGlzIHByb3BvcnRpb25hbCB0byBsb29wIGRlcHRoLgogICAgICAgICAKLSAg
ICAgICAgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShtX2dyYXBoKTsKKyAgICAgICAgbV9zdGF0
ZS5pbml0aWFsaXplKCk7CiAgICAgICAgIAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBtX2No
YW5nZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYxLDE1ICszNjEsOSBAQCBwcml2YXRlOgogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygKICAgICAgICAg
ICAgICJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlzIGR1ZSB0byBqZXR0aXNvbiBvZiBCbG9j
ayAiLCAqamV0dGlzb25lZEJsb2NrLAotICAgICAgICAgICAgIiBmcm9tIEJsb2NrICIsICpibG9j
aywgIi5cbiIsCisgICAgICAgICAgICAiIGZyb20gQmxvY2sgIiwgKmJsb2NrLCAiLlxuIik7CiAj
ZW5kaWYKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+
cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoamV0dGlzb25lZEJs
b2NrLT5wcmVkZWNlc3NvcnNbaV0gIT0gYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29yc1tpXSA9IGpldHRpc29u
ZWRCbG9jay0+cHJlZGVjZXNzb3JzLmxhc3QoKTsKLSAgICAgICAgICAgIGpldHRpc29uZWRCbG9j
ay0+cHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9CisgICAgICAgIGpldHRpc29uZWRCbG9jay0+cmVtb3ZlUHJlZGVjZXNzb3IoYmxvY2spOwog
ICAgIH0KIAogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4gbm9CbG9ja3MoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQ
U1JldGhyZWFkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsMTIgKzMyNywxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQgbWF5IG9ubHkgYXBwZWFyIGlu
IHRoZSByb290IGJsb2NrLgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRhaWwgdmFy
aWFibGU6IHRoZSBsYXN0IHRoaW5nIHRoYXQgaGFwcGVuZWQgdG8gdGhlIHZhcmlhYmxlIGluIHRo
ZSBibG9jay4KLSAgICAgICAgICAgIC8vIEl0IG1heSBiZSBhIEZsdXNoLCBQaGFudG9tTG9jYWws
IEdldExvY2FsLCBTZXRMb2NhbCwgb3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLyBJdCBt
YXkgYmUgYSBGbHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwgU2V0TG9jYWwsIFNldEFyZ3Vt
ZW50LCBvciBQaGkuCiAgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCBtYXkgb25seSBhcHBlYXIg
aW4gdGhlIHJvb3QgYmxvY2suIE5vdGUgdGhhdCBpZiB0aGVyZSBldmVyCiAgICAgICAgICAgICAv
LyB3YXMgYSBHZXRMb2NhbCB0byB0aGUgdmFyaWFibGUsIGFuZCBpdCB3YXMgZm9sbG93ZWQgYnkg
UGhhbnRvbUxvY2FscyBhbmQKICAgICAgICAgICAgIC8vIEZsdXNoZXMgYnV0IG5vdCBTZXRMb2Nh
bHMsIHRoZW4gdGhlIHRhaWwgdmFyaWFibGUgd2lsbCBiZSB0aGUgR2V0TG9jYWwuCiAgICAgICAg
ICAgICAvLyBUaGlzIHJlZmxlY3RzIHRoZSBmYWN0IHRoYXQgeW91IG9ubHkgY2FyZSB0aGF0IHRo
ZSB0YWlsIHZhcmlhYmxlIGlzIGEKLSAgICAgICAgICAgIC8vIEZsdXNoIG9yIFBoYW50b21Mb2Nh
bCBpZiBub3RoaW5nIGVsc2UgaW50ZXJlc3RpbmcgaGFwcGVuZWQuCisgICAgICAgICAgICAvLyBG
bHVzaCBvciBQaGFudG9tTG9jYWwgaWYgbm90aGluZyBlbHNlIGludGVyZXN0aW5nIGhhcHBlbmVk
LiBMaWtld2lzZSwgaWYKKyAgICAgICAgICAgIC8vIHRoZXJlIGV2ZXIgd2FzIGEgU2V0TG9jYWwg
YW5kIGl0IHdhcyBmb2xsb3dlZCBieSBGbHVzaGVzLCB0aGVuIHRoZSB0YWlsCisgICAgICAgICAg
ICAvLyB2YXJpYWJsZSB3aWxsIGJlIGEgU2V0TG9jYWwgYW5kIG5vdCB0aG9zZSBzdWJzZXF1ZW50
IEZsdXNoZXMuCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gQ2hpbGQgb2YgR2V0TG9j
YWw6IHRoZSBvcGVyYXRpb24gdGhhdCB0aGUgR2V0TG9jYWwga2VlcHMgYWxpdmUuIEZvcgogICAg
ICAgICAgICAgLy8gdW5jYXB0dXJlZCBsb2NhbHMsIGl0IG1heSBiZSBhIFBoaSBmcm9tIHRoZSBj
dXJyZW50IGJsb2NrLiBGb3IgYXJndW1lbnRzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNyArNDgsMTUgQEAg
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wdAogICAgIHN3aXRjaCAoc3Rh
dGUpIHsKICAgICBjYXNlIEJlZm9yZUZpeHBvaW50OgogICAgICAgICBvdXQucHJpbnQoIkJlZm9y
ZUZpeHBvaW50Iik7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBG
aXhwb2ludE5vdENvbnZlcmdlZDoKICAgICAgICAgb3V0LnByaW50KCJGaXhwb2ludE5vdENvbnZl
cmdlZCIpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRml4cG9p
bnRDb252ZXJnZWQ6CiAgICAgICAgIG91dC5wcmludCgiRml4cG9pbnRDb252ZXJnZWQiKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEdyYXBoRm9ybSBmb3JtKQpAQCAtNjYsMTQgKzY0LDE1IEBAIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBHcmEKICAgICBzd2l0Y2ggKGZvcm0pIHsKICAg
ICBjYXNlIExvYWRTdG9yZToKICAgICAgICAgb3V0LnByaW50KCJMb2FkU3RvcmUiKTsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFRocmVhZGVkQ1BTOgogICAgICAg
ICBvdXQucHJpbnQoIlRocmVhZGVkQ1BTIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTU0E6CisgICAgICAgIG91dC5wcmludCgiU1NBIik7
CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVuaWZpY2F0aW9u
U3RhdGUgc3RhdGUpCkBAIC04MSwxNCArODAsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIFVuaQogICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICBjYXNlIExvY2FsbHlV
bmlmaWVkOgogICAgICAgICBvdXQucHJpbnQoIkxvY2FsbHlVbmlmaWVkIik7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBHbG9iYWxseVVuaWZpZWQ6CiAgICAgICAg
IG91dC5wcmludCgiR2xvYmFsbHlVbmlmaWVkIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBSZWZDb3VudFN0
YXRlIHN0YXRlKQpAQCAtOTYsMTQgKzkzLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBSZWYKICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2FzZSBFdmVyeXRoaW5n
SXNMaXZlOgogICAgICAgICBvdXQucHJpbnQoIkV2ZXJ5dGhpbmdJc0xpdmUiKTsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4YWN0UmVmQ291bnQ6CiAgICAgICAg
IG91dC5wcmludCgiRXhhY3RSZWZDb3VudCIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUHJvb2ZTdGF0dXMg
c3RhdHVzKQpAQCAtMTExLDE0ICsxMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFBybwogICAgIHN3aXRjaCAoc3RhdHVzKSB7CiAgICAgY2FzZSBJc1Byb3ZlZDoK
ICAgICAgICAgb3V0LnByaW50KCJJc1Byb3ZlZCIpOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgTmVlZHNDaGVjazoKICAgICAgICAgb3V0LnByaW50KCJOZWVkc0No
ZWNrIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAx
NTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTIsNyArMjEyLDEwIEBAIGVudW0gR3JhcGhGb3JtIHsKICAgICAvLwogICAg
IC8vIFRocmVhZGVkQ1BTIGZvcm0gaXMgc3VpdGFibGUgZm9yIGRhdGEgZmxvdyBhbmFseXNpcyAo
Q0ZBLCBwcmVkaWN0aW9uCiAgICAgLy8gcHJvcGFnYXRpb24pLCByZWdpc3RlciBhbGxvY2F0aW9u
LCBhbmQgY29kZSBnZW5lcmF0aW9uLgotICAgIFRocmVhZGVkQ1BTCisgICAgVGhyZWFkZWRDUFMs
CisgICAgCisgICAgLy8gU1NBIGZvcm0uIFNlZSBERkdTU0FDb252ZXJzaW9uUGhhc2UuaCBmb3Ig
YSBkZXNjcmlwdGlvbi4KKyAgICBTU0EKIH07CiAKIC8vIERlc2NyaWJlcyB0aGUgc3RhdGUgb2Yg
dGhlIFVuaW9uRmluZCBzdHJ1Y3R1cmUgb2YgVmFyaWFibGVBY2Nlc3NEYXRhJ3MuCkBAIC0yNTAs
NiArMjUzLDE5IEBAIGlubGluZSBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1c0ZvcklzUHJvdmUKICAg
ICByZXR1cm4gaXNQcm92ZWQgPyBJc1Byb3ZlZCA6IE5lZWRzQ2hlY2s7CiB9CiAKK2VudW0gS2ls
bFN0YXR1cyB7IERvZXNOb3RLaWxsLCBEb2VzS2lsbCB9OworCitpbmxpbmUgYm9vbCBkb2VzS2ls
bChLaWxsU3RhdHVzIGtpbGxTdGF0dXMpCit7CisgICAgQVNTRVJUKGtpbGxTdGF0dXMgPT0gRG9l
c05vdEtpbGwgfHwga2lsbFN0YXR1cyA9PSBEb2VzS2lsbCk7CisgICAgcmV0dXJuIGtpbGxTdGF0
dXMgPT0gRG9lc0tpbGw7Cit9CisKK2lubGluZSBLaWxsU3RhdHVzIGtpbGxTdGF0dXNGb3JEb2Vz
S2lsbChib29sIGRvZXNLaWxsKQoreworICAgIHJldHVybiBkb2VzS2lsbCA/IERvZXNLaWxsIDog
RG9lc05vdEtpbGw7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiBib29s
IGNoZWNrQW5kU2V0KFQmIGxlZnQsIFUgcmlnaHQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNp
b24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MCw3ICszNzAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5oYXNW
YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5oYXNW
YXJpYWJsZUFjY2Vzc0RhdGEobV9ncmFwaCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVlKTsKICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCkBAIC0zODksNyArMzg5LDcgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIGZvciAoOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5C
bG9jaykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2sp
OwotICAgICAgICAgICAgaWYgKCFub2RlLT5oYXNMb2NhbCgpKQorICAgICAgICAgICAgaWYgKCFu
b2RlLT5oYXNMb2NhbChtX2dyYXBoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGlmIChub2RlLT5sb2NhbCgpICE9IG9wZXJhbmQpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNl
cnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgi
CisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJjcml0aWNhbCBl
ZGdlIGJyZWFraW5nIikKKyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxv
Y2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQW4gZWRnZSBBLT5CIGlzIGNy
aXRpY2FsIGlmIEEgaGFzIG11bHRpcGxlIHN1Y2Nlc3NvciBhbmQgQiBoYXMgbXVsdGlwbGUKKyAg
ICAgICAgICAgIC8vIHByZWRlY2Vzc29ycy4gVGh1cyB3ZSBmYWlsIGVhcmx5IGlmIHdlIGRvbid0
IGhhdmUgbXVsdGlwbGUgc3VjY2Vzc29ycy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KGJsb2NrLT5udW1TdWNjZXNzb3JzKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1
Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqKiBzdWNjZXNz
b3IgPSAmYmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgICAgICBpZiAoKCpzdWNjZXNz
b3IpLT5wcmVkZWNlc3NvcnMuc2l6ZSgpIDw9IDEpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJyZWFrQ3JpdGljYWxFZGdl
KGJsb2NrLCBzdWNjZXNzb3IpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdm9pZCBicmVha0NyaXRpY2FsRWRnZShCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvciwg
QmFzaWNCbG9jayoqIHN1Y2Nlc3NvcikKKyAgICB7CisgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQo
KTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHBhZCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydEJlZm9yZSgqc3VjY2Vzc29yKTsKKyAgICAgICAgcGFkLT5hcHBlbmROb2RlKAorICAgICAg
ICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsICgqc3VjY2Vzc29yKS0+YXQoMCktPmNvZGVP
cmlnaW4sIE9wSW5mbygqc3VjY2Vzc29yKSk7CisgICAgICAgIHBhZC0+cHJlZGVjZXNzb3JzLmFw
cGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgICgqc3VjY2Vzc29yKS0+cmVwbGFjZVByZWRlY2Vz
c29yKHByZWRlY2Vzc29yLCBwYWQpOworICAgICAgICAKKyAgICAgICAgKnN1Y2Nlc3NvciA9IHBh
ZDsKKyAgICB9CisgICAgCisgICAgQmxvY2tJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cit9
OworCitib29sIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhHcmFwaCYgZ3JhcGgpCit7Cisg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDcml0aWNhbCBFZGdlIEJyZWFr
aW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPENyaXRpY2FsRWRnZUJyZWFraW5nUGhh
c2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQ
aGFzZV9oCisjZGVmaW5lIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gSW5zZXJ0cyBkdW1teSBi
YXNpYyBibG9ja3MgdG8gYnJlYWsgY3JpdGljYWwgZWRnZXMuIEFuIGVkZ2UgQS0+QiBpcworLy8g
Y3JpdGljYWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29ycyBhbmQgQiBoYXMgbXVsdGlwbGUg
cHJlZGVzc29ycy4KKworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoR3JhcGgmKTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDE1MjU4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAg
eworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMgfHwgbV9ncmFw
aC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCiAgICAgICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBj
b3VudHMgdG8gMCBmb3IgYWxsIG5vZGVzLgogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
IHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKQEAgLTc1LDEwICs3NywzMSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKLSAgICAgICAgICAgIG1fd29ya2xpc3QucmVtb3Zl
TGFzdCgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJ
dCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCi0gICAg
ICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBjb3VudEVkZ2Up
OworICAgICAgICAgICAgd2hpbGUgKCFtX3dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgICAgICAgICBt
X3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSk7IC8vIEl0IHNob3VsZCBub3QgYmUgb24gdGhlIHdvcmtsaXN0IHVubGVz
cyBpdCdzIHJlZidlZC4KKyAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTiht
X2dyYXBoLCBub2RlLCBjb3VudEVkZ2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgICAgICAgICAg
Ly8gRmluZCBQaGktPlVwc2lsb24gZWRnZXMsIHdoaWNoIGFyZSByZXByZXNlbnRlZCBhcyBtZXRh
LWRhdGEgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8gVXBzaWxvbi4KKyAgICAgICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNpbG9uKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+cGhpKCktPnNo
b3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnROb2RlKG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
IHsKQEAgLTk0LDggKzExNywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLmlzUHJvdmVkKCkgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IFVudHlwZWRVc2UpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAg
ICAgICAgICAgICAgIGNhc2UgTW92SGludDogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpID09IChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQ
UykpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkud2lsbE5vdEhhdmVD
aGVjaygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2li
aWxpdHkgdGhhdCBVSW50MzJUb051bWJlciBpcyBkZWFkIGJ1dCBpdHMKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGNoaWxkIGlzbid0OyBpZiBzbyB0aGVuIHdlIHNob3VsZCBNb3ZIaW50IHRo
ZSBjaGlsZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNo
b3VsZEdlbmVyYXRlKCkKQEAgLTExNyw4ICsxNDIsMTAgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAg
IGNhc2UgU2V0QXJndW1lbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTGVhdmUgdGhlbSBh
cyBub3Qgc2hvdWxkR2VuZXJhdGUuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7CkBAIC0xMjYsNyAr
MTUzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
aGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxk
KCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSB8fCBlZGdlLmlzUHJv
dmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWVkZ2UgfHwgZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
UGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgZWRnZSk7CkBAIC0xNTgsMjEgKzE4NSwyNSBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgYW4gInVucHJvdmVkIiB1bnR5
cGVkIHVzZSBmb3IgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlLiBUaGUgQ0ZBCiAgICAgICAgIC8v
IHdpbGwganVzdCBub3QgaGF2ZSBnb3R0ZW4gYXJvdW5kIHRvIGl0LgotICAgICAgICBpZiAoZWRn
ZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgIGlm
IChlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
aWYgKCFlZGdlLT5wb3N0Zml4UmVmKCkpCiAgICAgICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChl
ZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY291bnROb2RlKE5vZGUqIG5vZGUp
CisgICAgeworICAgICAgICBpZiAobm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICB9CisgICAgCiAgICAg
dm9pZCBjb3VudEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIC8vIERvbid0
IGNvdW50IGVkZ2VzIHRoYXQgYXJlIGFscmVhZHkgY291bnRlZCBmb3IgdGhlaXIgdHlwZSBjaGVj
a3MuCi0gICAgICAgIGlmICghKGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmIChl
ZGdlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgIGlmIChlZGdlLndpbGxIYXZlQ2hlY2soKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV93b3JrbGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkp
OworICAgICAgICBjb3VudE5vZGUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTE4MSw3
ICsyMTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRy
ZW4uY2hpbGQoaSk7CiAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgp
ID09IFVudHlwZWRVc2UpCisgICAgICAgICAgICBpZiAoZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkp
CiAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0pOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAko
cmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw5IEBAIHN0YXRpYyBDb21waWxhdGlvblJl
c3VsdCBjb21waWxlKENvbXBpbGUKICAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpIHx8ICFN
YWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCiAgICAgICAgIHJldHVybiBD
b21waWxhdGlvbkZhaWxlZDsKICAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNoKCkgIT0gQ29k
ZUJsb2NrSGFzaCgiRWFnamFvIikpCisgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsK
KyAgICAKICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCiAgICAgICAgIGRhdGFMb2co
IkRGRyhEcml2ZXIpIGNvbXBpbGluZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1
Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOwogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShyZXZpc2lvbiAxNTI1ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw4IEBAIHZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAogICAgICAgICAgICAgb3V0LnByaW50KCJDaGVjazoiKTsKICAgICAgICAgb3V0LnByaW50KHVz
ZUtpbmQoKSwgIjoiKTsKICAgICB9CisgICAgaWYgKGRvZXNLaWxsKCkpCisgICAgICAgIG91dC5w
cmludCgiS2lsbDoiKTsKICAgICBvdXQucHJpbnQobm9kZSgpKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTIg
QEAgY2xhc3MgQWRqYWNlbmN5TGlzdDsKIAogY2xhc3MgRWRnZSB7CiBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgRWRnZShOb2RlKiBub2RlID0gMCwgVXNlS2luZCB1c2VLaW5kID0gVW50eXBlZFVzZSwg
UHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMgPSBOZWVkc0NoZWNrKQorICAgIGV4cGxpY2l0IEVkZ2Uo
Tm9kZSogbm9kZSA9IDAsIFVzZUtpbmQgdXNlS2luZCA9IFVudHlwZWRVc2UsIFByb29mU3RhdHVz
IHByb29mU3RhdHVzID0gTmVlZHNDaGVjaywgS2lsbFN0YXR1cyBraWxsU3RhdHVzID0gRG9lc05v
dEtpbGwpCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VX
b3JkKG5vZGUsIHVzZUtpbmQsIHByb29mU3RhdHVzKSkKKyAgICAgICAgOiBtX2VuY29kZWRXb3Jk
KG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQsIHByb29mU3RhdHVzLCBraWxsU3RhdHVzKSkKICNlbHNl
CiAgICAgICAgIDogbV9ub2RlKG5vZGUpCi0gICAgICAgICwgbV9lbmNvZGVkV29yZChtYWtlV29y
ZCh1c2VLaW5kLCBwcm9vZlN0YXR1cykpCisgICAgICAgICwgbV9lbmNvZGVkV29yZChtYWtlV29y
ZCh1c2VLaW5kLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cykpCiAjZW5kaWYKICAgICB7CiAgICAg
fQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROb2RlKE5vZGUqIG5vZGUp
CiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtl
V29yZChub2RlLCB1c2VLaW5kKCksIHByb29mU3RhdHVzKCkpOworICAgICAgICBtX2VuY29kZWRX
b3JkID0gbWFrZVdvcmQobm9kZSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cygpLCBraWxsU3RhdHVz
KCkpOwogI2Vsc2UKICAgICAgICAgbV9ub2RlID0gbm9kZTsKICNlbmRpZgpAQCAtNzEsNyArNzEs
NyBAQCBwdWJsaWM6CiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHVuc2lnbmVk
IG1hc2tlZCA9IG1fZW5jb2RlZFdvcmQgJiAoKCgxIDw8IHNoaWZ0KCkpIC0gMSkpOwotICAgICAg
ICB1bnNpZ25lZCBzaGlmdGVkID0gbWFza2VkID4+IDE7CisgICAgICAgIHVuc2lnbmVkIHNoaWZ0
ZWQgPSBtYXNrZWQgPj4gMjsKICNlbHNlCiAgICAgICAgIHVuc2lnbmVkIHNoaWZ0ZWQgPSBzdGF0
aWNfY2FzdDxVc2VLaW5kPihtX2VuY29kZWRXb3JkKSA+PiAxOwogI2VuZGlmCkBAIC04OSw3ICs4
OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlKCkpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtp
bmQsIHByb29mU3RhdHVzKCkpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9k
ZSgpLCB1c2VLaW5kLCBwcm9vZlN0YXR1cygpLCBraWxsU3RhdHVzKCkpOwogI2Vsc2UKICAgICAg
ICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQsIHByb29mU3RhdHVzKCkpOwogI2Vu
ZGlmCkBAIC0xMDgsOSArMTA4LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG5v
ZGUoKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VX
b3JkKG5vZGUoKSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cyk7CisgICAgICAgIG1fZW5jb2RlZFdv
cmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMsIGtpbGxTdGF0dXMo
KSk7CiAjZWxzZQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQodXNlS2luZCgpLCBw
cm9vZlN0YXR1cyk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZCh1c2VLaW5kKCks
IHByb29mU3RhdHVzLCBraWxsU3RhdHVzKCkpOwogI2VuZGlmCiAgICAgfQogICAgIGJvb2wgaXNQ
cm92ZWQoKSBjb25zdApAQCAtMTIyLDYgKzEyMiwzNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBwcm9vZlN0YXR1cygpID09IE5lZWRzQ2hlY2s7CiAgICAgfQogICAgIAorICAgIGJvb2wgd2ls
bE5vdEhhdmVDaGVjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNQcm92ZWQoKSB8
fCB1c2VLaW5kKCkgPT0gVW50eXBlZFVzZTsKKyAgICB9CisgICAgYm9vbCB3aWxsSGF2ZUNoZWNr
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhd2lsbE5vdEhhdmVDaGVjaygpOworICAg
IH0KKyAgICAKKyAgICBLaWxsU3RhdHVzIGtpbGxTdGF0dXNVbmNoZWNrZWQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGtpbGxTdGF0dXNGb3JEb2VzS2lsbChtX2VuY29kZWRXb3JkICYg
Mik7CisgICAgfQorICAgIEtpbGxTdGF0dXMga2lsbFN0YXR1cygpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIGtpbGxTdGF0dXNVbmNoZWNrZWQo
KTsKKyAgICB9CisgICAgdm9pZCBzZXRLaWxsU3RhdHVzKEtpbGxTdGF0dXMga2lsbFN0YXR1cykK
KyAgICB7CisgICAgICAgIEFTU0VSVChub2RlKCkpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQoKSwgcHJvb2ZTdGF0
dXMoKSwga2lsbFN0YXR1cyk7CisjZWxzZQorICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdv
cmQodXNlS2luZCgpLCBwcm9vZlN0YXR1cygpLCBraWxsU3RhdHVzKTsKKyNlbmRpZgorICAgIH0K
KyAgICBib29sIGRvZXNLaWxsKCkgY29uc3QgeyByZXR1cm4gREZHOjpkb2VzS2lsbChraWxsU3Rh
dHVzKCkpOyB9CisgICAgYm9vbCBkb2VzTm90S2lsbCgpIGNvbnN0IHsgcmV0dXJuICFkb2VzS2ls
bCgpOyB9CisgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbm9kZSgpOyB9
CiAgICAgCiAgICAgdHlwZWRlZiB2b2lkKiBFZGdlOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKQEAg
LTE0OCwyMiArMTc4LDIyIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxp
c3Q7CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQo
KSB7IHJldHVybiA2OyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNzsg
fQogICAgIAotICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2lu
ZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKKyAgICBzdGF0aWMgdWludHB0cl90
IG1ha2VXb3JkKE5vZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZT
dGF0dXMsIEtpbGxTdGF0dXMga2lsbFN0YXR1cykKICAgICB7CiAgICAgICAgIEFTU0VSVChzaXpl
b2Yobm9kZSkgPT0gOCk7CiAgICAgICAgIHVpbnRwdHJfdCBzaGlmdGVkVmFsdWUgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pihub2RlKSA8PCBzaGlmdCgpOwogICAgICAgICBBU1NFUlQoKHNoaWZ0
ZWRWYWx1ZSA+PiBzaGlmdCgpKSA9PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSk7CiAg
ICAgICAgIEFTU0VSVCh1c2VLaW5kID49IDAgJiYgdXNlS2luZCA8IExhc3RVc2VLaW5kKTsKLSAg
ICAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KExhc3RVc2VLaW5kKSA8PCAxKSA8
PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBzaGlmdCgpKSk7Ci0gICAgICAgIHJldHVy
biBzaGlmdGVkVmFsdWUgfCAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAxKSB8
IERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpOworICAgICAgICBBU1NFUlQoKHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oTGFzdFVzZUtpbmQpIDw8IDIpIDw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KDIpIDw8IHNoaWZ0KCkpKTsKKyAgICAgICAgcmV0dXJuIHNoaWZ0ZWRWYWx1ZSB8IChzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1
cykgPDwgMSkgfCBERkc6OmlzUHJvdmVkKHByb29mU3RhdHVzKTsKICAgICB9CiAgICAgCiAjZWxz
ZQotICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0
YXR1cyBwcm9vZlN0YXR1cykKKyAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKFVzZUtpbmQg
dXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMsIEtpbGxTdGF0dXMga2lsbFN0YXR1cykK
ICAgICB7Ci0gICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8
PCAxKSB8IERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpOworICAgICAgICByZXR1cm4gKHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpkb2VzS2lsbChraWxsU3Rh
dHVzKSA8PCAxKSB8IERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpOwogICAgIH0KICAgICAKICAg
ICBOb2RlKiBtX25vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewogICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgICAg
ICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8SW50MzJVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhJZGVudGl0eSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAg
LTkwMSw2ICs5MDIsOCBAQCBwcml2YXRlOgogCiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6
CiAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIFVwc2lsb246CisgICAgICAgIGNhc2Ug
R2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgRm9yd2FyZEludDMyVG9Eb3VibGU6CiAgICAgICAg
IGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1h
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZv
cm1hdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zs
dXNoRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJERkdGbHVzaEZvcm1hdC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25h
bWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBGbHVzaEZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dp
dGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgb3V0LnByaW50KCJE
ZWFkRmx1c2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAg
ICAgICBvdXQucHJpbnQoIkZsdXNoZWRJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBGbHVzaGVkRG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWREb3VibGUiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIG91dC5wcmludCgi
Rmx1c2hlZENlbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46
CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZEJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZEpTVmFs
dWUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1h
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdGbHVzaEZvcm1hdF9oCisjZGVm
aW5lIERGR0ZsdXNoRm9ybWF0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKKyNpbmNsdWRlICJE
RkdVc2VLaW5kLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBGbHVzaEZvcm1hdCB7CisgICAgRGVhZEZsdXNo
LAorICAgIEZsdXNoZWRJbnQzMiwKKyAgICBGbHVzaGVkRG91YmxlLAorICAgIEZsdXNoZWRDZWxs
LAorICAgIEZsdXNoZWRCb29sZWFuLAorICAgIEZsdXNoZWRKU1ZhbHVlCit9OworCitpbmxpbmUg
Tm9kZUZsYWdzIHJlc3VsdEZvcihGbHVzaEZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChm
b3JtYXQpIHsKKyAgICBjYXNlIERlYWRGbHVzaDoKKyAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgor
ICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIHJldHVybiBOb2RlUmVzdWx0SlM7CisgICAg
Y2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgIHJldHVybiBOb2RlUmVzdWx0SW50MzI7CisgICAg
Y2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICByZXR1cm4gTm9kZVJlc3VsdE51bWJlcjsKKyAg
ICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICByZXR1cm4gTm9kZVJlc3VsdEJvb2xlYW47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK2lubGluZSBVc2VLaW5kIHVzZUtpbmRGb3IoRmx1c2hGb3JtYXQgZm9ybWF0KQorewor
ICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgY2FzZSBGbHVz
aGVkSlNWYWx1ZToKKyAgICAgICAgcmV0dXJuIFVudHlwZWRVc2U7CisgICAgY2FzZSBGbHVzaGVk
Q2VsbDoKKyAgICAgICAgcmV0dXJuIENlbGxVc2U7CisgICAgY2FzZSBGbHVzaGVkSW50MzI6Cisg
ICAgICAgIHJldHVybiBJbnQzMlVzZTsKKyAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAg
IHJldHVybiBOdW1iZXJVc2U7CisgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgcmV0
dXJuIEJvb2xlYW5Vc2U7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIFVudHlwZWRVc2U7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpT
Qzo6REZHOjpGbHVzaEZvcm1hdCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdGbHVzaEZvcm1hdF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVz
c0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0ZsdXNoTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2lj
QmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNl
cnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgRmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
Zmx1c2gtbGl2ZW5lc3MgYW5hbHlzaXMiKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBy
dW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAg
ICAgIAorICAgICAgICAvLyBMaXZlbmVzcyBpcyBhIGJhY2t3YXJkcyBhbmFseXNpczsgdGhlIHJv
b3RzIGFyZSB0aGUgYmxvY2tzIHRoYXQKKyAgICAgICAgLy8gZW5kIGluIGEgdGVybWluYWwgKFJl
dHVybi9UaHJvdy9UaHJvd1JlZmVyZW5jZUVycm9yKS4gRm9yIG5vdywgd2UKKyAgICAgICAgLy8g
dXNlIGEgZml4cG9pbnQgZm9ybXVsYXRpb24gc2luY2UgbGl2ZW5lc3MgaXMgYSByYXBpZCBhbmFs
eXNpcyB3aXRoCisgICAgICAgIC8vIGNvbnZlcmdlbmNlIGd1YXJhbnRlZWQgYWZ0ZXIgTyhjb25u
ZWN0aXZpdHkpLgorICAgICAgICAKKyAgICAgICAgLy8gU3RhcnQgYnkgYXNzdW1pbmcgdGhhdCBl
dmVyeXRoaW5nIGlzIGRlYWQuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGJsb2NrLT5z
c2EtPmZsdXNoRm9ybWF0QXRIZWFkLmZpbGwoRGVhZEZsdXNoKTsKKyAgICAgICAgICAgIGJsb2Nr
LT5zc2EtPmZsdXNoRm9ybWF0QXRUYWlsLmZpbGwoRGVhZEZsdXNoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7
IGJsb2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9ja0luZGV4KTsKKyAg
ICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIE9wZXJhbmRzPEZs
dXNoRm9ybWF0PiYgcm9vdCA9IG1fZ3JhcGguYmxvY2soMCktPnNzYS0+Zmx1c2hGb3JtYXRBdEhl
YWQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJvb3Quc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBpZiAocm9vdC5pc0FyZ3VtZW50KGkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHJv
b3RbaV0gPT0gRGVhZEZsdXNoIHx8IHJvb3RbaV0gPT0gRmx1c2hlZEpTVmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpZiAocm9vdFtpXSA9PSBEZWFkRmx1c2gpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAg
ICAiQmFkIGZsdXNoIGxpdmVuZXNzIGFuYWx5c2lzIHJlc3VsdDogYmFkIGZsdXNoIGxpdmVuZXNz
IGF0IHJvb3Q6ICIsCisgICAgICAgICAgICAgICAgcm9vdCwgIlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCJJUiBhdCB0aW1lIG9mIGVycm9yOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1
bXAoKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoQmxvY2tJ
bmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+Zmx1c2hGb3Jt
YXRBdFRhaWw7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJs
b2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCB2YXJpYWJsZS0+bG9jYWwoKSwg
dmFyaWFibGUtPmZsdXNoRm9ybWF0KCksIERlYWRGbHVzaCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdl
dEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIHNldEZvck5v
ZGUobm9kZSwgdmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpLCBGbHVz
aGVkSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgY2FzZSBH
ZXRMb2NhbDogeworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBGbHVzaEZvcm1h
dCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKKyAgICAgICAgICAgICAgICBzZXRG
b3JOb2RlKG5vZGUsIHZhcmlhYmxlLT5sb2NhbCgpLCBmb3JtYXQsIGZvcm1hdCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9saXZlID09IGJsb2NrLT5zc2EtPmZsdXNo
Rm9ybWF0QXRIZWFkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQgPSBt
X2xpdmU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6
ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2Nr
LT5wcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2xpdmUu
c2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQmIHByZWRlY2Vzc29y
Rm9ybWF0ID0gcHJlZGVjZXNzb3ItPnNzYS0+Zmx1c2hGb3JtYXRBdFRhaWxbal07CisgICAgICAg
ICAgICAgICAgRmx1c2hGb3JtYXQgbXlGb3JtYXQgPSBtX2xpdmVbal07CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gVGhyZWUgcG9zc2liaWxpdGllczoKKyAgICAgICAgICAg
ICAgICAvLyAxKSBQcmVkZWNlc3NvciBmb3JtYXQgaXMgRGVhZCwgaW4gd2hpY2ggY2FzZSBpdCBh
Y3F1aXJlcyBvdXIgZm9ybWF0LgorICAgICAgICAgICAgICAgIC8vIDIpIFByZWRlY2Vzc29yIGZv
cm1hdCBpcyBpZGVudGljYWwgdG8gb3VyIGZvcm1hdCwgaW4gd2hpY2ggY2FzZSB3ZQorICAgICAg
ICAgICAgICAgIC8vICAgIGRvIG5vdGhpbmcuCisgICAgICAgICAgICAgICAgLy8gMykgUHJlZGVj
ZXNzb3IgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIG91ciBmb3JtYXQgYW5kIGl0J3Mgbm90IERl
YWQsCisgICAgICAgICAgICAgICAgLy8gICAgaW4gd2hpY2ggY2FzZSB3ZSBoYXZlIGFuIGVycm9u
ZW91cyBzZXQgb2YgRmx1c2hlcyBhbmQgU2V0TG9jYWxzLgorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvckZvcm1hdCA9PSBEZWFkRmx1c2gpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JGb3JtYXQgPSBteUZvcm1hdDsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvckZvcm1hdCA9PSBteUZvcm1hdCkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkJhZCBGbHVzaCBtZXJnZSBhdCBlZGdl
ICIsICpwcmVkZWNlc3NvciwgIiAtPiAiLCAqYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICIs
IGxvY2FsIHZhcmlhYmxlIHIiLCBtX2xpdmUub3BlcmFuZEZvckluZGV4KGopLCAiOiAiLCAqcHJl
ZGVjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICIgaGFzICIsIHByZWRlY2Vzc29yRm9ybWF0
LCAiIGFuZCAiLCAqYmxvY2ssICIgaGFzICIsIG15Rm9ybWF0LCAiLlxuIik7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSVIgYXQgdGltZSBvZiBlcnJvcjpcbiIpOworICAgICAgICAgICAgICAg
IG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRGb3JOb2RlKE5vZGUqIG5vZGUs
IGludCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBub2RlRm9ybWF0LCBGbHVzaEZvcm1hdCBuZXdGb3Jt
YXQpCisgICAgeworICAgICAgICBGbHVzaEZvcm1hdCYgY3VycmVudEZvcm1hdCA9IG1fbGl2ZS5v
cGVyYW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgLy8gRG8gc29tZSB1c2VmdWwgdmVy
aWZpY2F0aW9uIGhlcmUuIEl0J3MgT0sgaWYgd2UgdGhpbmsgdGhhdCB0aGUKKyAgICAgICAgLy8g
Zmx1c2ggZm9ybWF0IGlzIGRlYWQgYXQgdGhlIHRpbWUgdGhhdCB3ZSBzZWUgdGhlIG5vZGUuIEJ1
dCBpdCdzCisgICAgICAgIC8vIG5vdCBPSyBpZiBib3RoIHRoZSBub2RlIGFuZCBtX2xpdmUgc2Vl
IGEgRmx1c2hGb3JtYXQgYW5kIHRoZXkgZG8KKyAgICAgICAgLy8gbm90IGFncmVlIG9uIGl0Lgor
ICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnRGb3JtYXQgPT0gRGVhZEZsdXNoIHx8IGN1cnJl
bnRGb3JtYXQgPT0gbm9kZUZvcm1hdCkgeworICAgICAgICAgICAgY3VycmVudEZvcm1hdCA9IG5l
d0Zvcm1hdDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICJCYWQgRmx1c2ggbWVyZ2UgYXQgbm9kZSAiLCBub2Rl
LCAiLCByIiwgb3BlcmFuZCwgIjogbm9kZSBjbGFpbXMgIiwgbm9kZUZvcm1hdCwKKyAgICAgICAg
ICAgICIgYnV0IGJhY2t3YXJkcyBmbG93IGNsYWltcyAiLCBjdXJyZW50Rm9ybWF0LCAiLlxuIik7
CisgICAgICAgIGRhdGFMb2coIklSIGF0IHRpbWUgb2YgZXJyb3I6XG4iKTsKKyAgICAgICAgbV9n
cmFwaC5kdW1wKCk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIEZsdXNoRm9y
bWF0IGZsdXNoRm9ybWF0KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCk7CisgICAgfQorICAgIAorICAgIGJv
b2wgbV9jaGFuZ2VkOworICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBtX2xpdmU7Cit9OworCiti
b29sIHBlcmZvcm1GbHVzaExpdmVuZXNzQW5hbHlzaXMoR3JhcGgmIGdyYXBoKQoreworICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgRmx1c2gtTGl2ZW5lc3MgQW5hbHlzaXMg
UGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Rmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2U+
KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlX2gKKyNkZWZpbmUgREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2VfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdy
YXBoOworCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmZsdXNoRm9ybWF0QXRIZWFkCisK
K2Jvb2wgcGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYpOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIgogI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIApAQCAtMjE2LDggKzIxNyw4IEBAIHZvaWQg
R3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50
aWZpZXJzKClbc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlcl0sICJ9Iik7CiAgICAg
ICAgIG91dC5wcmludCgiLCAiLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHN0b3JhZ2VBY2Nlc3NE
YXRhLm9mZnNldCkpOwogICAgIH0KLSAgICBBU1NFUlQobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NE
YXRhKCkgPT0gbm9kZS0+aGFzTG9jYWwoKSk7Ci0gICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgpKSB7CisgICAgQVNTRVJUKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhp
cykgPT0gbm9kZS0+aGFzTG9jYWwoKnRoaXMpKTsKKyAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKCp0aGlzKSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBpbnQgb3Bl
cmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOwogICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCkBAIC0yMzUsNiArMjM2LDggQEAgdm9pZCBHcmFwaDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIH0KICAgICBpZiAobm9kZS0+aGFzSW5kZXhp
bmdUeXBlKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgSW5kZXhpbmdUeXBlRHVtcChub2Rl
LT5pbmRleGluZ1R5cGUoKSkpOworICAgIGlmIChub2RlLT5oYXNQaGkoKSkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiXiIsIG5vZGUtPnBoaSgpLT5pbmRleCgpKTsKICAgICBpZiAobm9kZS0+
aGFzRXhlY3V0aW9uQ291bnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50
ZXIobm9kZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7CiAgICAgaWYgKG9wID09IEpTQ29uc3RhbnQp
IHsKQEAgLTI2MCw3ICsyNjMsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0CiAgICAgb3V0LnByaW50KCIpIik7CiAKICAgICBpZiAoIXNraXBwZWQpIHsKLSAgICAg
ICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAgICBpZiAobm9kZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSkKICAgICAgICAgICAgIG91dC5wcmludCgiICBw
cmVkaWN0aW5nICIsIFNwZWN1bGF0aW9uRHVtcChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdGlvbigpKSwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJs
ZUZvcm1hdCgpID8gIiwgZm9yY2luZyBkb3VibGUiIDogIiIpOwogICAgICAgICBlbHNlIGlmIChu
b2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQogICAgICAgICAgICAgb3V0LnByaW50KCIgIHByZWRp
Y3RpbmcgIiwgU3BlY3VsYXRpb25EdW1wKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpKTsKQEAg
LTMxMywyMyArMzE2LDI1IEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVh
bSYKICAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICBv
dXQucHJpbnQocHJlZml4LCAiICBQaGkgTm9kZXM6Iik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlKiBwaGlOb2RlID0g
YmxvY2stPnBoaXNbaV07Ci0gICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSAm
JiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlO
b2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOwotICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkp
IHsKLSAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxkMSgpLT5pbmRleCgp
KTsKLSAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAg
IG91dC5wcmludCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQyKCktPmluZGV4KCkpOwotICAgICAgICAg
ICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDMoKS0+aW5kZXgoKSk7CisgICAgaWYgKCFibG9jay0+
cGhpcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgUGhpIE5vZGVz
OiIpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBoaXNbaV07CisgICAg
ICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhpTm9kZUR1bXBNb2Rl
ID09IER1bXBMaXZlUGhpc09ubHkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5yZWZD
b3VudCgpLCAiPi0+KCIpOworICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpKSB7Cisg
ICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQxKCktPmluZGV4KCkp
OworICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgeworICAgICAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMigpLT5pbmRleCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDMoKS0+aW5kZXgoKSk7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50KCIp
IiwgaSArIDEgPCBibG9jay0+cGhpcy5zaXplKCkgPyAiLCIgOiAiIik7CiAgICAgICAgIH0KLSAg
ICAgICAgb3V0LnByaW50KCIpIiwgaSArIDEgPCBibG9jay0+cGhpcy5zaXplKCkgPyAiLCIgOiAi
Iik7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9Ci0gICAgb3V0LnByaW50KCJcbiIp
OwogfQogCiB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCkBAIC0zNDMsMjkgKzM0
OCw1NyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZHVtcEJsb2NrSGVhZGVyKG91
dCwgIiIsIGJsb2NrLCBEdW1wQWxsUGhpcyk7Ci0gICAgICAgIG91dC5wcmludCgiICB2YXJzIGJl
Zm9yZTogIik7Ci0gICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKLSAgICAgICAgICAg
IGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRIZWFkLCBvdXQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKLSAgICAgICAgb3V0LnByaW50KCJcbiIp
OwotICAgICAgICBvdXQucHJpbnQoIiAgdmFyIGxpbmtzOiAiKTsKLSAgICAgICAgZHVtcE9wZXJh
bmRzKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIG91dCk7Ci0gICAgICAgIG91dC5wcmludCgiXG4i
KTsKKyAgICAgICAgc3dpdGNoIChtX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBMb2FkU3RvcmU6Cisg
ICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6IHsKKyAgICAgICAgICAgIG91dC5wcmludCgiICB2YXJz
IGJlZm9yZTogIik7CisgICAgICAgICAgICBpZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KGJsb2NrLT52YWx1ZXNBdEhlYWQpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOworICAgICAgICAgICAg
b3V0LnByaW50KCJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIHZhciBsaW5rczogIik7
CisgICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgb3V0KTsK
KyAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTU0E6IHsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGJsb2NrLT5zc2EpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIEZsdXNoIGZv
cm1hdDogIiwgYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQsICJcbiIpOworICAgICAgICAg
ICAgb3V0LnByaW50KCIgIEF2YWlsYWJpbGl0eTogIiwgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5
QXRIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICBMaXZlOiAiLCBub2RlTGlz
dER1bXAoYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCksICJcbiIpOworICAgICAgICAgICAgb3V0LnBy
aW50KCIgIFZhbHVlczogIiwgbm9kZU1hcER1bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkKSwg
IlxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSB9CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBkdW1wQ29k
ZU9yaWdpbihvdXQsICIiLCBsYXN0Tm9kZSwgYmxvY2stPmF0KGkpKTsKICAgICAgICAgICAgIGR1
bXAob3V0LCAiIiwgYmxvY2stPmF0KGkpKTsKICAgICAgICAgICAgIGxhc3ROb2RlID0gYmxvY2st
PmF0KGkpOwogICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgiICB2YXJzIGFmdGVyOiAiKTsK
LSAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQotICAgICAgICAgICAgZHVtcE9wZXJh
bmRzKGJsb2NrLT52YWx1ZXNBdFRhaWwsIG91dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG91dC5wcmludCgiPGVtcHR5PiIpOwotICAgICAgICBvdXQucHJpbnQoIlxuIik7Ci0gICAgICAg
IG91dC5wcmludCgiICB2YXIgbGlua3M6ICIpOwotICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2st
PnZhcmlhYmxlc0F0VGFpbCwgb3V0KTsKLSAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAg
ICBzd2l0Y2ggKG1fZm9ybSkgeworICAgICAgICBjYXNlIExvYWRTdG9yZToKKyAgICAgICAgY2Fz
ZSBUaHJlYWRlZENQUzogeworICAgICAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYWZ0ZXI6ICIp
OworICAgICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQorICAgICAgICAgICAgICAg
IG91dC5wcmludChibG9jay0+dmFsdWVzQXRUYWlsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgi
XG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICB2YXIgbGlua3M6ICIpOworICAgICAgICAg
ICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG91dCk7CisgICAgICAgICAg
ICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgU1NBOiB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChi
bG9jay0+c3NhKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICBGbHVzaCBmb3JtYXQ6ICIsIGJs
b2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRUYWlsLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiICBBdmFpbGFiaWxpdHk6ICIsIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCwgIlxu
Iik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgTGl2ZTogIiwgbm9kZUxpc3REdW1wKGJsb2Nr
LT5zc2EtPmxpdmVBdFRhaWwpLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICBWYWx1
ZXM6ICIsIG5vZGVNYXBEdW1wKGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCksICJcbiIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gfQogICAgIH0KIH0KIApAQCAtNDc4LDYgKzUxMSwy
OCBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jCiAgICAgICAgICAg
ICBicmVhazsKICAgICB9CiB9CisKK3ZvaWQgR3JhcGg6OmFkZEZvckRlcHRoRmlyc3RTb3J0KFZl
Y3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmts
aXN0LCBIYXNoU2V0PEJhc2ljQmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9jayogYmxvY2spCit7Cisg
ICAgaWYgKHNlZW4uY29udGFpbnMoYmxvY2spKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
cmVzdWx0LmFwcGVuZChibG9jayk7CisgICAgd29ya2xpc3QuYXBwZW5kKGJsb2NrKTsKKyAgICBz
ZWVuLmFkZChibG9jayk7Cit9CisKK3ZvaWQgR3JhcGg6OmdldEJsb2Nrc0luRGVwdGhGaXJzdE9y
ZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKK3sKKyAgICBWZWN0b3I8QmFzaWNCbG9j
ayosIDE2PiB3b3JrbGlzdDsKKyAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBzZWVuOworICAgIGFk
ZEZvckRlcHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKKyAg
ICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2Nr
LT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICBhZGRGb3JEZXB0aEZpcnN0U29y
dChyZXN1bHQsIHdvcmtsaXN0LCBzZWVuLCBibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICB9Cit9
CiAgICAgCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICBk
ZXRocmVhZCgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmhhc1Zh
cmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+aGFzVmFyaWFi
bGVBY2Nlc3NEYXRhKCp0aGlzKSk7CiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0NvbnN0YW50KGNv
bnN0YW50TnVtYmVyKTsKICAgICB9CiAgICAgCkBAIC00MDEsNyArNDAxLDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS0+
aGFzTG9jYWwoKSkgeworICAgICAgICBpZiAobm9kZS0+aGFzTG9jYWwoKnRoaXMpKSB7CiAgICAg
ICAgICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJn
dW1lbnQobm9kZS0+bG9jYWwoKSk7CkBAIC02NDEsNiArNjQxLDggQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgaW52YWxpZGF0ZUNGRygpOwogICAgIAorICAgIHZvaWQgZ2V0QmxvY2tzSW5EZXB0
aEZpcnN0T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KTsKKyAgICAKICAgICBQcm9m
aWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0
aW9uLmdldCgpOyB9CiAgICAgCiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygp
IHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVyczsgfQpAQCAtNjc5LDYgKzY4MSw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJhc2lj
QmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayogc3VjY2Vzc29y
KTsKKyAgICB2b2lkIGFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJl
c3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBIYXNoU2V0PEJhc2ljQmxv
Y2sqPiYgc2VlbiwgQmFzaWNCbG9jayopOwogICAgIAogICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBh
ZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCwgYm9vbCB2YXJpYWJs
ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE1
MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDI2ICszMSwxMiBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWNs
YXNzIEluc2VydGlvbiB7Ci1wdWJsaWM6Ci0gICAgSW5zZXJ0aW9uKCkgeyB9Ci0gICAgCi0gICAg
SW5zZXJ0aW9uKHNpemVfdCBpbmRleCwgTm9kZSogZWxlbWVudCkKLSAgICAgICAgOiBtX2luZGV4
KGluZGV4KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIE5vZGUq
IGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KLXByaXZhdGU6Ci0gICAgc2l6
ZV90IG1faW5kZXg7Ci0gICAgTm9kZSogbV9lbGVtZW50OwotfTsKK3R5cGVkZWYgV1RGOjpJbnNl
cnRpb248Tm9kZSo+IEluc2VydGlvbjsKIAogY2xhc3MgSW5zZXJ0aW9uU2V0IHsKIHB1YmxpYzoK
QEAgLTgxLDIwICs2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGV4ZWN1dGUoQmFzaWNC
bG9jayogYmxvY2spCiAgICAgewotICAgICAgICBpZiAoIW1faW5zZXJ0aW9ucy5zaXplKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJsb2NrLT5ncm93KGJsb2NrLT5zaXplKCkgKyBt
X2luc2VydGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgc2l6ZV90IGxhc3RJbmRleCA9IGJsb2NrLT5z
aXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gbV9pbnNlcnRp
b25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsKLSAgICAgICAgICAgIEluc2VydGlv
biYgaW5zZXJ0aW9uID0gbV9pbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXTsKLSAgICAgICAg
ICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5zZXJ0aW9uLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0
aW9uczsKLSAgICAgICAgICAgIHNpemVfdCBpbmRleE9mZnNldCA9IGluZGV4SW5JbnNlcnRpb25z
ICsgMTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0
SW5kZXg7KQotICAgICAgICAgICAgICAgIGJsb2NrLT5hdChpKSA9IGJsb2NrLT5hdChpIC0gaW5k
ZXhPZmZzZXQpOwotICAgICAgICAgICAgYmxvY2stPmF0KGZpcnN0SW5kZXgpID0gaW5zZXJ0aW9u
LmVsZW1lbnQoKTsKLSAgICAgICAgICAgIGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7Ci0gICAgICAg
IH0KLSAgICAgICAgbV9pbnNlcnRpb25zLnJlc2l6ZSgwKTsKKyAgICAgICAgZXhlY3V0ZUluc2Vy
dGlvbnMoKmJsb2NrLCBtX2luc2VydGlvbnMpOwogICAgIH0KIHByaXZhdGU6CiAgICAgR3JhcGgm
IG1fZ3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5h
bHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2Vy
dGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIExpdmVuZXNzQW5h
bHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgTGl2ZW5lc3NBbmFseXNp
c1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImxpdmVuZXNzIGFu
YWx5c2lzIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgLy8g
TGl2ZW5lc3MgaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXM7IHRoZSByb290cyBhcmUgdGhlIGJsb2Nr
cyB0aGF0CisgICAgICAgIC8vIGVuZCBpbiBhIHRlcm1pbmFsIChSZXR1cm4vVGhyb3cvVGhyb3dS
ZWZlcmVuY2VFcnJvcikuIEZvciBub3csIHdlCisgICAgICAgIC8vIHVzZSBhIGZpeHBvaW50IGZv
cm11bGF0aW9uIHNpbmNlIGxpdmVuZXNzIGlzIGEgcmFwaWQgYW5hbHlzaXMgd2l0aAorICAgICAg
ICAvLyBjb252ZXJnZW5jZSBndWFyYW50ZWVkIGFmdGVyIE8oY29ubmVjdGl2aXR5KS4KKyAgICAg
ICAgCisgICAgICAgIC8vIFN0YXJ0IGJ5IGFzc3VtaW5nIHRoYXQgZXZlcnl0aGluZyBpcyBkZWFk
LgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBibG9jay0+c3NhLT5saXZlQXRIZWFkLmNs
ZWFyKCk7CisgICAgICAgICAgICBibG9jay0+c3NhLT5saXZlQXRUYWlsLmNsZWFyKCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZh
bHNlOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KQorICAgICAgICAgICAgICAgIHByb2Nlc3MoYmxvY2tJ
bmRleCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICBp
ZiAoIW1fZ3JhcGguYmxvY2soMCktPnNzYS0+bGl2ZUF0SGVhZC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgIkJhZCBsaXZlbmVzcyBhbmFseXNpcyBy
ZXN1bHQ6IGxpdmUgYXQgcm9vdCBpcyBub3QgZW1wdHk6ICIsCisgICAgICAgICAgICAgICAgbm9k
ZUxpc3REdW1wKG1fZ3JhcGguYmxvY2soMCktPnNzYS0+bGl2ZUF0SGVhZCksICJcbiIpOworICAg
ICAgICAgICAgZGF0YUxvZygiSVIgYXQgdGltZSBvZiBlcnJvcjpcbiIpOworICAgICAgICAgICAg
bV9ncmFwaC5kdW1wKCk7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9j
ZXNzKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJdCdzIGxpa2Vs
eSB0aGF0IHRoaXMgY2FuIGJlIGltcHJvdmVkLCBmb3Igc3RhdGljIGFuYWx5c2VzIHRoYXQgdXNl
CisgICAgICAgIC8vIEhhc2hTZXRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE4NDU1CisgICAgICAgIG1fbGl2ZSA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWw7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7
IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2Rl
SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBHaXZlbiBhbiBVcHNpbG9uOgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIG46IFVwc2lsb24oJHAsIEB4KQorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBwIGFuZCBA
biBhbmQgdXNlcyBAeC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBHaXZlbiBhIFBo
aToKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICBwOiBQaGkoKQorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIFdlIHNheSBub3RoaW5nLiBJdCdzIG5laXRoZXIgYSB1c2Ug
bm9yIGEgZGVmLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEgbm9kZToK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICBuOiBUaGluZ3koQGEsIEBiLCBAYykK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAbiBh
bmQgdXNlcyBAYSwgQGIsIEBjLgorICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVXBzaWxvbjogeworICAgICAgICAgICAgICAg
IE5vZGUqIHBoaSA9IG5vZGUtPnBoaSgpOworICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUo
cGhpKTsKKyAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOworICAgICAgICAgICAg
ICAgIG1fbGl2ZS5hZGQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
UGhpOiB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1v
dmUobm9kZSk7CisgICAgICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFw
aCwgbm9kZSwgYWRkQ2hpbGRVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9saXZlID09IGJsb2NrLT5z
c2EtPmxpdmVBdEhlYWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOworICAgICAgICBibG9jay0+c3NhLT5saXZlQXRIZWFkID0gbV9saXZl
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsg
aS0tOykKKyAgICAgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnNbaV0tPnNzYS0+bGl2ZUF0VGFp
bC5hZGQobV9saXZlLmJlZ2luKCksIG1fbGl2ZS5lbmQoKSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBhZGRDaGls
ZFVzZShlZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRDaGlsZFVzZShFZGdlJiBlZGdl
KQorICAgIHsKKyAgICAgICAgZWRnZS5zZXRLaWxsU3RhdHVzKG1fbGl2ZS5hZGQoZWRnZS5ub2Rl
KCkpLmlzTmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBtX2NoYW5nZWQ7CisgICAgSGFzaFNldDxOb2RlKj4gbV9saXZlOworfTsKKworYm9v
bCBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBMaXZlbmVzcyBBbmFseXNpcyBQaGFzZSIpOworICAg
IHJldHVybiBydW5QaGFzZTxMaXZlbmVzc0FuYWx5c2lzUGhhc2U+KGdyYXBoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisjZGVmaW5lIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+bGl2ZUF0
SGVhZC9saXZlQXRUYWlsLgorCitib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJik7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAj
aW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CkBAIC0zNyw2ICszOCwyNSBAQCB1bnNpZ25lZCBOb2RlOjppbmRleCgpIGNvbnN0CiAg
ICAgcmV0dXJuIE5vZGVBbGxvY2F0b3I6OmFsbG9jYXRvck9mKHRoaXMpLT5pbmRleE9mKHRoaXMp
OwogfQogCitib29sIE5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0YShHcmFwaCYgZ3JhcGgpCit7
CisgICAgc3dpdGNoIChvcCgpKSB7CisgICAgY2FzZSBQaGk6CisgICAgICAgIHJldHVybiBncmFw
aC5tX2Zvcm0gIT0gU1NBOworICAgIGNhc2UgR2V0TG9jYWw6CisgICAgY2FzZSBTZXRMb2NhbDoK
KyAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CisgICAgY2FzZSBa
b21iaWVIaW50OgorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgY2FzZSBGbHVzaDoKKyAgICBj
YXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDUsOSArNDUsMTEgQEAKICNpbmNsdWRlICJTcGVjdWxhdGVk
VHlwZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmls
ZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKK2NsYXNzIEdyYXBoOwogc3RydWN0IEJhc2ljQmxvY2s7CiAKIHN0cnVjdCBT
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSB7CkBAIC00OTgsMzIgKzUwMCwxNCBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNWYXJpYWJsZUFjY2Vzc0Rh
dGEoKQorICAgIGJvb2wgaGFzVmFyaWFibGVBY2Nlc3NEYXRhKEdyYXBoJik7CisgICAgYm9vbCBo
YXNMb2NhbChHcmFwaCYgZ3JhcGgpCiAgICAgewotICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKLSAg
ICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgY2Fz
ZSBNb3ZIaW50OgotICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBa
b21iaWVIaW50OgotICAgICAgICBjYXNlIFBoaToKLSAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoK
LSAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBib29sIGhhc0xvY2FsKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgcmV0dXJu
IGhhc1ZhcmlhYmxlQWNjZXNzRGF0YShncmFwaCk7CiAgICAgfQogICAgIAogICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCho
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFZhcmlhYmxlQWNjZXNzRGF0YSo+KG1fb3BJbmZvKS0+ZmluZCgpOwogICAgIH0KICAgICAKQEAg
LTUzOCw2ICs1MjIsMTcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFz
UGhpKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IFVwc2lsb247CisgICAgfQorICAg
IAorICAgIE5vZGUqIHBoaSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzUGhpKCkpOworICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE5vZGUqPihtX29wSW5mbyk7CisgICAgfQorICAgIAog
ICAgIGJvb2wgaGFzSWRlbnRpZmllcigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsK
QEAgLTc3MywxNiArNzY4LDE2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9vcEluZm8yID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYmxvY2spOwogICAgIH0KICAgICAKLSAgICBCYXNpY0Js
b2NrKiB0YWtlbkJsb2NrKCkKKyAgICBCYXNpY0Jsb2NrKiYgdGFrZW5CbG9jaygpCiAgICAgewog
ICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7Ci0gICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJbmZvKTsKKyAgICAgICAgcmV0dXJuICpiaXR3
aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcEluZm8pOwogICAgIH0KICAgICAKLSAgICBCYXNp
Y0Jsb2NrKiBub3RUYWtlbkJsb2NrKCkKKyAgICBCYXNpY0Jsb2NrKiYgbm90VGFrZW5CbG9jaygp
CiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7Ci0gICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJbmZvMik7CisgICAgICAgIHJldHVybiAqYml0d2lz
ZV9jYXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZvMik7CiAgICAgfQogICAgIAogICAgIFN3aXRj
aERhdGEqIHN3aXRjaERhdGEoKQpAQCAtODA1LDcgKzgwMCw3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQg
aW5kZXgpCisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKICAgICB7
CiAgICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CiAgICAgICAgICAgICBpZiAoaW5kZXggPCBzd2l0
Y2hEYXRhKCktPmNhc2VzLnNpemUoKSkKQEAgLTgyMCwxMSArODE1LDExIEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgICAgIHJldHVybiBub3RUYWtlbkJsb2NrKCk7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gdGFrZW5CbG9jaygpOwogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckZvckNvbmRpdGlvbihib29sIGNv
bmRpdGlvbikKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJvb2wgY29u
ZGl0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwogICAgICAgICByZXR1
cm4gY29uZGl0aW9uID8gdGFrZW5CbG9jaygpIDogbm90VGFrZW5CbG9jaygpOwpAQCAtMTM5OSw2
ICsxMzk0LDIzIEBAIHB1YmxpYzoKICAgICBOb2RlKiByZXBsYWNlbWVudDsKIH07CiAKK2lubGlu
ZSBib29sIG5vZGVDb21wYXJhdG9yKE5vZGUqIGEsIE5vZGUqIGIpCit7CisgICAgcmV0dXJuIGEt
PmluZGV4KCkgPCBiLT5pbmRleCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQ1N0cmlu
ZyBub2RlTGlzdER1bXAoY29uc3QgVCYgbm9kZUxpc3QpCit7CisgICAgcmV0dXJuIHNvcnRlZExp
c3REdW1wKG5vZGVMaXN0LCBub2RlQ29tcGFyYXRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitDU3RyaW5nIG5vZGVNYXBEdW1wKGNvbnN0IFQmIG5vZGVNYXApCit7CisgICAgcmV0dXJu
IHNvcnRlZE1hcER1bXAobm9kZU1hcCwgbm9kZUNvbXBhcmF0b3IpOworfQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBkdW1w
Tm9kZUZsYWdzKFByaW50U3RyZWFtJiBvdXQsIE5vZGVGbGFncyBmbGFncykKIHsKLSAgICBpZiAo
IShmbGFncyBeIE5vZGVEb2VzTm90RXhpdCkpIHsKKyAgICBpZiAoISgoZmxhZ3MgJiB+Tm9kZVJl
bGV2YW50VG9PU1IpIF4gTm9kZURvZXNOb3RFeGl0KSkgewogICAgICAgICBvdXQucHJpbnQoIjxl
bXB0eT4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsOSBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTW92SGludEFuZENo
ZWNrLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUV4aXRzRm9yd2FyZCkgXAogICAgIG1hY3JvKE1v
dkhpbnQsIE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFpvbWJpZUhpbnQsIE5vZGVEb2Vz
Tm90RXhpdCkgXAorICAgIG1hY3JvKEdldEFyZ3VtZW50LCBOb2RlUmVzdWx0SlMpIFwKICAgICBt
YWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVXBzaWxvbiwgTm9k
ZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwKICAgICBtYWNybyhQaGksIE5vZGVE
b2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCiAgICAgbWFjcm8oRmx1c2gsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9tTG9jYWws
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2Vy
dGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE9TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIE9TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBo
LCAiT1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpcyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsK
KyAgICAgICAgCisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKKyAgICAg
ICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3RbaV07Cisg
ICAgICAgICAgICBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQuZmlsbCgwKTsKKyAgICAg
ICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbC5maWxsKDApOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBkZXB0aEZpcnN0
W2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBlZGl0IGF2YWlsYWJpbGl0eUF0
VGFpbCBpbi1wbGFjZSwgYnV0IGZpcnN0IGluaXRpYWxpemUgaXQgdG8KKyAgICAgICAgICAgIC8v
IGF2YWlsYWJpbGl0eUF0SGVhZC4KKyAgICAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiYgYXZhaWxh
YmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsOworICAgICAgICAgICAgYXZh
aWxhYmlsaXR5ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOworICAgICAgICAgICAg
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJs
b2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2Fz
ZSBNb3ZIaW50OgorICAgICAgICAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOiB7CisgICAg
ICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgWm9t
YmllSGludDogeworICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHkub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+bnVt
U3VjY2Vzc29ycygpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vz
c29yID0gYmxvY2stPnN1Y2Nlc3NvcihqKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxOb2Rl
Kj4mIHN1Y2Nlc3NvckF2YWlsYWJpbGl0eSA9IHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlB
dEhlYWQ7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gYXZhaWxhYmlsaXR5LnNp
emUoKTsgay0tOykgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBteU5vZGUgPSBhdmFpbGFi
aWxpdHlba107CisgICAgICAgICAgICAgICAgICAgIGlmICghbXlOb2RlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAoIXN1Y2Nlc3Nvci0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKG15Tm9kZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBvdmVyd3JpdGUgYXZh
aWxhYmlsaXR5IHdpdGggYSBib2d1cyBub2RlCisgICAgICAgICAgICAgICAgICAgIC8vIGF0IG1l
cmdlIHBvaW50cy4gVGhpcyBpcyBmaW5lLCBzaW5jZSBtZXJnZSBwb2ludHMgaGF2ZQorICAgICAg
ICAgICAgICAgICAgICAvLyBNb3ZIaW50KFBoaSkncyB0byB3b3JrIGFyb3VuZCB0aGlzLiBUaGUg
b3V0Y29tZSBvZiB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIHlvdSBtaWdodCBoYXZl
IGEgcHJvZ3JhbSBpbiB3aGljaCBhIG5vZGUgaGFwcGVucyB0byByZW1haW4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gbGl2ZSBpbnRvIHNvbWUgYmxvY2sgQiwgYW5kIHNlcGFyYXRlbHkgKGR1ZSB0
byBjb3B5CisgICAgICAgICAgICAgICAgICAgIC8vIHByb3BhZ2F0aW9uKSBqdXN0IG9uZSBvZiB0
aGUgcHJlZGVjZXNzb3JzIG9mIEIgaXNzdWVkIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gTW92
SGludCBwdXR0aW5nIHRoYXQgbm9kZSBpbnRvIHNvbWUgbG9jYWwuIFRoZW4gaW4gQiB3ZSBtaWdo
dAorICAgICAgICAgICAgICAgICAgICAvLyB0aGluayB0aGF0IHRoYXQgbm9kZSBpcyBhIHZhbGlk
IHZhbHVlIGZvciB0aGF0IGxvY2FsLiBPZgorICAgICAgICAgICAgICAgICAgICAvLyBjb3Vyc2Ug
aWYgdGhhdCBsb2NhbCB3YXMgYWN0dWFsbHkgbGl2ZSBpbiBCLCBCIHdvdWxkIGhhdmUgYQorICAg
ICAgICAgICAgICAgICAgICAvLyBQaGkgZm9yIGl0LiBTbyBlc3NlbnRpYWxseSB3ZSdsbCBoYXZl
IE9TUiBleGl0IGRyb3BwaW5nIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gbm9kZSdzIHZh
bHVlIGludG8gdGhlIGxvY2FsIHdoZW4gd2Ugb3RoZXJ3aXNlIChpbiB0aGUgREZHKQorICAgICAg
ICAgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIGRyb3BwZWQgdW5kZWZpbmVkIGludG8gdGhlIGxv
Y2FsLiBUaGlzIHNlZW1zCisgICAgICAgICAgICAgICAgICAgIC8vIGhhcm1sZXNzLgorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yQXZhaWxhYmlsaXR5
W2tdID0gbXlOb2RlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworYm9vbCBwZXJm
b3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5n
UmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgT1NSIEF2YWlsYWJpbGl0eSBBbmFseXNpcyBQaGFz
ZSIpOworICAgIHJldHVybiBydW5QaGFzZTxPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlPihn
cmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlX2gKKyNkZWZpbmUgREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZV9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgR3JhcGg7CisKKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+YXZhaWxhYmlsdGl5
QXRIZWFkL1RhaWwuIFRoaXMgcmVsaWVzIG9uIGxpdmVuZXNzCisvLyBhbmFseXNpcyBwaGFzZSBo
YXZpbmcgYmVlbiBydW4gYW5kIHRoZSBncmFwaCBub3QgaGF2aW5nIGJlZW4gdHJhbnNmb3JtZWQK
Ky8vIGFmdGVyIHRoYXQuCisKK2Jvb2wgcGVyZm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKEdy
YXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTUyNTgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsMTIgKzM2LDE3IEBACiAjaW5jbHVkZSAiREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5o
IgogI2luY2x1ZGUgIkRGR0NTRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuaCIKKyNpbmNsdWRlICJERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgiCiAjaW5j
bHVkZSAiREZHRENFUGhhc2UuaCIKICNpbmNsdWRlICJERkdGYWlsZWRGaW5hbGl6ZXIuaCIKKyNp
bmNsdWRlICJERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0Zp
eHVwUGhhc2UuaCIKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgorI2luY2x1ZGUgIkRGR0xp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oIgorI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIKICNp
bmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1NT
QUNvbnZlcnNpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsaWRh
dGUuaCIKQEAgLTE4MiwyMiArMTg3LDIyIEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpj
b21waWxlSW5UaHIKICAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7
CiAKICAgICBwZXJmb3JtU3RvcmVFbGltaW5hdGlvbihkZmcpOwotICAgIHBlcmZvcm1DUFNSZXRo
cmVhZGluZyhkZmcpOwotICAgIAotICAgIC8vIE5vdGUgdGhhdCBEQ0UgaXMgbmVjZXNzYXJ5IGV2
ZW4gaW4gdGhlIEZUTCwgYmVjYXVzZSBvbmx5IHdlIGtub3cgd2hhdCBpcwotICAgIC8vIGxpdmUt
aW4tYnl0ZWNvZGUuIFRoZSBGVEwgdXNlcyB0aGlzIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB3
aGVuIE9TUiBleGl0Ci0gICAgLy8gdmFsdWVzIHNob3VsZCBiZSB3aXJlZCB0byBMVmFsdWVzLCB2
ZXJzdXMgYmVpbmcgd2lyZWQgdG8gRXhpdFZhbHVlOjpkZWFkKCkuCi0gICAgLy8gVGhpcyBpcyBk
aXN0aW5jdCBmcm9tIHdoYXQgWm9tYmllSGludCBnaXZlcyB1czogWm9tYmllSGludCBzYXlzIHRo
YXQgdGhlCi0gICAgLy8gdmFsdWUgaW4gdGhlIGdpdmVuIGJ5dGVjb2RlIGxvY2FsIGlzIGFsd2F5
cyBkZWFkOyB0aGUgcmVmZXJlbmNlIGNvdW50cyB0aGF0Ci0gICAgLy8gRENFIHByb2R1Y2VzIHRl
bGwgdXMgdGhhdCB0aGUgdmFsdWUgaXMgbGl2ZSBmb3IgYSB3aGlsZSBidXQgZXZlbnR1YWxseQot
ICAgIC8vIGRpZXMsIGFuZCBpdCB0ZWxscyB1cyBleGFjdGx5IHdoZW4gdGhlIGRlYXRoIHBvaW50
IGlzLgotICAgIHBlcmZvcm1EQ0UoZGZnKTsKIAogI2lmIEVOQUJMRShGVExfSklUKQogICAgIGlm
IChPcHRpb25zOjp1c2VFeHBlcmltZW50YWxGVEwoKQogICAgICAgICAmJiBjb21waWxlTW9kZSA9
PSBDb21waWxlRnVuY3Rpb24KICAgICAgICAgJiYgRlRMOjpjYW5Db21waWxlKGRmZykpIHsKICAg
ICAgICAgCisgICAgICAgIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhkZmcpOworICAgICAg
ICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKKyAgICAgICAgcGVyZm9ybVNTQUNvbnZlcnNp
b24oZGZnKTsKKyAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKKyAgICAgICAg
cGVyZm9ybUNGQShkZmcpOworICAgICAgICBwZXJmb3JtRENFKGRmZyk7IC8vIFdlIHJlbHkgb24g
dGhpcyB0byBjb252ZXJ0IGRlYWQgU2V0TG9jYWxzIGludG8gdGhlIGFwcHJvcHJpYXRlIGhpbnQs
IGFuZCB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJlY29nbml6ZWQgYXMgZGVhZCBi
eSBMTFZNLgorICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOworICAgICAgICBw
ZXJmb3JtRmx1c2hMaXZlbmVzc0FuYWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1PU1JBdmFp
bGFiaWxpdHlBbmFseXNpcyhkZmcpOworICAgICAgICAKICAgICAgICAgZHVtcEFuZFZlcmlmeUdy
YXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoiKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IE9TUiBlbnRyeS4KQEAgLTIxNSw2ICsyMjAsOCBAQCBQ
bGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQogICAgIAorICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwor
ICAgIHBlcmZvcm1EQ0UoZGZnKTsKICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlv
bihkZmcpOwogICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBhZnRlciBvcHRpbWl6
YXRpb246Iik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkp
KTsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5oYXNMb2NhbCgpKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQobm9kZS0+aGFzTG9jYWwobV9ncmFwaCkpOwogICAgICAgICAgICAgICAg
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KAogICAgICAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ld
KSk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MiwxNCArNDcyLDIwIEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDogewogICAgICAgICAgICAgLy8gVGhpcyBub2Rl
IHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0
IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRo
aXMgcGhhc2UuCi0gICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgICAgIC8vIFBoaXMgc2hvdWxkIG5vdCBiZSB2
aXNpYmxlIGhlcmUgc2luY2Ugd2UncmUgaXRlcmF0aW5nIHRoZSBhbGwtYnV0LVBoaSdzCiAgICAg
ICAgICAgICAvLyBwYXJ0IG9mIGJhc2ljIGJsb2Nrcy4KLSAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVcHNpbG9uOgorICAgICAgICBjYXNlIEdl
dEFyZ3VtZW50OgorICAgICAgICAgICAgLy8gVGhlc2UgZG9uJ3QgZ2V0IGluc2VydGVkIHVudGls
IHdlIGdvIGludG8gU1NBLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0U2NvcGU6CkBAIC01NDAs
NyArNTQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgTGFzdE5vZGVUeXBlOgotICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICNl
bHNlCiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTU0FDb252ZXJz
aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2Vy
dGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFNTQUNvbnZlcnNp
b25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworICAgIAorcHVibGljOgorICAgIFNTQUNvbnZlcnNpb25QaGFzZShHcmFwaCYgZ3Jh
cGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJTU0EgY29udmVyc2lvbiIpCisgICAgICAgICwg
bV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgICAgICwgbV9jaGFuZ2VkKGZhbHNlKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKKyAgICAgICAgLy8g
RmlndXJlIG91dCB3aGljaCBTZXRMb2NhbCdzIG5lZWQgZmx1c2hpbmcuIE5lZWQgdG8gZG8gdGhp
cyB3aGlsZSB0aGUKKyAgICAgICAgLy8gUGhpIGdyYXBoIGlzIHN0aWxsIGludGFjdC4KKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9j
a0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+
c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gRmx1
c2gpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGFkZEZs
dXNoZWRMb2NhbE9wKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdo
aWxlICghbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC50YWtlTGFzdCgpOworICAgICAg
ICAgICAgQVNTRVJUKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKTsKKyAgICAgICAg
ICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZEZsdXNoZWRMb2Nh
bEVkZ2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBFbGltaW5hdGUgYWxsIGR1
cGxpY2F0ZSBvciBzZWxmLXBvaW50aW5nIFBoaSBlZGdlcy4gVGhpcyBtZWFucyB0aGF0CisgICAg
ICAgIC8vIHdlIHRyYW5zZm9ybToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gcDogUGhpKEBuMSwg
QG4yLCBAbjMpCisgICAgICAgIC8vCisgICAgICAgIC8vIGludG86CisgICAgICAgIC8vCisgICAg
ICAgIC8vIHA6IFBoaShAeCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaWYgZWFjaCBAbmkgaW4g
e0BuMSwgQG4yLCBAbjN9IGlzIGVpdGhlciBlcXVhbCB0byBAcCB0byBpcyBlcXVhbAorICAgICAg
ICAvLyB0byBAeCwgZm9yIGV4YWN0bHkgb25lIG90aGVyIEB4LiBBZGRpdGlvbmFsbHksIHRyaXZp
YWwgUGhpcyAoaS5lLgorICAgICAgICAvLyBwOiBQaGkoQHgpKSBhcmUgZm9yd2FyZGVkLCBzbyB0
aGF0IGlmIGhhdmUgYW4gZWRnZSB0byBzdWNoIEBwLCB3ZQorICAgICAgICAvLyByZXBsYWNlIGl0
IHdpdGggQHguIFRoaXMgbG9vcCBkb2VzIHRoaXMgZm9yIFBoaXMgb25seTsgbGF0ZXIgd2UgZG8K
KyAgICAgICAgLy8gc3VjaCBmb3J3YXJkaW5nIGZvciBQaGkgcmVmZXJlbmNlcyBmb3VuZCBpbiBv
dGhlciBub2Rlcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2VlIEF5Y29jayBhbmQgSG9yc3Bv
b2wgaW4gQ0MnMDAgZm9yIGEgYmV0dGVyIGRlc2NyaXB0aW9uIG9mIHdoYXQKKyAgICAgICAgLy8g
d2UncmUgZG9pbmcgaGVyZS4KKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0g
ZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gYmxvY2stPnBoaXNbcGhpSW5kZXhd
OworICAgICAgICAgICAgICAgICAgICBpZiAocGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIGZvcndhcmRQaGlDaGlsZHJlbihwaGkpOworICAgICAgICAgICAgICAgICAgICBk
ZWR1cGxpY2F0ZUNoaWxkcmVuKHBoaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gRm9y
IGVhY2ggYmFzaWMgYmxvY2ssIGZvciBlYWNoIGxvY2FsIGxpdmUgYXQgdGhlIGhlYWQgb2YgdGhh
dCBibG9jaywKKyAgICAgICAgLy8gZmlndXJlIG91dCB3aGF0IG5vZGUgd2Ugc2hvdWxkIGJlIHJl
ZmVycmluZyB0byBpbnN0ZWFkIG9mIHRoYXQgbG9jYWwuCisgICAgICAgIC8vIElmIGl0IHR1cm5z
IG91dCB0byBiZSBhIG5vbi10cml2aWFsIFBoaSwgbWFrZSBzdXJlIHRoYXQgd2UgY3JlYXRlIGFu
CisgICAgICAgIC8vIFNTQSBQaGkgYW5kIFVwc2lsb25zIGluIHByZWRlY2Vzc29yIGJsb2Nrcy4g
V2UgcmV1c2UKKyAgICAgICAgLy8gQmFzaWNCbG9jazo6dmFyaWFibGVzQXRIZWFkIGZvciB0cmFj
a2luZyB3aGljaCBub2RlcyB0byByZWZlciB0by4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+dmFyaWFibGVzQXRIZWFk
LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFy
aWFibGVzQXRIZWFkW2ldOworICAgICAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwor
ICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFBvaXNvbiB0aGlzIGVudHJ5IGluIHZhcmlhYmxlc0F0SGVhZCBiZWNhdXNl
IHdlIGRvbid0CisgICAgICAgICAgICAgICAgICAgIC8vIHdhbnQgYW55b25lIHRvIHRyeSB0byBy
ZWZlciB0byBpdCwgaWYgdGhlIHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIGNh
cHR1cmVkLgorICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0g
MDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6
CisgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIFBo
YW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3Ao
KSA9PSBQaGkgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAg
ICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmp1c3RPbmVDaGlsZCgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoZWRnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBl
ZGdlLm5vZGUoKTsgLy8gSXQncyBzb21ldGhpbmcgZnJvbSBhIGRpZmZlcmVudCBiYXNpYyBibG9j
ay4KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJdCdzIGEgbm9uLXRyaXZpYWwgUGhpLgorICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2hG
b3JtYXQgZm9ybWF0ID0gdmFyaWFibGUtPmZsdXNoRm9ybWF0KCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlRmxhZ3MgcmVzdWx0ID0gcmVzdWx0Rm9yKGZvcm1hdCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSB1c2VLaW5kRm9yKGZvcm1hdCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKDAsIFNwZWNOb25lLCBQaGksIG5vZGUtPmNvZGVPcmlnaW4p
OworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhyZXN1bHQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoKG5vZGUtPmZsYWdzKCkgJiBOb2Rl
UmVzdWx0TWFzaykgPT0gcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5z
aXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBw
cmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbal07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJlZGVjZXNzb3ItPmFwcGVuZE5vblRlcm1pbmFsKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgVXBzaWxvbiwgYmxvY2stPmxhc3Qo
KS0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5v
ZGUpLCBFZGdlKHByZWRlY2Vzc29yLT52YXJpYWJsZXNBdFRhaWxbaV0sIHVzZUtpbmQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+Y29kZU9yaWdpbiwg
T3BJbmZvKHZhcmlhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUp
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gbm9kZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9j
ayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAg
ICAgICBkYXRhTG9nKCJWYXJpYWJsZXMgYXQgaGVhZCBhZnRlciBTU0EgUGhpIGluc2VydGlvbjpc
biIpOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICAiLCAqYmxvY2ssICI6ICIsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsICJcbiIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlz
IHBvaW50IHZhcmlhYmxlc0F0SGVhZCBpbiBlYWNoIGJsb2NrIHJlZmVycyB0byBlaXRoZXI6Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIDEpIEEgbmV3IFNTQSBwaGkgaW4gdGhlIGN1cnJlbnQgYmxv
Y2suCisgICAgICAgIC8vIDIpIEEgU2V0QXJndW1lbnQsIHdoaWNoIHdpbGwgc29vbiBnZXQgY29u
dmVydGVkIGludG8gYSBHZXRBcmd1bWVudC4KKyAgICAgICAgLy8gMykgQW4gb2xkIENQUyBwaGkg
aW4gYSBkaWZmZXJlbnQgYmxvY2suCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGRvbid0IGhh
dmUgdG8gZG8gYW55dGhpbmcgZm9yICgxKSBhbmQgKDIpLCBidXQgd2UgZG8gbmVlZCB0bworICAg
ICAgICAvLyBkbyBhIHJlcGxhY2VtZW50IGZvciAoMykuCisgICAgICAgIAorICAgICAgICAvLyBD
bGVhciBhbGwgcmVwbGFjZW1lbnRzLCBzaW5jZSBvdGhlciBwaGFzZXMgbWF5IGhhdmUgdXNlZCB0
aGVtLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4
ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgICAgICAgICBibG9j
ay0+cGhpc1twaGlJbmRleF0tPnJlcGxhY2VtZW50ID0gMDsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAg
ICAgICAgIGJsb2NrLT5hdChub2RlSW5kZXgpLT5yZXBsYWNlbWVudCA9IDA7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIEZvciBhbGwgb2YgdGhlIG9sZCBDUFMgUGhpcywgZmlndXJl
IG91dCB3aGF0IHRoZXkgY29ycmVzcG9uZCB0byBpbiBTU0EuCisgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBo
aUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gYmxvY2stPnBoaXNbcGhp
SW5kZXhdOworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAgICAiQ29uc2lkZXJpbmcgIiwgcGhp
LCAiLCBmb3IgciIsIHBoaS0+bG9jYWwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICIsIGFu
ZCBpdHMgcmVwbGFjZW1lbnQgaW4gIiwgKmJsb2NrLCAiLCAiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHBoaS0+bG9jYWwoKSksICJcbiIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwaGktPnJlcGxhY2VtZW50ID0g
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHBoaS0+bG9jYWwoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBtYWtlIHN1cmUgdGhhdCBh
bGwgdmFyaWFibGVzQXRIZWFkIGluIGVhY2ggYmxvY2sgcG9pbnRzIHRvIHRoZQorICAgICAgICAv
LyBjYW5vbmljYWwgU1NBIHZhbHVlLiBQcmlvciB0byB0aGlzLCB2YXJpYWJsZXNBdEhlYWRbbG9j
YWxdIG1heSBwb2ludCB0bworICAgICAgICAvLyBhbiBvbGQgQ1BTIFBoaSBpbiBhIGRpZmZlcmVu
dCBibG9jay4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07CisgICAgICAgICAgICAgICAgaWYg
KCFub2RlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB3
aGlsZSAobm9kZS0+cmVwbGFjZW1lbnQpCisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT5yZXBsYWNlbWVudDsKKyAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ld
ID0gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlZhcmlhYmxlcyBhdCBoZWFkIGFmdGVy
IGNvbnZlcmdlbmNlOlxuIik7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgICIsICpibG9jaywgIjogIiwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZCwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIENvbnZlcnQgb3BlcmF0aW9ucyBvdmVyIGxvY2FscyBpbnRvIG9wZXJhdGlvbnMgb3Zl
ciBTU0Egbm9kZXMuCisgICAgICAgIC8vIC0gR2V0TG9jYWwgb3ZlciBjYXB0dXJlZCB2YXJpYWJs
ZXMgbG9zZSB0aGVpciBwaGlzLgorICAgICAgICAvLyAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJl
ZCB2YXJpYWJsZXMgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzCisgICAgICAg
IC8vICAgdG8gdGhlIG5vZGUgc3BlY2lmaWVkIGJ5IHZhcmlhYmxlc0F0SGVhZC4KKyAgICAgICAg
Ly8gLSBTZXRMb2NhbCBnZXRzIE5vZGVNdXN0R2VuZXJhdGUgaWYgaXQncyBmbHVzaGVkLCBvciB0
dXJucyBpbnRvIGEKKyAgICAgICAgLy8gICBNb3ZIaW50IG90aGVyd2lzZS4KKyAgICAgICAgLy8g
LSBGbHVzaCBsb3NlcyBpdHMgY2hpbGRyZW4gYnV0IHJlbWFpbnMsIGJlY2F1c2Ugd2Ugd2FudCB0
byBrbm93IHdoZW4gYQorICAgICAgICAvLyAgIGZsdXNoZWQgU2V0TG9jYWwncyB2YWx1ZSBpcyBu
byBsb25nZXIgbmVlZGVkLiBUaGlzIGFsc28gbWFrZXMgaXQgc2ltcGxlcgorICAgICAgICAvLyAg
IHRvIHJlYXNvbiBhYm91dCB0aGUgZm9ybWF0IG9mIGEgbG9jYWwsIHNpbmNlIHdlIGNhbiBqdXN0
IGZvbGQgaXQgaW50byB0aGUKKyAgICAgICAgLy8gICBiYWNrd2FyZHMgYW5hbHlzaXMgdGhhdCBM
aXZlbmVzc0FuYWx5c2lzUGhhc2UgZG9lcy4gQXMgcGFydCBvZiB0aGUKKyAgICAgICAgLy8gICBi
YWNrd2FyZHMgYW5hbHlzaXMsIHdlIHNheSB0aGF0IHRoZSB0eXBlIG9mIGEgbG9jYWwgY2FuIGJl
IGVpdGhlcgorICAgICAgICAvLyAgIGludDMyLCBkb3VibGUsIHZhbHVlLCBvciBkZWFkLgorICAg
ICAgICAvLyAtIFBoYW50b21Mb2NhbCBiZWNvbWVzIFBoYW50b20sIGFuZCBpdHMgY2hpbGQgaXMg
d2hhdGV2ZXIgaXMgc3BlY2lmaWVkCisgICAgICAgIC8vICAgYnkgdmFyaWFibGVzQXRIZWFkLgor
ICAgICAgICAvLyAtIFNldEFyZ3VtZW50IHR1cm5zIGludG8gR2V0QXJndW1lbnQuCisgICAgICAg
IC8vIC0gVXBzaWxvbnMgZ2V0IHRoZWlyIGNoaWxkcmVuIGZpeGVkIHRvIHJlZmVyIHRvIHRoZSB0
cnVlIHZhbHVlIG9mIHRoYXQgbG9jYWwKKyAgICAgICAgLy8gICBhdCB0aGUgZW5kIG9mIHRoZSBi
bG9jay4gUHJpb3IgdG8gdGhpcyBsb29wLCBVcHNpbG9ucyB3aWxsIHJlZmVyIHRvCisgICAgICAg
IC8vICAgdmFyaWFibGVBdFRhaWxbb3BlcmFuZF0sIHdoaWNoIG1heSBiZSBhbnkgb2YgRmx1c2gs
IFBoYW50b21Mb2NhbCwgR2V0TG9jYWwsCisgICAgICAgIC8vICAgU2V0TG9jYWwsIFNldEFyZ3Vt
ZW50LCBvciBQaGkuIFdlIGFjY29tcGxpc2ggdGhpcyBieSBzZXR0aW5nIHRoZQorICAgICAgICAv
LyAgIHJlcGxhY2VtZW50IHBvaW50ZXJzIG9mIGFsbCBvZiB0aG9zZSBub2RlcyB0byByZWZlciB0
byBlaXRoZXIKKyAgICAgICAgLy8gICB2YXJpYWJsZXNBdEhlYWRbb3BlcmFuZF0sIG9yIHRoZSBj
aGlsZCBvZiB0aGUgU2V0TG9jYWwuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhp
SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleF0tPnJlcGxh
Y2VtZW50ID0KKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kKGJsb2NrLT5waGlzW3BoaUluZGV4XS0+bG9jYWwoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRl
eC0tOykKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWJsb2NrLT5hdChub2RlSW5kZXgpLT5yZXBs
YWNlbWVudCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCBtX2Zs
dXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPm1lcmdlRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1v
dkhpbnQpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsgLy8gT25seSBmb3IgVXBzaWxvbnMuCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICAvLyBJdCBzZWVt
cyB0ZW1wdGluZyB0byBqdXN0IGRvIGZvcndhcmRQaGkoR2V0TG9jYWwpLCBleGNlcHQgdGhhdCB3
ZQorICAgICAgICAgICAgICAgICAgICAvLyBjb3VsZCBoYXZlIGNyZWF0ZWQgYSBuZXcgKFNTQSkg
UGhpLCBhbmQgdGhlIEdldExvY2FsIGNvdWxkIHN0aWxsIGJlCisgICAgICAgICAgICAgICAgICAg
IC8vIHJlZmVycmluZyB0byBhbiBvbGQgKENQUykgUGhpLiBVc2VzIHZhcmlhYmxlc0F0SGVhZCB0
byB0ZWxsIHVzIHdoYXQKKyAgICAgICAgICAgICAgICAgICAgLy8gdG8gcmVmZXIgdG8uCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVu
dCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDogeworICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIG9ubHkgZm9yIFVwc2lsb25zLiBBbiBVcHNpbG9uIHdpbGwgb25seSByZWZlciB0byBhIEZs
dXNoIGlmCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIHdlcmUgbm8gU2V0TG9jYWxzIG9y
IEdldExvY2FscyBpbiB0aGUgYmxvY2suCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxh
Y2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CisgICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1
cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCkuc2V0Tm9kZShibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRv
UGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgZm9yIFVwc2ls
b25zLiBBbiBVcHNpbG9uIHdpbGwgb25seSByZWZlciB0byBhCisgICAgICAgICAgICAgICAgICAg
IC8vIFBoYW50b21Mb2NhbCBpZiB0aGVyZSB3ZXJlIG5vIFNldExvY2FscyBvciBHZXRMb2NhbHMg
aW4gdGhlIGJsb2NrLgorICAgICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRBcmd1bWVudCk7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MocmVzdWx0Rm9yKG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5mbHVzaEZvcm1hdCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gRnJlZSBhbGwgcGhpcyBhbmQgcmVzZXQgdmFyaWFibGVz
IHZlY3RvcnMuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5u
dW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhp
SW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgICAg
IG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOworICAgICAg
ICAgICAgYmxvY2stPnBoaXMuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuY2xlYXIo
KTsKKyAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAg
IGJsb2NrLT52YWx1ZXNBdEhlYWQuY2xlYXIoKTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EgPSBh
ZG9wdFB0cihuZXcgQmFzaWNCbG9jazo6U1NBRGF0YShibG9jaykpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLmNsZWFyKCk7CisgICAgICAgIAorICAg
ICAgICBtX2dyYXBoLm1fZm9ybSA9IFNTQTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
Citwcml2YXRlOgorICAgIHZvaWQgZm9yd2FyZFBoaUNoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsg
KytpKSB7CisgICAgICAgICAgICBFZGdlJiBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7
CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBtX2NoYW5nZWQgfD0gZm9yd2FyZFBoaUVkZ2UoZWRnZSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgTm9kZSogZm9yd2FyZFBoaShOb2RlKiBub2RlKQorICAgIHsKKyAgICAg
ICAgZm9yICg7OykgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAg
ICAgICBjYXNlIFBoaTogeworICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxk
cmVuLmp1c3RPbmVDaGlsZCgpOworICAgICAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVkZ2Uubm9k
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
OworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgZm9yd2FyZFBoaUVkZ2UoRWRnZSYg
ZWRnZSkKKyAgICB7CisgICAgICAgIE5vZGUqIG5ld05vZGUgPSBmb3J3YXJkUGhpKGVkZ2Uubm9k
ZSgpKTsKKyAgICAgICAgaWYgKG5ld05vZGUgPT0gZWRnZS5ub2RlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGVkZ2Uuc2V0Tm9kZShuZXdOb2RlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVkdXBsaWNhdGVDaGlsZHJlbihOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5j
eUxpc3Q6OlNpemU7ICsraSkgeworICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRy
ZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBpZiAoZWRnZSA9PSBub2RlKSB7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0pOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsr
aikgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZHJlbi5jaGlsZChqKSA9PSBlZGdl
KSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2Uoai0tKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRGbHVz
aGVkTG9jYWxPcChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG1fZmx1c2hlZExvY2Fs
T3BzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2ZsdXNo
ZWRMb2NhbE9wcy5hZGQobm9kZSk7CisgICAgICAgIG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5h
cHBlbmQobm9kZSk7CisgICAgfQorCisgICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxFZGdlKE5vZGUq
LCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChlZGdlLm5vZGUo
KSk7CisgICAgfQorICAgIAorICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBI
YXNoU2V0PE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wczsKKyAgICBWZWN0b3I8Tm9kZSo+IG1fZmx1
c2hlZExvY2FsT3BXb3JrbGlzdDsKKyAgICBib29sIG1fY2hhbmdlZDsKK307CisKK2Jvb2wgcGVy
Zm9ybVNTQUNvbnZlcnNpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgU1NBIENvbnZlcnNpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVu
UGhhc2U8U1NBQ29udmVyc2lvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHU1NBQ29udmVyc2lvblBoYXNlX2gK
KyNkZWZpbmUgREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbnZlcnQgVGhyZWFkZWRDUFMgZm9ybSBpbnRv
IFNTQSBmb3JtLiBUaGlzIHJlc3VsdHMgaW4gYSBmb3JtIHRoYXQgaGFzOgorLy8KKy8vIC0gUm91
Z2hseSBtaW5pbWFsIFBoaSdzLiBXZSB1c2UgdGhlIEF5Y29jayAmIEhvcnNwb29sIGZpeHBvaW50
IGZvcgorLy8gICBjb252ZXJ0aW5nIHRoZSBDUFMgbWF4aW1hbCBQaGlzIGludG8gU1NBIG1pbmlt
YWwgUGhpcywgd2l0aCB0aGUgY2F2ZWF0CisvLyAgIHRoYXQgaXJyZWR1Y2libGUgY29udHJvbCBm
bG93IG1heSByZXN1bHQgaW4gc29tZSBtaXNzZWQgb3Bwb3J0dW5pdGllcworLy8gICBmb3IgUGhp
IHJlZHVjdGlvbi4KKy8vCisvLyAtIE5vIHVzZXMgb2YgR2V0TG9jYWwvU2V0TG9jYWwgZXhjZXB0
IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGZsdXNoZXMuCisvLyAgIEFmdGVyIHRoaXMsIGFu
eSByZW1haW5pbmcgU2V0TG9jYWwgbWVhbnMgRmx1c2guIEZsdXNoIG5vZGVzIGFyZQorLy8gICBl
bGltaW5hdGVkLiBQaGFudG9tTG9jYWxzIGJlY29tZSBQaGFudG9tcy4gTm9kZXMgbWF5IG1heSBo
YXZlIGNoaWxkcmVuCisvLyAgIHRoYXQgYXJlIGluIGFub3RoZXIgYmFzaWMgYmxvY2suCisvLwor
Ly8gLSBNb3ZIaW50cyBhcmUgdXNlZCBmb3IgT1NSIGluZm9ybWF0aW9uLCBhbmQgYXJlIHRoZW1z
ZWx2ZXMgbWluaW1hbC4KKy8vICAgQSBNb3ZIaW50IHdpbGwgb2NjdXIgYXQgc29tZSBwb2ludCBh
ZnRlciB0aGUgYXNzaWduaW5nLCBhbmQgYXQgUGhpCisvLyAgIHBvaW50cy4KKy8vCisvLyAtIFVu
bGlrZSBjb252ZW50aW9uYWwgU1NBIGluIHdoaWNoIFBoaSBmdW5jdGlvbnMgcmVmZXIgdG8gcHJl
ZGVjZXNzb3JzCisvLyAgIGFuZCB2YWx1ZXMsIG91ciBTU0EgdXNlcyBVcHNpbG9uIGZ1bmN0aW9u
cyB0byBpbmRpY2F0ZSB2YWx1ZXMgaW4KKy8vICAgcHJlZGVjZXNzb3JzLiBBIG1lcmdlIHdpbGwg
bG9vayBsaWtlOgorLy8KKy8vICAgbGFiZWxBOgorLy8gICAgICAgYTogVGhpbmd5KC4uLikKKy8v
ICAgICAgIGI6IFVwc2lsb24oXmUsIEBhKQorLy8gICAgICAgSnVtcChsYWJlbEMpCisvLworLy8g
ICBsYWJlbEI6CisvLyAgICAgICBjOiBPdGhlclRoaW5neSguLi4pCisvLyAgICAgICBkOiBVcHNp
bG9uKF5lLCBAYykKKy8vICAgICAgIEp1bXAobGFiZWxDKQorLy8KKy8vICAgbGFiZWxDOgorLy8g
ICAgICAgZTogUGhpKCkKKy8vCisvLyAgIE5vdGUgdGhhdCB0aGUgUGhpIGhhcyBubyBjaGlsZHJl
biwgYnV0IHRoZSBwcmVkZWNlc3NvcnMgaGF2ZSBVcHNpbG9ucworLy8gICB0aGF0IGhhdmUgYSB3
ZWFrIHJlZmVyZW5jZSB0byB0aGUgUGhpICheZSBpbnN0ZWFkIG9mIEBlOyB3ZSBzdG9yZSBpdAor
Ly8gICBpbiB0aGUgT3BJbmZvIHJhdGhlciB0aGFuIHRoZSBBZGphY2VuY3lMaXN0KS4gVGhpbmsg
b2YgdGhlIFVwc2lsb24KKy8vICAgYXMgImFzc2lnbmluZyIgdG8gdGhlICJ2YXJpYWJsZSIgYXNz
b2NpYXRlZCB3aXRoIHRoZSBQaGksIGFuZCB0aGF0CisvLyAgIHRoaXMgaXMgdGhlIG9uZSBwbGFj
ZSBpbiBTU0EgZm9ybSB3aGVyZSB5b3UgY2FuIGhhdmUgbXVsdGlwbGUKKy8vICAgYXNzaWdubWVu
dHMuCisvLworLy8gICBUaGlzIGltcGxpZXMgc29tZSBvdGhlciBsb29zZW5pbmdzIG9mIFNTQS4g
Rm9yIGV4YW1wbGUsIGFuIFVwc2lsb24KKy8vICAgbWF5IHByZWNlZGUgYSBQaGkgaW4gdGhlIHNh
bWUgYmFzaWMgYmxvY2s7IHRoaXMgbWF5IGFyaXNlIGFmdGVyIENGRworLy8gICBzaW1wbGlmaWNh
dGlvbi4gQWx0aG91Z2ggaXQncyBwcm9maXRhYmxlIGZvciBDRkcgc2ltcGxpZmljYXRpb24gKG9y
CisvLyAgIHNvbWUgb3RoZXIgcGhhc2UpIHRvIHJlbW92ZSB0aGVzZSwgaXQncyBub3Qgc3RyaWN0
bHkgbmVjZXNzYXJ5LiBBcworLy8gICB3ZWxsLCB0aGlzIGZvcm0gYWxsb3dzIHRoZSBVcHNpbG9u
IHRvIGJlIGluIGFueSBibG9jayB0aGF0IGRvbWluYXRlcworLy8gICB0aGUgcHJlZGVjZXNzb3Ig
YmxvY2sgb2YgdGhlIFBoaSwgd2hpY2ggYWxsb3dzIGZvciBibG9jayBzcGxpdHRpbmcgdG8KKy8v
ICAgaWdub3JlIHRoZSBwb3NzaWJpbGl0eSBvZiBpbnRyb2R1Y2luZyBhbiBleHRyYSBlZGdlIGJl
dHdlZW4gdGhlIFBoaQorLy8gICBhbmQgdGhlIHByZWRlY2Vzc29yICh0aG91Z2ggbm9ybWFsIFNT
QSB3b3VsZCBhbGxvdyB0aGlzLCBhbHNvLCB3aXRoCisvLyAgIHRoZSBjYXZlYXQgdGhhdCB0aGUg
UGhpIHByZWRlY2Vzc29yIGJsb2NrIGxpc3RzIHdvdWxkIGhhdmUgdG8gYmUKKy8vICAgdXBkYXRl
ZCkuCisvLworLy8gICBUaGUgZWFzaWVzdCB3YXkgdG8gY29udmVydCBmcm9tIHRoaXMgU1NBIGZv
cm0gaW50byBhIGRpZmZlcmVudCBTU0EKKy8vICAgZm9ybSBpcyB0byByZWRvIFNTQSBjb252ZXJz
aW9uIGZvciBQaGkgZnVuY3Rpb25zLiBUaGF0IGlzLCB0cmVhdCBlYWNoCisvLyAgIFBoaSBpbiBv
dXIgSVIgYXMgYSBub24tU1NBIHZhcmlhYmxlIGluIHRoZSBmb3JlaWduIElSIChzbywgYXMgYW4K
Ky8vICAgYWxsb2NhIGluIExMVk0gSVIsIGZvciBleGFtcGxlKTsgdGhlIFVwc2lsb25zIHRoYXQg
cmVmZXIgdG8gdGhlIFBoaQorLy8gICBiZWNvbWUgc3RvcmVzIGFuZCB0aGUgUGhpcyB0aGVtc2Vs
dmVzIGJlY29tZSBsb2Fkcy4KKy8vCisvLyAgIEZ1biBmYWN0OiBVcHNpbG9uIGlzIHNvIG5hbWVk
IGJlY2F1c2UgaXQgY29tZXMgYmVmb3JlIFBoaSBpbiB0aGUKKy8vICAgYWxwaGFiZXQuIEl0IGNh
biBiZSB3cml0dGVuIGFzICJZIi4KKworYm9vbCBwZXJmb3JtU1NBQ29udmVyc2lvbihHcmFwaCYp
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR1NTQUNvbnZlcnNpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
cmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM5NSw3ICs0Mzk1LDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBjYXNlIFBoaToKICAgICBjYXNlIEZsdXNoOgogICAgICAgICBicmVhazsKIApA
QCAtNDgyOSw2ICs0ODI4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAgIGNhc2Ug
UGhpOgorICAgIGNhc2UgVXBzaWxvbjoKKyAgICBjYXNlIEdldEFyZ3VtZW50OgogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOTYsNyArNDI5Niw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IEZsdXNoOgotICAgIGNhc2UgUGhpOgogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQnJlYWtw
b2ludDoKQEAgLTQ2OTAsNiArNDY4OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVU
eXBlOgorICAgIGNhc2UgUGhpOgorICAgIGNhc2UgVXBzaWxvbjoKKyAgICBjYXNlIEdldEFyZ3Vt
ZW50OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVh
azsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNw
cAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDI0ICs4MSwyOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBWX0VRVUFMKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAwKSwgc3Rh
dGljX2Nhc3Q8Tm9kZSo+KDApLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkpOwogICAg
ICAgICAKICAgICAgICAgLy8gVmFsaWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4KLSAgICAgICAg
SGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG15UmVmQ291bnRzOwogICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1Jl
YWNoYWJsZSkKKyAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBWQUxJREFURSgoYmxvY2spLCBibG9jay0+aXNSZWFjaGFibGUpOwog
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytp
KQotICAgICAgICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShpKSwgMCk7Cisg
ICAgICAgICAgICAgICAgbV9teVJlZkNvdW50cy5hZGQoYmxvY2stPm5vZGUoaSksIDApOwogICAg
ICAgICB9Ci0gICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGFjY2VwdGFibGVOb2RlczsKICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrIHx8ICFi
bG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
bnVtTm9kZXMoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5u
b2RlKGkpOwotICAgICAgICAgICAgICAgIGFjY2VwdGFibGVOb2Rlcy5hZGQobm9kZSk7CisgICAg
ICAgICAgICAgICAgbV9hY2NlcHRhYmxlTm9kZXMuYWRkKG5vZGUpOwogICAgICAgICAgICAgICAg
IGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVXBzaWxvbikgeworICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG1fZ3JhcGgubV9mb3JtID09IFNTQSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5waGkoKS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbXlSZWZDb3VudHMuZmluZChub2RlKS0+dmFsdWUrKzsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAg
ICAvLyBQaGkgY2hpbGRyZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlz
UGhpSW5kZXgoaSkpCkBAIC0xMDgsMjIgKzExMiwyOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbXlSZWZDb3VudHMuZmluZChl
ZGdlLm5vZGUoKSktPnZhbHVlKys7CisgICAgICAgICAgICAgICAgICAgIG1fbXlSZWZDb3VudHMu
ZmluZChlZGdlLm5vZGUoKSktPnZhbHVlKys7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJbiBTU0EsIGFsbCBlZGdlcyBtdXN0IGhhc1Jlc3VsdCgpLgorICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNSZXN1bHQo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNz
IEknbSBhIEZsdXNoLCBQaGFudG9tLCBHZXRMb2NhbCwgb3IgUGhpLCBteSBjaGlsZHJlbiBzaG91
bGQgaGFzUmVzdWx0KCkuCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgICAgICAgICBj
YXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVk
Z2UpLCBlZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSht
X2dyYXBoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSks
IGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBj
YXNlIFBoYW50b21Mb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBlZGdlKSwgZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0Rh
dGEobV9ncmFwaCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVk
Z2UpLCBlZGdlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVk
Z2UtPm9wKCkgIT0gU2V0TG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgUGhpOgotICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1Zhcmlh
YmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gTG9jYWxseVVuaWZpZWQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZSwgZWRnZSksIGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpKTsKQEAgLTE0OCw2ICsxNTgsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0E6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgpAQCAtMTU3LDkgKzE3MCw0NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIAogICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nrcygp
OyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5p
c1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2Rl
cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPm5vZGUoaSk7
CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVm
Q291bnQpCisgICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBtX215UmVmQ291bnRz
LmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBub2RlLT5yZWZDb3VudCgp
LCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3dpdGNo
IChtX2dyYXBoLm1fZm9ybSkgeworICAgICAgICBjYXNlIExvYWRTdG9yZToKKyAgICAgICAgY2Fz
ZSBUaHJlYWRlZENQUzoKKyAgICAgICAgICAgIHZhbGlkYXRlQ1BTKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFNTQToKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgU1NBIHZlcmlmaWNhdGlvbi4KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBH
cmFwaER1bXBNb2RlIG1fZ3JhcGhEdW1wTW9kZTsKKyAgICAKKyAgICBIYXNoTWFwPE5vZGUqLCB1
bnNpZ25lZD4gbV9teVJlZkNvdW50czsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2FjY2VwdGFibGVO
b2RlczsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlQ1BTKCkKKyAgICB7CisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSGFzaFNldDxOb2Rl
Kj4gcGhpc0luVGhpc0Jsb2NrOwpAQCAtMTcwLDE1ICsyMTgsMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgIGlm
IChibG9jay0+aXNQaGlJbmRleChpKSkKICAgICAgICAgICAgICAgICAgICAgcGhpc0luVGhpc0Js
b2NrLmFkZChub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3JlZkNvdW50U3Rh
dGUgPT0gRXhhY3RSZWZDb3VudCkKLSAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSks
IG15UmVmQ291bnRzLmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBub2Rl
LT5yZWZDb3VudCgpLCAxKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAg
IEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAg
IGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGFjY2VwdGFibGVOb2Rlcy5jb250YWlu
cyhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRn
ZSksIG1fYWNjZXB0YWJsZU5vZGVzLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMjgsNyArMjcyLDYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYmxv
Y2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsraykgewogICAgICAgICAgICAgICAgICAgICAgICAg
QmFzaWNCbG9jayogcHJldkJsb2NrID0gYmxvY2stPnByZWRlY2Vzc29yc1trXTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldkJs
b2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChibG9jay0+cHJlZGVjZXNz
b3JzW2tdKSwgcHJldkJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9j
YWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlz
IG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgpA
QCAtMjc0LDE3ICszMTcsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihhcmd1bWVudFRvT3BlcmFuZChpKSksIGJsb2NrKSwgIWJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1
bWVudChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGFyZ3VtZW50VG9PcGVyYW5kKGkpKSwg
YmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFy
aWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEobV9ncmFwaCkp
OwogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykKLSAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
YXJndW1lbnRUb09wZXJhbmQoaSkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmFy
Z3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSktPmhhc1Zhcmlh
YmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJhbmQoaSkpLCBibG9jayksICFibG9j
ay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
YXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMuYXJndW1lbnQoaSkgPSBu
b3RTZXQ7CiAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMuYXJndW1lbnQoaSkgPSBu
b3RTZXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIGJsb2Nr
KSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCBibG9jayksICFibG9j
ay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9j
YWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQotICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpKSwgYmxvY2spLCAhYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2Fs
KGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCBibG9jayksICFibG9jay0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaSkt
Pmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAKICAgICAgICAgICAgICAgICBnZXRM
b2NhbFBvc2l0aW9ucy5sb2NhbChpKSA9IG5vdFNldDsKICAgICAgICAgICAgICAgICBzZXRMb2Nh
bFBvc2l0aW9ucy5sb2NhbChpKSA9IG5vdFNldDsKQEAgLTMyMSw3ICszNjQsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgLy8g
SWdub3JlIEdldExvY2FsJ3MgdGhhdCB3ZSBrbm93IHRvIGJlIGRlYWQsIGJ1dCB0aGF0IHRoZSBn
cmFwaAogICAgICAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IHlldCBrbm93IHRvIGJlIGRlYWQu
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbXlSZWZDb3VudHMuZ2V0KG5vZGUpKQorICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1fbXlSZWZDb3VudHMuZ2V0KG5vZGUpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9y
bSA9PSBUaHJlYWRlZENQUykKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90
U2V0KTsKQEAgLTM1NSwxMCArMzk4LDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAg
IAotcHJpdmF0ZToKLSAgICBHcmFwaCYgbV9ncmFwaDsKLSAgICBHcmFwaER1bXBNb2RlIG1fZ3Jh
cGhEdW1wTW9kZTsKLSAgICAKICAgICB2b2lkIGNoZWNrT3BlcmFuZCgKICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2ssIE9wZXJhbmRzPHNpemVfdD4mIGdldExvY2FsUG9zaXRpb25zLAogICAgICAg
ICBPcGVyYW5kczxzaXplX3Q+JiBzZXRMb2NhbFBvc2l0aW9ucywgaW50IG9wZXJhbmQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZp
bmUgREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gKIAogI2luY2x1ZGUgIkRGR0RvdWJsZUZvcm1hdFN0
YXRlLmgiCisjaW5jbHVkZSAiREZHRmx1c2hGb3JtYXQuaCIKICNpbmNsdWRlICJERkdOb2RlRmxh
Z3MuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgi
CkBAIC0zMTgsNiArMzE5LDI5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNoZWNrQW5kU2V0
KG1fZmxhZ3MsIG1fZmxhZ3MgfCBuZXdGbGFncyk7CiAgICAgfQogICAgIAorICAgIEZsdXNoRm9y
bWF0IGZsdXNoRm9ybWF0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChmaW5kKCkgPT0gdGhpcyk7
CisgICAgICAgIAorICAgICAgICBpZiAoIXNob3VsZFVuYm94SWZQb3NzaWJsZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIEZsdXNoZWRKU1ZhbHVlOworICAgICAgICAKKyAgICAgICAgaWYgKHNob3Vs
ZFVzZURvdWJsZUZvcm1hdCgpKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWREb3VibGU7Cisg
ICAgICAgIAorICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gYXJndW1lbnRBd2Fy
ZVByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9u
KSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkSW50MzI7CisgICAgICAgIAorICAgICAgICBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gRmx1
c2hlZENlbGw7CisgICAgICAgIAorICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJl
ZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gRmx1c2hlZEJvb2xlYW47CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gRmx1c2hlZEpTVmFsdWU7CisgICAgfQorICAgIAogcHJpdmF0ZToKICAg
ICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBhbnl0aGluZyB3
ZSdyZSB1bmlmaWVkIHdpdGgKICAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUgb3BlcmFuZCBhbmQg
c2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDYgKzgyLDggQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2Rl
KQogICAgIGNhc2UgSnVtcDoKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIEZvcndh
cmRGb3JjZU9TUkV4aXQ6CisgICAgY2FzZSBQaGk6CisgICAgY2FzZSBVcHNpbG9uOgogICAgICAg
ICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0QXJyYXlMZW5n
dGg6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiRlRMRXhpdFRo
dW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKKyNpbmNsdWRl
ICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCiAjaW5jbHVk
ZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiRlRMVmFsdWVTb3VyY2UuaCIKQEAgLTYxLDEwICs2
Miw2IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQogICAgICAgICAsIG1f
aGVhcHMoc3RhdGUuY29udGV4dCkKICAgICAgICAgLCBtX291dChzdGF0ZS5jb250ZXh0KQotICAg
ICAgICAsIG1fbG9jYWxzQm9vbGVhbihPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDAp
LT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwgbV9sb2NhbHMzMihPcGVyYW5kc0xpa2UsIHN0
YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwgbV9sb2NhbHM2
NChPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCi0g
ICAgICAgICwgbV9sb2NhbHNEb3VibGUoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygw
KS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fdmFsdWVTb3VyY2VzKE9wZXJhbmRzTGlr
ZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKICAgICAgICAgLCBtX2xh
c3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgICAgICwg
bV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCkBAIC03NCw2ICs3MSw4IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGxvd2VyKCkKICAgICB7CisgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3Jz
LmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAgCiAgICAgICAgIG1fZnRsU3Rh
dGUubW9kdWxlID0KICAgICAgICAgICAgIExMVk1Nb2R1bGVDcmVhdGVXaXRoTmFtZUluQ29udGV4
dCgianNCb2R5IiwgbV9mdGxTdGF0ZS5jb250ZXh0KTsKICAgICAgICAgCkBAIC04NSwxNSArODQs
OSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX3Byb2xvZ3VlID0gYXBwZW5kQmFzaWNC
bG9jayhtX2Z0bFN0YXRlLmNvbnRleHQsIG1fZnRsU3RhdGUuZnVuY3Rpb24pOwogICAgICAgICBt
X291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IG1fbG9jYWxzQm9vbGVhbi5zaXplKCk7IGluZGV4LS07KSB7Ci0gICAgICAgICAgICBtX2xvY2Fs
c0Jvb2xlYW5baW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291dC5ib29s
ZWFuKTsKLSAgICAgICAgICAgIG1fbG9jYWxzMzJbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQu
bV9idWlsZGVyLCBtX291dC5pbnQzMik7Ci0gICAgICAgICAgICBtX2xvY2FsczY0W2luZGV4XSA9
IGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgbV9vdXQuaW50NjQpOwotICAgICAgICAgICAg
bV9sb2NhbHNEb3VibGVbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291
dC5kb3VibGVUeXBlKTsKLSAgICAgICAgfQorICAgICAgICBjcmVhdGVQaGlWYXJpYWJsZXMoKTsK
ICAgICAgICAgCiAgICAgICAgIG1faW5pdGlhbGl6YXRpb24gPSBhcHBlbmRCYXNpY0Jsb2NrKG1f
ZnRsU3RhdGUuY29udGV4dCwgbV9mdGxTdGF0ZS5mdW5jdGlvbik7Ci0gICAgICAgIG1fYXJndW1l
bnRDaGVja3MgPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuY29udGV4dCwgbV9mdGxTdGF0
ZS5mdW5jdGlvbik7CiAKICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5wYXJhbSgwKTsKICAg
ICAgICAgbV90YWdUeXBlTnVtYmVyID0gbV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsK
QEAgLTEwNCwxOSArOTcsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFtX2hpZ2hCbG9j
aykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fYmxvY2tzLmFkZCht
X2hpZ2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9jayAiLCAqbV9oaWdoQmxvY2sp
KSk7Ci0gICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygpOwotICAgICAgICAKLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obV9hcmd1bWVudENoZWNrcywgbG93QmxvY2sobV9ncmFwaC5i
bG9jaygwKSkpOwotCi0gICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSkpOwotICAg
ICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KQotICAgICAgICAgICAgY29tcGls
ZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmly
c3Q7CisgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVwdGhGaXJz
dCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZpcnN0LnNpemUoKTsg
KytpKQorICAgICAgICAgICAgY29tcGlsZUJsb2NrKGRlcHRoRmlyc3RbaV0pOwogICAgICAgICAK
ICAgICAgICAgLy8gQW5kIG5vdyBjb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gYmxvY2suCiAg
ICAgICAgIGxpbmtPU1JFeGl0c0FuZENvbXBsZXRlSW5pdGlhbGl6YXRpb25CbG9ja3MoKTsKQEAg
LTEyOSw5OSArMTE1LDUyIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAKLSAgICB2b2lkIGFk
ZEZsdXNoZWRMb2NhbE9wUm9vdHMoKQorICAgIHZvaWQgY3JlYXRlUGhpVmFyaWFibGVzKCkKICAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gbV9oaWdoQmxvY2stPnNpemUo
KTsgbm9kZUluZGV4LS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gbV9oaWdoQmxvY2st
PmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBGbHVzaCkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKG5v
ZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xvc2VPdmVyRmx1c2hlZExv
Y2FsT3BzKCkKLSAgICB7Ci0gICAgICAgIHdoaWxlICghbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZmx1c2hlZExvY2FsT3BX
b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgICAgICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QucmVt
b3ZlTGFzdCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9mbHVzaGVkTG9j
YWxPcHMuY29udGFpbnMobm9kZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBERkdfTk9E
RV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZEZsdXNoZWRMb2NhbE9wKE5vZGUqIG5v
ZGUpCi0gICAgewotICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZmx1c2hlZExvY2FsT3BzLmFkZChub2Rl
KTsKLSAgICAgICAgbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmFwcGVuZChub2RlKTsKLSAgICB9
Ci0gICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAgewot
ICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChlZGdlLm5vZGUoKSk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgdHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50cygpCi0gICAgewotICAgICAgICAvLyBXaGls
ZSBjaGVja2luZyBhcmd1bWVudHMsIGV2ZXJ5dGhpbmcgaXMgaW4gdGhlIHN0YWNrLgotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhbHVlU291cmNlcy5zaXplKCk7IGktLTspCi0gICAgICAg
ICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fY29kZU9yaWdpbiA9IENvZGVPcmlnaW4oMCk7Ci0gICAgICAgIG1f
bm9kZSA9IDA7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fZ3JhcGgu
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKytpKSB7Ci0gICAgICAgICAgICBOb2RlKiBu
b2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c1tpXTsKLSAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgLy8gSWYgaXQncyBjYXB0dXJlZCB0aGVuIHdlJ2xs
IGJlIGFjY2Vzc2luZyBpdCB0aHJvdWdoIGxvYWRzIGFuZCBzdG9yZXMKLSAgICAgICAgICAgIC8v
IGFueXdheSAtIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gdHJhbnNmZXJpbmcgaXQgb3V0LgotICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVz
c0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
dmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIXZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZh
cmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpz
VmFsdWUpLCBub2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9vdXQuc2V0KHVuYm94SW50MzIoanNWYWx1ZSksIG1fbG9jYWxzMzIub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3
YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFs
dWUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1fbG9jYWxzNjQu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3
YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29sZWFuKGpz
VmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHVuYm94Qm9vbGVhbihqc1Zh
bHVlKSwgbV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4
LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFBoaSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgTFR5cGUgdHlwZTsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgeworICAgICAgICAg
ICAgICAgIGNhc2UgTm9kZVJlc3VsdE51bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9
IG1fb3V0LmRvdWJsZVR5cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0g
bV9vdXQuaW50MzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtX291
dC5ib29sZWFuOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIE5vZGVSZXN1bHRKUzoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmludDY0
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bV9waGlzLmFkZChub2RlLCBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIHR5cGUpKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUs
IG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIHZvaWQgY29tcGlsZUJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAg
ICB2b2lkIGNvbXBpbGVCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIG1f
aGlnaEJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKHZlcmJv
c2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyBi
bG9jayAiLCAqYmxvY2ssICJcbiIpOworICAgICAgICAKKyAgICAgICAgbV9oaWdoQmxvY2sgPSBi
bG9jazsKICAgICAgICAgaWYgKCFtX2hpZ2hCbG9jaykKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrID0gbV9ibG9ja3MuZ2V0KG1faGln
aEJsb2NrKTsKICAgICAgICAgCiAgICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9IDA7Ci0gICAgICAg
IGZvciAoQmxvY2tJbmRleCBuZXh0QmxvY2tJbmRleCA9IGJsb2NrSW5kZXggKyAxOyBuZXh0Qmxv
Y2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IG5leHRCbG9ja0luZGV4ID0gbV9oaWdoQmxvY2stPmluZGV4ICsg
MTsgbmV4dEJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK25leHRCbG9ja0luZGV4
KSB7CiAgICAgICAgICAgICBtX25leHRIaWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKG5leHRCbG9j
a0luZGV4KTsKICAgICAgICAgICAgIGlmIChtX25leHRIaWdoQmxvY2spCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0yNDEsMTEgKzE4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAg
ICBpbml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2soKTsKICAgICAgICAgCi0gICAgICAgIG1f
aW50MzJWYWx1ZXMuY2xlYXIoKTsKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmNsZWFyKCk7Ci0g
ICAgICAgIG1fYm9vbGVhblZhbHVlcy5jbGVhcigpOwotICAgICAgICBtX3N0b3JhZ2VWYWx1ZXMu
Y2xlYXIoKTsKLSAgICAgICAgbV90aW1lVG9MaXZlLmNsZWFyKCk7CisgICAgICAgIG1fbGl2ZSA9
IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQ7CiAgICAgICAgIAogICAgICAgICBtX3N0YXRlLnJlc2V0
KCk7CiAgICAgICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1faGlnaEJsb2NrKTsKQEAgLTI3
NCwxMiArMjA5LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIG1fZGlyZWN0aW9uID0gKG1fbm9kZS0+
ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpID8gRm9yd2FyZFNwZWN1bGF0aW9uIDogQmFja3dh
cmRTcGVjdWxhdGlvbjsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7
CisgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAgIGNvbXBpbGVVcHNpbG9uKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICBjb21waWxl
UGhpKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAg
ICAgICAgICAgY29tcGlsZUpTQ29uc3RhbnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgICAgICAgICAgY29tcGlsZVdlYWtKU0NvbnN0YW50
KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICAg
ICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICBjb21waWxlR2V0TG9jYWwoKTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNDQ1LDggKzM4OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChtX25v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJF
TihtX2dyYXBoLCBtX25vZGUsIHVzZSk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5o
YXNSZXN1bHQoKSkKLSAgICAgICAgICAgIG1fdGltZVRvTGl2ZS5hZGQobV9ub2RlLCBtX25vZGUt
PmFkanVzdGVkUmVmQ291bnQoKSk7CisgICAgICAgIGlmIChtX25vZGUtPmFkanVzdGVkUmVmQ291
bnQoKSkKKyAgICAgICAgICAgIG1fbGl2ZS5hZGQobV9ub2RlKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZUVm
ZmVjdHMobm9kZUluZGV4KTsKQEAgLTQ1NCw3MyArMzk4LDExNiBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb21waWxlVXBzaWxvbigpCisg
ICAgeworICAgICAgICBMVmFsdWUgZGVzdGluYXRpb24gPSBtX3BoaXMuZ2V0KG1fbm9kZS0+cGhp
KCkpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgeworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIG1fb3V0LnNldChsb3dE
b3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0Jvb2xlYW4o
bV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICBtX291dC5zZXQobG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVW50eXBlZFVzZToKKyAgICAgICAgICAgIG1fb3V0LnNldChsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQaGko
KQorICAgIHsKKyAgICAgICAgTFZhbHVlIHNvdXJjZSA9IG1fcGhpcy5nZXQobV9ub2RlKTsKKyAg
ICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5mbGFncygpICYgTm9kZVJlc3VsdE1hc2sp
IHsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0TnVtYmVyOgorICAgICAgICAgICAgc2V0RG91Ymxl
KG1fb3V0LmdldChzb3VyY2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5v
ZGVSZXN1bHRJbnQzMjoKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmdldChzb3VyY2UpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGVSZXN1bHRCb29sZWFuOgorICAg
ICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0SlM6CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LmdldChzb3VyY2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIHZvaWQgY29tcGlsZUpTQ29uc3RhbnQo
KQogICAgIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3Rh
bnQobV9ub2RlKTsKICAgICAgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpCi0gICAgICAgICAgICBt
X2RvdWJsZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5jb25zdERvdWJsZSh2YWx1ZS5hc0RvdWJs
ZSgpKSk7CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQuY29uc3REb3VibGUodmFsdWUuYXNE
b3VibGUoKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRk
KG1fbm9kZSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSk7CisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVXZWFrSlNDb25zdGFudCgpCiAgICAg
ewotICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgd2Vha1BvaW50ZXIobV9ub2Rl
LT53ZWFrQ29uc3RhbnQoKSkpOworICAgICAgICBzZXRKU1ZhbHVlKHdlYWtQb2ludGVyKG1fbm9k
ZS0+d2Vha0NvbnN0YW50KCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlR2V0QXJn
dW1lbnQoKQorICAgIHsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1f
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGludCBvcGVyYW5kID0gdmFyaWFi
bGUtPm9wZXJhbmQoKTsKKworICAgICAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHBy
b2ZpbGUgPQorICAgICAgICAgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6ZnJvbUxh
enlPcGVyYW5kKAorICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLAorICAg
ICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KDAsIG9wZXJhbmQpKTsKKwor
ICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQp
KTsKKworICAgICAgICBzd2l0Y2ggKHVzZUtpbmRGb3IodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkp
KSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2Fy
ZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIHByb2ZpbGUsIGlzTm90SW50MzIoanNW
YWx1ZSkpOworICAgICAgICAgICAgc2V0SW50MzIodW5ib3hJbnQzMihqc1ZhbHVlKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICAgICAgc3BlY3Vs
YXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBwcm9maWxlLCBpc05v
dENlbGwoanNWYWx1ZSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShqc1ZhbHVlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgICAgICBzcGVj
dWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIHByb2ZpbGUsIGlz
Tm90Qm9vbGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKHVuYm94Qm9vbGVh
bihqc1ZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNl
OgorICAgICAgICAgICAgc2V0SlNWYWx1ZShqc1ZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZUdldExvY2FsKCkKICAgICB7Ci0gICAgICAgIC8vIEdldExvY2FsIGlzIG9uZSBvZiB0
aGUgZmV3IG5vZGVzIHRoYXQgbWF5IGJlIGxlZnQgYmVoaW5kLCB3aXRoICFzaG91bGRHZW5lcmF0
ZSgpLgotICAgICAgICBpZiAoIW1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgLy8gR2V0TG9jYWxzIGFyaXNlIG9ubHkgZm9yIGNhcHR1cmVkIHZh
cmlhYmxlcy4KICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAg
IEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNO
b25lKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHZhbHVlLmlz
Q2xlYXIoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cmFwIGluc3RlYWQu
Ci0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEwMzgzCi0gICAgICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhYmxl
LT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24odmFs
dWUubV92YWx1ZSkpCi0gICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBt
X291dC5sb2FkMzIocGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQu
bG9hZDY0KGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5i
b3hJZlBvc3NpYmxlKCkpIHsKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91
YmxlRm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQobV9ub2Rl
LCBtX291dC5nZXQobV9sb2NhbHNEb3VibGUub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIExvY2FscyB0aGF0IGFyZSBtYXJrZWQgc2hvdWxkVW5ib3hJZlBvc3NpYmxl
KCkgdGhhdCBhcmVuJ3QgYWxzbyBmb3JjZWQgdG8KLSAgICAgICAgICAgIC8vIHVzZSBkb3VibGUg
Zm9ybWF0LCBhbmQgdGhhdCBoYXZlIHRoZSByaWdodCBwcmVkaWN0aW9uLCB3aWxsIGFsd2F5cyBi
ZQotICAgICAgICAgICAgLy8gc3BlY3VsYXRlZCBvbiBTZXRMb2NhbCBhbmQgd2lsbCBhbHdheXMg
YmUgc3RvcmVkIGludG8gYW4gYXBwcm9wcmlhdGVseQotICAgICAgICAgICAgLy8gdHlwZWQgcmVm
ZXJlbmNlIExWYWx1ZS4KLSAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpIHsKLSAgICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0
LmdldChtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVz
LmFkZChtX25vZGUsIG1fb3V0LmdldChtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAvLyBXZSBza2lwIHRoZSBDZWxsIGNhc2UgaGVyZSBiZWNhdXNlIHRoYXQgZ2V0cyB0
cmVhdGVkIGlkZW50aWNhbGx5IHRvCi0gICAgICAgICAgICAvLyBKU1ZhbHVlcywgc2luY2UgY2Vs
bHMgYXJlIHN0b3JlZCB1bnRhZ2dlZC4KLSAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VCh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKTsKICAgICAgICAgCi0gICAgICAgIG1fanNWYWx1ZVZh
bHVlcy5hZGQobV9ub2RlLCBtX291dC5nZXQobV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSkpOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdmFsdWUp
KQorICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IodmFyaWFibGUt
PmxvY2FsKCkpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
bG9hZDY0KGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZVNldExvY2FsKCkKQEAgLTUyOSw2NCArNTE2LDQwIEBAIHByaXZhdGU6CiAg
ICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwotICAgICAgICBib29sIG5lZWRz
Rmx1c2hpbmcgPSBtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhtX25vZGUpOwogICAgICAgICAK
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewogICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewogICAgICAgICAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzRG91YmxlLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewotICAg
ICAgICAgICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJp
YWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjayk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2Vz
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoRG91YmxlSW5Mb2NhbHMp
OworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHZh
cmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAg
ICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwo
KSkpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluTG9jYWxzKTsKKyAgICAgICAgICAg
ICAgICBtX291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7
CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0Zs
dXNoaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJl
c3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNT
dGFjayk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fdmFs
dWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJ
bkxvY2Fscyk7CisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zv
cih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChp
c0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgIG1fb3V0
LnNldChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5n
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQobG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVl
U291cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBW
YWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGVCb29s
ZWFuKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCisg
ICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc0Zvcih2YXJpYWJs
ZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
aWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQo
dmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgIG1fdmFs
dWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJ
bkpTU3RhY2spOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkpOwotICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewotICAgICAgICAgICAgbV9vdXQuc3Rv
cmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAg
bV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShW
YWx1ZUluSlNTdGFjayk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxz
KTsKKyAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9j
YWwoKSkpOworICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlTW92SGludCgpCkBAIC02MjAsMTkgKzU4MywxOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG1fbm9kZS0+YXJpdGhO
b2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUs
IG1fb3V0LmFkZChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgICAgIHNldEludDMyKG1fb3V0
LmFkZChsZWZ0LCByaWdodCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuYWRkV2l0
aE92ZXJmbG93MzIobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93
LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKLSAgICAgICAg
ICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwg
MCkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAg
ICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAg
ICBtX291dC5kb3VibGVBZGQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02
NTEsMTkgKzYxMywxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChu
b2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAg
ICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnN1YihsZWZ0LCByaWdo
dCkpOworICAgICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LnN1YihsZWZ0LCByaWdodCkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuc3ViV2l0aE92ZXJmbG93MzIobGVmdCwgcmln
aHQpOwogICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0
LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKLSAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRk
KG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOworICAgICAgICAgICAgc2V0
SW50MzIobV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAg
ICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAg
ICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVTdWIobG93
RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03MDMsMTMgKzY2NCwxMiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMyVmFs
dWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAgICAg
ICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAgICBt
X291dC5kb3VibGVNdWwobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04MDAs
MTMgKzc2MCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhkb25lLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7Cisg
ICAgICAgICAgICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBO
dW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZCgKLSAgICAgICAgICAg
ICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXREb3VibGUoCiAgICAgICAgICAgICAgICAgbV9v
dXQuZG91YmxlRGl2KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9k
ZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtODkxLDEz
ICs4NTAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oZG9uZSwgbGFzdE5leHQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMy
VmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cykpOworICAg
ICAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVt
YmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICAg
ICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAgICAgIG1fb3V0
LmRvdWJsZVJlbShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUt
PmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTkxNSw4ICs4
NzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFk
ZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRJbnQzMigKICAgICAg
ICAgICAgICAgICBtX291dC5zZWxlY3QoCiAgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+b3Ao
KSA9PSBBcml0aE1pbgogICAgICAgICAgICAgICAgICAgICAgICAgPyBtX291dC5sZXNzVGhhbihs
ZWZ0LCByaWdodCkKQEAgLTk1MCw3ICs5MDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIG1fZG91YmxlVmFs
dWVzLmFkZChtX25vZGUsIG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCByZXN1bHRzKSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIHJlc3VsdHMp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTk3MSwx
MiArOTI4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNwZWN1bGF0
ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5lcXVhbChyZXN1bHQsIG1fb3V0LmNvbnN0
SW50MzIoMSA8PCAzMSkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9pbnQzMlZhbHVl
cy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBO
dW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0
LmRvdWJsZUFicyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNl
dERvdWJsZShtX291dC5kb3VibGVBYnMobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMDAzLDEyICs5
NjAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5leHRyYWN0
VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAg
ICBzZXRJbnQzMihyZXN1bHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVW
YWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZG91YmxlTmVnKGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MSgpKSkpOworICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmRvdWJsZU5lZyhsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTEwMjAsNDcgKzk3NywzOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Y29tcGlsZUJpdEFuZCgpCiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAg
ICAgICAgIG1fbm9kZSwgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRB
bmQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdE9yKCkKICAgICB7Ci0gICAgICAg
IG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLCBtX291dC5iaXRPcihsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAg
ICAgICAgc2V0SW50MzIobV9vdXQuYml0T3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGls
ZUJpdFhvcigpCiAgICAgewotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAg
IG1fbm9kZSwgbV9vdXQuYml0WG9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRYb3IobG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdFJTaGlmdCgpCiAgICAgewotICAgICAgICBt
X2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKLSAgICAgICAgICAgIG1fb3V0
LmFTaHIoCi0gICAgICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCi0gICAg
ICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291
dC5jb25zdEludDMyKDMxKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQuYVNocigKKyAgICAg
ICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQuYml0
QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0TFNoaWZ0KCkKICAgICB7Ci0gICAgICAg
IG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLAotICAgICAgICAgICAgbV9v
dXQuc2hsKAotICAgICAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAg
ICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9v
dXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnNobCgKKyAgICAg
ICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQuYml0
QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQml0VVJTaGlmdCgpCiAgICAgewotICAgICAg
ICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKLSAgICAgICAgICAgIG1f
b3V0LmxTaHIoCi0gICAgICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCi0g
ICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBt
X291dC5jb25zdEludDMyKDMxKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQubFNocigKKyAg
ICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQu
Yml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkp
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlVUludDMyVG9OdW1iZXIoKQpAQCAtMTA2
OCwxNCArMTAxNiwxNCBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBpZiAoIW5vZGVDYW5TcGVjdWxhdGVJbnRl
Z2VyKG1fbm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpIHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFs
dWVzLmFkZChtX25vZGUsIG1fb3V0LnVuc2lnbmVkVG9Eb3VibGUodmFsdWUpKTsKKyAgICAgICAg
ICAgIHNldERvdWJsZShtX291dC51bnNpZ25lZFRvRG91YmxlKHZhbHVlKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZUZvcndhcmQo
CiAgICAgICAgICAgICBPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbih2YWx1
ZSwgbV9vdXQuaW50MzJaZXJvKSwKICAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9y
bWF0VUludDMyLCB2YWx1ZSkpOwotICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHZh
bHVlKTsKKyAgICAgICAgc2V0SW50MzIodmFsdWUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVJbnQzMlRvRG91YmxlKCkKQEAgLTEwODcsNyArMTAzNSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIC8vIGNvbnRlbXBvcmFuZW91cyBsb3ctbGV2ZWwgcmVwcmVzZW50YXRpb25zLiBTbywgdGhp
cyBnaXZlcyBjaGlsZDEgYSBkb3VibGUKICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gYW5kIHRo
ZW4gZm9yd2FyZHMgdGhhdCByZXByZXNlbnRhdGlvbiB0byBtX25vZGUuCiAgICAgICAgIAotICAg
ICAgICBtX2RvdWJsZVZhbHVlcy5hZGQobV9ub2RlLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSkpOworICAgICAgICBzZXREb3VibGUobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQpAQCAtMTIxNSw4ICsx
MTYzLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKQog
ICAgIHsKLSAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwg
bV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSkpOworICAgICAgICBzZXRTdG9yYWdlKG1fb3V0LmxvYWRQdHIobG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlR2V0QXJyYXlMZW5ndGgoKQpAQCAtMTIyNSw4ICsxMTcyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAg
ICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLCBtX291dC5sb2Fk
MzIobG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGlj
TGVuZ3RoKSk7CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIobG93U3RvcmFnZSht
X25vZGUtPmNoaWxkMigpKSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMjU2LDcgKzEyMDIs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLCBtX291dC56ZXJvRXh0
KGluZGV4LCBtX291dC5pbnRQdHIpLAogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmZvck5v
ZGUobV9ub2RlLT5jaGlsZDIoKSkubV92YWx1ZSkpOwogICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7Ci0g
ICAgICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTI4OCw3ICsxMjM0LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCAwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChy
ZXN1bHQsIHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2Rv
dWJsZVZhbHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHNldERvdWJs
ZShyZXN1bHQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC0xMzg4LDggKzEzMzQsNyBAQCBwcml2YXRlOgogICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bV9ub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOwogICAgICAgICAKLSAgICAgICAgbV9q
c1ZhbHVlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgc2V0SlNWYWx1
ZSgKICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NCgKICAgICAgICAgICAgICAgICBtX291dC5hZGRy
ZXNzKAogICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLnByb3BlcnRpZXNbZGF0YS5pZGVudGlm
aWVyTnVtYmVyXSwKQEAgLTE0MTIsNyArMTM1Nyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlR2V0R2xvYmFsVmFyKCkKICAgICB7Ci0gICAgICAgIG1fanNWYWx1ZVZhbHVlcy5h
ZGQobV9ub2RlLCBtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUobV9ub2RlLT5yZWdpc3RlclBv
aW50ZXIoKSkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1
dGUobV9ub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlUHV0R2xvYmFsVmFyKCkKQEAgLTE0MzcsMzAgKzEzODIsMjcgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZS0+Y2hp
bGQyKCkubm9kZSgpKS5pc051bGwoKSk7CiAgICAgICAgIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50SWZJc1N0aWxsVmFsaWQoKTsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgK
LSAgICAgICAgICAgIG1fbm9kZSwgZXF1YWxOdWxsT3JVbmRlZmluZWQoCisgICAgICAgIHNldEJv
b2xlYW4oCisgICAgICAgICAgICBlcXVhbE51bGxPclVuZGVmaW5lZCgKICAgICAgICAgICAgICAg
ICBtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGxPclVuZGVmaW5l
ZCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEoKQogICAg
IHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgewotICAg
ICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisg
ICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFs
dWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFu
KAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKSB7CiAg
ICAgICAgICAgICBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElmSXNTdGlsbFZhbGlk
KCk7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1f
bm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQuZXF1
YWwoCiAgICAgICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDEo
KSksCiAgICAgICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDIo
KSkpKTsKQEAgLTE0NzcsMTkgKzE0MTksMTYgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGNvbnN0
YW50LmlzVW5kZWZpbmVkT3JOdWxsKCkKICAgICAgICAgICAgICYmICFtYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludElmSXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIGlmIChjb25z
dGFudC5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0g
ICAgICAgICAgICAgICAgICAgIG1fbm9kZSwgZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5j
aGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxOdWxsKSk7CisgICAgICAgICAgICAgICAg
c2V0Qm9vbGVhbihlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxs
c0FyZUZhbHNlLCBFcXVhbE51bGwpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50LmlzVW5kZWZpbmVk
KCkpOwotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBt
X25vZGUsIGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJl
RmFsc2UsIEVxdWFsVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVxdWFsTnVs
bE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsVW5k
ZWZpbmVkKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsCisgICAgICAgIHNl
dEJvb2xlYW4oCiAgICAgICAgICAgICBtX291dC5lcXVhbCgKICAgICAgICAgICAgICAgICBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLAogICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpKTsKQEAgLTE0OTgsMTUgKzE0MzcsMTMgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlTGVzcygpCiAgICAgewogICAgICAgICBp
ZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jv
b2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNl
dEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9vdXQubGVzc1RoYW4obG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5
VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAot
ICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAg
ICAgICAgICAgbV9vdXQuZG91YmxlTGVzc1RoYW4obG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkp
LCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtMTUxNywxNSArMTQ1NCwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGls
ZUNvbXBhcmVMZXNzRXEoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKEludDMyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAg
ICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAg
ICAgIG1fb3V0Lmxlc3NUaGFuT3JFcXVhbChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVz
ZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAg
bV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5k
b3VibGVMZXNzVGhhbk9yRXF1YWwoCiAgICAgICAgICAgICAgICAgICAgIGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xNTM3LDE1ICsxNDcyLDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21w
aWxlQ29tcGFyZUdyZWF0ZXIoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKEludDMyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAg
ICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAg
ICAgICAgIG1fb3V0LmdyZWF0ZXJUaGFuKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNl
KSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBt
X25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmRv
dWJsZUdyZWF0ZXJUaGFuKAogICAgICAgICAgICAgICAgICAgICBsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMTU1NywxNiArMTQ5MCwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUNv
bXBhcmVHcmVhdGVyRXEoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKEludDMyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAg
ICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAg
ICAgIG1fb3V0LmdyZWF0ZXJUaGFuT3JFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgbG93SW50
MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUt
PmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1
ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4o
CiAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlR3JlYXRlclRoYW5PckVxdWFsKAogICAgICAg
ICAgICAgICAgICAgICBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTU3Nyw3ICsxNTA4LDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KCkKICAgICB7Ci0g
ICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5iaXROb3QoYm9vbGlmeSht
X25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmJpdE5vdChib29s
aWZ5KG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUp1
bXAoKQpAQCAtMTkzMSw2ICsxODYyLDE0IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIHZv
aWQgc3BlY3VsYXRlQmFja3dhcmQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZh
bHVlIGxvd1ZhbHVlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHByb2ZpbGUsCisgICAg
ICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgK
KyAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLCBwcm9maWxlLCBmYWlsQ29uZGl0aW9uLCBCYWNr
d2FyZFNwZWN1bGF0aW9uLCBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzcGVjdWxhdGVCYWNrd2FyZCgKICAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFs
dWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAg
ewogICAgICAgICBhcHBlbmRPU1JFeGl0KApAQCAtMTk5OSwxNCArMTkzOCwxNyBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VL
aW5kKCkgPT0gS25vd25JbnQzMlVzZSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSBy
ZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSBib3hlZFJlc3VsdCA9IG1f
anNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgIExvd2VyZWROb2RlVmFs
dWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChp
c1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAg
ICAKKyAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAg
ICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgYm94ZWRSZXN1
bHQgPSB2YWx1ZS52YWx1ZSgpOwogICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCiAgICAgICAg
ICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkUmVzdWx0KSwgZWRnZSwgU3BlY0ludDMyLCBpc05v
dEludDMyKGJveGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hJ
bnQzMihib3hlZFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChlZGdlLm5v
ZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldEludDMyKGVkZ2Uubm9kZSgpLCByZXN1bHQp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCkBAIC0yMDE5LDEwICsx
OTYxLDEyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1v
ZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzQ2VsbChlZGdlLnVzZUtpbmQoKSkp
OwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmNoZWNrZWRSZXN1bHQgPSBtX2pzVmFs
dWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZh
bHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1Zh
bGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHVuY2hlY2tlZFZhbHVlID0gdmFsdWUu
dmFsdWUoKTsKICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgIGpz
VmFsdWVWYWx1ZSh1bmNoZWNrZWRSZXN1bHQpLCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKHVu
Y2hlY2tlZFJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFJlc3VsdDsKKyAg
ICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodW5jaGVja2VkVmFsdWUpLCBlZGdlLCBTcGVjQ2Vs
bCwgaXNOb3RDZWxsKHVuY2hlY2tlZFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdW5jaGVj
a2VkVmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEo
bV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNDZWxsKSk7CkBAIC0yMDYxLDE0ICsy
MDA1LDE3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1v
ZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEJvb2xl
YW5Vc2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jvb2xlYW5W
YWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMu
Z2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9i
b29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAg
dmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IHZhbHVl
LnZhbHVlKCk7CiAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKICAgICAgICAgICAgICAgICBq
c1ZhbHVlVmFsdWUodW5ib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNCb29sZWFuLCBpc05vdEJvb2xl
YW4odW5ib3hlZFJlc3VsdCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94Qm9v
bGVhbih1bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoZWRn
ZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVkZ2Uubm9kZSgpLCBy
ZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAK
QEAgLTIwODEsMTYgKzIwMjgsMjEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgaXNEb3VibGUo
ZWRnZS51c2VLaW5kKCkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0g
bV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIGludFJlc3VsdCA9IG1faW50MzJWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0
LmludFRvRG91YmxlKGludFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQo
ZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBt
X2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1
ZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgCisgICAgICAg
IHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNW
YWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5pbnRUb0Rv
dWJsZSh2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShlZGdlLm5vZGUoKSwg
cmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlmIChMVmFsdWUgYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVk
Z2Uubm9kZSgpKSkgeworICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5u
b2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1
ZSBib3hlZFJlc3VsdCA9IHZhbHVlLnZhbHVlKCk7CisgICAgICAgICAgICAKICAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJsZSB1bmJv
eGluZyBpbnQgY2FzZSIpKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJsZSB1bmJveGluZyBkb3VibGUgY2FzZSIpKTsKICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiRG91YmxlIHVuYm94aW5nIGNvbnRpbnVhdGlvbiIpKTsKQEAgLTIxMTUsNyArMjA2Nyw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291
dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJl
c3VsdCk7CisgICAgICAgICAgICBzZXREb3VibGUoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjEyOCwyNCAr
MjA4MCwyOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBt
b2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5
cGVkVXNlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9qc1ZhbHVl
VmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5n
ZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94SW50MzIo
dW5ib3hlZFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKGVkZ2Uubm9k
ZSgpLCByZXN1bHQpOworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9qc1ZhbHVl
VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgdmFsdWUg
PSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEludDMyKHZhbHVlLnZhbHVl
KCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChM
VmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fYm9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7
Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsK
LSAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7Cisg
ICAgICAgIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAg
IGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEJv
b2xlYW4odmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9kZSgp
LCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9kb3VibGVWYWx1ZXMuZ2V0
KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveERvdWJsZSh1
bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQoZWRnZS5ub2Rl
KCksIHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9k
ZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gYm94RG91YmxlKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0yMTU1LDExICsyMTExLDEyIEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgTFZhbHVlIGxvd1N0b3JhZ2UoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgaWYgKExWYWx1
ZSByZXN1bHQgPSBtX3N0b3JhZ2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX3N0b3Jh
Z2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CiAgICAgICAgIAogICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlKTsKLSAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmFkZChl
ZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVz
dWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0yMjQyLDYgKzIx
OTksOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE51bWJlclVzZToKICAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlcihlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJv
b2xlYW5Vc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGVkZ2UpOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9CkBAIC0yMzQyLDYgKzIzMDIsMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGRvdWJsZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY1JlYWxOdW1iZXIsCiAg
ICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHZhbHVlLCB2YWx1ZSkp
OwogICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgbG93Qm9vbGVhbihlZGdlKTsKKyAgICB9CiAKICAgICBib29sIG1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkKICAgICB7CkBAIC0yNDMwLDIy
ICsyMzk1LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBpc0xpdmUoTm9kZSogbm9kZSkK
ICAgICB7Ci0gICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9
IG1fdGltZVRvTGl2ZS5maW5kKG5vZGUpOwotICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3RpbWVU
b0xpdmUuZW5kKCkpOwotICAgICAgICByZXR1cm4gISFpdGVyLT52YWx1ZTsKKyAgICAgICAgcmV0
dXJuIG1fbGl2ZS5jb250YWlucyhub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoRWRn
ZSBlZGdlKQogICAgIHsKLSAgICAgICAgaWYgKCFlZGdlLT5oYXNSZXN1bHQoKSkgewotICAgICAg
ICAgICAgQVNTRVJUKGVkZ2UtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgQVNT
RVJUKGVkZ2UtPmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgaWYgKCFlZGdlLmRvZXNLaWxsKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEhhc2hNYXA8
Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fdGltZVRvTGl2ZS5maW5kKGVkZ2Uu
bm9kZSgpKTsKLSAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV90aW1lVG9MaXZlLmVuZCgpKTsKLSAg
ICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlKTsKLSAgICAgICAgaXRlci0+dmFsdWUtLTsKKyAgICAg
ICAgbV9saXZlLnJlbW92ZShlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAogICAgIC8vIFdyYXBw
ZXIgdXNlZCBvbmx5IGZvciBERkdfTk9ERV9ET19UT19DSElMRFJFTgpAQCAtMjQ2Miw2MyArMjQy
MCwzNCBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2Nr
KCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT52YXJpYWJs
ZXNBdEhlYWRbaV07Ci0gICAgICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgICAgICAgICBt
X3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7Ci0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJn
dW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZh
cmlhYmxlLT5pc0FyZ3VtZW50c0FsaWFzKCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlU291
cmNlc1tpXSA9IFZhbHVlU291cmNlKEFyZ3VtZW50c1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgh
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2Vz
W2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fZmx1c2hl
ZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyB2YWx1
ZSB3aWxsIGhhdmUgYmVlbiBmbHVzaGVkIHRvIHRoZSBKU1N0YWNrIGluIHNvbWUgZm9ybSBvcgot
ICAgICAgICAgICAgICAgIC8vIGFub3RoZXIuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKERvdWJs
ZUluSlNTdGFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gbV9oaWdoQmxvY2stPnNzYS0+Zmx1c2hG
b3JtYXRBdEhlYWRbaV07CisgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICAg
ICAgY2FzZSBEZWFkRmx1c2g6IHsKKyAgICAgICAgICAgICAgICAvLyBNdXN0IGNvbnNpZGVyIGF2
YWlsYWJsZSBub2RlcyBpbnN0ZWFkLgorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hp
Z2hCbG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWRbaV07CisgICAgICAgICAgICAgICAgaWYg
KCFub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVT
b3VyY2UoU291cmNlSXNEZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2Uo
bm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoRG91
YmxlSW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNl
c1tpXSA9IFZhbHVlU291cmNlKEludDMySW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQz
MjoKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMy
SW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShCb29sZWFu
SW5Mb2NhbHMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAgICAgICAgICAgbV92
YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaGVk
Q2VsbDoKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgICAgICBjYXNl
IEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFs
dWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZh
bHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMjUy
Niw2ICsyNDU1LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uLAog
ICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVlIHJl
Y292ZXJ5KQogICAgIHsKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgICAgIGtpbmQs
IGxvd1ZhbHVlLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZh
bHVlKSwKKyAgICAgICAgICAgIGZhaWxDb25kaXRpb24sIGRpcmVjdGlvbiwgcmVjb3ZlcnkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCisgICAgICAgIEV4aXRLaW5kIGtp
bmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
IHByb2ZpbGUsCisgICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uLCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVlIHJlY292ZXJ5KQorICAgIHsKICAgICAgICAg
aWYgKE9wdGlvbnM6OmZ0bFRyYXBzT25PU1JFeGl0KCkpIHsKICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGZhaWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPU1IgZXhpdCBmYWlsQ2FzZSIp
KTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiT1NSIGV4aXQgY29udGludWF0aW9uIikpOwpAQCAtMjU0NiwxMSArMjQ4NCw5IEBA
IHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6
ZSgpID09IG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCkpOwogICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCk7CiAgICAgICAgIAotICAgICAgICBtX2Z0bFN0
YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKAotICAgICAgICAgICAgT1NSRXhpdCgKLSAgICAg
ICAgICAgICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCi0gICAgICAgICAgICAgICAgbV9jb2RlT3Jp
Z2luLCBtX2xhc3RTZXRPcGVyYW5kLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFyZ3VtZW50cygp
LAotICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKKyAg
ICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAorICAgICAg
ICAgICAga2luZCwgbG93VmFsdWUuZm9ybWF0KCksIHByb2ZpbGUsIG1fY29kZU9yaWdpbiwgbV9s
YXN0U2V0T3BlcmFuZCwKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mQXJndW1l
bnRzKCksIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxT
dGF0ZS5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwogICAgICAgICAK
ICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0
KCk7CkBAIC0yNjAyLDI3ICsyNTM4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgRG91
YmxlSW5KU1N0YWNrOgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFs
dWU6OmluSlNTdGFja0FzRG91YmxlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFZhbHVlSW5Mb2NhbHM6Ci0gICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50
KAotICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SlNW
YWx1ZSwgbV9vdXQuZ2V0KG1fbG9jYWxzNjRbaV0pKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgSW50MzJJbkxvY2FsczoKLSAgICAgICAgICAgICAgICBhZGRFeGl0
QXJndW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVG
b3JtYXRJbnQzMiwgbV9vdXQuZ2V0KG1fbG9jYWxzMzJbaV0pKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgQm9vbGVhbkluTG9jYWxzOgotICAgICAgICAgICAgICAg
IGFkZEV4aXRBcmd1bWVudCgKLSAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBp
LCBWYWx1ZUZvcm1hdEJvb2xlYW4sIG1fb3V0LmdldChtX2xvY2Fsc0Jvb2xlYW5baV0pKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRG91YmxlSW5Mb2NhbHM6Ci0g
ICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAotICAgICAgICAgICAgICAgICAgICBleGl0
LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0RG91YmxlLCBtX291dC5nZXQobV9sb2NhbHNEb3Vi
bGVbaV0pKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXJndW1l
bnRzU291cmNlOgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgUGhhbnRvbUFy
Z3VtZW50cy4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEzOTg2Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU291cmNl
SXNEZWFkOgogICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmRl
YWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI2ODIsMTIgKzI1OTcsMTAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiB1aW50MzJUb051bWJlciA9IDA7CiAgICAgICAg
ICAgICAgICAgTm9kZSogZG91YmxlQXNJbnQzMiA9IDA7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV90
aW1lVG9MaXZlLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWdu
ZWQ+OjppdGVyYXRvciBlbmQgPSBtX3RpbWVUb0xpdmUuZW5kKCk7CisgICAgICAgICAgICAgICAg
SGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xpdmUuYmVnaW4oKTsKKyAgICAgICAg
ICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9saXZlLmVuZCgpOwogICAg
ICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghaXRlci0+dmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gaXRlci0+a2V5OworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSAqaXRlcjsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPmNoaWxkMSgpICE9
IG5vZGUpCkBAIC0yNzMyLDI0ICsyNjQ1LDI4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIEFTU0VSVChpc0xpdmUobm9kZSkpOwotICAgICAgICAKLSAgICAgICAgaWYg
KExWYWx1ZSByZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdldChub2RlKSkgewotICAgICAgICAgICAg
YWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SW50MzIs
IHJlc3VsdCk7CisKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1
ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAg
IGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEludDMy
LCB2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KG5vZGUp
KSB7Ci0gICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwg
VmFsdWVGb3JtYXRCb29sZWFuLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1fYm9vbGVhblZh
bHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAg
ICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0Qm9v
bGVhbiwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChu
b2RlKSkgewotICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5k
ZXgsIFZhbHVlRm9ybWF0SlNWYWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2pzVmFs
dWVWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1h
dEpTVmFsdWUsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fZG91YmxlVmFsdWVzLmdl
dChub2RlKSkgewotICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywg
aW5kZXgsIFZhbHVlRm9ybWF0RG91YmxlLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1fZG91
YmxlVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAg
ICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3Jt
YXREb3VibGUsIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKQEAgLTI4MjAsNyArMjczNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2Z0bFN0YXRl
LmZpbmFsaXplci0+aW5pdGlhbGl6ZUV4aXRUaHVua3NMaW5rQnVmZmVyKGxpbmtCdWZmZXIucmVs
ZWFzZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIG1fb3V0Lmp1bXAobV9hcmd1bWVudENoZWNr
cyk7CisgICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSkpOwogICAg
IH0KICAgICAKICAgICB2b2lkIG9ic2VydmVNb3ZIaW50KE5vZGUqIG5vZGUpCkBAIC0yODM0LDYg
KzI3NTEsNTcgQEAgcHJpdmF0ZToKICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChvcGVy
YW5kKSA9IFZhbHVlU291cmNlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgc2V0SW50MzIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgbV9pbnQzMlZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdo
QmxvY2spKTsKKyAgICB9CisgICAgdm9pZCBzZXRKU1ZhbHVlKE5vZGUqIG5vZGUsIExWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5v
ZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9pZCBzZXRCb29sZWFu
KE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fYm9vbGVhblZhbHVl
cy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9
CisgICAgdm9pZCBzZXRTdG9yYWdlKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIG1fc3RvcmFnZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwg
bV9oaWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9pZCBzZXREb3VibGUoTm9kZSogbm9kZSwgTFZh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9kb3VibGVWYWx1ZXMuc2V0KG5vZGUsIExvd2Vy
ZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRJ
bnQzMihMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbnQzMihtX25vZGUsIHZhbHVl
KTsKKyAgICB9CisgICAgdm9pZCBzZXRKU1ZhbHVlKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHNldEpTVmFsdWUobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0Qm9vbGVh
bihMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRCb29sZWFuKG1fbm9kZSwgdmFsdWUp
OworICAgIH0KKyAgICB2b2lkIHNldFN0b3JhZ2UoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgc2V0U3RvcmFnZShtX25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXREb3VibGUo
TFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0RG91YmxlKG1fbm9kZSwgdmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQoY29uc3QgTG93ZXJlZE5vZGVWYWx1ZSYgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIW1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyh2YWx1ZS5ibG9j
aygpLCBtX2hpZ2hCbG9jaykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2UoSlNDZWxs
KiB0YXJnZXQpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi53ZWFr
UmVmZXJlbmNlcy5hcHBlbmQoCkBAIC0yODgxLDI3ICsyODQ5LDIwIEBAIHByaXZhdGU6CiAgICAg
CiAgICAgTEJhc2ljQmxvY2sgbV9wcm9sb2d1ZTsKICAgICBMQmFzaWNCbG9jayBtX2luaXRpYWxp
emF0aW9uOwotICAgIExCYXNpY0Jsb2NrIG1fYXJndW1lbnRDaGVja3M7CiAgICAgSGFzaE1hcDxC
YXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+IG1fYmxvY2tzOwogICAgIAogICAgIExWYWx1ZSBtX2Nh
bGxGcmFtZTsKICAgICBMVmFsdWUgbV90YWdUeXBlTnVtYmVyOwogICAgIExWYWx1ZSBtX3RhZ01h
c2s7CiAgICAgCi0gICAgSGFzaFNldDxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7Ci0gICAgVmVj
dG9yPE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7CisgICAgSGFzaE1hcDxOb2RlKiwg
TG93ZXJlZE5vZGVWYWx1ZT4gbV9pbnQzMlZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dl
cmVkTm9kZVZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJl
ZE5vZGVWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWRO
b2RlVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9k
ZVZhbHVlPiBtX2RvdWJsZVZhbHVlczsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2xpdmU7CiAgICAg
Ci0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2ludDMyVmFsdWVzOwotICAgIEhhc2hNYXA8
Tm9kZSosIExWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1
ZT4gbV9ib29sZWFuVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9zdG9yYWdl
VmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7Ci0gICAg
SGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG1fdGltZVRvTGl2ZTsKLSAgICAKLSAgICBPcGVyYW5k
czxMVmFsdWU+IG1fbG9jYWxzQm9vbGVhbjsKLSAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxz
MzI7Ci0gICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2FsczY0OwotICAgIE9wZXJhbmRzPExWYWx1
ZT4gbV9sb2NhbHNEb3VibGU7CisgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7CiAg
ICAgCiAgICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG1fdmFsdWVTb3VyY2VzOwogICAgIGludCBt
X2xhc3RTZXRPcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
cmVkTm9kZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlcmVkTm9kZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyZWROb2RlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgRlRMTG93ZXJlZE5vZGVWYWx1ZV9oCisjZGVmaW5lIEZUTExvd2VyZWROb2RlVmFsdWVfaAor
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gUmVwcmVzZW50cyB0aGUg
YWN0IG9mIGhhdmluZyBsb3dlcmVkIGEgREZHOjpOb2RlIHRvIGFuIExWYWx1ZSwgYW5kIHJlY29y
ZHMgdGhlCisvLyBERkc6OkJhc2ljQmxvY2sgdGhhdCBkaWQgdGhlIGxvd2VyaW5nLiBUaGUgTFZh
bHVlIGlzIHdoYXQgd2UgdXNlIG1vc3Qgb2Z0ZW4sIGJ1dAorLy8gd2UgbmVlZCB0byB2ZXJpZnkg
dGhhdCB3ZSdyZSBpbiBhIGJsb2NrIHRoYXQgaXMgZG9taW5hdGVkIGJ5IHRoZSBvbmUgdGhhdCBk
aWQKKy8vIHRoZSBsb3dlcmluZy4gV2UncmUgZ3VhcmFudGVlZCB0aGF0IGZvciBlYWNoIERGRzo6
Tm9kZSwgdGhlcmUgd2lsbCBiZSBvbmUKKy8vIExvd2VyZWROb2RlVmFsdWUgdGhhdCBhbHdheXMg
ZG9taW5hdGVzIGFsbCB1c2VzIG9mIHRoZSBERkc6Ok5vZGU7IGJ1dCB0aGVyZSBtYXkKKy8vIGJl
IG90aGVycyB0aGF0IGRvbid0IGRvbWluYXRlIGFuZCB3ZSdyZSBlZmZlY3RpdmVseSBkb2luZyBv
cHBvcnR1bmlzdGljIEdWTiBvbgorLy8gdGhlIGxvd2VyaW5nIGNvZGUuCisKK2NsYXNzIExvd2Vy
ZWROb2RlVmFsdWUgeworcHVibGljOgorICAgIExvd2VyZWROb2RlVmFsdWUoKQorICAgICAgICA6
IG1fdmFsdWUoMCkKKyAgICAgICAgLCBtX2Jsb2NrKDApCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBMb3dlcmVkTm9kZVZhbHVlKExWYWx1ZSB2YWx1ZSwgREZHOjpCYXNpY0Jsb2NrKiBibG9jaykK
KyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fYmxvY2soYmxvY2spCisgICAg
eworICAgICAgICBBU1NFUlQobV92YWx1ZSk7CisgICAgICAgIEFTU0VSVChtX2Jsb2NrKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAg
ICBMVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgREZHOjpCYXNp
Y0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICAKK3ByaXZhdGU6
CisgICAgTFZhbHVlIG1fdmFsdWU7CisgICAgREZHOjpCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKKyNlbmRpZiAvLyBGVExMb3dlcmVkTm9kZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZyb21CbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaAkocmV2aXNpb24gMTUyNTgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZyb21CbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKIGNsYXNzIFZhbHVlRnJvbUJsb2NrIHsKIHB1YmxpYzoKKyAgICBWYWx1ZUZyb21CbG9jaygp
CisgICAgICAgIDogbV92YWx1ZSgwKQorICAgICAgICAsIG1fYmxvY2soMCkKKyAgICB7CisgICAg
fQorICAgIAogICAgIFZhbHVlRnJvbUJsb2NrKExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxvY2sgYmxv
Y2spCiAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgLCBtX2Jsb2NrKGJsb2NrKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHJl
dmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3Vy
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyMSArNDUsNiBAQCB2b2lkIFZhbHVlU291cmNl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6CiAgICAg
ICAgIG91dC5wcmludCgiRG91YmxlSW5KU1N0YWNrIik7CiAgICAgICAgIHJldHVybjsKLSAgICBj
YXNlIFZhbHVlSW5Mb2NhbHM6Ci0gICAgICAgIG91dC5wcmludCgiVmFsdWVJbkxvY2FscyIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbnQzMkluTG9jYWxzOgotICAgICAgICBvdXQucHJp
bnQoIkludDMySW5Mb2NhbHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQm9vbGVhbklu
TG9jYWxzOgotICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW5JbkxvY2FscyIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBEb3VibGVJbkxvY2FsczoKLSAgICAgICAgb3V0LnByaW50KCJEb3Vi
bGVJbkxvY2FscyIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBBcmd1bWVudHNTb3VyY2U6
Ci0gICAgICAgIG91dC5wcmludCgiQXJndW1lbnRzU291cmNlIik7Ci0gICAgICAgIHJldHVybjsK
ICAgICBjYXNlIFNvdXJjZUlzRGVhZDoKICAgICAgICAgb3V0LnByaW50KCJTb3VyY2VJc0RlYWQi
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExW
YWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExWYWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsNiBAQCBl
bnVtIFZhbHVlU291cmNlS2luZCB7CiAgICAgVmFsdWVJbkpTU3RhY2ssCiAgICAgSW50MzJJbkpT
U3RhY2ssCiAgICAgRG91YmxlSW5KU1N0YWNrLAotICAgIFZhbHVlSW5Mb2NhbHMsCi0gICAgSW50
MzJJbkxvY2FscywKLSAgICBCb29sZWFuSW5Mb2NhbHMsCi0gICAgRG91YmxlSW5Mb2NhbHMsCi0g
ICAgQXJndW1lbnRzU291cmNlLAogICAgIFNvdXJjZUlzRGVhZCwKICAgICBIYXZlTm9kZQogfTsK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTI2MDgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDEzLTA3LTEyICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgZm91cnRoVGllcjogREZHIHNob3VsZCBoYXZlIGFuIFNT
QSBmb3JtIGZvciB1c2UgYnkgRlRMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTgzMzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIC0gRXh0ZW5kIHZhcmlhZGljaXR5IG9mIFByaW50U3RyZWFt
IGFuZCBkYXRhTG9nLgorICAgICAgICAKKyAgICAgICAgLSBHaXZlIEhhc2hTZXQgdGhlIGFiaWxp
dHkgdG8gYWRkIGEgc3BhbiBvZiB0aGluZ3MuCisgICAgICAgIAorICAgICAgICAtIEdpdmUgSGFz
aFNldCB0aGUgYWJpbGl0eSB0byA9PSBhbm90aGVyIEhhc2hTZXQuCisgICAgICAgIAorICAgICAg
ICAtIE5vdGUgRklYTUUncyBpbiBIYXNoVGFibGUgY29uY2VybmluZyBjb3B5aW5nIHBlcmZvcm1h
bmNlLCB0aGF0IGFmZmVjdHMKKyAgICAgICAgICB0aGUgd2F5IHRoYXQgdGhlIERGRyBub3cgdXNl
cyBIYXNoU2V0cyBhbmQgSGFzaE1hcHMuCisgICAgICAgIAorICAgICAgICAtIEZhY3RvciBvdXQg
dGhlIGJ1bGstaW5zZXJ0aW9uIGxvZ2ljIG9mIEpTQzo6REZHOjpJbnNlcnRpb25TZXQgaW50bwor
ICAgICAgICAgIFdURjo6SW5zZXJ0aW9uLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGluIG1vcmUg
cGxhY2VzLgorICAgICAgICAKKyAgICAgICAgLSBDcmVhdGUgYSBkdW1wZXIgZm9yIGxpc3RzIGFu
ZCBtYXBzLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL0RhdGFMb2cuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OmRhdGFM
b2cpOgorICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChIYXNoU2V0KToKKyAgICAg
ICAgKFdURik6CisgICAgICAgIChXVEY6Ojo6YWRkKToKKyAgICAgICAgKFdURjo6PSk6CisgICAg
ICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAgICAgICAoV1RGOjo6Okhhc2hUYWJsZSk6CisgICAg
ICAgIChXVEY6Oj0pOgorICAgICAgICAqIHd0Zi9JbnNlcnRpb24uaDogQWRkZWQuCisgICAgICAg
IChXVEYpOgorICAgICAgICAoSW5zZXJ0aW9uKToKKyAgICAgICAgKFdURjo6SW5zZXJ0aW9uOjpJ
bnNlcnRpb24pOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246OmluZGV4KToKKyAgICAgICAgKFdU
Rjo6SW5zZXJ0aW9uOjplbGVtZW50KToKKyAgICAgICAgKFdURjo6SW5zZXJ0aW9uOjpvcGVyYXRv
cjwpOgorICAgICAgICAoV1RGOjpleGVjdXRlSW5zZXJ0aW9ucyk6CisgICAgICAgICogd3RmL0xp
c3REdW1wLmg6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKExpc3REdW1wKToKKyAg
ICAgICAgKFdURjo6TGlzdER1bXA6Okxpc3REdW1wKToKKyAgICAgICAgKFdURjo6TGlzdER1bXA6
OmR1bXApOgorICAgICAgICAoTWFwRHVtcCk6CisgICAgICAgIChXVEY6Ok1hcER1bXA6Ok1hcER1
bXApOgorICAgICAgICAoV1RGOjpNYXBEdW1wOjpkdW1wKToKKyAgICAgICAgKFdURjo6bGlzdER1
bXApOgorICAgICAgICAoV1RGOjpzb3J0ZWRMaXN0RHVtcCk6CisgICAgICAgIChXVEY6Omxlc3NU
aGFuKToKKyAgICAgICAgKFdURjo6bWFwRHVtcCk6CisgICAgICAgIChXVEY6OnNvcnRlZE1hcER1
bXApOgorICAgICAgICAqIHd0Zi9QcmludFN0cmVhbS5oOgorICAgICAgICAoUHJpbnRTdHJlYW0p
OgorICAgICAgICAoV1RGOjpQcmludFN0cmVhbTo6cHJpbnQpOgorCiAyMDEzLTA3LTAyICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IDMy
LWJpdCBidWlsZC4KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQAogCQkwRkQ4MUFDNTE1NEZC
MjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRW
ZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwRkREQkZB
NzE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVG
IC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZEREJGQTgxNjY2REZBMzAwQzU1
RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRT
dHJlYW0uaCAqLzsgfTsKKwkJMEZFNTA1NTcxNzg3QTgwNjAwQjM1RjhDIC8qIEluc2VydGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTYx
Nzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovOyB9OworCQkwRkU1MDU3RjE3OTA4OUZF
MDBCMzVGOEMgLyogTGlzdER1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTUwNTdFMTc5MDg5RjkwMEIzNUY4QyAvKiBMaXN0RHVtcC5oICovOyB9
OwogCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUx
NEEgLyogUkFNU2l6ZS5jcHAgKi87IH07CiAJCTE0M0Y2MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBS
QU1TaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKCk7IH07IH07CiAJCTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29w
VGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
Njk0MTkwMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUyLDYgKzM1NCw4IEBACiAJCTBG
RDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFt
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTYxNjY2REZBMzAwQzU1
RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RTUwNTU2MTc4N0E4MDIwMEIzNUY4QyAvKiBJbnNlcnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
ZXJ0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTdFMTc5MDg5Rjkw
MEIzNUY4QyAvKiBMaXN0RHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaXN0RHVtcC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDM0VFNDE3MUI4MzQ3MDBGREFDOEQgLyogQnl0ZVNw
aW5Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVTcGluTG9jay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSQU1TaXplLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRjYxMUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUkFNU2l6ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzg1LDExICs3ODksMTMgQEAKIAkJCQlBOEE0NzJCQTE1MUE4
MjVBMDA0MTIzRkYgLyogSGFzaFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQx
MjNGRiAvKiBIZXhOdW1iZXIuaCAqLywKIAkJCQlBOEE0NzJCQzE1MUE4MjVBMDA0MTIzRkYgLyog
SW5saW5lQVNNLmggKi8sCisJCQkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlv
bi5oICovLAogCQkJCUE4QTQ3MkJFMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQxNkFycmF5LmggKi8s
CiAJCQkJQThBNDcyQkYxNTFBODI1QTAwNDEyM0ZGIC8qIEludDMyQXJyYXkuaCAqLywKIAkJCQlB
OEE0NzJCRDE1MUE4MjVBMDA0MTIzRkYgLyogSW50OEFycmF5LmggKi8sCiAJCQkJQThBNDcyQzAx
NTFBODI1QTAwNDEyM0ZGIC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLywKIAkJCQkwRjQ2
RTZERDE3N0NCQTZBMDBFMUY3NTUgLyogTExWTUhlYWRlcnMuaCAqLywKKwkJCQkwRkU1MDU3RTE3
OTA4OUY5MDBCMzVGOEMgLyogTGlzdER1bXAuaCAqLywKIAkJCQlBOEE0NzJDMTE1MUE4MjVBMDA0
MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLywKIAkJCQlBOEE0NzJDMjE1MUE4MjVBMDA0MTIzRkYg
LyogTGlzdFJlZlB0ci5oICovLAogCQkJCUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBMb2Nr
ZXIuaCAqLywKQEAgLTExODEsNiArMTE4Nyw3IEBACiAJCQkJQThBNDczRTgxNTFBODI1QjAwNDEy
M0ZGIC8qIE1hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VBMTUxQTgyNUIw
MDQxMjNGRiAvKiBNRDUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNENTQ5N0FEMTU4NTdEMDMwMEI1
QkMzMCAvKiBNZWRpYVRpbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTU3MTc4N0E4MDYw
MEIzNUY4QyAvKiBJbnNlcnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTRGMUQxMTU0MTVGRjEx
QkUwMDI2RTkwOCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTRGRDg1NTQ3MTYxMzNFMEUwMEM1QjcwNCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25BcnJheUJ1
ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzRkJDNzFFMTYxQUY3QkYwMEJCNEJENCAv
KiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoQ291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMzA4LDYgKzEzMTUsNyBAQAogCQkJCTk3NENGQzhFMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFr
UHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NjE1MUE4MjVCMDA0MTIzRkYgLyogV1RG
U3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4NzE1MUE4MjVCMDA0MTIzRkYgLyog
V1RGVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1N0YxNzkwODlGRTAwQjM1
RjhDIC8qIExpc3REdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM0NDg4MzE2RkU5RkUxMDA4
NDRCRTkgLyogUHJvY2Vzc0lELmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2RTZERTE3N0NCQTZB
MDBFMUY3NTUgLyogTExWTUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0RhdGFMb2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EYXRh
TG9nLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwxOCBAQCB2b2lkIGRhdGFMb2coY29uc3QgVDEmIHZh
bHVlMSwgY29uc3QgVDImCiAgICAgZGF0YUZpbGUoKS5wcmludCh2YWx1ZTEsIHZhbHVlMiwgdmFs
dWUzLCB2YWx1ZTQsIHZhbHVlNSwgdmFsdWU2LCB2YWx1ZTcsIHZhbHVlOCwgdmFsdWU5LCB2YWx1
ZTEwLCB2YWx1ZTExLCB2YWx1ZTEyLCB2YWx1ZTEzKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LCB0
eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5h
bWUgVDEwLCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFt
ZSBUMTQ+Cit2b2lkIGRhdGFMb2coY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwg
Y29uc3QgVDMmIHZhbHVlMywgY29uc3QgVDQmIHZhbHVlNCwgY29uc3QgVDUmIHZhbHVlNSwgY29u
c3QgVDYmIHZhbHVlNiwgY29uc3QgVDcmIHZhbHVlNywgY29uc3QgVDgmIHZhbHVlOCwgY29uc3Qg
VDkmIHZhbHVlOSwgY29uc3QgVDEwJiB2YWx1ZTEwLCBjb25zdCBUMTEmIHZhbHVlMTEsIGNvbnN0
IFQxMiYgdmFsdWUxMiwgY29uc3QgVDEzJiB2YWx1ZTEzLCBjb25zdCBUMTQmIHZhbHVlMTQpCit7
CisgICAgZGF0YUZpbGUoKS5wcmludCh2YWx1ZTEsIHZhbHVlMiwgdmFsdWUzLCB2YWx1ZTQsIHZh
bHVlNSwgdmFsdWU2LCB2YWx1ZTcsIHZhbHVlOCwgdmFsdWU5LCB2YWx1ZTEwLCB2YWx1ZTExLCB2
YWx1ZTEyLCB2YWx1ZTEzLCB2YWx1ZTE0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5
cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIFQ1LCB0eXBlbmFt
ZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOSwgdHlwZW5hbWUgVDEw
LCB0eXBlbmFtZSBUMTEsIHR5cGVuYW1lIFQxMiwgdHlwZW5hbWUgVDEzLCB0eXBlbmFtZSBUMTQs
IHR5cGVuYW1lIFQxNT4KK3ZvaWQgZGF0YUxvZyhjb25zdCBUMSYgdmFsdWUxLCBjb25zdCBUMiYg
dmFsdWUyLCBjb25zdCBUMyYgdmFsdWUzLCBjb25zdCBUNCYgdmFsdWU0LCBjb25zdCBUNSYgdmFs
dWU1LCBjb25zdCBUNiYgdmFsdWU2LCBjb25zdCBUNyYgdmFsdWU3LCBjb25zdCBUOCYgdmFsdWU4
LCBjb25zdCBUOSYgdmFsdWU5LCBjb25zdCBUMTAmIHZhbHVlMTAsIGNvbnN0IFQxMSYgdmFsdWUx
MSwgY29uc3QgVDEyJiB2YWx1ZTEyLCBjb25zdCBUMTMmIHZhbHVlMTMsIGNvbnN0IFQxNCYgdmFs
dWUxNCwgY29uc3QgVDE1JiB2YWx1ZTE1KQoreworICAgIGRhdGFGaWxlKCkucHJpbnQodmFsdWUx
LCB2YWx1ZTIsIHZhbHVlMywgdmFsdWU0LCB2YWx1ZTUsIHZhbHVlNiwgdmFsdWU3LCB2YWx1ZTgs
IHZhbHVlOSwgdmFsdWUxMCwgdmFsdWUxMSwgdmFsdWUxMiwgdmFsdWUxMywgdmFsdWUxNCwgdmFs
dWUxNSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OmRhdGFMb2c7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvSGFzaFNldC5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDEyICs4NiwxOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgdGVtcGxh
dGUgYXJndW1lbnRzIHNvIHRoYXQgY2FsbGVycwogICAgICAgICAvLyBjYW4ganVzdCBwYXNzIHRo
ZSB0cmFuc2xhdG9yIGFuZCBsZXQgdGhlIGNvbXBpbGVyIGRlZHVjZSBULgogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4gQWRkUmVzdWx0IGFkZChj
b25zdCBUJik7CisgICAgICAgIAorICAgICAgICAvLyBBdHRlbXB0cyB0byBhZGQgYSBsaXN0IG9m
IHRoaW5ncyB0byB0aGUgc2V0LiBSZXR1cm5zIHRydWUgaWYgYW55IG9mCisgICAgICAgIC8vIHRo
ZW0gYXJlIG5ldyB0byB0aGUgc2V0LiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBzZXQgaXMgdW5jaGFu
Z2VkLgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvclR5cGU+CisgICAgICAgIGJv
b2wgYWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCk7CiAKICAgICAgICAg
dm9pZCByZW1vdmUoY29uc3QgVmFsdWVUeXBlJik7CiAgICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJh
dG9yKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzVmFs
aWRWYWx1ZShjb25zdCBWYWx1ZVR5cGUmKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBIYXNoU2V0JikgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmll
bmQgdm9pZCBkZWxldGVBbGxWYWx1ZXM8Pihjb25zdCBIYXNoU2V0Jik7CkBAIC0xOTEsNiArMTk4
LDE2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JU
eXBlPgorICAgIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChJdGVyYXRvclR5cGUg
YmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpCisgICAgeworICAgICAgICBib29sIGNoYW5nZWQgPSBm
YWxzZTsKKyAgICAgICAgZm9yIChJdGVyYXRvclR5cGUgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVu
ZDsgKytpdGVyKQorICAgICAgICAgICAgY2hhbmdlZCB8PSBhZGQoKml0ZXIpLmlzTmV3RW50cnk7
CisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CiAgICAgaW5saW5lIHZvaWQgSGFzaFNldDxULCBV
LCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQogICAgIHsKICAgICAgICAgaWYgKGl0Lm1faW1wbCA9
PSBtX2ltcGwuZW5kKCkpCkBAIC0yNTYsNiArMjczLDE4IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICAgICAgdmVjdG9yW2ldID0gKml0OwogICAgIH0gIAogCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQs
IFUsIFY+OjpvcGVyYXRvcj09KGNvbnN0IEhhc2hTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKHNpemUoKSAhPSBvdGhlci5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0g
ZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlucygqaXRlcikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6SGFzaFNl
dDsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvV1RGL3d0
Zi9IYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3MCw2ICsxMTcwLDggQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgewogICAgICAgICAvLyBDb3B5IHRoZSBoYXNoIHRhYmxlIHRoZSBkdW1i
IHdheSwgYnkgYWRkaW5nIGVhY2ggZWxlbWVudCB0byB0aGUgbmV3IHRhYmxlLgogICAgICAgICAv
LyBJdCBtaWdodCBiZSBtb3JlIGVmZmljaWVudCB0byBjb3B5IHRoZSB0YWJsZSBzbG90cywgYnV0
IGl0J3Mgbm90IGNsZWFyIHRoYXQgZWZmaWNpZW5jeSBpcyBuZWVkZWQuCisgICAgICAgIC8vIEZJ
WE1FOiBJdCdzIGxpa2VseSB0aGF0IHRoaXMgY2FuIGJlIGltcHJvdmVkLCBmb3Igc3RhdGljIGFu
YWx5c2VzIHRoYXQgdXNlCisgICAgICAgIC8vIEhhc2hTZXRzLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDU1CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG90aGVyLmVuZCgpOwogICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0gb3RoZXIuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgYWRkKCppdCk7CkBAIC0xMjA5LDYg
KzEyMTEsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIEhhc2hUYWJsZTxLZXks
IFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPiYgSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OjpvcGVyYXRvcj0oY29uc3QgSGFzaFRhYmxlJiBvdGhlcikKICAgICB7CisgICAgICAg
IC8vIEZJWE1FOiBJdCdzIGxpa2VseSB0aGF0IHRoaXMgY2FuIGJlIGltcHJvdmVkLCBmb3Igc3Rh
dGljIGFuYWx5c2VzIHRoYXQgdXNlCisgICAgICAgIC8vIEhhc2hTZXRzLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDU1CiAgICAgICAgIEhhc2hUYWJsZSB0bXAo
b3RoZXIpOwogICAgICAgICBzd2FwKHRtcCk7CiAgICAgICAgIHJldHVybiAqdGhpczsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0luc2VydGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluc2VydGlvbl9oCisjZGVmaW5lIEluc2Vy
dGlvbl9oCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3Mg
SW5zZXJ0aW9uIHsKK3B1YmxpYzoKKyAgICBJbnNlcnRpb24oKSB7IH0KKyAgICAKKyAgICBJbnNl
cnRpb24oc2l6ZV90IGluZGV4LCBUIGVsZW1lbnQpCisgICAgICAgIDogbV9pbmRleChpbmRleCkK
KyAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHNp
emVfdCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICBUIGVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25z
dCBJbnNlcnRpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXgg
PCBvdGhlci5tX2luZGV4OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1faW5k
ZXg7CisgICAgVCBtX2VsZW1lbnQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUYXJnZXRWZWN0
b3JUeXBlLCB0eXBlbmFtZSBJbnNlcnRpb25WZWN0b3JUeXBlPgordm9pZCBleGVjdXRlSW5zZXJ0
aW9ucyhUYXJnZXRWZWN0b3JUeXBlJiB0YXJnZXQsIEluc2VydGlvblZlY3RvclR5cGUmIGluc2Vy
dGlvbnMpCit7CisgICAgaWYgKCFpbnNlcnRpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHRhcmdldC5ncm93KHRhcmdldC5zaXplKCkgKyBpbnNlcnRpb25zLnNpemUoKSk7CisgICAg
c2l6ZV90IGxhc3RJbmRleCA9IHRhcmdldC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaW5kZXhJ
bkluc2VydGlvbnMgPSBpbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsK
KyAgICAgICAgc2l6ZV90IGZpcnN0SW5kZXggPSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25z
XS5pbmRleCgpICsgaW5kZXhJbkluc2VydGlvbnM7CisgICAgICAgIHNpemVfdCBpbmRleE9mZnNl
dCA9IGluZGV4SW5JbnNlcnRpb25zICsgMTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxhc3RJ
bmRleDsgLS1pID4gZmlyc3RJbmRleDspCisgICAgICAgICAgICB0YXJnZXRbaV0gPSB0YXJnZXRb
aSAtIGluZGV4T2Zmc2V0XTsKKyAgICAgICAgdGFyZ2V0W2ZpcnN0SW5kZXhdID0gaW5zZXJ0aW9u
c1tpbmRleEluSW5zZXJ0aW9uc10uZWxlbWVudCgpOworICAgICAgICBsYXN0SW5kZXggPSBmaXJz
dEluZGV4OworICAgIH0KKyAgICBpbnNlcnRpb25zLnJlc2l6ZSgwKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK3VzaW5nIFdURjo6SW5zZXJ0aW9uOwordXNpbmcgV1RGOjpleGVjdXRlSW5z
ZXJ0aW9uczsKKworI2VuZGlmIC8vIEluc2VydGlvbl9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9M
aXN0RHVtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgTGlzdER1bXBfaAorI2RlZmluZSBMaXN0RHVtcF9oCisKKyNpbmNsdWRlICJD
b21tYVByaW50ZXIuaCIKKyNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2luY2x1ZGUgIlN0cmlu
Z1ByaW50U3RyZWFtLmgiCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorY2xhc3MgTGlzdER1bXAgeworcHVibGljOgorICAgIExpc3REdW1wKGNvbnN0IFQmIGxpc3Qs
IGNvbnN0IGNoYXIqIGNvbW1hKQorICAgICAgICA6IG1fbGlzdChsaXN0KQorICAgICAgICAsIG1f
Y29tbWEoY29tbWEpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodHlwZW5hbWUgVDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1fbGlzdC5iZWdpbigpOyBpdGVyICE9IG1fbGlzdC5lbmQoKTsgKytpdGVy
KQorICAgICAgICAgICAgb3V0LnByaW50KG1fY29tbWEsICppdGVyKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgY29uc3QgVCYgbV9saXN0OworICAgIENvbW1hUHJpbnRlciBtX2NvbW1hOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIE1hcER1bXAgeworcHVibGljOgorICAgIE1h
cER1bXAoY29uc3QgVCYgbWFwLCBjb25zdCBjaGFyKiBhcnJvdywgY29uc3QgY2hhciogY29tbWEp
CisgICAgICAgIDogbV9tYXAobWFwKQorICAgICAgICAsIG1fYXJyb3coYXJyb3cpCisgICAgICAg
ICwgbV9jb21tYShjb21tYSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBUOjpjb25z
dF9pdGVyYXRvciBpdGVyID0gbV9tYXAuYmVnaW4oKTsgaXRlciAhPSBtX21hcC5lbmQoKTsgKytp
dGVyKQorICAgICAgICAgICAgb3V0LnByaW50KG1fY29tbWEsIGl0ZXItPmtleSwgbV9hcnJvdywg
aXRlci0+dmFsdWUpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3QgVCYgbV9tYXA7
CisgICAgY29uc3QgY2hhciogbV9hcnJvdzsKKyAgICBDb21tYVByaW50ZXIgbV9jb21tYTsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitMaXN0RHVtcDxUPiBsaXN0RHVtcChjb25zdCBUJiBs
aXN0LCBjb25zdCBjaGFyKiBjb21tYSA9ICIsICIpCit7CisgICAgcmV0dXJuIExpc3REdW1wPFQ+
KGxpc3QsIGNvbW1hKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29tcGFy
YXRvcj4KK0NTdHJpbmcgc29ydGVkTGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29uc3QgQ29tcGFy
YXRvciYgY29tcGFyYXRvciwgY29uc3QgY2hhciogY29tbWEgPSAiLCAiKQoreworICAgIFZlY3Rv
cjx0eXBlbmFtZSBUOjpWYWx1ZVR5cGU+IG15TGlzdDsKKyAgICBteUxpc3QuYXBwZW5kUmFuZ2Uo
bGlzdC5iZWdpbigpLCBsaXN0LmVuZCgpKTsKKyAgICBzdGQ6OnNvcnQobXlMaXN0LmJlZ2luKCks
IG15TGlzdC5lbmQoKSwgY29tcGFyYXRvcik7CisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0Owor
ICAgIENvbW1hUHJpbnRlciBjb21tYVByaW50ZXIoY29tbWEpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBteUxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIG91dC5wcmludChjb21tYVBy
aW50ZXIsIG15TGlzdFtpXSk7CisgICAgcmV0dXJuIG91dC50b0NTdHJpbmcoKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIGxlc3NUaGFuKGNvbnN0IFQmIGEsIGNvbnN0
IFQmIGIpCit7CisgICAgcmV0dXJuIGEgPCBiOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
Q1N0cmluZyBzb3J0ZWRMaXN0RHVtcChjb25zdCBUJiBsaXN0LCBjb25zdCBjaGFyKiBjb21tYSA9
ICIsICIpCit7CisgICAgcmV0dXJuIHNvcnRlZExpc3REdW1wKGxpc3QsIGxlc3NUaGFuPFQ6OlZh
bHVlVHlwZT4sIGNvbW1hKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK01hcER1bXA8VD4g
bWFwRHVtcChjb25zdCBUJiBtYXAsIGNvbnN0IGNoYXIqIGFycm93ID0gIj0+IiwgY29uc3QgY2hh
ciogY29tbWEgPSAiLCAiKQoreworICAgIHJldHVybiBNYXBEdW1wPFQ+KG1hcCwgYXJyb3csIGNv
bW1hKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29tcGFyYXRvcj4KK0NT
dHJpbmcgc29ydGVkTWFwRHVtcChjb25zdCBUJiBtYXAsIGNvbnN0IENvbXBhcmF0b3ImIGNvbXBh
cmF0b3IsIGNvbnN0IGNoYXIqIGFycm93ID0gIj0+IiwgY29uc3QgY2hhciogY29tbWEgPSAiLCAi
KQoreworICAgIFZlY3Rvcjx0eXBlbmFtZSBUOjpLZXlUeXBlPiBrZXlzOworICAgIGZvciAodHlw
ZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hcC5iZWdpbigpOyBpdGVyICE9IG1hcC5l
bmQoKTsgKytpdGVyKQorICAgICAgICBrZXlzLmFwcGVuZChpdGVyLT5rZXkpOworICAgIHN0ZDo6
c29ydChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCksIGNvbXBhcmF0b3IpOworICAgIFN0cmluZ1By
aW50U3RyZWFtIG91dDsKKyAgICBDb21tYVByaW50ZXIgY29tbWFQcmludGVyKGNvbW1hKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hUHJpbnRlciwga2V5c1tpXSwgYXJyb3csIG1hcC5nZXQoa2V5c1tpXSkpOwor
ICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6Omxpc3REdW1wOwordXNpbmcgV1RGOjpzb3J0ZWRMaXN0RHVtcDsKK3VzaW5nIFdU
Rjo6bWFwRHVtcDsKK3VzaW5nIFdURjo6c29ydGVkTWFwRHVtcDsKKworI2VuZGlmIC8vIExpc3RE
dW1wX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNiArMjA3LDQ1
IEBAIHB1YmxpYzoKICAgICAgICAgcHJpbnQodmFsdWUxMik7CiAgICAgICAgIHByaW50KHZhbHVl
MTMpOwogICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIs
IHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBl
bmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1l
IFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxND4KKyAgICB2b2lk
IHByaW50KGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJiB2YWx1ZTIsIGNvbnN0IFQzJiB2YWx1
ZTMsIGNvbnN0IFQ0JiB2YWx1ZTQsIGNvbnN0IFQ1JiB2YWx1ZTUsIGNvbnN0IFQ2JiB2YWx1ZTYs
IGNvbnN0IFQ3JiB2YWx1ZTcsIGNvbnN0IFQ4JiB2YWx1ZTgsIGNvbnN0IFQ5JiB2YWx1ZTksIGNv
bnN0IFQxMCYgdmFsdWUxMCwgY29uc3QgVDExJiB2YWx1ZTExLCBjb25zdCBUMTImIHZhbHVlMTIs
IGNvbnN0IFQxMyYgdmFsdWUxMywgY29uc3QgVDE0JiB2YWx1ZTE0KQorICAgIHsKKyAgICAgICAg
cHJpbnQodmFsdWUxKTsKKyAgICAgICAgcHJpbnQodmFsdWUyKTsKKyAgICAgICAgcHJpbnQodmFs
dWUzKTsKKyAgICAgICAgcHJpbnQodmFsdWU0KTsKKyAgICAgICAgcHJpbnQodmFsdWU1KTsKKyAg
ICAgICAgcHJpbnQodmFsdWU2KTsKKyAgICAgICAgcHJpbnQodmFsdWU3KTsKKyAgICAgICAgcHJp
bnQodmFsdWU4KTsKKyAgICAgICAgcHJpbnQodmFsdWU5KTsKKyAgICAgICAgcHJpbnQodmFsdWUx
MCk7CisgICAgICAgIHByaW50KHZhbHVlMTEpOworICAgICAgICBwcmludCh2YWx1ZTEyKTsKKyAg
ICAgICAgcHJpbnQodmFsdWUxMyk7CisgICAgICAgIHByaW50KHZhbHVlMTQpOworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0
eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5h
bWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUg
VDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVuYW1lIFQxNCwgdHlwZW5hbWUgVDE1PgorICAgIHZvaWQg
cHJpbnQoY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwgY29uc3QgVDMmIHZhbHVl
MywgY29uc3QgVDQmIHZhbHVlNCwgY29uc3QgVDUmIHZhbHVlNSwgY29uc3QgVDYmIHZhbHVlNiwg
Y29uc3QgVDcmIHZhbHVlNywgY29uc3QgVDgmIHZhbHVlOCwgY29uc3QgVDkmIHZhbHVlOSwgY29u
c3QgVDEwJiB2YWx1ZTEwLCBjb25zdCBUMTEmIHZhbHVlMTEsIGNvbnN0IFQxMiYgdmFsdWUxMiwg
Y29uc3QgVDEzJiB2YWx1ZTEzLCBjb25zdCBUMTQmIHZhbHVlMTQsIGNvbnN0IFQxNSYgdmFsdWUx
NSkKKyAgICB7CisgICAgICAgIHByaW50KHZhbHVlMSk7CisgICAgICAgIHByaW50KHZhbHVlMik7
CisgICAgICAgIHByaW50KHZhbHVlMyk7CisgICAgICAgIHByaW50KHZhbHVlNCk7CisgICAgICAg
IHByaW50KHZhbHVlNSk7CisgICAgICAgIHByaW50KHZhbHVlNik7CisgICAgICAgIHByaW50KHZh
bHVlNyk7CisgICAgICAgIHByaW50KHZhbHVlOCk7CisgICAgICAgIHByaW50KHZhbHVlOSk7Cisg
ICAgICAgIHByaW50KHZhbHVlMTApOworICAgICAgICBwcmludCh2YWx1ZTExKTsKKyAgICAgICAg
cHJpbnQodmFsdWUxMik7CisgICAgICAgIHByaW50KHZhbHVlMTMpOworICAgICAgICBwcmludCh2
YWx1ZTE0KTsKKyAgICAgICAgcHJpbnQodmFsdWUxNSk7CisgICAgfQogfTsKIAogV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206592</attachid>
            <date>2013-07-12 22:42:33 -0700</date>
            <delta_ts>2013-07-15 16:50:44 -0700</delta_ts>
            <desc>it really works.</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>267509</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNjA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0OSBA
QAorMjAxMy0wNy0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgaGF2ZSBhbiBTU0EgZm9ybSBmb3IgdXNlIGJ5IEZUTAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MzM4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBB
ZGRzIGFuIFNTQSBmb3JtIHRvIHRoZSBERkcuIFdlIGNhbiBjb252ZXJ0IFRocmVhZGVkQ1BTIGZv
cm0gaW50byBTU0EgZm9ybQorICAgICAgICBhZnRlciBicmVha2luZyBjcml0aWNhbCBlZGdlcy4g
VGhlIGNvbnZlcnNpb24gYWxnb3JpdGhtIGZvbGxvd3MgQXljb2NrIGFuZAorICAgICAgICBIb3Jz
cG9vbCwgYW5kIHRoZSBTU0EgZm9ybSBpdHNlbGYgZm9sbG93cyBzb21ldGhpbmcgSSd2ZSBkb25l
IGJlZm9yZSwgd2hlcmUKKyAgICAgICAgaW5zdGVhZCBvZiBoYXZpbmcgUGhpIGZ1bmN0aW9ucyBz
cGVjaWZ5IGlucHV0IG5vZGVzIGNvcnJlc3BvbmRpbmcgdG8gYmxvY2sKKyAgICAgICAgcHJlZGVj
ZXNzb3JzLCB3ZSBpbnN0ZWFkIGhhdmUgVXBzaWxvbiBmdW5jdGlvbnMgaW4gdGhlIHByZWRlY2Vz
c29ycyB0aGF0CisgICAgICAgIHNwZWNpZnkgd2hpY2ggdmFsdWUgaW4gdGhhdCBibG9jayBnb2Vz
IGludG8gd2hpY2ggc3Vic2VxdWVudCBQaGkuIFVwc2lsb25zCisgICAgICAgIGRvbid0IGhhdmUg
dG8gZG9taW5hdGUgUGhpcyAodXN1YWxseSB0aGV5IGRvbid0KSBhbmQgdGhleSBjb3JyZXNwb25k
IHRvIGEKKyAgICAgICAgbm9uLVNTQSAibW92IiBpbnRvIHRoZSBQaGkncyAidmFyaWFibGUiLiBU
aGlzIGdpdmVzIGFsbCBvZiB0aGUgZ29vZAorICAgICAgICBwcm9wZXJ0aWVzIG9mIFNTQSwgd2hp
bGUgZW5zdXJpbmcgdGhhdCBhIGJ1bmNoIG9mIENGRyB0cmFuc2Zvcm1hdGlvbnMgZG9uJ3QKKyAg
ICAgICAgaGF2ZSB0byBiZSBTU0EtYXdhcmUuCisgICAgICAgIAorICAgICAgICBTbyBmYXIgdGhl
IG9ubHkgREZHIHBoYXNlcyB0aGF0IGFyZSBTU0EtYXdhcmUgYXJlIERDRSBhbmQgQ0ZBLiBDRkcK
KyAgICAgICAgc2ltcGxpZmljYXRpb24gaXMgcHJvYmFibHkgU1NBLWF3YXJlIGJ5IGRlZmF1bHQs
IHRob3VnaCBJIGhhdmVuJ3QgdHJpZWQgaXQuCisgICAgICAgIENvbnN0YW50IGZvbGRpbmcgcHJv
YmFibHkgbmVlZHMgYSBmZXcgdHdlYWtzLCBidXQgaXMgbGlrZWx5IHJlYWR5LiBEaXR0bworICAg
ICAgICBmb3IgQ1NFLCB0aG91Z2ggaXQncyBub3QgY2xlYXIgdGhhdCB3ZSdkIHdhbnQgdG8gdXNl
IGJsb2NrLWxvY2FsIENTRSB3aGVuCisgICAgICAgIHdlIGNvdWxkIGJlIGRvaW5nIEdWTi4KKyAg
ICAgICAgCisgICAgICAgIEN1cnJlbnRseSBvbmx5IHRoZSBGVEwgY2FuIGdlbmVyYXRlIGNvZGUg
ZnJvbSB0aGUgU1NBIGZvcm0sIGFuZCB0aGVyZSBpcyBubworICAgICAgICB3YXkgdG8gY29udmVy
dCBmcm9tIFNTQSB0byBUaHJlYWRlZENQUyBvciBMb2FkU3RvcmUuIFRoZXJlIHByb2JhYmx5IHdp
bGwKKyAgICAgICAgbmV2ZXIgYmUgc3VjaCBhIGNhcGFiaWxpdHkuCisgICAgICAgIAorICAgICAg
ICBJbiBvcmRlciB0byBoYW5kbGUgT1NSIGV4aXQgc3RhdGUgaW4gdGhlIFNTQSwgd2UgcGxhY2Ug
TW92SGludHMgYXQgUGhpCisgICAgICAgIHBvaW50cy4gT3RoZXIgdGhhbiB0aGF0LCB5b3UgY2Fu
IHJlY29uc3RydWN0IHN0YXRlLWF0LWV4aXQgYnkgZm9yd2FyZAorICAgICAgICBwcm9wYWdhdGlu
ZyBNb3ZIaW50cy4gTm90ZSB0aGF0IE1vdkhpbnQgaXMgdGhlIG5ldyBTZXRMb2NhbCBpbiBTU0Eu
CisgICAgICAgIFNldExvY2FsIGFuZCBHZXRMb2NhbCBvbmx5IHN1cnZpdmUgaW50byBTU0EgaWYg
dGhleSBhcmUgb24gY2FwdHVyZWQKKyAgICAgICAgdmFyaWFibGVzLCBvciBpbiB0aGUgY2FzZSBv
ZiBmbHVzaGVzLiBBICJsaXZlIFNldExvY2FsIiB3aWxsIGJlCisgICAgICAgIE5vZGVNdXN0R2Vu
ZXJhdGUgYW5kIHdpbGwgYWx3YXlzIGNvcnJlc3BvbmQgdG8gYSBmbHVzaC4gQ29tcHV0aW5nIHRo
ZQorICAgICAgICBzdGF0ZS1hdC1leGl0IHJlcXVpcmVzIHJ1bm5pbmcgU1NBIGxpdmVuZXNzIGFu
YWx5c2lzLCBPU1IgYXZhaWxhYmlsaXR5CisgICAgICAgIGFuYWx5c2lzLCBhbmQgZmx1c2ggbGl2
ZW5lc3MgYW5hbHlzaXMuIFRoZSBGVEwgcnVucyBhbGwgb2YgdGhlc2UgcHJpb3IgdG8KKyAgICAg
ICAgZ2VuZXJhdGluZyBjb2RlLiBXaGlsZSBPU1IgZXhpdCBjb250aW51ZXMgdG8gYmUgdHJpY2t5
LCBtdWNoIG9mIHRoZSBsb2dpYworICAgICAgICBpcyBub3cgZmFjdG9yZWQgaW50byBzZXBhcmF0
ZSBwaGFzZXMgYW5kIHRoZSBiYWNrZW5kIGhhcyB0byBkbyBsZXNzIHdvcmsKKyAgICAgICAgdG8g
cmVhc29uIGFib3V0IHdoYXQgaGFwcGVuZWQgb3V0c2lkZSBvZiB0aGUgYmFzaWMgYmxvY2sgdGhh
dCBpcyBiZWluZworICAgICAgICBsb3dlcmVkLgorICAgICAgICAKKyAgICAgICAgQ29udmVyc2lv
biBmcm9tIERGRyBTU0EgdG8gTExWTSBTU0EgaXMgZG9uZSBieSBlbnN1cmluZyB0aGF0IHdlIGdl
bmVyYXRlCisgICAgICAgIGNvZGUgaW4gZGVwdGgtZmlyc3Qgb3JkZXIsIHRodXMgZ3VhcmFudGVl
aW5nIHRoYXQgYSBub2RlIHdpbGwgYWx3YXlzIGJlCisgICAgICAgIGxvd2VyZWQgKGFuZCBoZW5j
ZSBoYXZlIGEgTFZhbHVlKSBiZWZvcmUgYW55IG9mIHRoZSBibG9ja3MgZG9taW5hdGVkIGJ5Cisg
ICAgICAgIHRoYXQgbm9kZSdzIGJsb2NrIGhhdmUgY29kZSBnZW5lcmF0ZWQuIEZvciBVcHNpbG9u
L1BoaSwgd2UganVzdCB1c2UKKyAgICAgICAgYWxsb2NhJ3MuIFdlIGNvdWxkIGRvIHNvbWV0aGlu
ZyBtb3JlIGNsZXZlciB0aGVyZSwgYnV0IGl0J3MgcHJvYmFibHkgbm90CisgICAgICAgIHdvcnRo
IGl0LCBhdCBsZWFzdCBub3Qgbm93LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hpbGUg
dGhlIFNTQSBmb3JtIGlzIGN1cnJlbnRseSBvbmx5IGJlaW5nIGNvbnZlcnRlZCB0byBMTFZNIElS
LAorICAgICAgICB0aGVyZSBpcyBub3RoaW5nIHRoYXQgcHJldmVudHMgdXMgZnJvbSBjb25zaWRl
cmluZyBvdGhlciBiYWNrZW5kcyBpbiB0aGUKKyAgICAgICAgZnV0dXJlIC0gd2l0aCB0aGUgY2F2
ZWF0IHRoYXQgdGhpcyBmb3JtIGlzIGRlc2lnbmVkIHRvIGJlIGZpcnN0IGxvd2VyZWQgdG8KKyAg
ICAgICAgYSBsb3dlci1sZXZlbCBTU0EgYmVmb3JlIGFjdHVhbCBtYWNoaW5lIGNvZGUgZ2VuZXJh
dGlvbiBjb21tZW5jZXMuIFNvIHdlCisgICAgICAgIG91Z2h0IHRvIGVpdGhlciB1c2UgTExWTSAo
dGhlIGludGVuZGVkIHBhdGgpIG9yIHdlIHdpbGwgaGF2ZSB0byB3cml0ZSBvdXIKKyAgICAgICAg
b3duIFNTQSBsb3ctbGV2ZWwgYmFja2VuZC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcnVucyBh
bGwgb2YgdGhlIGNvZGUgdGhhdCB0aGUgRlRMIHdhcyBrbm93biB0byBydW4gcHJldmlvdXNseS4g
Tm8KKyAgICAgICAgY2hhbmdlIGluIHBlcmZvcm1hbmNlIGZvciBub3cuIEJ1dCBpdCBkb2VzIG9w
ZW4gc29tZSBleGNpdGluZworICAgICAgICBwb3NzaWJpbGl0aWVzIQorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9PcGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpPcGVyYW5kVmFsdWVUcmFpdHM6OmR1bXApOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZmlsbCk6CisgICAgICAgIChPcGVyYW5kcyk6CisgICAg
ICAgIChKU0M6Ok9wZXJhbmRzOjpjbGVhcik6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpzZXRMaXZlVmFsdWVzKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6ZW5kQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdl
U3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlKToK
KyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAoQWJzdHJhY3RTdGF0
ZSk6CisgICAgICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBZGphY2VuY3lMaXN0OjpqdXN0T25lQ2hpbGQpOgorICAgICAgICAoQWRqYWNlbmN5TGlzdCk6
CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChK
U0M6OkRGRzo6QmFzaWNCbG9jazo6fkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6OmVuc3VyZUxvY2Fscyk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6
aXNJblBoaXMpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmlzSW5CbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChK
U0M6OkRGRzo6QmFzaWNCbG9jazo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6U1NBRGF0YTo6U1NBRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6U1NB
RGF0YTo6flNTQURhdGEpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAg
IChCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpvcGVyYXRvcltd
KToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3IpOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckZvckNvbmRpdGlvbik6CisgICAgICAgIChT
U0FEYXRhKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDoKKyAgICAgICAg
KERGRyk6CisgICAgICAgICogZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcDogQWRkZWQuCisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrSW5zZXJ0aW9uU2V0OjpCbG9j
a0luc2VydGlvblNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6On5C
bG9ja0luc2VydGlvblNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6
Omluc2VydCk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydEJl
Zm9yZSk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgor
ICAgICAgICAqIGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5oOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChCbG9ja0luc2VydGlvblNldCk6CisgICAgICAgICogZGZnL0RGR0NGQVBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6cnVuKToKKyAgICAgICAgKiBk
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhh
c2U6OmNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDb21tb24u
Y3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHQ29t
bW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0tpbGwpOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjpraWxsU3RhdHVzRm9yRG9lc0tpbGwpOgorICAgICAgICAqIGRmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRG
b2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50
Rm9sZGluZ1BoYXNlOjppc0NhcHR1cmVkQXRPckFmdGVyKToKKyAgICAgICAgKiBkZmcvREZHQ3Jp
dGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKENyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkNyaXRp
Y2FsRWRnZUJyZWFraW5nUGhhc2U6OkNyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UpOgorICAgICAg
ICAoSlNDOjpERkc6OkNyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChK
U0M6OkRGRzo6Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZTo6YnJlYWtDcml0aWNhbEVkZ2UpOgor
ICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyk6CisgICAgICAg
ICogZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdEQ0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
RENFUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6RENFUGhhc2U6OmZpbmRUeXBlQ2hl
Y2tSb290KToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6Y291bnROb2RlKToKKyAgICAg
ICAgKERDRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6Y291bnRFZGdlKToK
KyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6ZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21D
aGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR0VkZ2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkVkZ2U6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdFZGdlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6RWRnZTo6RWRnZSk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6c2V0Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6RWRnZTo6dXNlS2luZFVuY2hlY2tlZCk6CisgICAgICAgIChKU0M6
OkRGRzo6RWRnZTo6c2V0VXNlS2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6c2V0UHJv
b2ZTdGF0dXMpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6OndpbGxOb3RIYXZlQ2hlY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkVkZ2U6OndpbGxIYXZlQ2hlY2spOgorICAgICAgICAoRWRnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6a2lsbFN0YXR1c1VuY2hlY2tlZCk6CisgICAgICAg
IChKU0M6OkRGRzo6RWRnZTo6a2lsbFN0YXR1cyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6
c2V0S2lsbFN0YXR1cyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6ZG9lc0tpbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OkVkZ2U6OmRvZXNOb3RLaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpF
ZGdlOjpzaGlmdCk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6bWFrZVdvcmQpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdGbHVzaEZvcm1hdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
ZGZnL0RGR0ZsdXNoRm9ybWF0Lmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpyZXN1bHRGb3IpOgorICAgICAgICAoSlNDOjpERkc6OnVzZUtpbmRGb3IpOgorICAg
ICAgICAoV1RGKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2Uu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChGbHVzaExpdmVuZXNzQW5hbHlz
aXNQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2U6
OkZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExp
dmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZTo6cHJvY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6Rmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2U6OnNldEZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpmbHVzaEZvcm1hdCk6CisgICAgICAgIChKU0M6OkRGRzo6
cGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyk6CisgICAgICAgICogZGZnL0RGR0ZsdXNoTGl2
ZW5lc3NBbmFseXNpc1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZEZvckRlcHRoRmlyc3RTb3J0KToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6Z2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb252ZXJ0VG9Db25z
dGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlUHJvZmlsZUZvcik6CisgICAg
ICAgIChHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0luc2VydGlvblNldC5oOgorICAgICAgICAo
REZHKToKKyAgICAgICAgKEpTQzo6REZHOjpJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgorICAgICAg
ICAqIGRmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChMaXZlbmVzc0FuYWx5c2lzUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6
OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRG
Rzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpwcm9jZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjpM
aXZlbmVzc0FuYWx5c2lzUGhhc2U6OmFkZENoaWxkVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpw
ZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyk6CisgICAgICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlz
aXNQaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR05vZGUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0YSk6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChERkcpOgor
ICAgICAgICAoTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTG9jYWwpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzUGhpKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpwaGkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnRha2VuQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Om5vdFRha2VuQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN1Y2Nlc3Nvcik6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3VjY2Vzc29yRm9yQ29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpub2RlQ29tcGFyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUxp
c3REdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpub2RlTWFwRHVtcCk6CisgICAgICAgICogZGZn
L0RGR05vZGVGbGFncy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZHVtcE5vZGVGbGFncyk6Cisg
ICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAoT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZSk6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6T1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXMpOgorICAgICAgICAqIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmg6
IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZn
L0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJl
ZGljdGlvbkluamVjdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKFNTQUNvbnZlcnNpb25Q
aGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpTU0FDb252ZXJz
aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6cnVuKToK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmRQaGlDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpKToK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmRQaGlFZGdlKToK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmRlZHVwbGljYXRlQ2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6YWRkRmx1c2hlZExv
Y2FsT3ApOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6YWRkRmx1c2hl
ZExvY2FsRWRnZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybVNTQUNvbnZlcnNpb24pOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhbGlkYXRlOjp2YWxpZGF0ZSk6CisgICAgICAgIChWYWxpZGF0ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlQ1BTKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpm
bHVzaEZvcm1hdCk6CisgICAgICAgIChWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGZ0
bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgor
ICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06Okxvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
cmVhdGVQaGlWYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlQmxvY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
Tm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVVcHNpbG9u
KToKKyAgICAgICAgKExvd2VyREZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZVBoaSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmNvbXBpbGVKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZVdlYWtKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZVNldExvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZUFkZCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0
aFN1Yik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aE11
bCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aERpdik6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aE1vZCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aE1pbk9yTWF4KToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoQWJzKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTmVnYXRlKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJpdEFuZCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRPcik6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRYb3IpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQml0UlNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUJpdExTaGlmdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRVUlNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZVVJbnQzMlRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUludDMyVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlRXFDb25zdGFudCk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ29tcGFyZVN0cmljdEVxQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ29tcGFyZUxl
c3MpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ29tcGFyZUxl
c3NFcSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJl
R3JlYXRlcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21w
YXJlR3JlYXRlckVxKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxh
dGVCYWNrd2FyZCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0ludDMy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Q2VsbCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpsb3dEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpsb3dKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6bG93U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1
bGF0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUJvb2xl
YW4pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc0xpdmUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp1c2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjppbml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2spOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6ZW1pdE9TUkV4aXRDYWxsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6YWRkRXhpdEFyZ3VtZW50Rm9yTm9kZSk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmxpbmtPU1JFeGl0c0FuZENvbXBsZXRlSW5pdGlhbGl6YXRp
b25CbG9ja3MpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzZXRJbnQzMik6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNldEpTVmFsdWUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzZXRCb29sZWFuKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6c2V0U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OnNldERvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmlzVmFsaWQpOgorICAgICAgICAqIGZ0bC9GVExMb3dlcmVkTm9kZVZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAoRlRMKToKKyAgICAgICAgKExvd2VyZWROb2RlVmFsdWUpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyZWROb2RlVmFsdWU6Okxvd2VyZWROb2RlVmFsdWUpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyZWROb2RlVmFsdWU6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlcmVkTm9kZVZhbHVlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyZWRO
b2RlVmFsdWU6OnZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlcmVkTm9kZVZhbHVlOjpi
bG9jayk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmg6CisgICAgICAgIChKU0M6
OkZUTDo6VmFsdWVGcm9tQmxvY2s6OlZhbHVlRnJvbUJsb2NrKToKKyAgICAgICAgKFZhbHVlRnJv
bUJsb2NrKToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVTb3VyY2UuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OlZhbHVlU291cmNlOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVTb3VyY2Uu
aDoKKwogMjAxMy0wNy0xMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVzdXJyZWN0IHRoZSBDTG9vcCBMTElOVCBvbiB0aGUgRlRMIGJyYW5jaC4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAKIAkJMEY0NkU2QjkxNzZGODlEQjAwRTFG
NzU1IC8qIEZUTFN3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0Y2hDYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2
QzUxNzZGOEE1RTAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMyMTc2RjhBNUIwMEUxRjc1NSAv
KiBERkdMYXp5SlNWYWx1ZS5jcHAgKi87IH07CiAJCTBGNDZFNkM2MTc2RjhBNjAwMEUxRjc1NSAv
KiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY0NkU2RUYx
NzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5h
bHlzaXMuaCAqLzsgfTsKLQkJMEY0NkU2RjMxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxM
b29wcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQ2RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLzsgfTsKLQkJ
MEY0NkU2RjQxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjIxNzdDRjBEMjAwRTFG
NzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkQ5MTc3Q0I5MDAwMEUxRjc1NSAvKiBMTFZNRGlzYXNz
ZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDZFNkQ3MTc3Q0I4RkMwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsK
IAkJMEY0NkU2RTMxNzdDQzM2NjAwRTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkUwMTc3Q0MzNjYw
MEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NkU2RTQxNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4
NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0NkU2RTExNzdDQzM2NjAwRTFGNzU1IC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDZFNkU1
MTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RTIxNzdDQzM2NjAwRTFGNzU1IC8q
IFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CisJCTBGNDZFNkVGMTc3Q0U5NUEwMEUxRjc1NSAv
KiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0NkU2RUUxNzdDRTk1QTAwRTFGNzU1IC8qIERGR0FuYWx5c2lzLmggKi87IH07CisJ
CTBGNDZFNkYzMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2RjExNzdDRjBEMjAw
RTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CisJCTBGNDZFNkY0MTc3Q0YwRDIw
MEUxRjc1NSAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkYyMTc3Q0YwRDIwMEUxRjc1NSAvKiBERkdOYXR1cmFs
TG9vcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAw
ODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUxNzNBRUREQzAw
N0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VFMkQzIC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FFRERDMDA3RUUy
RDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVk
U3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMzUzLDYgKzM1MywyMSBAQAogCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYg
LyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9ucy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUIxNDM2QUIy
MzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQTE0
MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi87IH07CisJCTBGRTUwNTU5MTc4N0FBODkw
MEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NTgxNzg3QUE4ODAwQjM1RjhDIC8qIERGR0Js
b2NrSW5zZXJ0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZFNTA1NUMxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5n
UGhhc2UuY3BwICovOyB9OworCQkwRkU1MDU1RDE3ODdCMENGMDBCMzVGOEMgLyogREZHQ3JpdGlj
YWxFZGdlQnJlYWtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNTA1NUIxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRkU1MDU2MzE3OEY1QjA1MDBCMzVGOEMgLyogREZHQmFzaWNCbG9jay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2MjE3OEY1
QjA1MDBCMzVGOEMgLyogREZHQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRTUwNTcxMTc4RjVC
NTMwMEIzNUY4QyAvKiBERkdCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2NDE3OEY1QjUzMDBCMzVGOEMgLyog
REZHQmxvY2tJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRkU1MDU3NDE3OEY1QjUzMDBCMzVG
OEMgLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFNTA1NjcxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0
LmNwcCAqLzsgfTsKKwkJMEZFNTA1NzUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2
ODE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU3NjE3OEY1QjUzMDBCMzVGOEMg
LyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NjkxNzhGNUI1MzAwQjM1RjhDIC8qIERG
R0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZFNTA1NzcxNzhGNUI1
MzAwQjM1RjhDIC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2QTE3OEY1QjUzMDBCMzVG
OEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU3ODE3OEY1QjUzMDBCMzVGOEMg
LyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZCMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuY3BwICovOyB9OworCQkwRkU1MDU3OTE3OEY1QjUzMDBCMzVGOEMg
LyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZFNTA1N0ExNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFNTA1NkQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuY3BwICovOyB9OworCQkwRkU1MDU3QjE3OEY1QjUzMDBCMzVGOEMgLyogREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1NkUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU3QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2Uu
Y3BwICovOyB9OworCQkwRkU1MDU3RDE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29udmVyc2lv
blBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkU1MDU3MDE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFODUzNEIxNzIz
Q0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUg
LyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLzsgfTsKIAkJMEZFODUzNEMxNzIzQ0RBNTAw
QjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGRUEwQTA4MTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMDlG
RDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTg2LDEzICsxMjAxLDEzIEBACiAJ
CTBGNDZFNkI3MTc2Rjg5RDkwMEUxRjc1NSAvKiBGVExTd2l0Y2hDYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFN3aXRjaENhc2UuaDsgcGF0aCA9IGZ0bC9GVExTd2l0
Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDZFNkMyMTc2RjhBNUIw
MEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdMYXp5SlNWYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZHTGF6eUpTVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3
NTUgLyogREZHTGF6eUpTVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHTGF6eUpTVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdMYXp5SlNWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlz
aXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQW5hbHlzaXMuaDsgcGF0
aCA9IGRmZy9ERkdBbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjQ2
RTZGMTE3N0NGMEQyMDBFMUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5jcHA7IHBhdGggPSBkZmcv
REZHTmF0dXJhbExvb3BzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NkU2
RjIxNzdDRjBEMjAwRTFGNzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdOYXR1cmFsTG9vcHMuaDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFs
TG9vcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NkU2RDcxNzdDQjhGQzAw
RTFGNzU1IC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gTExWTURpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExW
TURpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDZFNkUw
MTc3Q0MzNjYwMEUxRjc1NSAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIuaDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9M
TFZNRGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDZFNkUx
MTc3Q0MzNjYwMEUxRjc1NSAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gVURpczg2RGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkaXNhc3NlbWJs
ZXIvVURpczg2RGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDZFNkUyMTc3Q0MzNjYwMEUxRjc1NSAvKiBYODZEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWDg2RGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRp
c2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjQ2RTZFRTE3N0NFOTVBMDBFMUY3NTUgLyogREZHQW5hbHlzaXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQW5hbHlzaXMuaDsgcGF0aCA9IGRmZy9ERkdBbmFs
eXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ2RTZGMTE3N0NGMEQyMDBF
MUY3NTUgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5jcHA7IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3Bz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2RjIxNzdDRjBEMjAwRTFG
NzU1IC8qIERGR05hdHVyYWxMb29wcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdOYXR1cmFsTG9vcHMuaDsgcGF0aCA9IGRmZy9ERkdOYXR1cmFsTG9vcHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJj
ZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJj
ZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RTFBMEMxNzNB
RUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEUxQTBEMTczQUVEREMwMDdFRTJEMyAvKiBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEz
ODQsNiArMTM5OSwyMSBAQAogCQkwRkREQkZCMzE2NjZFRUQ1MDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAx
OTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2
QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU1ODE3ODdB
QTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QmxvY2tJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja0luc2VydGlvblNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU1QTE3ODdCMENGMDBCMzVGOEMgLyog
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFNTA1NUIxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFr
aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ3JpdGljYWxF
ZGdlQnJlYWtpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NjIxNzhGNUIwNTAwQjM1
RjhDIC8qIERGR0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQmFzaWNCbG9jay5jcHA7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9jay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTY0MTc4RjVCNTMwMEIzNUY4QyAvKiBE
RkdCbG9ja0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdCbG9ja0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcvREZHQmxvY2tJbnNlcnRp
b25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU2NzE3OEY1QjUz
MDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHRmx1c2hGb3JtYXQuY3BwOyBwYXRoID0gZGZnL0RGR0ZsdXNoRm9ybWF0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NjgxNzhGNUI1MzAwQjM1
RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0ZsdXNoRm9ybWF0Lmg7IHBhdGggPSBkZmcvREZHRmx1c2hGb3JtYXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NjkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdG
bHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRTUwNTZBMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbHVzaExpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTZCMTc4RjVCNTMwMEIzNUY4
QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9E
RkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkU1MDU2QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkU1MDU2RDE3OEY1QjUzMDBCMzVGOEMgLyogREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFNTA1NkUxNzhGNUI1MzAwQjM1RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5oOyBwYXRoID0gZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1NkYxNzhGNUI1
MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRTUwNTcwMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU1NBQ29udmVyc2lvblBoYXNlLmg7IHBh
dGggPSBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVz
aXJlZFdhdGNocG9pbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMgLyog
RlRMQWJicmV2aWF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExB
YmJyZXZpYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMQWJicmV2aWF0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjk2MiwxMCArMjk5MiwxMyBAQAogCQkJCTBGQzA5NzZDMTQ2
OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLywKIAkJCQkwRjcxNENBMTE2
RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJ
CQkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuaCAqLywKKwkJCQkwRkU1MDU2MjE3OEY1QjA1MDBCMzVGOEMgLyogREZHQmFzaWNCbG9jay5j
cHAgKi8sCiAJCQkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAq
LywKIAkJCQkwRkQ1NjUyMjE2QUI3ODBBMDAxOTc2NTMgLyogREZHQmFzaWNCbG9ja0lubGluZXMu
aCAqLywKIAkJCQkwRkQyODEyNTE3NzkzQkUzMDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNoLmNw
cCAqLywKIAkJCQkwRkQyODEyNjE3NzkzQkUzMDBCQkIwRjMgLyogREZHQmluYXJ5U3dpdGNoLmgg
Ki8sCisJCQkJMEZFNTA1NjQxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmNwcCAqLywKKwkJCQkwRkU1MDU1ODE3ODdBQTg4MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCAqLywKIAkJCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGly
ZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNv
ZGVQYXJzZXIuaCAqLywKQEAgLTI5ODUsNiArMzAxOCw4IEBACiAJCQkJMEYzQjNBMTgxNTNFNjhF
RjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkIx
NkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwICovLAogCQkJCTBG
QkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCisJ
CQkJMEZFNTA1NUExNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhh
c2UuY3BwICovLAorCQkJCTBGRTUwNTVCMTc4N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmggKi8sCiAJCQkJMEZGRkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERG
R0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk0RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NF
UGhhc2UuaCAqLywKIAkJCQkwRjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2Uu
Y3BwICovLApAQCAtMzAxMSw2ICszMDQ2LDEwIEBACiAJCQkJMEZEQjJDRDQxNzQyRDgwNDAwN0Iz
QzFCIC8qIERGR0ZpbmFsaXplci5oICovLAogCQkJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAv
KiBERkdGaXh1cFBoYXNlLmNwcCAqLywKIAkJCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyog
REZHRml4dXBQaGFzZS5oICovLAorCQkJCTBGRTUwNTY3MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdG
bHVzaEZvcm1hdC5jcHAgKi8sCisJCQkJMEZFNTA1NjgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0Zs
dXNoRm9ybWF0LmggKi8sCisJCQkJMEZFNTA1NjkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU2QTE3OEY1QjUzMDBCMzVG
OEMgLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLywKIAkJCQk4NkFFNkM0QjEz
NkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICovLAogCQkJCTg2RUM5REI2MTMyOERGODIw
MDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovLAogCQkJCTg2QUU2QzRDMTM2QTExRTQw
MDk2MzAxMiAvKiBERkdHUFJJbmZvLmggKi8sCkBAIC0zMDI1LDYgKzMwNjQsOCBAQAogCQkJCTBG
REIyQ0Q2MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjQ2
RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovLAogCQkJCTBGNDZF
NkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oICovLAorCQkJCTBGRTUwNTZC
MTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwICovLAorCQkJ
CTBGRTUwNTZDMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAq
LywKIAkJCQkwRkI0QjUxQzE2QjYyNzcyMDAzRjY5NkIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3Bw
ICovLAogCQkJCTBGQjRCNTFEMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdMb25nTGl2ZWRTdGF0ZS5o
ICovLAogCQkJCTBGMkJEQzNEMTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmgg
Ki8sCkBAIC0zMDQxLDYgKzMwODIsOCBAQAogCQkJCTBGQTU4MUI5MTUwRTk1MkEwMEI5QTJEOSAv
KiBERkdOb2RlVHlwZS5oICovLAogCQkJCTg2RUM5REJGMTMyOERGODIwMDJCMkFENyAvKiBERkdP
cGVyYXRpb25zLmNwcCAqLywKIAkJCQk4NkVDOURDMDEzMjhERjgyMDAyQjJBRDcgLyogREZHT3Bl
cmF0aW9ucy5oICovLAorCQkJCTBGRTUwNTZEMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCAqLywKKwkJCQkwRkU1MDU2RTE3OEY1QjUzMDBCMzVG
OEMgLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oICovLAogCQkJCTBGRDgyRTUy
MTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi8sCiAJCQkJMEZEODJFNTMxNDFE
QUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggKi8sCiAJCQkJMEZDMDk3OEUxNDZBNkY2MzAw
Q0YyNDQyIC8qIERGR09TUkV4aXQuY3BwICovLApAQCAtMzA3OCw2ICszMTIxLDggQEAKIAkJCQk4
NkVDOURDMzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLywKIAkJCQk4
Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgKi8s
CiAJCQkJODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
ICovLAorCQkJCTBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhh
c2UuY3BwICovLAorCQkJCTBGRTUwNTcwMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJz
aW9uUGhhc2UuaCAqLywKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyogREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGQzA5NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBE
RkdUaHVua3MuY3BwICovLAogCQkJCTBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVu
a3MuaCAqLywKQEAgLTMyOTgsNiArMzM0Myw3IEBACiAJCQkJODYwMTYxRTMwRjNBODNDMTAwRjg0
NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTVG
MEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNFNTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFNTA1NzkxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY1RjQwODgxMEU3RDU2MzAwOTQ3MzYxIC8qIEFQSVNoaW1zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0Y2MDUxNDBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDA3LDYgKzM0NTMsNyBAQAogCQkJCTBGRUEwQTFEMTcw
OEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRTUwNTdEMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252
ZXJzaW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNDODI4MTQxMTVENEYwMEZEODFD
QiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3
QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBE
NEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQyOCw2ICszNDc1
LDcgQEAKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21w
aWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERG
R09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTc3MTc4
RjVCNTMwMEIzNUY4QyAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY0RTFBMTIxNzNBRjA3QjAwN0VFMkQzIC8qIERGR0Rlc2lyZWRTdHJ1Y3R1
cmVDaGFpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAv
KiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMy
IC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTM0
NDQsNiArMzQ5Miw3IEBACiAJCQkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERGR1ZhbGlk
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0NzE1MjI4MDI1MDBDRDg5MTAgLyogREZH
VmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQ5NEYyRjE3MUUz
RTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTVEMTc4
N0IwQ0YwMEIzNUY4QyAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCREM0ODE1MjI4MDI5MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZF
RiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLywKQEAgLTM1OTEs
NiArMzY0MCw4IEBACiAJCQkJMEY3NjZEMzUxNUFFMjUzQjAwOEYzNjNFIC8qIEp1bXBSZXBsYWNl
bWVudFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVC
MkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NzUx
NzhGNUI1MzAwQjM1RjhDIC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkU1MDU1OTE3ODdBQTg5MDBCMzVGOEMgLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3MkZGRDY0MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTk2MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3Bl
LmggaW4gSGVhZGVycyAqLywKQEAgLTM3MDgsNiArMzc1OSw3IEBACiAJCQkJMTQ3NEMzM0IxNkFB
MkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJD
REUxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0pJVEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRTUwNTdCMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYx
QzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJEQjE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlG
QzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MTk0
LDYgKzQyNDYsNyBAQAogCQkJCTBGMEI4M0IwMTRCQ0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0lu
Zm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEQjJDRDkxNzQyRDgwNDAwN0IzQzFCIC8qIERG
R0ZhaWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMz
MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1
NzgxNzhGNUI1MzAwQjM1RjhDIC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjczRDdBRTE2NUExNDJEMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHVi
Um91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NjlBMDc5NjBFRDFEM0FFMDBGMUY2ODEg
LyogQ29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQwMTY2NzYzMzAwMEQ2
MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDIyNSw5ICs0Mjc4
LDExIEBACiAJCQkJMEZDMDk3NkUxNDY4QUI1MTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVscGVy
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcgLyogREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRDgxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkU1MDU3NDE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hGb3JtYXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1NzEx
NzhGNUI1MzAwQjM1RjhDIC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMjM1QkQxMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExDQXJndW1lbnRHZXR0ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQzU1NzAxNDczOEYzNTAwMTIxRTRGIC8qIERGR0NvZGVC
bG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUQxNkI3MkEwODAwNURGOTVCIC8q
IERGR0NvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzNDYsNiArNDQwMSw3IEBACiAJCQkJ
MTRCRDVBMzAwQTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5Nzg4MDE0MDE0NzFBRDkyMDA0MUIwMTYgLyogSlNEYXRlTWF0aC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VDMjcxMDA1REJDOEQgLyogSlNGdW5jdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU3NjE3OEY1QjUzMDBCMzVGOEMgLyogREZHRmx1c2hM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4RTNBNTkwREY5
Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQyMTA3RUMz
NzYwMDQyN0E0OCAvKiBKU0dsb2JhbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU5
RDE3QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC00MzgzLDYgKzQ0MzksNyBAQAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4
Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2NzkxNEY1QzQ2
QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk1QUI4MzQyMERBNDMyMjUwMEJDODNGMyAvKiBMZWdhY3lQcm9maWxlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkU1MDU3QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OEYyMUIwMTA3RUM1NDEwMDQyRUMyQyAv
KiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc1NzE1OTE0QTIwMDA0Q0I5RkYg
LyogTGlua0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0UyRUE2QzBGQjQ2MENGMDA2
MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0MDUsNyArNDQ2
Miw5IEBACiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYxMDdFQzdFNzAwNjUwNDQ2IC8qIE1hdGhP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1N0ExNzhGNUI1MzAwQjM1RjhDIC8q
IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTAyMTNFM0QxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFNTA1NUMxNzg3QjBDRjAwQjM1RjhDIC8qIERGR0NyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEMjgxMjcxNzc5M0JFNTAwQkJC
MEYzIC8qIERGR0JpbmFyeVN3aXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3RDE0
RjVDRkQ2MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkVCRjJGRjE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9y
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDQxNyw2ICs0NDc2LDcgQEAKIAkJCQk2NTVFQjI5QjEw
Q0UyNTgxMDAxQTk5MEUgLyogTm9kZXNDb2RlZ2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
NDY5REUyMTA3RUM3RTcwMDY1MDQ0NiAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDQ2OURFMzEwN0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRTUwNTYzMTc4RjVCMDUwMEIzNUY4QyAvKiBERkdCYXNpY0Js
b2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REU0MTA3RUM3RTcwMDY1MDQ0NiAvKiBO
dW1iZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZGM0VFQkUxNjhDREU5MzAw
NzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0
NjlERTUxMDdFQzdFNzAwNjUwNDQ2IC8qIE9iamVjdENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJl
dmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5k
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBPcGVyYW5kVmFsdWUKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgT3BlcmFu
ZFZhbHVlVHJhaXRzIHsKICAgICBzdGF0aWMgVCBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiBUKCk7
IH0KLSAgICBzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IFQmIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0
KSB7IHZhbHVlLmR1bXAob3V0KTsgfQorICAgIHN0YXRpYyB2b2lkIGR1bXAoY29uc3QgVCYgdmFs
dWUsIFByaW50U3RyZWFtJiBvdXQpIHsgb3V0LnByaW50KHZhbHVlKTsgfQogfTsKIAogZW51bSBP
cGVyYW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07CkBAIC0yMDksMTIg
KzIwOSwyNSBAQCBwdWJsaWM6CiAgICAgICAgIHNldExvY2FsRmlyc3RUaW1lKG9wZXJhbmQsIHZh
bHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjbGVhcigpCisgICAgdm9pZCBmaWxsKFQgdmFs
dWUpCiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRW
YWx1ZSgpOworICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSB2YWx1ZTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1f
bG9jYWxzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICAgICAgICAgIG1fbG9jYWxz
W2ldID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAg
ICAgZmlsbChUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IE9wZXJhbmRzJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChudW1iZXJPZkFyZ3VtZW50cygpID09IG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOwor
ICAgICAgICBBU1NFUlQobnVtYmVyT2ZMb2NhbHMoKSA9PSBvdGhlci5udW1iZXJPZkxvY2Fscygp
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cyA9PSBvdGhlci5tX2FyZ3Vt
ZW50cyAmJiBtX2xvY2FscyA9PSBvdGhlci5tX2xvY2FsczsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NCw2ICs3NCwxNiBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9j
ayhCYXNpCiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09
IFNTQSkgeworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3Ig
aXRlciA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmJlZ2luKCk7CisgICAgICAgIEhh
c2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+OjppdGVyYXRvciBlbmQgPSBiYXNpY0Jsb2NrLT5z
c2EtPnZhbHVlc0F0SGVhZC5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKKyAgICAgICAgICAgIGZvck5vZGUoaXRlci0+a2V5KSA9IGl0ZXItPnZhbHVlOworICAg
ICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLmhhc0Nsb2JiZXJhYmxlU3RhdGUoKSkKKyAgICAgICAg
ICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
ICAgICBiYXNpY0Jsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7CiAgICAgYmFzaWNCbG9j
ay0+Y2ZhSGFzVmlzaXRlZCA9IHRydWU7CiAgICAgbV9ibG9jayA9IGJhc2ljQmxvY2s7CkBAIC04
MywxMyArOTMsMjggQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQog
ICAgIG1fY3VycmVudE5vZGUgPSAwOwogfQogCi12b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxp
emUoR3JhcGgmIGdyYXBoKQorc3RhdGljIHZvaWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUq
LCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBIYXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3sKKyAgICB2
YWx1ZXMuY2xlYXIoKTsKKyAgICAKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9
IGxpdmUuYmVnaW4oKTsKKyAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbGl2ZS5l
bmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgdmFsdWVzLmFk
ZCgqaXRlciwgQWJzdHJhY3RWYWx1ZSgpKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjppbml0
aWFsaXplKCkKIHsKLSAgICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxvY2soMCk7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7CiAgICAgcm9vdC0+Y2ZhU2hvdWxk
UmV2aXNpdCA9IHRydWU7CiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwogICAgIHJv
b3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAg
IGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0
SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZSA9IHJvb3QtPnZhcmlhYmxlc0F0SGVh
ZC5hcmd1bWVudChpKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQp
OwogICAgICAgICBpZiAoIW5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRVbmJveElm
UG9zc2libGUoKSkgewpAQCAtMTE4LDEyICsxNDMsMTEgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpp
bml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2Fs
KGkpLmNsZWFyKCk7CiAgICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigp
OwogICAgIH0KLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9ja0luZGV4
IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2Nr
SW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICBibG9jay0+Y2ZhU2hvdWxk
UmV2aXNpdCA9IGZhbHNlOwogICAgICAgICBibG9jay0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwog
ICAgICAgICBibG9jay0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKQEAgLTEzNywxMiArMTYx
LDEyIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICAgICAg
fQogICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gZ3JhcGgubV9wbGFuLm9zckVu
dHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9IG1f
Z3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyYXBoLm1fcGxhbi5tdXN0SGFuZGxl
VmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9n
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSB2YWx1ZTsKLSAgICAgICAgICAgIHZhbHVlLnNldE1vc3RTcGVjaWZpYyhn
cmFwaCwgZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0pOwotICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aSk7CisgICAgICAgICAgICB2YWx1ZS5zZXRNb3N0U3BlY2lmaWMobV9ncmFwaCwgbV9ncmFwaC5t
X3BsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG1f
Z3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAg
ICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpLm1lcmdlKHZhbHVlKTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICBk
YXRhTG9nRigiICAgIEluaXRpYWxpemluZyBCbG9jayAjJXUsIG9wZXJhbmQgciVkLCB0byAiLCBi
bG9ja0luZGV4LCBvcGVyYW5kKTsKQEAgLTE1Miw2ICsxNzYsMTUgQEAgdm9pZCBBYnN0cmFjdFN0
YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICB9CiAgICAgICAgIGJsb2NrLT5jZmFT
aG91bGRSZXZpc2l0ID0gdHJ1ZTsKICAgICB9CisgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNT
QSkgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBzZXRMaXZl
VmFsdWVzKGJsb2NrLT5zc2EtPnZhbHVlc0F0SGVhZCwgYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCk7
CisgICAgICAgICAgICBzZXRMaXZlVmFsdWVzKGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCwgYmxv
Y2stPnNzYS0+bGl2ZUF0VGFpbCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayhNZXJnZU1vZGUgbWVyZ2VNb2RlKQpAQCAtMTcyLDIwICsy
MDUsNDEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrKE1lcmdlTQogICAgIGJv
b2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIAogICAgIGlmIChtZXJnZU1vZGUgIT0gRG9udE1lcmdl
IHx8ICFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAw
OyBhcmd1bWVudCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsg
Kythcmd1bWVudCkgeworICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7CisgICAgICAg
IGNhc2UgVGhyZWFkZWRDUFM6IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7
ICsrYXJndW1lbnQpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
Ci0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRlIGZvciBhcmd1bWVu
dCAlenUuXG4iLCBhcmd1bWVudCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAg
TWVyZ2luZyBzdGF0ZSBmb3IgYXJndW1lbnQgJXp1LlxuIiwgYXJndW1lbnQpOwogI2VuZGlmCi0g
ICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGJsb2NrLT52YWx1ZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRl
QXRUYWlsKGRlc3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChh
cmd1bWVudCk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRl
c3RpbmF0aW9uLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAg
IE1lcmdpbmcgc3RhdGUgZm9yIGxvY2FsICV6dS5cbiIsIGxvY2FsKTsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHN0YXRlIGZvciBsb2NhbCAlenUuXG4iLCBsb2Nh
bCk7CiAjZW5kaWYKLSAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxv
Y2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlU3RhdGVBdFRhaWwoZGVzdGluYXRpb24sIG1fdmFyaWFibGVzLmxvY2FsKGxvY2FsKSwgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCk7
CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGRlc3RpbmF0aW9u
LCBtX3ZhcmlhYmxlcy5sb2NhbChsb2NhbCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
bG9jYWwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTU0E6IHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0VGFpbC5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IGJsb2NrLT52YWx1ZXNBdFRhaWxbaV0ubWVyZ2UobV92YXJpYWJsZXNb
aV0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3Ig
aXRlciA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuYmVnaW4oKTsKKyAgICAgICAgICAgIEhhc2hT
ZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBibG9jay0+c3NhLT5saXZlQXRUYWlsLmVuZCgpOwor
ICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBibG9jay0+
c3NhLT52YWx1ZXNBdFRhaWwuZmluZChub2RlKS0+dmFsdWUubWVyZ2UoZm9yTm9kZShub2RlKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMjkyLDYgKzM0NiwxOCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIGZvck5vZGUobm9k
ZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIEdldEFyZ3VtZW50OiB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1f
Zm9ybSA9PSBTU0EpOworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
bV92YXJpYWJsZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgIEFTU0VSVCh2
YWx1ZS5pc1RvcCgpKTsKKyAgICAgICAgRmlsdHJhdGlvblJlc3VsdCByZXN1bHQgPQorICAgICAg
ICAgICAgdmFsdWUuZmlsdGVyKHR5cGVGaWx0ZXJGb3IodXNlS2luZEZvcih2YXJpYWJsZS0+Zmx1
c2hGb3JtYXQoKSkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSBG
aWx0cmF0aW9uT0spOworICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7CisgICAgICAgIGJy
ZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKQEAgLTMyMywxMyArMzg5LDEzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBj
YXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKICAgICAgICAgLy8gRG9u
J3QgbmVlZCB0byBkbyBhbnl0aGluZy4gQSBNb3ZIaW50IGlzIGVmZmVjdGl2ZWx5IGEgcHJvbWlz
ZSB0aGF0IHRoZSBTZXRMb2NhbAogICAgICAgICAvLyB3YXMgZGVhZC4KICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50
OiB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTU4Niw2ICsxNjUyLDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVj
dHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgLy8g
VGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLgor
ICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBVcHNpbG9uOiB7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGZv
ck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgZm9yTm9kZShub2RlLT5waGkoKSkgPSB2YWx1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEZsdXNoOgogICAg
IGNhc2UgUGhhbnRvbUxvY2FsOgogICAgIGNhc2UgQnJlYWtwb2ludDoKQEAgLTE2NzgsNyArMTc1
NSw3IEBAIGlubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJTdHJ1Y3QKICAgICBtX2Rp
ZENsb2JiZXIgPSB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0
YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZh
cmlhYmxlLCBOb2RlKiBub2RlKQorYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWls
KEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBO
b2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTc2NiwyMSArMTg0Myw0NCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRl
QXRUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1l
cmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQorYm9vbCBBYnN0cmFjdFN0YXRl
OjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKIHsKICAgICBBU1NFUlQo
ZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCkgPT0gdG8tPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVz
QXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpKTsKICAgICAKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAKLSAgICBmb3Ig
KHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJv
bS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5h
cmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkpOworICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKKyAgICBjYXNlIFRocmVhZGVkQ1BT
OiB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJpYWJsZUJldHdl
ZW5CbG9ja3MoZGVzdGluYXRpb24sIGZyb20tPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCksIHRvLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpLCBmcm9tLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20tPnZhcmlhYmxlc0F0VGFpbC5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBk
ZXN0aW5hdGlvbiA9IHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9jYWwpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhkZXN0aW5hdGlvbiwgZnJvbS0+
dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2Nh
bCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICAKLSAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2Fs
IDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKLSAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSB0by0+dmFsdWVzQXRIZWFkLmxvY2Fs
KGxvY2FsKTsKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyhk
ZXN0aW5hdGlvbiwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkp
OworICAgICAgICAKKyAgICBjYXNlIFNTQTogeworICAgICAgICBmb3IgKHNpemVfdCBpID0gZnJv
bS0+dmFsdWVzQXRUYWlsLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gdG8t
PnZhbHVlc0F0SGVhZFtpXS5tZXJnZShmcm9tLT52YWx1ZXNBdFRhaWxbaV0pOworICAgICAgICAK
KyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSB0by0+c3NhLT5saXZlQXRI
ZWFkLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSB0by0+
c3NhLT5saXZlQXRIZWFkLmVuZCgpOworICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRl
cikgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSB0by0+c3NhLT52YWx1ZXNBdEhlYWQuZmluZChub2RlKS0+dmFsdWUubWVyZ2UoCisgICAg
ICAgICAgICAgICAgZnJvbS0+c3NhLT52YWx1ZXNBdFRhaWwuZmluZChub2RlKS0+dmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgaWYgKCF0by0+Y2ZhSGFzVmlzaXRlZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsIHRoaXMgYmVmb3JlIGJl
Z2lubmluZyBDRkEgdG8gaW5pdGlhbGl6ZSB0aGUgYWJzdHJhY3QgdmFsdWVzIG9mCiAgICAgLy8g
YXJndW1lbnRzLCBhbmQgdG8gaW5kaWNhdGUgd2hpY2ggYmxvY2tzIHNob3VsZCBiZSBsaXN0ZWQg
Zm9yIENGQQogICAgIC8vIGV4ZWN1dGlvbi4KLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKEdy
YXBoJik7CisgICAgdm9pZCBpbml0aWFsaXplKCk7CiAKICAgICAvLyBTdGFydCBhYnN0cmFjdGx5
IGV4ZWN1dGluZyB0aGUgZ2l2ZW4gYmFzaWMgYmxvY2suIEluaXRpYWxpemVzIHRoZQogICAgIC8v
IG5vdGlvbiBvZiBhYnN0cmFjdCBzdGF0ZSB0byB3aGF0IHdlIGJlbGlldmUgaXQgdG8gYmUgYXQg
dGhlIGhlYWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5
TGlzdC5oCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FkamFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksMTUgQEAgcHVibGlj
OgogICAgIAogICAgIEVkZ2UgY2hpbGQxVW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV93b3Jk
c1swXTsgfQogICAgIAorICAgIEVkZ2UganVzdE9uZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICghIWNoaWxkMSgpICYmICFjaGlsZDIoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFj
aGlsZDMoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGQxKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEVkZ2UoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXplKEVkZ2Ug
Y2hpbGQxLCBFZGdlIGNoaWxkMiwgRWRnZSBjaGlsZDMpCiAgICAgewogICAgICAgICBjaGlsZCgw
KSA9IGNoaWxkMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQg
bnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCisgICAgOiBieXRlY29kZUJlZ2luKGJ5
dGVjb2RlQmVnaW4pCisgICAgLCBpbmRleChOb0Jsb2NrKQorICAgICwgaXNPU1JUYXJnZXQoZmFs
c2UpCisgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQorICAgICwgY2ZhU2hvdWxkUmV2aXNpdChm
YWxzZSkKKyAgICAsIGNmYUZvdW5kQ29uc3RhbnRzKGZhbHNlKQorICAgICwgY2ZhRGlkRmluaXNo
KHRydWUpCisgICAgLCBjZmFCcmFuY2hEaXJlY3Rpb24oSW52YWxpZEJyYW5jaERpcmVjdGlvbikK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgLCBpc0xpbmtlZChmYWxzZSkKKyNlbmRpZgorICAg
ICwgaXNSZWFjaGFibGUoZmFsc2UpCisgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRz
LCBudW1Mb2NhbHMpCisgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMpCisgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgLCB2
YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCit7Cit9CisKK0Jhc2ljQmxvY2s6
On5CYXNpY0Jsb2NrKCkgeyB9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2ln
bmVkIG5ld051bUxvY2FscykKK3sKKyAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5l
d051bUxvY2Fscyk7CisgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2Nh
bHMpOworICAgIHZhbHVlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB2
YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Cit9CisKK2Jvb2wgQmFzaWNC
bG9jazo6aXNJblBoaXMoTm9kZSogbm9kZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHBoaXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHBoaXNbaV0gPT0gbm9kZSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgQmFzaWNCbG9jazo6aXNJbkJsb2NrKE5vZGUqIG15Tm9kZSkgY29uc3QKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU5vZGVzKCk7ICsraSkgeworICAgICAgICBpZiAobm9k
ZShpKSA9PSBteU5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2lj
QmxvY2sqIGJsb2NrKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3Nv
cnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSAhPSBibG9jaykK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwcmVkZWNlc3NvcnNbaV0gPSBwcmVkZWNl
c3NvcnMubGFzdCgpOworICAgICAgICBwcmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJh
c2ljQmxvY2sqIHRvKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IHByZWRlY2Vzc29ycy5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSAhPSBmcm9tKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIHByZWRlY2Vzc29yc1tpXSA9IHRvOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgiIyIsIGluZGV4KTsKK30KKworQmFzaWNCbG9jazo6U1NBRGF0YTo6U1NBRGF0YShCYXNp
Y0Jsb2NrKiBibG9jaykKKyAgICA6IGZsdXNoRm9ybWF0QXRIZWFkKE9wZXJhbmRzTGlrZSwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAsIGZsdXNoRm9ybWF0QXRUYWlsKE9wZXJhbmRzTGlr
ZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAsIGF2YWlsYWJpbGl0eUF0SGVhZChPcGVy
YW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpCisgICAgLCBhdmFpbGFiaWxpdHlBdFRh
aWwoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKQoreworfQorCitCYXNpY0Js
b2NrOjpTU0FEYXRhOjp+U1NBRGF0YSgpIHsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw4IEBACiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhZGljRnVuY3Rp
b24uaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00NCw0MiArNDYsMTYgQEAgY2xhc3MgSW5zZXJ0aW9uU2V0
OwogdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKIAogc3Ry
dWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKLSAgICBCYXNpY0Jsb2Nr
KHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQg
bnVtTG9jYWxzKQotICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKLSAgICAg
ICAgLCBpbmRleChOb0Jsb2NrKQotICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICAg
ICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2UpCi0gICAgICAgICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxz
ZSkKLSAgICAgICAgLCBjZmFGb3VuZENvbnN0YW50cyhmYWxzZSkKLSAgICAgICAgLCBjZmFEaWRG
aW5pc2godHJ1ZSkKLSAgICAgICAgLCBjZmFCcmFuY2hEaXJlY3Rpb24oSW52YWxpZEJyYW5jaERp
cmVjdGlvbikKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICwgaXNMaW5rZWQoZmFsc2Up
Ci0jZW5kaWYKLSAgICAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKLSAgICAgICAgLCB2YXJpYWJs
ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCi0gICAgICAgICwgdmFyaWFibGVzQXRU
YWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQotICAgICAgICAsIHZhbHVlc0F0SGVhZChudW1B
cmd1bWVudHMsIG51bUxvY2FscykKLSAgICAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRz
LCBudW1Mb2NhbHMpCi0gICAgewotICAgIH0KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVj
b2RlQmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKTsKKyAg
ICB+QmFzaWNCbG9jaygpOwogICAgIAotICAgIH5CYXNpY0Jsb2NrKCkKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKLSAgICB7
Ci0gICAgICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAg
ICAgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAgICAg
ICB2YWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgICAgIHZhbHVl
c0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICB9CisgICAgdm9pZCBlbnN1
cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gIXNpemUoKTsgfQogICAgIE5vZGUqJiBhdChzaXplX3QgaSkgeyByZXR1cm4g
bV9ub2Rlc1tpXTsgfQogICAgIE5vZGUqIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX25v
ZGVzW2ldOyB9CisgICAgTm9kZSomIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIGF0KGkp
OyB9CiAgICAgTm9kZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7
IH0KICAgICBOb2RlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KICAg
ICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkgeyBtX25vZGVzLnJlc2l6ZShzaXplKTsgfQpAQCAt
OTYsNDQgKzcyLDM0IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MK
ICAgICB9CiAgICAgYm9vbCBpc1BoaUluZGV4KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBpIDwg
cGhpcy5zaXplKCk7IH0KICAgICAKLSAgICBib29sIGlzSW5QaGlzKE5vZGUqIG5vZGUpIGNvbnN0
Ci0gICAgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBoaXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIGlmIChwaGlzW2ldID09IG5vZGUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAK
LSAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0Ci0gICAgewotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU5vZGVzKCk7ICsraSkgewotICAgICAgICAgICAgaWYg
KG5vZGUoaSkgPT0gbXlOb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgYm9vbCBpc0luUGhpcyhOb2Rl
KiBub2RlKSBjb25zdDsKKyAgICBib29sIGlzSW5CbG9jayhOb2RlKiBteU5vZGUpIGNvbnN0Owog
ICAgIAogICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1
Y2Nlc3NvcnMoKTsgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBp
bmRleCkKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGxhc3QoKS0+c3VjY2Vzc29yKGluZGV4KTsKICAgICB9Ci0gICAgQmFz
aWNCbG9jayogc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJvb2wgY29uZGl0aW9uKQorICAgIEJhc2lj
QmxvY2sqJiBzdWNjZXNzb3JGb3JDb25kaXRpb24oYm9vbCBjb25kaXRpb24pCiAgICAgewogICAg
ICAgICByZXR1cm4gbGFzdCgpLT5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKICAg
ICB9CisgICAgCisgICAgdm9pZCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jayk7
CisgICAgdm9pZCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9j
ayogdG8pOwogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRl
bXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZh
bHVlQXJncykgXAogICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUq
IGFwcGVuZE5vZGUoR3JhcGgmLCBTcGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVl
UGFyYW1zKTsKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9B
UFBFTkRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCi0gICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJpbnQo
IiMiLCBpbmRleCk7Ci0gICAgfQorI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBs
YXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVl
UGFyYW1zLCB2YWx1ZUFyZ3MpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRl
UG9zdCBOb2RlKiBhcHBlbmROb25UZXJtaW5hbChHcmFwaCYsIFNwZWN1bGF0ZWRUeXBlIHZhbHVl
UGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOworICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5D
VElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05P
REUKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiAg
ICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkgZm9yIGJsb2NrIGxpbmtpbmcgYW5k
IE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5IG1lYW5pbmdsZXNzCiAgICAgLy8gZm9yIG90aGVyIHB1
cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4KQEAgLTE2MCw2ICsxMjYsMjEgQEAgc3RydWN0IEJhc2lj
QmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIAogICAgIE9wZXJhbmRzPEFic3RyYWN0
VmFsdWU+IHZhbHVlc0F0SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNB
dFRhaWw7CisgICAgCisgICAgc3RydWN0IFNTQURhdGEgeworICAgICAgICBPcGVyYW5kczxGbHVz
aEZvcm1hdD4gZmx1c2hGb3JtYXRBdEhlYWQ7CisgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0
PiBmbHVzaEZvcm1hdEF0VGFpbDsKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0
eUF0SGVhZDsKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IGF2YWlsYWJpbGl0eUF0VGFpbDsKKyAg
ICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKKyAgICAgICAgSGFzaFNldDxOb2RlKj4g
bGl2ZUF0VGFpbDsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4gdmFsdWVz
QXRIZWFkOworICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdFRh
aWw7CisgICAgICAgIAorICAgICAgICBTU0FEYXRhKEJhc2ljQmxvY2sqKTsKKyAgICAgICAgflNT
QURhdGEoKTsKKyAgICB9OworICAgIE93blB0cjxTU0FEYXRhPiBzc2E7CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE1MjU4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNiArNDMsMTcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9O
T0RFKQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKIAorI2RlZmluZSBERkdfREVGSU5F
X0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVl
UGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKKyAgICB0ZW1wbGF0ZVByZSB0
eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9u
VGVybWluYWwoR3JhcGgmIGdyYXBoLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29t
bWEgdmFsdWVQYXJhbXMpIFwKKyAgICB7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGgu
YWRkTm9kZSh0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAorICAgICAgICBhcHBl
bmQobGFzdCgpKTsgXAorICAgICAgICBhdChzaXplKCkgLSAyKSA9IHJlc3VsdDsgXAorICAgICAg
ICByZXR1cm4gcmVzdWx0OyBcCisgICAgfQorICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5D
VElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQorI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05P
REUKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmxvY2tJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmxvY2tJ
bnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uU2V0KEdyYXBoJiBncmFwaCkKKyAgICA6IG1fZ3Jh
cGgoZ3JhcGgpCit7Cit9CisKK0Jsb2NrSW5zZXJ0aW9uU2V0Ojp+QmxvY2tJbnNlcnRpb25TZXQo
KSB7IH0KKwordm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KGNvbnN0IEJsb2NrSW5zZXJ0
aW9uJiBpbnNlcnRpb24pCit7CisgICAgbV9pbnNlcnRpb25zLmFwcGVuZChpbnNlcnRpb24pOwor
fQorCit2b2lkIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBQYXNzUmVm
UHRyPEJhc2ljQmxvY2s+IGJsb2NrKQoreworICAgIGluc2VydChCbG9ja0luc2VydGlvbihpbmRl
eCwgYmxvY2spKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omluc2VydChz
aXplX3QgaW5kZXgpCit7CisgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYo
bmV3IEJhc2ljQmxvY2soCisgICAgICAgIFVJTlRfTUFYLAorICAgICAgICBtX2dyYXBoLmJsb2Nr
KDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgbV9ncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICBibG9j
ay0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgIGluc2VydChpbmRleCwgYmxvY2spOworICAgIHJl
dHVybiBibG9jay5nZXQoKTsKK30KKworQmFzaWNCbG9jayogQmxvY2tJbnNlcnRpb25TZXQ6Omlu
c2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpCit7CisgICAgcmV0dXJuIGluc2VydChiZWZv
cmUtPmluZGV4KTsKK30KKworYm9vbCBCbG9ja0luc2VydGlvblNldDo6ZXhlY3V0ZSgpCit7Cisg
ICAgaWYgKG1faW5zZXJ0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICAvLyBXZSBhbGxvdyBpbnNlcnRpb25zIHRvIGJlIGdpdmVuIHRvIHVzIGluIGFueSBv
cmRlci4gU28sIHdlIG5lZWQgdG8KKyAgICAvLyBzb3J0IHRoZW0gYmVmb3JlIHJ1bm5pbmcgV1RG
OjpleGVjdXRlSW5zZXJ0aW9ucy4KKyAgICBzdGQ6OnNvcnQobV9pbnNlcnRpb25zLmJlZ2luKCks
IG1faW5zZXJ0aW9ucy5lbmQoKSk7CisKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhtX2dyYXBoLm1f
YmxvY2tzLCBtX2luc2VydGlvbnMpOworICAgIAorICAgIC8vIFBydW5lIG91dCBlbXB0eSBlbnRy
aWVzLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgaXQncworICAgIC8vIGhlYWx0
aHkgdG8ga2VlcCB0aGUgYmxvY2sgbGlzdCBmcm9tIGdyb3dpbmcuCisgICAgdW5zaWduZWQgdGFy
Z2V0SW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgc291cmNlSW5kZXggPSAwOyBzb3VyY2VJ
bmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOykgeworICAgICAgICBSZWZQdHI8QmFzaWNC
bG9jaz4gYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3NvdXJjZUluZGV4KytdOworICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fZ3JhcGgubV9ibG9j
a3NbdGFyZ2V0SW5kZXgrK10gPSBibG9jazsKKyAgICB9CisgICAgbV9ncmFwaC5tX2Jsb2Nrcy5y
ZXNpemUodGFyZ2V0SW5kZXgpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBibG9j
a3Mga25vdyB0aGVpciBuZXcgaW5kaWNlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tp
XS0+aW5kZXggPSBpOworICAgIAorICAgIC8vIEFuZCBmaW5hbGx5LCBpbnZhbGlkYXRlIGFsbCBh
bmFseXNlcyB0aGF0IHJlbHkgb24gdGhlIENGRy4KKyAgICBtX2dyYXBoLmludmFsaWRhdGVDRkco
KTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrSW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgREZH
QmxvY2tJbnNlcnRpb25TZXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSA8d3RmL0lu
c2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPFJlZlB0cjxCYXNpY0Jsb2Nr
PiA+IEJsb2NrSW5zZXJ0aW9uOworCitjbGFzcyBCbG9ja0luc2VydGlvblNldCB7CitwdWJsaWM6
CisgICAgQmxvY2tJbnNlcnRpb25TZXQoR3JhcGgmIGdyYXBoKTsKKyAgICB+QmxvY2tJbnNlcnRp
b25TZXQoKTsKKyAgICAKKyAgICB2b2lkIGluc2VydChjb25zdCBCbG9ja0luc2VydGlvbiYgaW5z
ZXJ0aW9uKTsKKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QmFzaWNC
bG9jaz4gYmxvY2spOworICAgIEJhc2ljQmxvY2sqIGluc2VydChzaXplX3QgaW5kZXgpOworICAg
IEJhc2ljQmxvY2sqIGluc2VydEJlZm9yZShCYXNpY0Jsb2NrKiBiZWZvcmUpOworICAgIAorICAg
IGJvb2wgZXhlY3V0ZSgpOworCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIFZl
Y3RvcjxCbG9ja0luc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdCbG9ja0luc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3Jt
ID09IFRocmVhZGVkQ1BTIHx8IG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CiAgICAgICAgIEFTU0VS
VChtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBHbG9iYWxseVVuaWZpZWQpOwogICAgICAg
ICBBU1NFUlQobV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXZlcnl0aGluZ0lzTGl2ZSk7CiAg
ICAgICAgIApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGFmdGVyIGFsbCBw
cmVkZWNlc3NvcnMgaGF2ZSBiZWVuIHZpc2l0ZWQuIE9ubHkgbG9vcHMgd2lsbCBjYXVzZSB0aGlz
IGFuYWx5c2lzIHRvCiAgICAgICAgIC8vIHJldmlzaXQgYmxvY2tzLCBhbmQgdGhlIGFtb3VudCBv
ZiByZXZpc2l0aW5nIGlzIHByb3BvcnRpb25hbCB0byBsb29wIGRlcHRoLgogICAgICAgICAKLSAg
ICAgICAgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShtX2dyYXBoKTsKKyAgICAgICAgbV9zdGF0
ZS5pbml0aWFsaXplKCk7CiAgICAgICAgIAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBtX2No
YW5nZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYxLDE1ICszNjEsOSBAQCBwcml2YXRlOgogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygKICAgICAgICAg
ICAgICJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlzIGR1ZSB0byBqZXR0aXNvbiBvZiBCbG9j
ayAiLCAqamV0dGlzb25lZEJsb2NrLAotICAgICAgICAgICAgIiBmcm9tIEJsb2NrICIsICpibG9j
aywgIi5cbiIsCisgICAgICAgICAgICAiIGZyb20gQmxvY2sgIiwgKmJsb2NrLCAiLlxuIik7CiAj
ZW5kaWYKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+
cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoamV0dGlzb25lZEJs
b2NrLT5wcmVkZWNlc3NvcnNbaV0gIT0gYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29yc1tpXSA9IGpldHRpc29u
ZWRCbG9jay0+cHJlZGVjZXNzb3JzLmxhc3QoKTsKLSAgICAgICAgICAgIGpldHRpc29uZWRCbG9j
ay0+cHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9CisgICAgICAgIGpldHRpc29uZWRCbG9jay0+cmVtb3ZlUHJlZGVjZXNzb3IoYmxvY2spOwog
ICAgIH0KIAogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4gbm9CbG9ja3MoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQ
U1JldGhyZWFkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsMTIgKzMyNywxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQgbWF5IG9ubHkgYXBwZWFyIGlu
IHRoZSByb290IGJsb2NrLgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8vIFRhaWwgdmFy
aWFibGU6IHRoZSBsYXN0IHRoaW5nIHRoYXQgaGFwcGVuZWQgdG8gdGhlIHZhcmlhYmxlIGluIHRo
ZSBibG9jay4KLSAgICAgICAgICAgIC8vIEl0IG1heSBiZSBhIEZsdXNoLCBQaGFudG9tTG9jYWws
IEdldExvY2FsLCBTZXRMb2NhbCwgb3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLyBJdCBt
YXkgYmUgYSBGbHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwgU2V0TG9jYWwsIFNldEFyZ3Vt
ZW50LCBvciBQaGkuCiAgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCBtYXkgb25seSBhcHBlYXIg
aW4gdGhlIHJvb3QgYmxvY2suIE5vdGUgdGhhdCBpZiB0aGVyZSBldmVyCiAgICAgICAgICAgICAv
LyB3YXMgYSBHZXRMb2NhbCB0byB0aGUgdmFyaWFibGUsIGFuZCBpdCB3YXMgZm9sbG93ZWQgYnkg
UGhhbnRvbUxvY2FscyBhbmQKICAgICAgICAgICAgIC8vIEZsdXNoZXMgYnV0IG5vdCBTZXRMb2Nh
bHMsIHRoZW4gdGhlIHRhaWwgdmFyaWFibGUgd2lsbCBiZSB0aGUgR2V0TG9jYWwuCiAgICAgICAg
ICAgICAvLyBUaGlzIHJlZmxlY3RzIHRoZSBmYWN0IHRoYXQgeW91IG9ubHkgY2FyZSB0aGF0IHRo
ZSB0YWlsIHZhcmlhYmxlIGlzIGEKLSAgICAgICAgICAgIC8vIEZsdXNoIG9yIFBoYW50b21Mb2Nh
bCBpZiBub3RoaW5nIGVsc2UgaW50ZXJlc3RpbmcgaGFwcGVuZWQuCisgICAgICAgICAgICAvLyBG
bHVzaCBvciBQaGFudG9tTG9jYWwgaWYgbm90aGluZyBlbHNlIGludGVyZXN0aW5nIGhhcHBlbmVk
LiBMaWtld2lzZSwgaWYKKyAgICAgICAgICAgIC8vIHRoZXJlIGV2ZXIgd2FzIGEgU2V0TG9jYWwg
YW5kIGl0IHdhcyBmb2xsb3dlZCBieSBGbHVzaGVzLCB0aGVuIHRoZSB0YWlsCisgICAgICAgICAg
ICAvLyB2YXJpYWJsZSB3aWxsIGJlIGEgU2V0TG9jYWwgYW5kIG5vdCB0aG9zZSBzdWJzZXF1ZW50
IEZsdXNoZXMuCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gQ2hpbGQgb2YgR2V0TG9j
YWw6IHRoZSBvcGVyYXRpb24gdGhhdCB0aGUgR2V0TG9jYWwga2VlcHMgYWxpdmUuIEZvcgogICAg
ICAgICAgICAgLy8gdW5jYXB0dXJlZCBsb2NhbHMsIGl0IG1heSBiZSBhIFBoaSBmcm9tIHRoZSBj
dXJyZW50IGJsb2NrLiBGb3IgYXJndW1lbnRzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNyArNDgsMTUgQEAg
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wdAogICAgIHN3aXRjaCAoc3Rh
dGUpIHsKICAgICBjYXNlIEJlZm9yZUZpeHBvaW50OgogICAgICAgICBvdXQucHJpbnQoIkJlZm9y
ZUZpeHBvaW50Iik7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBG
aXhwb2ludE5vdENvbnZlcmdlZDoKICAgICAgICAgb3V0LnByaW50KCJGaXhwb2ludE5vdENvbnZl
cmdlZCIpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRml4cG9p
bnRDb252ZXJnZWQ6CiAgICAgICAgIG91dC5wcmludCgiRml4cG9pbnRDb252ZXJnZWQiKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEdyYXBoRm9ybSBmb3JtKQpAQCAtNjYsMTQgKzY0LDE1IEBAIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBHcmEKICAgICBzd2l0Y2ggKGZvcm0pIHsKICAg
ICBjYXNlIExvYWRTdG9yZToKICAgICAgICAgb3V0LnByaW50KCJMb2FkU3RvcmUiKTsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFRocmVhZGVkQ1BTOgogICAgICAg
ICBvdXQucHJpbnQoIlRocmVhZGVkQ1BTIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTU0E6CisgICAgICAgIG91dC5wcmludCgiU1NBIik7
CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVuaWZpY2F0aW9u
U3RhdGUgc3RhdGUpCkBAIC04MSwxNCArODAsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIFVuaQogICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICBjYXNlIExvY2FsbHlV
bmlmaWVkOgogICAgICAgICBvdXQucHJpbnQoIkxvY2FsbHlVbmlmaWVkIik7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBHbG9iYWxseVVuaWZpZWQ6CiAgICAgICAg
IG91dC5wcmludCgiR2xvYmFsbHlVbmlmaWVkIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBSZWZDb3VudFN0
YXRlIHN0YXRlKQpAQCAtOTYsMTQgKzkzLDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBSZWYKICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2FzZSBFdmVyeXRoaW5n
SXNMaXZlOgogICAgICAgICBvdXQucHJpbnQoIkV2ZXJ5dGhpbmdJc0xpdmUiKTsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4YWN0UmVmQ291bnQ6CiAgICAgICAg
IG91dC5wcmludCgiRXhhY3RSZWZDb3VudCIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUHJvb2ZTdGF0dXMg
c3RhdHVzKQpAQCAtMTExLDE0ICsxMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFBybwogICAgIHN3aXRjaCAoc3RhdHVzKSB7CiAgICAgY2FzZSBJc1Byb3ZlZDoK
ICAgICAgICAgb3V0LnByaW50KCJJc1Byb3ZlZCIpOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgTmVlZHNDaGVjazoKICAgICAgICAgb3V0LnByaW50KCJOZWVkc0No
ZWNrIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAx
NTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTIsNyArMjEyLDEwIEBAIGVudW0gR3JhcGhGb3JtIHsKICAgICAvLwogICAg
IC8vIFRocmVhZGVkQ1BTIGZvcm0gaXMgc3VpdGFibGUgZm9yIGRhdGEgZmxvdyBhbmFseXNpcyAo
Q0ZBLCBwcmVkaWN0aW9uCiAgICAgLy8gcHJvcGFnYXRpb24pLCByZWdpc3RlciBhbGxvY2F0aW9u
LCBhbmQgY29kZSBnZW5lcmF0aW9uLgotICAgIFRocmVhZGVkQ1BTCisgICAgVGhyZWFkZWRDUFMs
CisgICAgCisgICAgLy8gU1NBIGZvcm0uIFNlZSBERkdTU0FDb252ZXJzaW9uUGhhc2UuaCBmb3Ig
YSBkZXNjcmlwdGlvbi4KKyAgICBTU0EKIH07CiAKIC8vIERlc2NyaWJlcyB0aGUgc3RhdGUgb2Yg
dGhlIFVuaW9uRmluZCBzdHJ1Y3R1cmUgb2YgVmFyaWFibGVBY2Nlc3NEYXRhJ3MuCkBAIC0yNTAs
NiArMjUzLDE5IEBAIGlubGluZSBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1c0ZvcklzUHJvdmUKICAg
ICByZXR1cm4gaXNQcm92ZWQgPyBJc1Byb3ZlZCA6IE5lZWRzQ2hlY2s7CiB9CiAKK2VudW0gS2ls
bFN0YXR1cyB7IERvZXNOb3RLaWxsLCBEb2VzS2lsbCB9OworCitpbmxpbmUgYm9vbCBkb2VzS2ls
bChLaWxsU3RhdHVzIGtpbGxTdGF0dXMpCit7CisgICAgQVNTRVJUKGtpbGxTdGF0dXMgPT0gRG9l
c05vdEtpbGwgfHwga2lsbFN0YXR1cyA9PSBEb2VzS2lsbCk7CisgICAgcmV0dXJuIGtpbGxTdGF0
dXMgPT0gRG9lc0tpbGw7Cit9CisKK2lubGluZSBLaWxsU3RhdHVzIGtpbGxTdGF0dXNGb3JEb2Vz
S2lsbChib29sIGRvZXNLaWxsKQoreworICAgIHJldHVybiBkb2VzS2lsbCA/IERvZXNLaWxsIDog
RG9lc05vdEtpbGw7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiBib29s
IGNoZWNrQW5kU2V0KFQmIGxlZnQsIFUgcmlnaHQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNp
b24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MCw3ICszNzAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5oYXNW
YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5oYXNW
YXJpYWJsZUFjY2Vzc0RhdGEobV9ncmFwaCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVlKTsKICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCkBAIC0zODksNyArMzg5LDcgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIGZvciAoOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5C
bG9jaykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2sp
OwotICAgICAgICAgICAgaWYgKCFub2RlLT5oYXNMb2NhbCgpKQorICAgICAgICAgICAgaWYgKCFu
b2RlLT5oYXNMb2NhbChtX2dyYXBoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGlmIChub2RlLT5sb2NhbCgpICE9IG9wZXJhbmQpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNl
cnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgi
CisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJjcml0aWNhbCBl
ZGdlIGJyZWFraW5nIikKKyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxv
Y2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQW4gZWRnZSBBLT5CIGlzIGNy
aXRpY2FsIGlmIEEgaGFzIG11bHRpcGxlIHN1Y2Nlc3NvciBhbmQgQiBoYXMgbXVsdGlwbGUKKyAg
ICAgICAgICAgIC8vIHByZWRlY2Vzc29ycy4gVGh1cyB3ZSBmYWlsIGVhcmx5IGlmIHdlIGRvbid0
IGhhdmUgbXVsdGlwbGUgc3VjY2Vzc29ycy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KGJsb2NrLT5udW1TdWNjZXNzb3JzKCkgPD0gMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1
Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqKiBzdWNjZXNz
b3IgPSAmYmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgICAgICBpZiAoKCpzdWNjZXNz
b3IpLT5wcmVkZWNlc3NvcnMuc2l6ZSgpIDw9IDEpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJyZWFrQ3JpdGljYWxFZGdl
KGJsb2NrLCBzdWNjZXNzb3IpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdm9pZCBicmVha0NyaXRpY2FsRWRnZShCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvciwg
QmFzaWNCbG9jayoqIHN1Y2Nlc3NvcikKKyAgICB7CisgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQo
KTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHBhZCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydEJlZm9yZSgqc3VjY2Vzc29yKTsKKyAgICAgICAgcGFkLT5hcHBlbmROb2RlKAorICAgICAg
ICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsICgqc3VjY2Vzc29yKS0+YXQoMCktPmNvZGVP
cmlnaW4sIE9wSW5mbygqc3VjY2Vzc29yKSk7CisgICAgICAgIHBhZC0+cHJlZGVjZXNzb3JzLmFw
cGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgICgqc3VjY2Vzc29yKS0+cmVwbGFjZVByZWRlY2Vz
c29yKHByZWRlY2Vzc29yLCBwYWQpOworICAgICAgICAKKyAgICAgICAgKnN1Y2Nlc3NvciA9IHBh
ZDsKKyAgICB9CisgICAgCisgICAgQmxvY2tJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cit9
OworCitib29sIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhHcmFwaCYgZ3JhcGgpCit7Cisg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDcml0aWNhbCBFZGdlIEJyZWFr
aW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPENyaXRpY2FsRWRnZUJyZWFraW5nUGhh
c2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQ
aGFzZV9oCisjZGVmaW5lIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2VfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gSW5zZXJ0cyBkdW1teSBi
YXNpYyBibG9ja3MgdG8gYnJlYWsgY3JpdGljYWwgZWRnZXMuIEFuIGVkZ2UgQS0+QiBpcworLy8g
Y3JpdGljYWwgaWYgQSBoYXMgbXVsdGlwbGUgc3VjY2Vzc29ycyBhbmQgQiBoYXMgbXVsdGlwbGUg
cHJlZGVzc29ycy4KKworYm9vbCBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoR3JhcGgmKTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDE1MjU4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAg
eworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMgfHwgbV9ncmFw
aC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCiAgICAgICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBj
b3VudHMgdG8gMCBmb3IgYWxsIG5vZGVzLgogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
IHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKQEAgLTc1LDEwICs3NywzMSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKLSAgICAgICAgICAgIG1fd29ya2xpc3QucmVtb3Zl
TGFzdCgpOwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJ
dCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCi0gICAg
ICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBjb3VudEVkZ2Up
OworICAgICAgICAgICAgd2hpbGUgKCFtX3dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgICAgICAgICBt
X3dvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSk7IC8vIEl0IHNob3VsZCBub3QgYmUgb24gdGhlIHdvcmtsaXN0IHVubGVz
cyBpdCdzIHJlZidlZC4KKyAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTiht
X2dyYXBoLCBub2RlLCBjb3VudEVkZ2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgICAgICAgICAg
Ly8gRmluZCBQaGktPlVwc2lsb24gZWRnZXMsIHdoaWNoIGFyZSByZXByZXNlbnRlZCBhcyBtZXRh
LWRhdGEgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8gVXBzaWxvbi4KKyAgICAgICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBVcHNpbG9uKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+cGhpKCktPnNo
b3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnROb2RlKG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
IHsKQEAgLTk0LDggKzExNywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLmlzUHJvdmVkKCkgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IFVudHlwZWRVc2UpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAg
ICAgICAgICAgICAgIGNhc2UgTW92SGludDogeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpID09IChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQ
UykpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkud2lsbE5vdEhhdmVD
aGVjaygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2li
aWxpdHkgdGhhdCBVSW50MzJUb051bWJlciBpcyBkZWFkIGJ1dCBpdHMKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGNoaWxkIGlzbid0OyBpZiBzbyB0aGVuIHdlIHNob3VsZCBNb3ZIaW50IHRo
ZSBjaGlsZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNo
b3VsZEdlbmVyYXRlKCkKQEAgLTExNyw4ICsxNDIsMTAgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAg
IGNhc2UgU2V0QXJndW1lbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTGVhdmUgdGhlbSBh
cyBub3Qgc2hvdWxkR2VuZXJhdGUuCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7CkBAIC0xMjYsNyAr
MTUzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
aGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxk
KCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSB8fCBlZGdlLmlzUHJv
dmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWVkZ2UgfHwgZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
UGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgZWRnZSk7CkBAIC0xNTgsMjEgKzE4NSwyNSBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgYW4gInVucHJvdmVkIiB1bnR5
cGVkIHVzZSBmb3IgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlLiBUaGUgQ0ZBCiAgICAgICAgIC8v
IHdpbGwganVzdCBub3QgaGF2ZSBnb3R0ZW4gYXJvdW5kIHRvIGl0LgotICAgICAgICBpZiAoZWRn
ZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgIGlm
IChlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
aWYgKCFlZGdlLT5wb3N0Zml4UmVmKCkpCiAgICAgICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChl
ZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY291bnROb2RlKE5vZGUqIG5vZGUp
CisgICAgeworICAgICAgICBpZiAobm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICB9CisgICAgCiAgICAg
dm9pZCBjb3VudEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIC8vIERvbid0
IGNvdW50IGVkZ2VzIHRoYXQgYXJlIGFscmVhZHkgY291bnRlZCBmb3IgdGhlaXIgdHlwZSBjaGVj
a3MuCi0gICAgICAgIGlmICghKGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmIChl
ZGdlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgIGlmIChlZGdlLndpbGxIYXZlQ2hlY2soKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV93b3JrbGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkp
OworICAgICAgICBjb3VudE5vZGUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKQEAgLTE4MSw3
ICsyMTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRy
ZW4uY2hpbGQoaSk7CiAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgp
ID09IFVudHlwZWRVc2UpCisgICAgICAgICAgICBpZiAoZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkp
CiAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0pOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCShyZXZp
c2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBAIHZvaWQgRWRnZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogICAgICAgICAgICAgb3V0LnByaW50KCJDaGVjazoiKTsKICAgICAgICAg
b3V0LnByaW50KHVzZUtpbmQoKSwgIjoiKTsKICAgICB9CisgICAgaWYgKGRvZXNLaWxsKCkpCisg
ICAgICAgIG91dC5wcmludCgiS2lsbDoiKTsKICAgICBvdXQucHJpbnQobm9kZSgpKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDE1MjU4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSwxMiArMzksMTIgQEAgY2xhc3MgQWRqYWNlbmN5TGlzdDsKIAogY2xhc3MgRWRnZSB7CiBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgRWRnZShOb2RlKiBub2RlID0gMCwgVXNlS2luZCB1c2VLaW5kID0g
VW50eXBlZFVzZSwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMgPSBOZWVkc0NoZWNrKQorICAgIGV4
cGxpY2l0IEVkZ2UoTm9kZSogbm9kZSA9IDAsIFVzZUtpbmQgdXNlS2luZCA9IFVudHlwZWRVc2Us
IFByb29mU3RhdHVzIHByb29mU3RhdHVzID0gTmVlZHNDaGVjaywgS2lsbFN0YXR1cyBraWxsU3Rh
dHVzID0gRG9lc05vdEtpbGwpCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgOiBtX2VuY29k
ZWRXb3JkKG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQsIHByb29mU3RhdHVzKSkKKyAgICAgICAgOiBt
X2VuY29kZWRXb3JkKG1ha2VXb3JkKG5vZGUsIHVzZUtpbmQsIHByb29mU3RhdHVzLCBraWxsU3Rh
dHVzKSkKICNlbHNlCiAgICAgICAgIDogbV9ub2RlKG5vZGUpCi0gICAgICAgICwgbV9lbmNvZGVk
V29yZChtYWtlV29yZCh1c2VLaW5kLCBwcm9vZlN0YXR1cykpCisgICAgICAgICwgbV9lbmNvZGVk
V29yZChtYWtlV29yZCh1c2VLaW5kLCBwcm9vZlN0YXR1cywga2lsbFN0YXR1cykpCiAjZW5kaWYK
ICAgICB7CiAgICAgfQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROb2Rl
KE5vZGUqIG5vZGUpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1fZW5jb2Rl
ZFdvcmQgPSBtYWtlV29yZChub2RlLCB1c2VLaW5kKCksIHByb29mU3RhdHVzKCkpOworICAgICAg
ICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cygp
LCBraWxsU3RhdHVzKCkpOwogI2Vsc2UKICAgICAgICAgbV9ub2RlID0gbm9kZTsKICNlbmRpZgpA
QCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgIHVuc2lnbmVkIG1hc2tlZCA9IG1fZW5jb2RlZFdvcmQgJiAoKCgxIDw8IHNoaWZ0KCkpIC0g
MSkpOwotICAgICAgICB1bnNpZ25lZCBzaGlmdGVkID0gbWFza2VkID4+IDE7CisgICAgICAgIHVu
c2lnbmVkIHNoaWZ0ZWQgPSBtYXNrZWQgPj4gMjsKICNlbHNlCiAgICAgICAgIHVuc2lnbmVkIHNo
aWZ0ZWQgPSBzdGF0aWNfY2FzdDxVc2VLaW5kPihtX2VuY29kZWRXb3JkKSA+PiAxOwogI2VuZGlm
CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlKCkp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChu
b2RlKCksIHVzZUtpbmQsIHByb29mU3RhdHVzKCkpOworICAgICAgICBtX2VuY29kZWRXb3JkID0g
bWFrZVdvcmQobm9kZSgpLCB1c2VLaW5kLCBwcm9vZlN0YXR1cygpLCBraWxsU3RhdHVzKCkpOwog
I2Vsc2UKICAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKHVzZUtpbmQsIHByb29mU3Rh
dHVzKCkpOwogI2VuZGlmCkBAIC0xMDgsOSArMTA4LDkgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgQVNTRVJUKG5vZGUoKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgbV9lbmNvZGVk
V29yZCA9IG1ha2VXb3JkKG5vZGUoKSwgdXNlS2luZCgpLCBwcm9vZlN0YXR1cyk7CisgICAgICAg
IG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQoKSwgcHJvb2ZTdGF0dXMs
IGtpbGxTdGF0dXMoKSk7CiAjZWxzZQotICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQo
dXNlS2luZCgpLCBwcm9vZlN0YXR1cyk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29y
ZCh1c2VLaW5kKCksIHByb29mU3RhdHVzLCBraWxsU3RhdHVzKCkpOwogI2VuZGlmCiAgICAgfQog
ICAgIGJvb2wgaXNQcm92ZWQoKSBjb25zdApAQCAtMTIyLDYgKzEyMiwzNiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBwcm9vZlN0YXR1cygpID09IE5lZWRzQ2hlY2s7CiAgICAgfQogICAgIAor
ICAgIGJvb2wgd2lsbE5vdEhhdmVDaGVjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aXNQcm92ZWQoKSB8fCB1c2VLaW5kKCkgPT0gVW50eXBlZFVzZTsKKyAgICB9CisgICAgYm9vbCB3
aWxsSGF2ZUNoZWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhd2lsbE5vdEhhdmVD
aGVjaygpOworICAgIH0KKyAgICAKKyAgICBLaWxsU3RhdHVzIGtpbGxTdGF0dXNVbmNoZWNrZWQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbGxTdGF0dXNGb3JEb2VzS2lsbChtX2Vu
Y29kZWRXb3JkICYgMik7CisgICAgfQorICAgIEtpbGxTdGF0dXMga2lsbFN0YXR1cygpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIGtpbGxTdGF0
dXNVbmNoZWNrZWQoKTsKKyAgICB9CisgICAgdm9pZCBzZXRLaWxsU3RhdHVzKEtpbGxTdGF0dXMg
a2lsbFN0YXR1cykKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlKCkpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlKCksIHVzZUtpbmQo
KSwgcHJvb2ZTdGF0dXMoKSwga2lsbFN0YXR1cyk7CisjZWxzZQorICAgICAgICBtX2VuY29kZWRX
b3JkID0gbWFrZVdvcmQodXNlS2luZCgpLCBwcm9vZlN0YXR1cygpLCBraWxsU3RhdHVzKTsKKyNl
bmRpZgorICAgIH0KKyAgICBib29sIGRvZXNLaWxsKCkgY29uc3QgeyByZXR1cm4gREZHOjpkb2Vz
S2lsbChraWxsU3RhdHVzKCkpOyB9CisgICAgYm9vbCBkb2VzTm90S2lsbCgpIGNvbnN0IHsgcmV0
dXJuICFkb2VzS2lsbCgpOyB9CisgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJu
ICEhbm9kZSgpOyB9CiAgICAgCiAgICAgdHlwZWRlZiB2b2lkKiBFZGdlOjoqVW5zcGVjaWZpZWRC
b29sVHlwZTsKQEAgLTE0OCwyMiArMTc4LDIyIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IEFkamFjZW5jeUxpc3Q7CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdGF0aWMgdWlu
dDMyX3Qgc2hpZnQoKSB7IHJldHVybiA2OyB9CisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkg
eyByZXR1cm4gNzsgfQogICAgIAotICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSog
bm9kZSwgVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKKyAgICBzdGF0
aWMgdWludHB0cl90IG1ha2VXb3JkKE5vZGUqIG5vZGUsIFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZT
dGF0dXMgcHJvb2ZTdGF0dXMsIEtpbGxTdGF0dXMga2lsbFN0YXR1cykKICAgICB7CiAgICAgICAg
IEFTU0VSVChzaXplb2Yobm9kZSkgPT0gOCk7CiAgICAgICAgIHVpbnRwdHJfdCBzaGlmdGVkVmFs
dWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSA8PCBzaGlmdCgpOwogICAgICAgICBB
U1NFUlQoKHNoaWZ0ZWRWYWx1ZSA+PiBzaGlmdCgpKSA9PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pihub2RlKSk7CiAgICAgICAgIEFTU0VSVCh1c2VLaW5kID49IDAgJiYgdXNlS2luZCA8IExhc3RV
c2VLaW5kKTsKLSAgICAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KExhc3RVc2VL
aW5kKSA8PCAxKSA8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBzaGlmdCgpKSk7Ci0g
ICAgICAgIHJldHVybiBzaGlmdGVkVmFsdWUgfCAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih1c2VL
aW5kKSA8PCAxKSB8IERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpOworICAgICAgICBBU1NFUlQo
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTGFzdFVzZUtpbmQpIDw8IDIpIDw9IChzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KDIpIDw8IHNoaWZ0KCkpKTsKKyAgICAgICAgcmV0dXJuIHNoaWZ0ZWRWYWx1
ZSB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tp
bGwoa2lsbFN0YXR1cykgPDwgMSkgfCBERkc6OmlzUHJvdmVkKHByb29mU3RhdHVzKTsKICAgICB9
CiAgICAgCiAjZWxzZQotICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoVXNlS2luZCB1c2VL
aW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cykKKyAgICBzdGF0aWMgdWludHB0cl90IG1ha2VX
b3JkKFVzZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMsIEtpbGxTdGF0dXMg
a2lsbFN0YXR1cykKICAgICB7Ci0gICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dWludHB0cl90
Pih1c2VLaW5kKSA8PCAxKSB8IERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpOworICAgICAgICBy
ZXR1cm4gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpkb2Vz
S2lsbChraWxsU3RhdHVzKSA8PCAxKSB8IERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpOwogICAg
IH0KICAgICAKICAgICBOb2RlKiBtX25vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2
ICsxMTgsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewogICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAg
ICAgICAgICAgICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8SW50MzJVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFn
cyhJZGVudGl0eSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTkwMSw2ICs5MDIsOCBAQCBwcml2YXRlOgogCiAgICAgICAgIGNhc2UgR2V0
QXJyYXlMZW5ndGg6CiAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIFVwc2lsb246Cisg
ICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgRm9yd2FyZEludDMyVG9Eb3Vi
bGU6CiAgICAgICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKICAgICAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbHVzaEZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbHVzaEZvcm1hdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdGbHVzaEZvcm1hdC5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBGbHVzaEZvcm1hdCBmb3JtYXQp
Cit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAg
b3V0LnByaW50KCJEZWFkRmx1c2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hl
ZEludDMyOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRJbnQzMiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRE
b3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAg
IG91dC5wcmludCgiRmx1c2hlZENlbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRmx1
c2hlZEJvb2xlYW46CisgICAgICAgIG91dC5wcmludCgiRmx1c2hlZEJvb2xlYW4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgICAgIG91dC5wcmludCgi
Rmx1c2hlZEpTVmFsdWUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zs
dXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
bHVzaEZvcm1hdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbHVzaEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdGbHVzaEZv
cm1hdF9oCisjZGVmaW5lIERGR0ZsdXNoRm9ybWF0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIK
KyNpbmNsdWRlICJERkdVc2VLaW5kLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBGbHVzaEZvcm1hdCB7Cisg
ICAgRGVhZEZsdXNoLAorICAgIEZsdXNoZWRJbnQzMiwKKyAgICBGbHVzaGVkRG91YmxlLAorICAg
IEZsdXNoZWRDZWxsLAorICAgIEZsdXNoZWRCb29sZWFuLAorICAgIEZsdXNoZWRKU1ZhbHVlCit9
OworCitpbmxpbmUgTm9kZUZsYWdzIHJlc3VsdEZvcihGbHVzaEZvcm1hdCBmb3JtYXQpCit7Cisg
ICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIERlYWRGbHVzaDoKKyAgICBjYXNlIEZsdXNo
ZWRKU1ZhbHVlOgorICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIHJldHVybiBOb2RlUmVz
dWx0SlM7CisgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgIHJldHVybiBOb2RlUmVzdWx0
SW50MzI7CisgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICByZXR1cm4gTm9kZVJlc3Vs
dE51bWJlcjsKKyAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICByZXR1cm4gTm9kZVJl
c3VsdEJvb2xlYW47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK2lubGluZSBVc2VLaW5kIHVzZUtpbmRGb3IoRmx1c2hGb3JtYXQg
Zm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBEZWFkRmx1c2g6Cisg
ICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgcmV0dXJuIFVudHlwZWRVc2U7CisgICAg
Y2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgcmV0dXJuIENlbGxVc2U7CisgICAgY2FzZSBGbHVz
aGVkSW50MzI6CisgICAgICAgIHJldHVybiBJbnQzMlVzZTsKKyAgICBjYXNlIEZsdXNoZWREb3Vi
bGU6CisgICAgICAgIHJldHVybiBOdW1iZXJVc2U7CisgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoK
KyAgICAgICAgcmV0dXJuIEJvb2xlYW5Vc2U7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFVudHlwZWRVc2U7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6REZHOjpGbHVzaEZvcm1hdCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdGbHVzaEZvcm1hdF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0ZsdXNo
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6Cisg
ICAgRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBo
YXNlKGdyYXBoLCAiZmx1c2gtbGl2ZW5lc3MgYW5hbHlzaXMiKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09
IFNTQSk7CisgICAgICAgIAorICAgICAgICAvLyBMaXZlbmVzcyBpcyBhIGJhY2t3YXJkcyBhbmFs
eXNpczsgdGhlIHJvb3RzIGFyZSB0aGUgYmxvY2tzIHRoYXQKKyAgICAgICAgLy8gZW5kIGluIGEg
dGVybWluYWwgKFJldHVybi9UaHJvdy9UaHJvd1JlZmVyZW5jZUVycm9yKS4gRm9yIG5vdywgd2UK
KyAgICAgICAgLy8gdXNlIGEgZml4cG9pbnQgZm9ybXVsYXRpb24gc2luY2UgbGl2ZW5lc3MgaXMg
YSByYXBpZCBhbmFseXNpcyB3aXRoCisgICAgICAgIC8vIGNvbnZlcmdlbmNlIGd1YXJhbnRlZWQg
YWZ0ZXIgTyhjb25uZWN0aXZpdHkpLgorICAgICAgICAKKyAgICAgICAgLy8gU3RhcnQgYnkgYXNz
dW1pbmcgdGhhdCBldmVyeXRoaW5nIGlzIGRlYWQuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkLmZpbGwoRGVhZEZsdXNoKTsKKyAgICAg
ICAgICAgIGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRUYWlsLmZpbGwoRGVhZEZsdXNoKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0g
ZmFsc2U7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspCisgICAgICAgICAgICAgICAgcHJvY2VzcyhibG9j
a0luZGV4KTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAg
IE9wZXJhbmRzPEZsdXNoRm9ybWF0PiYgcm9vdCA9IG1fZ3JhcGguYmxvY2soMCktPnNzYS0+Zmx1
c2hGb3JtYXRBdEhlYWQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJvb3Quc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICBpZiAocm9vdC5pc0FyZ3VtZW50KGkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJvb3RbaV0gPT0gRGVhZEZsdXNoIHx8IHJvb3RbaV0gPT0gRmx1c2hlZEpTVmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAocm9vdFtpXSA9PSBEZWFkRmx1c2gpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygKKyAg
ICAgICAgICAgICAgICAiQmFkIGZsdXNoIGxpdmVuZXNzIGFuYWx5c2lzIHJlc3VsdDogYmFkIGZs
dXNoIGxpdmVuZXNzIGF0IHJvb3Q6ICIsCisgICAgICAgICAgICAgICAgcm9vdCwgIlxuIik7Cisg
ICAgICAgICAgICBkYXRhTG9nKCJJUiBhdCB0aW1lIG9mIGVycm9yOlxuIik7CisgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHBy
b2Nlc3MoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9saXZlID0gYmxvY2stPnNz
YS0+Zmx1c2hGb3JtYXRBdFRhaWw7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCB2YXJpYWJs
ZS0+bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCksIERlYWRGbHVzaCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIEdldEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgIHNldEZvck5vZGUobm9kZSwgdmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5mbHVzaEZv
cm1hdCgpLCBGbHVzaGVkSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAg
ICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAg
ICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKKyAgICAgICAg
ICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIHZhcmlhYmxlLT5sb2NhbCgpLCBmb3JtYXQsIGZvcm1h
dCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9saXZlID09IGJsb2Nr
LT5zc2EtPmZsdXNoRm9ybWF0QXRIZWFkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgYmxvY2stPnNzYS0+Zmx1c2hGb3Jt
YXRBdEhlYWQgPSBtX2xpdmU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5wcmVk
ZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNl
c3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSBtX2xpdmUuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQm
IHByZWRlY2Vzc29yRm9ybWF0ID0gcHJlZGVjZXNzb3ItPnNzYS0+Zmx1c2hGb3JtYXRBdFRhaWxb
al07CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgbXlGb3JtYXQgPSBtX2xpdmVbal07Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGhyZWUgcG9zc2liaWxpdGllczoK
KyAgICAgICAgICAgICAgICAvLyAxKSBQcmVkZWNlc3NvciBmb3JtYXQgaXMgRGVhZCwgaW4gd2hp
Y2ggY2FzZSBpdCBhY3F1aXJlcyBvdXIgZm9ybWF0LgorICAgICAgICAgICAgICAgIC8vIDIpIFBy
ZWRlY2Vzc29yIGZvcm1hdCBpcyBpZGVudGljYWwgdG8gb3VyIGZvcm1hdCwgaW4gd2hpY2ggY2Fz
ZSB3ZQorICAgICAgICAgICAgICAgIC8vICAgIGRvIG5vdGhpbmcuCisgICAgICAgICAgICAgICAg
Ly8gMykgUHJlZGVjZXNzb3IgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIG91ciBmb3JtYXQgYW5k
IGl0J3Mgbm90IERlYWQsCisgICAgICAgICAgICAgICAgLy8gICAgaW4gd2hpY2ggY2FzZSB3ZSBo
YXZlIGFuIGVycm9uZW91cyBzZXQgb2YgRmx1c2hlcyBhbmQgU2V0TG9jYWxzLgorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvckZvcm1hdCA9PSBEZWFkRmx1
c2gpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JGb3JtYXQgPSBteUZvcm1hdDsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvckZvcm1hdCA9PSBteUZv
cm1hdCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkJhZCBGbHVzaCBt
ZXJnZSBhdCBlZGdlICIsICpwcmVkZWNlc3NvciwgIiAtPiAiLCAqYmxvY2ssCisgICAgICAgICAg
ICAgICAgICAgICIsIGxvY2FsIHZhcmlhYmxlIHIiLCBtX2xpdmUub3BlcmFuZEZvckluZGV4KGop
LCAiOiAiLCAqcHJlZGVjZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICIgaGFzICIsIHByZWRl
Y2Vzc29yRm9ybWF0LCAiIGFuZCAiLCAqYmxvY2ssICIgaGFzICIsIG15Rm9ybWF0LCAiLlxuIik7
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSVIgYXQgdGltZSBvZiBlcnJvcjpcbiIpOworICAg
ICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRGb3JOb2Rl
KE5vZGUqIG5vZGUsIGludCBvcGVyYW5kLCBGbHVzaEZvcm1hdCBub2RlRm9ybWF0LCBGbHVzaEZv
cm1hdCBuZXdGb3JtYXQpCisgICAgeworICAgICAgICBGbHVzaEZvcm1hdCYgY3VycmVudEZvcm1h
dCA9IG1fbGl2ZS5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgLy8gRG8gc29t
ZSB1c2VmdWwgdmVyaWZpY2F0aW9uIGhlcmUuIEl0J3MgT0sgaWYgd2UgdGhpbmsgdGhhdCB0aGUK
KyAgICAgICAgLy8gZmx1c2ggZm9ybWF0IGlzIGRlYWQgYXQgdGhlIHRpbWUgdGhhdCB3ZSBzZWUg
dGhlIG5vZGUuIEJ1dCBpdCdzCisgICAgICAgIC8vIG5vdCBPSyBpZiBib3RoIHRoZSBub2RlIGFu
ZCBtX2xpdmUgc2VlIGEgRmx1c2hGb3JtYXQgYW5kIHRoZXkgZG8KKyAgICAgICAgLy8gbm90IGFn
cmVlIG9uIGl0LgorICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnRGb3JtYXQgPT0gRGVhZEZs
dXNoIHx8IGN1cnJlbnRGb3JtYXQgPT0gbm9kZUZvcm1hdCkgeworICAgICAgICAgICAgY3VycmVu
dEZvcm1hdCA9IG5ld0Zvcm1hdDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJCYWQgRmx1c2ggbWVyZ2UgYXQg
bm9kZSAiLCBub2RlLCAiLCByIiwgb3BlcmFuZCwgIjogbm9kZSBjbGFpbXMgIiwgbm9kZUZvcm1h
dCwKKyAgICAgICAgICAgICIgYnV0IGJhY2t3YXJkcyBmbG93IGNsYWltcyAiLCBjdXJyZW50Rm9y
bWF0LCAiLlxuIik7CisgICAgICAgIGRhdGFMb2coIklSIGF0IHRpbWUgb2YgZXJyb3I6XG4iKTsK
KyAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAor
ICAgIEZsdXNoRm9ybWF0IGZsdXNoRm9ybWF0KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgbV9jaGFuZ2VkOworICAgIE9wZXJhbmRzPEZsdXNoRm9ybWF0PiBtX2xp
dmU7Cit9OworCitib29sIHBlcmZvcm1GbHVzaExpdmVuZXNzQW5hbHlzaXMoR3JhcGgmIGdyYXBo
KQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgRmx1c2gtTGl2ZW5l
c3MgQW5hbHlzaXMgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Rmx1c2hMaXZlbmVzc0Fu
YWx5c2lzUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0ZsdXNoTGl2ZW5l
c3NBbmFseXNpc1BoYXNlX2gKKyNkZWZpbmUgREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2Vf
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIEdyYXBoOworCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmZsdXNoRm9y
bWF0QXRIZWFkCisKK2Jvb2wgcGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYpOwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1MjU4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIgogI2luY2x1
ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVk
ZSA8d3RmL0xpc3REdW1wLmg+CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIApAQCAtMjE2LDggKzIx
Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiaWQiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVy
LCAieyIsIGlkZW50aWZpZXJzKClbc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlcl0s
ICJ9Iik7CiAgICAgICAgIG91dC5wcmludCgiLCAiLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHN0
b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkpOwogICAgIH0KLSAgICBBU1NFUlQobm9kZS0+aGFzVmFy
aWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+aGFzTG9jYWwoKSk7Ci0gICAgaWYgKG5vZGUtPmhh
c1ZhcmlhYmxlQWNjZXNzRGF0YSgpKSB7CisgICAgQVNTRVJUKG5vZGUtPmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgqdGhpcykgPT0gbm9kZS0+aGFzTG9jYWwoKnRoaXMpKTsKKyAgICBpZiAobm9kZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAg
ICAgICBpbnQgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOwogICAgICAg
ICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCkBAIC0yMzUsNiArMjM2LDggQEAgdm9p
ZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIH0KICAgICBpZiAobm9k
ZS0+aGFzSW5kZXhpbmdUeXBlKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgSW5kZXhpbmdU
eXBlRHVtcChub2RlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIGlmIChub2RlLT5oYXNQaGkoKSkK
KyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiXiIsIG5vZGUtPnBoaSgpLT5pbmRleCgpKTsKICAg
ICBpZiAobm9kZS0+aGFzRXhlY3V0aW9uQ291bnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29t
bWEsIFJhd1BvaW50ZXIobm9kZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7CiAgICAgaWYgKG9wID09
IEpTQ29uc3RhbnQpIHsKQEAgLTI2MCw3ICsyNjMsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgb3V0LnByaW50KCIpIik7CiAKICAgICBpZiAoIXNraXBw
ZWQpIHsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAg
ICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSkKICAgICAgICAgICAgIG91
dC5wcmludCgiICBwcmVkaWN0aW5nICIsIFNwZWN1bGF0aW9uRHVtcChub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSwgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNo
b3VsZFVzZURvdWJsZUZvcm1hdCgpID8gIiwgZm9yY2luZyBkb3VibGUiIDogIiIpOwogICAgICAg
ICBlbHNlIGlmIChub2RlLT5oYXNIZWFwUHJlZGljdGlvbigpKQogICAgICAgICAgICAgb3V0LnBy
aW50KCIgIHByZWRpY3RpbmcgIiwgU3BlY3VsYXRpb25EdW1wKG5vZGUtPmdldEhlYXBQcmVkaWN0
aW9uKCkpKTsKQEAgLTMxMywyMyArMzE2LDI1IEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRl
cihQcmludFN0cmVhbSYKICAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAgICAgfQog
ICAgIH0KLSAgICBvdXQucHJpbnQocHJlZml4LCAiICBQaGkgTm9kZXM6Iik7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBibG9jay0+cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2Rl
KiBwaGlOb2RlID0gYmxvY2stPnBoaXNbaV07Ci0gICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSAmJiBwaGlOb2RlRHVtcE1vZGUgPT0gRHVtcExpdmVQaGlzT25seSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgo
KSwgIjwiLCBwaGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOwotICAgICAgICBpZiAocGhpTm9k
ZS0+Y2hpbGQxKCkpIHsKLSAgICAgICAgICAgIG91dC5wcmludCgiQCIsIHBoaU5vZGUtPmNoaWxk
MSgpLT5pbmRleCgpKTsKLSAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewotICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiLCBAIiwgcGhpTm9kZS0+Y2hpbGQyKCktPmluZGV4KCkp
OwotICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDMoKS0+aW5kZXgoKSk7CisgICAg
aWYgKCFibG9jay0+cGhpcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwg
IiAgUGhpIE5vZGVzOiIpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5w
aGlzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBo
aXNbaV07CisgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkgJiYgcGhp
Tm9kZUR1bXBNb2RlID09IER1bXBMaXZlUGhpc09ubHkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+aW5kZXgoKSwgIjwiLCBw
aGlOb2RlLT5yZWZDb3VudCgpLCAiPi0+KCIpOworICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNo
aWxkMSgpKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJAIiwgcGhpTm9kZS0+Y2hpbGQx
KCktPmluZGV4KCkpOworICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSkgewor
ICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiwgQCIsIHBoaU5vZGUtPmNoaWxkMigpLT5p
bmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIsIEAiLCBwaGlOb2RlLT5jaGlsZDMoKS0+
aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAg
b3V0LnByaW50KCIpIiwgaSArIDEgPCBibG9jay0+cGhpcy5zaXplKCkgPyAiLCIgOiAiIik7CiAg
ICAgICAgIH0KLSAgICAgICAgb3V0LnByaW50KCIpIiwgaSArIDEgPCBibG9jay0+cGhpcy5zaXpl
KCkgPyAiLCIgOiAiIik7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9Ci0gICAgb3V0
LnByaW50KCJcbiIpOwogfQogCiB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCkBA
IC0zNDMsMjkgKzM0OCw1NyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAg
ICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZHVtcEJs
b2NrSGVhZGVyKG91dCwgIiIsIGJsb2NrLCBEdW1wQWxsUGhpcyk7Ci0gICAgICAgIG91dC5wcmlu
dCgiICB2YXJzIGJlZm9yZTogIik7Ci0gICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkK
LSAgICAgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRIZWFkLCBvdXQpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKLSAgICAgICAgb3V0
LnByaW50KCJcbiIpOwotICAgICAgICBvdXQucHJpbnQoIiAgdmFyIGxpbmtzOiAiKTsKLSAgICAg
ICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsIG91dCk7Ci0gICAgICAgIG91
dC5wcmludCgiXG4iKTsKKyAgICAgICAgc3dpdGNoIChtX2Zvcm0pIHsKKyAgICAgICAgY2FzZSBM
b2FkU3RvcmU6CisgICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6IHsKKyAgICAgICAgICAgIG91dC5w
cmludCgiICB2YXJzIGJlZm9yZTogIik7CisgICAgICAgICAgICBpZiAoYmxvY2stPmNmYUhhc1Zp
c2l0ZWQpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KGJsb2NrLT52YWx1ZXNBdEhlYWQpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwor
ICAgICAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIHZh
ciBsaW5rczogIik7CisgICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhcmlhYmxlc0F0
SGVhZCwgb3V0KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTU0E6IHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrLT5zc2EpOworICAgICAgICAgICAgb3V0LnByaW50
KCIgIEZsdXNoIGZvcm1hdDogIiwgYmxvY2stPnNzYS0+Zmx1c2hGb3JtYXRBdEhlYWQsICJcbiIp
OworICAgICAgICAgICAgb3V0LnByaW50KCIgIEF2YWlsYWJpbGl0eTogIiwgYmxvY2stPnNzYS0+
YXZhaWxhYmlsaXR5QXRIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICBMaXZl
OiAiLCBub2RlTGlzdER1bXAoYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCksICJcbiIpOworICAgICAg
ICAgICAgb3V0LnByaW50KCIgIFZhbHVlczogIiwgbm9kZU1hcER1bXAoYmxvY2stPnNzYS0+dmFs
dWVzQXRIZWFkKSwgIlxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSB9CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CiAgICAgICAg
ICAgICBkdW1wQ29kZU9yaWdpbihvdXQsICIiLCBsYXN0Tm9kZSwgYmxvY2stPmF0KGkpKTsKICAg
ICAgICAgICAgIGR1bXAob3V0LCAiIiwgYmxvY2stPmF0KGkpKTsKICAgICAgICAgICAgIGxhc3RO
b2RlID0gYmxvY2stPmF0KGkpOwogICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgiICB2YXJz
IGFmdGVyOiAiKTsKLSAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQotICAgICAgICAg
ICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdFRhaWwsIG91dCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOwotICAgICAgICBvdXQucHJpbnQoIlxu
Iik7Ci0gICAgICAgIG91dC5wcmludCgiICB2YXIgbGlua3M6ICIpOwotICAgICAgICBkdW1wT3Bl
cmFuZHMoYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgb3V0KTsKLSAgICAgICAgb3V0LnByaW50KCJc
biIpOworICAgICAgICBzd2l0Y2ggKG1fZm9ybSkgeworICAgICAgICBjYXNlIExvYWRTdG9yZToK
KyAgICAgICAgY2FzZSBUaHJlYWRlZENQUzogeworICAgICAgICAgICAgb3V0LnByaW50KCIgIHZh
cnMgYWZ0ZXI6ICIpOworICAgICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQorICAg
ICAgICAgICAgICAgIG91dC5wcmludChibG9jay0+dmFsdWVzQXRUYWlsKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAgICAgICAgICAg
IG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICB2YXIgbGlua3M6ICIp
OworICAgICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsIG91dCk7
CisgICAgICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU1NBOiB7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChibG9jay0+c3NhKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICBGbHVzaCBm
b3JtYXQ6ICIsIGJsb2NrLT5zc2EtPmZsdXNoRm9ybWF0QXRUYWlsLCAiXG4iKTsKKyAgICAgICAg
ICAgIG91dC5wcmludCgiICBBdmFpbGFiaWxpdHk6ICIsIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0
eUF0VGFpbCwgIlxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgTGl2ZTogIiwgbm9kZUxp
c3REdW1wKGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwpLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5w
cmludCgiICBWYWx1ZXM6ICIsIG5vZGVNYXBEdW1wKGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCks
ICJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gfQogICAgIH0KIH0KIApAQCAt
NDc4LDYgKzUxMSwyOCBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9j
CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiB9CisKK3ZvaWQgR3JhcGg6OmFkZEZvckRlcHRo
Rmlyc3RTb3J0KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sq
LCAxNj4mIHdvcmtsaXN0LCBIYXNoU2V0PEJhc2ljQmxvY2sqPiYgc2VlbiwgQmFzaWNCbG9jayog
YmxvY2spCit7CisgICAgaWYgKHNlZW4uY29udGFpbnMoYmxvY2spKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CisgICAgd29ya2xpc3QuYXBwZW5kKGJs
b2NrKTsKKyAgICBzZWVuLmFkZChibG9jayk7Cit9CisKK3ZvaWQgR3JhcGg6OmdldEJsb2Nrc0lu
RGVwdGhGaXJzdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKK3sKKyAgICBWZWN0
b3I8QmFzaWNCbG9jayosIDE2PiB3b3JrbGlzdDsKKyAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBz
ZWVuOworICAgIGFkZEZvckRlcHRoRmlyc3RTb3J0KHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJs
b2NrKDApKTsKKyAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICBhZGRGb3JE
ZXB0aEZpcnN0U29ydChyZXN1bHQsIHdvcmtsaXN0LCBzZWVuLCBibG9jay0+c3VjY2Vzc29yKGkp
KTsKKyAgICB9Cit9CiAgICAgCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcg
KzE0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCiAg
ICAgICAgICAgICBkZXRocmVhZCgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlQo
IW5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbm9k
ZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSk7CiAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b0NvbnN0YW50KGNvbnN0YW50TnVtYmVyKTsKICAgICB9CiAgICAgCkBAIC00MDEsNyArNDAxLDEy
IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9
IGJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAKLSAgICAg
ICAgaWYgKG5vZGUtPmhhc0xvY2FsKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0
QXJndW1lbnQpCisgICAgICAgICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxl
Rm9yQXJndW1lbnQob3BlcmFuZFRvQXJndW1lbnQobm9kZS0+bG9jYWwoKSkpOworICAgICAgICAK
KyAgICAgICAgaWYgKG5vZGUtPmhhc0xvY2FsKCp0aGlzKSkgeworICAgICAgICAgICAgaWYgKG1f
Zm9ybSA9PSBTU0EpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBpZiAo
IW9wZXJhbmRJc0FyZ3VtZW50KG5vZGUtPmxvY2FsKCkpKQogICAgICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobm9kZS0+
bG9jYWwoKSk7CkBAIC02NDEsNiArNjQ2LDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgaW52
YWxpZGF0ZUNGRygpOwogICAgIAorICAgIHZvaWQgZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIo
VmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KTsKKyAgICAKICAgICBQcm9maWxlcjo6Q29tcGls
YXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9uLmdldCgpOyB9
CiAgICAgCiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1f
cGxhbi5pZGVudGlmaWVyczsgfQpAQCAtNjc5LDYgKzY4Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4m
IHdvcmtsaXN0LCBCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayogc3VjY2Vzc29yKTsKKyAgICB2b2lk
IGFkZEZvckRlcHRoRmlyc3RTb3J0KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9y
PEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBIYXNoU2V0PEJhc2ljQmxvY2sqPiYgc2Vlbiwg
QmFzaWNCbG9jayopOwogICAgIAogICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUqIGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1
bGF0ZUludGVnZXIsIE5vZGUqIGltbWVkaWF0ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDI2ICszMSwxMiBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWNsYXNzIEluc2VydGlv
biB7Ci1wdWJsaWM6Ci0gICAgSW5zZXJ0aW9uKCkgeyB9Ci0gICAgCi0gICAgSW5zZXJ0aW9uKHNp
emVfdCBpbmRleCwgTm9kZSogZWxlbWVudCkKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAg
ICAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc2l6ZV90
IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIE5vZGUqIGVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1faW5kZXg7
Ci0gICAgTm9kZSogbV9lbGVtZW50OwotfTsKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248Tm9kZSo+
IEluc2VydGlvbjsKIAogY2xhc3MgSW5zZXJ0aW9uU2V0IHsKIHB1YmxpYzoKQEAgLTgxLDIwICs2
Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2sp
CiAgICAgewotICAgICAgICBpZiAoIW1faW5zZXJ0aW9ucy5zaXplKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGJsb2NrLT5ncm93KGJsb2NrLT5zaXplKCkgKyBtX2luc2VydGlvbnMu
c2l6ZSgpKTsKLSAgICAgICAgc2l6ZV90IGxhc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gbV9pbnNlcnRpb25zLnNpemUoKTsg
aW5kZXhJbkluc2VydGlvbnMtLTspIHsKLSAgICAgICAgICAgIEluc2VydGlvbiYgaW5zZXJ0aW9u
ID0gbV9pbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXTsKLSAgICAgICAgICAgIHNpemVfdCBm
aXJzdEluZGV4ID0gaW5zZXJ0aW9uLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKLSAgICAg
ICAgICAgIHNpemVfdCBpbmRleE9mZnNldCA9IGluZGV4SW5JbnNlcnRpb25zICsgMTsKLSAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQotICAg
ICAgICAgICAgICAgIGJsb2NrLT5hdChpKSA9IGJsb2NrLT5hdChpIC0gaW5kZXhPZmZzZXQpOwot
ICAgICAgICAgICAgYmxvY2stPmF0KGZpcnN0SW5kZXgpID0gaW5zZXJ0aW9uLmVsZW1lbnQoKTsK
LSAgICAgICAgICAgIGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAg
bV9pbnNlcnRpb25zLnJlc2l6ZSgwKTsKKyAgICAgICAgZXhlY3V0ZUluc2VydGlvbnMoKmJsb2Nr
LCBtX2luc2VydGlvbnMpOwogICAgIH0KIHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0Fu
YWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMu
aCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgor
I2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIExpdmVuZXNzQW5hbHlzaXNQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBo
JiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImxpdmVuZXNzIGFuYWx5c2lzIikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgLy8gTGl2ZW5lc3MgaXMg
YSBiYWNrd2FyZHMgYW5hbHlzaXM7IHRoZSByb290cyBhcmUgdGhlIGJsb2NrcyB0aGF0CisgICAg
ICAgIC8vIGVuZCBpbiBhIHRlcm1pbmFsIChSZXR1cm4vVGhyb3cvVGhyb3dSZWZlcmVuY2VFcnJv
cikuIEZvciBub3csIHdlCisgICAgICAgIC8vIHVzZSBhIGZpeHBvaW50IGZvcm11bGF0aW9uIHNp
bmNlIGxpdmVuZXNzIGlzIGEgcmFwaWQgYW5hbHlzaXMgd2l0aAorICAgICAgICAvLyBjb252ZXJn
ZW5jZSBndWFyYW50ZWVkIGFmdGVyIE8oY29ubmVjdGl2aXR5KS4KKyAgICAgICAgCisgICAgICAg
IC8vIFN0YXJ0IGJ5IGFzc3VtaW5nIHRoYXQgZXZlcnl0aGluZyBpcyBkZWFkLgorICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBibG9jay0+c3NhLT5saXZlQXRIZWFkLmNsZWFyKCk7CisgICAg
ICAgICAgICBibG9jay0+c3NhLT5saXZlQXRUYWlsLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBi
bG9ja0luZGV4LS07KQorICAgICAgICAgICAgICAgIHByb2Nlc3MoYmxvY2tJbmRleCk7CisgICAg
ICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fZ3JhcGgu
YmxvY2soMCktPnNzYS0+bGl2ZUF0SGVhZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGRhdGFM
b2coCisgICAgICAgICAgICAgICAgIkJhZCBsaXZlbmVzcyBhbmFseXNpcyByZXN1bHQ6IGxpdmUg
YXQgcm9vdCBpcyBub3QgZW1wdHk6ICIsCisgICAgICAgICAgICAgICAgbm9kZUxpc3REdW1wKG1f
Z3JhcGguYmxvY2soMCktPnNzYS0+bGl2ZUF0SGVhZCksICJcbiIpOworICAgICAgICAgICAgZGF0
YUxvZygiSVIgYXQgdGltZSBvZiBlcnJvcjpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5kdW1w
KCk7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcm9jZXNzKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJdCdzIGxpa2VseSB0aGF0IHRoaXMg
Y2FuIGJlIGltcHJvdmVkLCBmb3Igc3RhdGljIGFuYWx5c2VzIHRoYXQgdXNlCisgICAgICAgIC8v
IEhhc2hTZXRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NDU1
CisgICAgICAgIG1fbGl2ZSA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWw7CisgICAgICAgIAorICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0t
OykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBHaXZlbiBhbiBVcHNpbG9uOgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vICAgIG46IFVwc2lsb24oQHgsIF5wKQorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBwIGFuZCBAbiBhbmQgdXNlcyBA
eC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBHaXZlbiBhIFBoaToKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyAgICBwOiBQaGkoKQorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIFdlIHNheSBub3RoaW5nLiBJdCdzIG5laXRoZXIgYSB1c2Ugbm9yIGEgZGVmLgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEdpdmVuIGEgbm9kZToKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyAgICBuOiBUaGluZ3koQGEsIEBiLCBAYykKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAbiBhbmQgdXNlcyBAYSwg
QGIsIEBjLgorICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgVXBzaWxvbjogeworICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9
IG5vZGUtPnBoaSgpOworICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUocGhpKTsKKyAgICAg
ICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOworICAgICAgICAgICAgICAgIG1fbGl2ZS5h
ZGQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9kZSk7Cisg
ICAgICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRk
Q2hpbGRVc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9saXZlID09IGJsb2NrLT5zc2EtPmxpdmVBdEhl
YWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOworICAgICAgICBibG9jay0+c3NhLT5saXZlQXRIZWFkID0gbV9saXZlOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnNbaV0tPnNzYS0+bGl2ZUF0VGFpbC5hZGQobV9saXZl
LmJlZ2luKCksIG1fbGl2ZS5lbmQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkQ2hpbGRV
c2UoTm9kZSosIEVkZ2UmIGVkZ2UpCisgICAgeworICAgICAgICBhZGRDaGlsZFVzZShlZGdlKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhZGRDaGlsZFVzZShFZGdlJiBlZGdlKQorICAgIHsKKyAg
ICAgICAgZWRnZS5zZXRLaWxsU3RhdHVzKG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkpLmlzTmV3RW50
cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtX2No
YW5nZWQ7CisgICAgSGFzaFNldDxOb2RlKj4gbV9saXZlOworfTsKKworYm9vbCBwZXJmb3JtTGl2
ZW5lc3NBbmFseXNpcyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIkRGRyBMaXZlbmVzcyBBbmFseXNpcyBQaGFzZSIpOworICAgIHJldHVybiBydW5Q
aGFzZTxMaXZlbmVzc0FuYWx5c2lzUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0xpdmVuZXNzQW5h
bHlzaXNQaGFzZV9oCisjZGVmaW5lIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZV9oCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
R3JhcGg7CisKKy8vIENvbXB1dGVzIEJhc2ljQmxvY2s6OnNzYS0+bGl2ZUF0SGVhZC9saXZlQXRU
YWlsLgorCitib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJik7CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZH
Tm9kZUFsbG9jYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0z
Nyw2ICszOCwyNiBAQCB1bnNpZ25lZCBOb2RlOjppbmRleCgpIGNvbnN0CiAgICAgcmV0dXJuIE5v
ZGVBbGxvY2F0b3I6OmFsbG9jYXRvck9mKHRoaXMpLT5pbmRleE9mKHRoaXMpOwogfQogCitib29s
IE5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0YShHcmFwaCYgZ3JhcGgpCit7CisgICAgc3dpdGNo
IChvcCgpKSB7CisgICAgY2FzZSBQaGk6CisgICAgICAgIHJldHVybiBncmFwaC5tX2Zvcm0gIT0g
U1NBOworICAgIGNhc2UgR2V0TG9jYWw6CisgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICBjYXNl
IFNldExvY2FsOgorICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoK
KyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICBjYXNlIEZs
dXNoOgorICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw5ICs0NSwxMSBAQAogI2luY2x1ZGUg
IlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCiAjaW5jbHVkZSAi
VmFsdWVQcm9maWxlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgR3JhcGg7CiBzdHJ1Y3QgQmFzaWNCbG9jazsK
IAogc3RydWN0IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhIHsKQEAgLTQ5OCwzMiArNTAwLDE0IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBib29sIGhhc1Zhcmlh
YmxlQWNjZXNzRGF0YSgpCisgICAgYm9vbCBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoR3JhcGgmKTsK
KyAgICBib29sIGhhc0xvY2FsKEdyYXBoJiBncmFwaCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAo
b3AoKSkgewotICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICBjYXNlIFNldExvY2FsOgot
ICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgotICAg
ICAgICBjYXNlIFpvbWJpZUhpbnQ6Ci0gICAgICAgIGNhc2UgUGhpOgotICAgICAgICBjYXNlIFNl
dEFyZ3VtZW50OgotICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGJvb2wgaGFzTG9j
YWwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICByZXR1cm4gaGFzVmFyaWFibGVBY2Nlc3NEYXRhKGdyYXBoKTsKICAgICB9CiAgICAgCiAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEoKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRhKj4obV9vcEluZm8pLT5maW5kKCk7CiAgICAg
fQogICAgIApAQCAtNTM4LDYgKzUyMiwxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisg
ICAgYm9vbCBoYXNQaGkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gVXBzaWxvbjsK
KyAgICB9CisgICAgCisgICAgTm9kZSogcGhpKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNQ
aGkoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KG1fb3BJbmZvKTsKKyAg
ICB9CisgICAgCiAgICAgYm9vbCBoYXNJZGVudGlmaWVyKCkKICAgICB7CiAgICAgICAgIHN3aXRj
aCAob3AoKSkgewpAQCAtNzczLDE2ICs3NjgsMTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBt
X29wSW5mbzIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7CiAgICAgfQogICAgIAot
ICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2soKQorICAgIEJhc2ljQmxvY2sqJiB0YWtlbkJsb2Nr
KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKLSAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8pOworICAgICAgICBy
ZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbyk7CiAgICAgfQogICAg
IAotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuQmxvY2soKQorICAgIEJhc2ljQmxvY2sqJiBub3RU
YWtlbkJsb2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKLSAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8yKTsKKyAgICAgICAgcmV0
dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcEluZm8yKTsKICAgICB9CiAgICAg
CiAgICAgU3dpdGNoRGF0YSogc3dpdGNoRGF0YSgpCkBAIC04MDUsNyArODAwLDcgQEAgc3RydWN0
IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
cih1bnNpZ25lZCBpbmRleCkKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KQogICAgIHsKICAgICAgICAgaWYgKGlzU3dpdGNoKCkpIHsKICAgICAgICAgICAgIGlmIChp
bmRleCA8IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpKQpAQCAtODIwLDExICs4MTUsMTEgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICAgICAgcmV0dXJuIG5vdFRha2VuQmxvY2soKTsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiB0YWtlbkJsb2NrKCk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9jayogc3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGJvb2wgY29uZGl0aW9uKQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JGb3JDb25kaXRp
b24oYm9vbCBjb25kaXRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7CiAg
ICAgICAgIHJldHVybiBjb25kaXRpb24gPyB0YWtlbkJsb2NrKCkgOiBub3RUYWtlbkJsb2NrKCk7
CkBAIC0xMzk5LDYgKzEzOTQsMjMgQEAgcHVibGljOgogICAgIE5vZGUqIHJlcGxhY2VtZW50Owog
fTsKIAoraW5saW5lIGJvb2wgbm9kZUNvbXBhcmF0b3IoTm9kZSogYSwgTm9kZSogYikKK3sKKyAg
ICByZXR1cm4gYS0+aW5kZXgoKSA8IGItPmluZGV4KCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitDU3RyaW5nIG5vZGVMaXN0RHVtcChjb25zdCBUJiBub2RlTGlzdCkKK3sKKyAgICByZXR1
cm4gc29ydGVkTGlzdER1bXAobm9kZUxpc3QsIG5vZGVDb21wYXJhdG9yKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK0NTdHJpbmcgbm9kZU1hcER1bXAoY29uc3QgVCYgbm9kZU1hcCkKK3sK
KyAgICByZXR1cm4gc29ydGVkTWFwRHVtcChub2RlTWFwLCBub2RlQ29tcGFyYXRvcik7Cit9CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCShyZXZpc2lvbiAxNTI1ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CiB2b2lkIGR1bXBOb2RlRmxhZ3MoUHJpbnRTdHJlYW0mIG91dCwgTm9kZUZsYWdzIGZsYWdzKQog
ewotICAgIGlmICghKGZsYWdzIF4gTm9kZURvZXNOb3RFeGl0KSkgeworICAgIGlmICghKChmbGFn
cyAmIH5Ob2RlUmVsZXZhbnRUb09TUikgXiBOb2RlRG9lc05vdEV4aXQpKSB7CiAgICAgICAgIG91
dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2Miw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhN
b3ZIaW50QW5kQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRXhpdHNGb3J3YXJkKSBcCiAg
ICAgbWFjcm8oTW92SGludCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oWm9tYmllSGlu
dCwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oR2V0QXJndW1lbnQsIE5vZGVSZXN1bHRK
UykgXAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhV
cHNpbG9uLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikgXAogICAgIG1hY3Jv
KFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwKICAgICBtYWNybyhG
bHVzaCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBo
YW50b21Mb2NhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVk
ZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJP
cGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6Cisg
ICAgT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDog
UGhhc2UoZ3JhcGgsICJPU1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzIikKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9y
bSA9PSBTU0EpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZp
cnN0OworICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmly
c3QpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmly
c3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhG
aXJzdFtpXTsKKyAgICAgICAgICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC5maWxs
KDApOworICAgICAgICAgICAgYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLmZpbGwoMCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
ZXB0aEZpcnN0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IGRlcHRoRmlyc3RbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIGVkaXQgYXZh
aWxhYmlsaXR5QXRUYWlsIGluLXBsYWNlLCBidXQgZmlyc3QgaW5pdGlhbGl6ZSBpdCB0bworICAg
ICAgICAgICAgLy8gYXZhaWxhYmlsaXR5QXRIZWFkLgorICAgICAgICAgICAgT3BlcmFuZHM8Tm9k
ZSo+JiBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdFRhaWw7CisgICAg
ICAgICAgICBhdmFpbGFiaWxpdHkgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9k
ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAg
ICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hl
Y2s6IHsKKyAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Lm9wZXJhbmQobm9kZS0+bG9j
YWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBab21iaWVIaW50OiB7CisgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIEdldEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eS5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKGopOworICAgICAgICAgICAgICAgIE9w
ZXJhbmRzPE5vZGUqPiYgc3VjY2Vzc29yQXZhaWxhYmlsaXR5ID0gc3VjY2Vzc29yLT5zc2EtPmF2
YWlsYWJpbGl0eUF0SGVhZDsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSBhdmFp
bGFiaWxpdHkuc2l6ZSgpOyBrLS07KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG15Tm9k
ZSA9IGF2YWlsYWJpbGl0eVtrXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFteU5vZGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzc29yLT5zc2EtPmxpdmVBdEhlYWQuY29udGFp
bnMobXlOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IG92
ZXJ3cml0ZSBhdmFpbGFiaWxpdHkgd2l0aCBhIGJvZ3VzIG5vZGUKKyAgICAgICAgICAgICAgICAg
ICAgLy8gYXQgbWVyZ2UgcG9pbnRzLiBUaGlzIGlzIGZpbmUsIHNpbmNlIG1lcmdlIHBvaW50cyBo
YXZlCisgICAgICAgICAgICAgICAgICAgIC8vIE1vdkhpbnQoUGhpKSdzIHRvIHdvcmsgYXJvdW5k
IHRoaXMuIFRoZSBvdXRjb21lIG9mIHRoaXMgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8geW91
IG1pZ2h0IGhhdmUgYSBwcm9ncmFtIGluIHdoaWNoIGEgbm9kZSBoYXBwZW5zIHRvIHJlbWFpbgor
ICAgICAgICAgICAgICAgICAgICAvLyBsaXZlIGludG8gc29tZSBibG9jayBCLCBhbmQgc2VwYXJh
dGVseSAoZHVlIHRvIGNvcHkKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGFnYXRpb24pIGp1
c3Qgb25lIG9mIHRoZSBwcmVkZWNlc3NvcnMgb2YgQiBpc3N1ZWQgYQorICAgICAgICAgICAgICAg
ICAgICAvLyBNb3ZIaW50IHB1dHRpbmcgdGhhdCBub2RlIGludG8gc29tZSBsb2NhbC4gVGhlbiBp
biBCIHdlIG1pZ2h0CisgICAgICAgICAgICAgICAgICAgIC8vIHRoaW5rIHRoYXQgdGhhdCBub2Rl
IGlzIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQgbG9jYWwuIE9mCisgICAgICAgICAgICAgICAgICAg
IC8vIGNvdXJzZSBpZiB0aGF0IGxvY2FsIHdhcyBhY3R1YWxseSBsaXZlIGluIEIsIEIgd291bGQg
aGF2ZSBhCisgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBmb3IgaXQuIFNvIGVzc2VudGlhbGx5
IHdlJ2xsIGhhdmUgT1NSIGV4aXQgZHJvcHBpbmcgdGhpcworICAgICAgICAgICAgICAgICAgICAv
LyBub2RlJ3MgdmFsdWUgaW50byB0aGUgbG9jYWwgd2hlbiB3ZSBvdGhlcndpc2UgKGluIHRoZSBE
RkcpCisgICAgICAgICAgICAgICAgICAgIC8vIHdvdWxkIGhhdmUgZHJvcHBlZCB1bmRlZmluZWQg
aW50byB0aGUgbG9jYWwuIFRoaXMgc2VlbXMKKyAgICAgICAgICAgICAgICAgICAgLy8gaGFybWxl
c3MuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3JB
dmFpbGFiaWxpdHlba10gPSBteU5vZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9Owor
Citib29sIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhHcmFwaCYgZ3JhcGgpCit7Cisg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPU1IgQXZhaWxhYmlsaXR5IEFu
YWx5c2lzIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE9TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2VfaAorI2RlZmluZSBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5h
dmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhpcyByZWxpZXMgb24gbGl2ZW5lc3MKKy8vIGFuYWx5
c2lzIHBoYXNlIGhhdmluZyBiZWVuIHJ1biBhbmQgdGhlIGdyYXBoIG5vdCBoYXZpbmcgYmVlbiB0
cmFuc2Zvcm1lZAorLy8gYWZ0ZXIgdGhhdC4KKworYm9vbCBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXMoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZp
c2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTcgQEAKICNpbmNsdWRlICJERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhh
c2UuaCIKICNpbmNsdWRlICJERkdEQ0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZhaWxlZEZpbmFs
aXplci5oIgorI2luY2x1ZGUgIkRGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5j
bHVkZSAiREZHRml4dXBQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5j
bHVkZSAiREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCisjaW5jbHVkZSAiREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCisjaW5j
bHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdWYWxpZGF0ZS5oIgpAQCAtMTgyLDIyICsxODcsMjIgQEAgUGxhbjo6Q29tcGlsYXRpb25Q
YXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2lu
dENvbnZlcmdlZDsKIAogICAgIHBlcmZvcm1TdG9yZUVsaW1pbmF0aW9uKGRmZyk7Ci0gICAgcGVy
Zm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7Ci0gICAgCi0gICAgLy8gTm90ZSB0aGF0IERDRSBpcyBu
ZWNlc3NhcnkgZXZlbiBpbiB0aGUgRlRMLCBiZWNhdXNlIG9ubHkgd2Uga25vdyB3aGF0IGlzCi0g
ICAgLy8gbGl2ZS1pbi1ieXRlY29kZS4gVGhlIEZUTCB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8g
ZGV0ZXJtaW5lIHdoZW4gT1NSIGV4aXQKLSAgICAvLyB2YWx1ZXMgc2hvdWxkIGJlIHdpcmVkIHRv
IExWYWx1ZXMsIHZlcnN1cyBiZWluZyB3aXJlZCB0byBFeGl0VmFsdWU6OmRlYWQoKS4KLSAgICAv
LyBUaGlzIGlzIGRpc3RpbmN0IGZyb20gd2hhdCBab21iaWVIaW50IGdpdmVzIHVzOiBab21iaWVI
aW50IHNheXMgdGhhdCB0aGUKLSAgICAvLyB2YWx1ZSBpbiB0aGUgZ2l2ZW4gYnl0ZWNvZGUgbG9j
YWwgaXMgYWx3YXlzIGRlYWQ7IHRoZSByZWZlcmVuY2UgY291bnRzIHRoYXQKLSAgICAvLyBEQ0Ug
cHJvZHVjZXMgdGVsbCB1cyB0aGF0IHRoZSB2YWx1ZSBpcyBsaXZlIGZvciBhIHdoaWxlIGJ1dCBl
dmVudHVhbGx5Ci0gICAgLy8gZGllcywgYW5kIGl0IHRlbGxzIHVzIGV4YWN0bHkgd2hlbiB0aGUg
ZGVhdGggcG9pbnQgaXMuCi0gICAgcGVyZm9ybURDRShkZmcpOwogCiAjaWYgRU5BQkxFKEZUTF9K
SVQpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUV4cGVyaW1lbnRhbEZUTCgpCiAgICAgICAgICYmIGNv
bXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgogICAgICAgICAmJiBGVEw6OmNhbkNvbXBpbGUo
ZGZnKSkgewogICAgICAgICAKKyAgICAgICAgcGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKGRm
Zyk7CisgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOworICAgICAgICBwZXJmb3Jt
U1NBQ29udmVyc2lvbihkZmcpOworICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcp
OworICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsgLy8g
V2UgcmVseSBvbiB0aGlzIHRvIGNvbnZlcnQgZGVhZCBTZXRMb2NhbHMgaW50byB0aGUgYXBwcm9w
cmlhdGUgaGludCwgYW5kIHRvIGtpbGwgZGVhZCBjb2RlIHRoYXQgd29uJ3QgYmUgcmVjb2duaXpl
ZCBhcyBkZWFkIGJ5IExMVk0uCisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7
CisgICAgICAgIHBlcmZvcm1GbHVzaExpdmVuZXNzQW5hbHlzaXMoZGZnKTsKKyAgICAgICAgcGVy
Zm9ybU9TUkF2YWlsYWJpbGl0eUFuYWx5c2lzKGRmZyk7CisgICAgICAgIAogICAgICAgICBkdW1w
QW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGgganVzdCBiZWZvcmUgRlRMIGxvd2VyaW5nOiIpOwog
ICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgT1NSIGVudHJ5LgpAQCAtMjE1LDYg
KzIyMCw4IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICB9
CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgCisgICAgcGVyZm9ybUNQU1JldGhyZWFk
aW5nKGRmZyk7CisgICAgcGVyZm9ybURDRShkZmcpOwogICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uKGRmZyk7CiAgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGFm
dGVyIG9wdGltaXphdGlvbjoiKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5k
Rm9ySW5kZXgoaSkpOwogICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0xvY2FsKCkp
OworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5oYXNMb2NhbChtX2dyYXBoKSk7CiAgICAg
ICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QoCiAgICAgICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3JhcGgubV9wbGFuLm11c3RIYW5k
bGVWYWx1ZXNbaV0pKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDE0ICs0NzIs
MjAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CiAgICAgICAgICAgICAv
LyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21w
aWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNo
IGZvbGxvd3MgdGhpcyBwaGFzZS4KLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICAgICAgLy8gUGhpcyBzaG91
bGQgbm90IGJlIHZpc2libGUgaGVyZSBzaW5jZSB3ZSdyZSBpdGVyYXRpbmcgdGhlIGFsbC1idXQt
UGhpJ3MKICAgICAgICAgICAgIC8vIHBhcnQgb2YgYmFzaWMgYmxvY2tzLgotICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVwc2lsb246CisgICAg
ICAgIGNhc2UgR2V0QXJndW1lbnQ6CisgICAgICAgICAgICAvLyBUaGVzZSBkb24ndCBnZXQgaW5z
ZXJ0ZWQgdW50aWwgd2UgZ28gaW50byBTU0EuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRTY29w
ZToKQEAgLTU0MCw3ICs1NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6Ci0gICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R1NTQUNvbnZlcnNpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVk
ZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJP
cGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
U1NBQ29udmVyc2lvblBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CisgICAgCitwdWJsaWM6CisgICAgU1NBQ29udmVyc2lvblBoYXNl
KEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikK
KyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICAgICAgLCBtX2NoYW5nZWQoZmFs
c2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAor
ICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIFNldExvY2FsJ3MgbmVlZCBmbHVzaGluZy4gTmVl
ZCB0byBkbyB0aGlzIHdoaWxlIHRoZQorICAgICAgICAvLyBQaGkgZ3JhcGggaXMgc3RpbGwgaW50
YWN0LgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSAhPSBGbHVzaCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgYWRkRmx1c2hlZExvY2FsT3Aobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgd2hpbGUgKCFtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LnRha2VMYXN0
KCk7CisgICAgICAgICAgICBBU1NFUlQobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkp
OworICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRk
Rmx1c2hlZExvY2FsRWRnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEVsaW1p
bmF0ZSBhbGwgZHVwbGljYXRlIG9yIHNlbGYtcG9pbnRpbmcgUGhpIGVkZ2VzLiBUaGlzIG1lYW5z
IHRoYXQKKyAgICAgICAgLy8gd2UgdHJhbnNmb3JtOgorICAgICAgICAvLworICAgICAgICAvLyBw
OiBQaGkoQG4xLCBAbjIsIEBuMykKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaW50bzoKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gcDogUGhpKEB4KQorICAgICAgICAvLworICAgICAgICAvLyBpZiBl
YWNoIEBuaSBpbiB7QG4xLCBAbjIsIEBuM30gaXMgZWl0aGVyIGVxdWFsIHRvIEBwIHRvIGlzIGVx
dWFsCisgICAgICAgIC8vIHRvIEB4LCBmb3IgZXhhY3RseSBvbmUgb3RoZXIgQHguIEFkZGl0aW9u
YWxseSwgdHJpdmlhbCBQaGlzIChpLmUuCisgICAgICAgIC8vIHA6IFBoaShAeCkpIGFyZSBmb3J3
YXJkZWQsIHNvIHRoYXQgaWYgaGF2ZSBhbiBlZGdlIHRvIHN1Y2ggQHAsIHdlCisgICAgICAgIC8v
IHJlcGxhY2UgaXQgd2l0aCBAeC4gVGhpcyBsb29wIGRvZXMgdGhpcyBmb3IgUGhpcyBvbmx5OyBs
YXRlciB3ZSBkbworICAgICAgICAvLyBzdWNoIGZvcndhcmRpbmcgZm9yIFBoaSByZWZlcmVuY2Vz
IGZvdW5kIGluIG90aGVyIG5vZGVzLgorICAgICAgICAvLworICAgICAgICAvLyBTZWUgQXljb2Nr
IGFuZCBIb3JzcG9vbCBpbiBDQycwMCBmb3IgYSBiZXR0ZXIgZGVzY3JpcHRpb24gb2Ygd2hhdAor
ICAgICAgICAvLyB3ZSdyZSBkb2luZyBoZXJlLgorICAgICAgICBkbyB7CisgICAgICAgICAgICBt
X2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBw
aGlJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhp
c1twaGlJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmIChwaGktPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgZm9yd2FyZFBoaUNoaWxkcmVuKHBoaSk7CisgICAgICAgICAg
ICAgICAgICAgIGRlZHVwbGljYXRlQ2hpbGRyZW4ocGhpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAgIAorICAg
ICAgICAvLyBGb3IgZWFjaCBiYXNpYyBibG9jaywgZm9yIGVhY2ggbG9jYWwgbGl2ZSBhdCB0aGUg
aGVhZCBvZiB0aGF0IGJsb2NrLAorICAgICAgICAvLyBmaWd1cmUgb3V0IHdoYXQgbm9kZSB3ZSBz
aG91bGQgYmUgcmVmZXJyaW5nIHRvIGluc3RlYWQgb2YgdGhhdCBsb2NhbC4KKyAgICAgICAgLy8g
SWYgaXQgdHVybnMgb3V0IHRvIGJlIGEgbm9uLXRyaXZpYWwgUGhpLCBtYWtlIHN1cmUgdGhhdCB3
ZSBjcmVhdGUgYW4KKyAgICAgICAgLy8gU1NBIFBoaSBhbmQgVXBzaWxvbnMgaW4gcHJlZGVjZXNz
b3IgYmxvY2tzLiBXZSByZXVzZQorICAgICAgICAvLyBCYXNpY0Jsb2NrOjp2YXJpYWJsZXNBdEhl
YWQgZm9yIHRyYWNraW5nIHdoaWNoIG5vZGVzIHRvIHJlZmVyIHRvLgorICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gUG9pc29uIHRoaXMgZW50cnkgaW4gdmFyaWFibGVzQXRI
ZWFkIGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAgICAgLy8gd2FudCBhbnlvbmUg
dG8gdHJ5IHRvIHJlZmVyIHRvIGl0LCBpZiB0aGUgdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAg
ICAgICAgLy8gY2FwdHVyZWQuCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWRbaV0gPSAwOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgY2FzZSBT
ZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLT5vcCgpID09IFBoaSB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxk
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZSA9IGVkZ2Uubm9kZSgpOyAvLyBJdCdzIHNvbWV0aGluZyBmcm9tIGEgZGlmZmVyZW50
IGJhc2ljIGJsb2NrLgorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEl0J3MgYSBub24tdHJpdmlhbCBQaGkuCisgICAgICAgICAgICAgICAgICAg
ICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGVGbGFncyByZXN1bHQgPSByZXN1bHRGb3IoZm9ybWF0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVzZUtpbmRGb3IoZm9y
bWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIFBoaSwgbm9kZS0+
Y29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKHJl
c3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVSZXN1bHRNYXNrKSA9PSByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJl
ZGVjZXNzb3JzLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3Nvci0+YXBwZW5kTm9uVGVybWluYWwoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBi
bG9jay0+bGFzdCgpLT5jb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8obm9kZSksIEVkZ2UocHJlZGVjZXNzb3ItPnZhcmlhYmxlc0F0VGFpbFtpXSwgdXNl
S2luZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5j
b2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVkZ2Uobm9kZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRb
aV0gPSBub2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5l
eGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2Up
IHsKKyAgICAgICAgICAgIGRhdGFMb2coIlZhcmlhYmxlcyBhdCBoZWFkIGFmdGVyIFNTQSBQaGkg
aW5zZXJ0aW9uOlxuIik7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgICIsICpibG9jaywgIjogIiwgYmxvY2stPnZhcmlhYmxlc0F0
SGVhZCwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIEF0IHRoaXMgcG9pbnQgdmFyaWFibGVzQXRIZWFkIGluIGVhY2ggYmxvY2sgcmVmZXJzIHRv
IGVpdGhlcjoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gMSkgQSBuZXcgU1NBIHBoaSBpbiB0aGUg
Y3VycmVudCBibG9jay4KKyAgICAgICAgLy8gMikgQSBTZXRBcmd1bWVudCwgd2hpY2ggd2lsbCBz
b29uIGdldCBjb252ZXJ0ZWQgaW50byBhIEdldEFyZ3VtZW50LgorICAgICAgICAvLyAzKSBBbiBv
bGQgQ1BTIHBoaSBpbiBhIGRpZmZlcmVudCBibG9jay4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
V2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBmb3IgKDEpIGFuZCAoMiksIGJ1dCB3ZSBkbyBu
ZWVkIHRvCisgICAgICAgIC8vIGRvIGEgcmVwbGFjZW1lbnQgZm9yICgzKS4KKyAgICAgICAgCisg
ICAgICAgIC8vIENsZWFyIGFsbCByZXBsYWNlbWVudHMsIHNpbmNlIG90aGVyIHBoYXNlcyBtYXkg
aGF2ZSB1c2VkIHRoZW0uCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9n
cmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAg
ICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+cmVwbGFjZW1lbnQgPSAwOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTsp
CisgICAgICAgICAgICAgICAgYmxvY2stPmF0KG5vZGVJbmRleCktPnJlcGxhY2VtZW50ID0gMDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRm9yIGFsbCBvZiB0aGUgb2xkIENQUyBQ
aGlzLCBmaWd1cmUgb3V0IHdoYXQgdGhleSBjb3JyZXNwb25kIHRvIGluIFNTQS4KKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlz
LnNpemUoKTsgcGhpSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9j
ay0+cGhpc1twaGlJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb25zaWRl
cmluZyAiLCBwaGksICIsIGZvciByIiwgcGhpLT5sb2NhbCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIiwgYW5kIGl0cyByZXBsYWNlbWVudCBpbiAiLCAqYmxvY2ssICIsICIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQocGhpLT5sb2Nh
bCgpKSwgIlxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBoaS0+cmVw
bGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQocGhpLT5sb2NhbCgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IG1ha2Ug
c3VyZSB0aGF0IGFsbCB2YXJpYWJsZXNBdEhlYWQgaW4gZWFjaCBibG9jayBwb2ludHMgdG8gdGhl
CisgICAgICAgIC8vIGNhbm9uaWNhbCBTU0EgdmFsdWUuIFByaW9yIHRvIHRoaXMsIHZhcmlhYmxl
c0F0SGVhZFtsb2NhbF0gbWF5IHBvaW50IHRvCisgICAgICAgIC8vIGFuIG9sZCBDUFMgUGhpIGlu
IGEgZGlmZmVyZW50IGJsb2NrLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKKyAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIHdoaWxlIChub2RlLT5yZXBsYWNlbWVudCkKKyAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPnJlcGxhY2VtZW50OworICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWRbaV0gPSBub2RlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiVmFyaWFibGVzIGF0
IGhlYWQgYWZ0ZXIgY29udmVyZ2VuY2U6XG4iKTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgKmJsb2NrLCAiOiAiLCBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gQ29udmVydCBvcGVyYXRpb25zIG92ZXIgbG9jYWxzIGludG8gb3Bl
cmF0aW9ucyBvdmVyIFNTQSBub2Rlcy4KKyAgICAgICAgLy8gLSBHZXRMb2NhbCBvdmVyIGNhcHR1
cmVkIHZhcmlhYmxlcyBsb3NlIHRoZWlyIHBoaXMuCisgICAgICAgIC8vIC0gR2V0TG9jYWwgb3Zl
ciB1bmNhcHR1cmVkIHZhcmlhYmxlcyBkaWUgYW5kIGdldCByZXBsYWNlZCB3aXRoIHJlZmVyZW5j
ZXMKKyAgICAgICAgLy8gICB0byB0aGUgbm9kZSBzcGVjaWZpZWQgYnkgdmFyaWFibGVzQXRIZWFk
LgorICAgICAgICAvLyAtIFNldExvY2FsIGdldHMgTm9kZU11c3RHZW5lcmF0ZSBpZiBpdCdzIGZs
dXNoZWQsIG9yIHR1cm5zIGludG8gYQorICAgICAgICAvLyAgIE1vdkhpbnQgb3RoZXJ3aXNlLgor
ICAgICAgICAvLyAtIEZsdXNoIGxvc2VzIGl0cyBjaGlsZHJlbiBidXQgcmVtYWlucywgYmVjYXVz
ZSB3ZSB3YW50IHRvIGtub3cgd2hlbiBhCisgICAgICAgIC8vICAgZmx1c2hlZCBTZXRMb2NhbCdz
IHZhbHVlIGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoaXMgYWxzbyBtYWtlcyBpdCBzaW1wbGVyCisg
ICAgICAgIC8vICAgdG8gcmVhc29uIGFib3V0IHRoZSBmb3JtYXQgb2YgYSBsb2NhbCwgc2luY2Ug
d2UgY2FuIGp1c3QgZm9sZCBpdCBpbnRvIHRoZQorICAgICAgICAvLyAgIGJhY2t3YXJkcyBhbmFs
eXNpcyB0aGF0IExpdmVuZXNzQW5hbHlzaXNQaGFzZSBkb2VzLiBBcyBwYXJ0IG9mIHRoZQorICAg
ICAgICAvLyAgIGJhY2t3YXJkcyBhbmFseXNpcywgd2Ugc2F5IHRoYXQgdGhlIHR5cGUgb2YgYSBs
b2NhbCBjYW4gYmUgZWl0aGVyCisgICAgICAgIC8vICAgaW50MzIsIGRvdWJsZSwgdmFsdWUsIG9y
IGRlYWQuCisgICAgICAgIC8vIC0gUGhhbnRvbUxvY2FsIGJlY29tZXMgUGhhbnRvbSwgYW5kIGl0
cyBjaGlsZCBpcyB3aGF0ZXZlciBpcyBzcGVjaWZpZWQKKyAgICAgICAgLy8gICBieSB2YXJpYWJs
ZXNBdEhlYWQuCisgICAgICAgIC8vIC0gU2V0QXJndW1lbnQgdHVybnMgaW50byBHZXRBcmd1bWVu
dC4KKyAgICAgICAgLy8gLSBVcHNpbG9ucyBnZXQgdGhlaXIgY2hpbGRyZW4gZml4ZWQgdG8gcmVm
ZXIgdG8gdGhlIHRydWUgdmFsdWUgb2YgdGhhdCBsb2NhbAorICAgICAgICAvLyAgIGF0IHRoZSBl
bmQgb2YgdGhlIGJsb2NrLiBQcmlvciB0byB0aGlzIGxvb3AsIFVwc2lsb25zIHdpbGwgcmVmZXIg
dG8KKyAgICAgICAgLy8gICB2YXJpYWJsZUF0VGFpbFtvcGVyYW5kXSwgd2hpY2ggbWF5IGJlIGFu
eSBvZiBGbHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwKKyAgICAgICAgLy8gICBTZXRMb2Nh
bCwgU2V0QXJndW1lbnQsIG9yIFBoaS4gV2UgYWNjb21wbGlzaCB0aGlzIGJ5IHNldHRpbmcgdGhl
CisgICAgICAgIC8vICAgcmVwbGFjZW1lbnQgcG9pbnRlcnMgb2YgYWxsIG9mIHRob3NlIG5vZGVz
IHRvIHJlZmVyIHRvIGVpdGhlcgorICAgICAgICAvLyAgIHZhcmlhYmxlc0F0SGVhZFtvcGVyYW5k
XSwgb3IgdGhlIGNoaWxkIG9mIHRoZSBTZXRMb2NhbC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Cisg
ICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMu
c2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUlu
ZGV4XS0+cmVwbGFjZW1lbnQgPQorICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVz
QXRIZWFkLm9wZXJhbmQoYmxvY2stPnBoaXNbcGhpSW5kZXhdLT5sb2NhbCgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUo
KTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgICAgIEFTU0VSVCghYmxvY2stPmF0KG5vZGVJ
bmRleCktPnJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRl
eCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0
dXRpb24obm9kZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJl
ZCgpIHx8IG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZh
dWx0RmxhZ3MoTW92SGludCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOyAvLyBPbmx5IGZvciBVcHNpbG9ucy4KKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAg
IC8vIEl0IHNlZW1zIHRlbXB0aW5nIHRvIGp1c3QgZG8gZm9yd2FyZFBoaShHZXRMb2NhbCksIGV4
Y2VwdCB0aGF0IHdlCisgICAgICAgICAgICAgICAgICAgIC8vIGNvdWxkIGhhdmUgY3JlYXRlZCBh
IG5ldyAoU1NBKSBQaGksIGFuZCB0aGUgR2V0TG9jYWwgY291bGQgc3RpbGwgYmUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gcmVmZXJyaW5nIHRvIGFuIG9sZCAoQ1BTKSBQaGkuIFVzZXMgdmFyaWFi
bGVzQXRIZWFkIHRvIHRlbGwgdXMgd2hhdAorICAgICAgICAgICAgICAgICAgICAvLyB0byByZWZl
ciB0by4KKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOiB7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgb25seSBmb3IgVXBzaWxvbnMuIEFuIFVwc2lsb24gd2lsbCBvbmx5IHJl
ZmVyIHRvIGEgRmx1c2ggaWYKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUgd2VyZSBubyBT
ZXRMb2NhbHMgb3IgR2V0TG9jYWxzIGluIHRoZSBibG9jay4KKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+cmVwbGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6
IHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFi
bGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5zZXROb2RlKGJsb2NrLT52YXJpYWJsZXNBdEhl
YWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgb25s
eSBmb3IgVXBzaWxvbnMuIEFuIFVwc2lsb24gd2lsbCBvbmx5IHJlZmVyIHRvIGEKKyAgICAgICAg
ICAgICAgICAgICAgLy8gUGhhbnRvbUxvY2FsIGlmIHRoZXJlIHdlcmUgbm8gU2V0TG9jYWxzIG9y
IEdldExvY2FscyBpbiB0aGUgYmxvY2suCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxh
Y2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldEFyZ3VtZW50KTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhyZXN1bHRGb3Iobm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGcmVlIGFsbCBwaGlzIGFuZCByZXNl
dCB2YXJpYWJsZXMgdmVjdG9ycy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4
XSk7CisgICAgICAgICAgICBibG9jay0+cGhpcy5jbGVhcigpOworICAgICAgICAgICAgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5jbGVhcigpOworICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOwor
ICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5jbGVhcigpOworICAgICAgICAgICAgYmxv
Y2stPnNzYSA9IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrOjpTU0FEYXRhKGJsb2NrKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMuY2xlYXIoKTsKKyAg
ICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gU1NBOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBmb3J3YXJkUGhpQ2hpbGRyZW4oTm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lM
aXN0OjpTaXplOyArK2kpIHsKKyAgICAgICAgICAgIEVkZ2UmIGVkZ2UgPSBub2RlLT5jaGlsZHJl
bi5jaGlsZChpKTsKKyAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBmb3J3YXJkUGhpRWRnZShlZGdlKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBmb3J3YXJkUGhpKE5vZGUqIG5vZGUpCisg
ICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0g
bm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7CisgICAgICAgICAgICAgICAgaWYgKCFlZGdl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZWRnZS5ub2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEdldExvY2Fs
OgorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBmb3J3YXJkUGhp
RWRnZShFZGdlJiBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSogbmV3Tm9kZSA9IGZvcndhcmRQ
aGkoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAobmV3Tm9kZSA9PSBlZGdlLm5vZGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWR1cGxpY2F0ZUNo
aWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBu
b2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChlZGdlID09IG5vZGUpIHsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGktLSk7CisgICAgICAgICAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgQWRqYWNlbmN5TGlz
dDo6U2l6ZTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkcmVuLmNoaWxk
KGopID09IGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3Zl
RWRnZShqLS0pOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2
b2lkIGFkZEZsdXNoZWRMb2NhbE9wKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobV9m
bHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIG1fZmx1c2hlZExvY2FsT3BzLmFkZChub2RlKTsKKyAgICAgICAgbV9mbHVzaGVkTG9jYWxP
cFdvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZEZsdXNoZWRMb2Nh
bEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9w
KGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9u
U2V0OworICAgIEhhc2hTZXQ8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BzOworICAgIFZlY3RvcjxO
b2RlKj4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OworICAgIGJvb2wgbV9jaGFuZ2VkOworfTsK
KworYm9vbCBwZXJmb3JtU1NBQ29udmVyc2lvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxp
bmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBTU0EgQ29udmVyc2lvbiBQaGFzZSIpOworICAg
IHJldHVybiBydW5QaGFzZTxTU0FDb252ZXJzaW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2Uu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVy
c2lvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdTU0FDb252ZXJz
aW9uUGhhc2VfaAorI2RlZmluZSBERkdTU0FDb252ZXJzaW9uUGhhc2VfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ29udmVydCBUaHJlYWRlZENQ
UyBmb3JtIGludG8gU1NBIGZvcm0uIFRoaXMgcmVzdWx0cyBpbiBhIGZvcm0gdGhhdCBoYXM6Cisv
LworLy8gLSBSb3VnaGx5IG1pbmltYWwgUGhpJ3MuIFdlIHVzZSB0aGUgQXljb2NrICYgSG9yc3Bv
b2wgZml4cG9pbnQgZm9yCisvLyAgIGNvbnZlcnRpbmcgdGhlIENQUyBtYXhpbWFsIFBoaXMgaW50
byBTU0EgbWluaW1hbCBQaGlzLCB3aXRoIHRoZSBjYXZlYXQKKy8vICAgdGhhdCBpcnJlZHVjaWJs
ZSBjb250cm9sIGZsb3cgbWF5IHJlc3VsdCBpbiBzb21lIG1pc3NlZCBvcHBvcnR1bml0aWVzCisv
LyAgIGZvciBQaGkgcmVkdWN0aW9uLgorLy8KKy8vIC0gTm8gdXNlcyBvZiBHZXRMb2NhbC9TZXRM
b2NhbCBleGNlcHQgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcyBhbmQgZmx1c2hlcy4KKy8vICAgQWZ0
ZXIgdGhpcywgYW55IHJlbWFpbmluZyBTZXRMb2NhbCBtZWFucyBGbHVzaC4gRmx1c2ggbm9kZXMg
YXJlCisvLyAgIGVsaW1pbmF0ZWQuIFBoYW50b21Mb2NhbHMgYmVjb21lIFBoYW50b21zLiBOb2Rl
cyBtYXkgbWF5IGhhdmUgY2hpbGRyZW4KKy8vICAgdGhhdCBhcmUgaW4gYW5vdGhlciBiYXNpYyBi
bG9jay4KKy8vCisvLyAtIE1vdkhpbnRzIGFyZSB1c2VkIGZvciBPU1IgaW5mb3JtYXRpb24sIGFu
ZCBhcmUgdGhlbXNlbHZlcyBtaW5pbWFsLgorLy8gICBBIE1vdkhpbnQgd2lsbCBvY2N1ciBhdCBz
b21lIHBvaW50IGFmdGVyIHRoZSBhc3NpZ25pbmcsIGFuZCBhdCBQaGkKKy8vICAgcG9pbnRzLgor
Ly8KKy8vIC0gVW5saWtlIGNvbnZlbnRpb25hbCBTU0EgaW4gd2hpY2ggUGhpIGZ1bmN0aW9ucyBy
ZWZlciB0byBwcmVkZWNlc3NvcnMKKy8vICAgYW5kIHZhbHVlcywgb3VyIFNTQSB1c2VzIFVwc2ls
b24gZnVuY3Rpb25zIHRvIGluZGljYXRlIHZhbHVlcyBpbgorLy8gICBwcmVkZWNlc3NvcnMuIEEg
bWVyZ2Ugd2lsbCBsb29rIGxpa2U6CisvLworLy8gICBsYWJlbEE6CisvLyAgICAgICBhOiBUaGlu
Z3koLi4uKQorLy8gICAgICAgYjogVXBzaWxvbiheZSwgQGEpCisvLyAgICAgICBKdW1wKGxhYmVs
QykKKy8vCisvLyAgIGxhYmVsQjoKKy8vICAgICAgIGM6IE90aGVyVGhpbmd5KC4uLikKKy8vICAg
ICAgIGQ6IFVwc2lsb24oXmUsIEBjKQorLy8gICAgICAgSnVtcChsYWJlbEMpCisvLworLy8gICBs
YWJlbEM6CisvLyAgICAgICBlOiBQaGkoKQorLy8KKy8vICAgTm90ZSB0aGF0IHRoZSBQaGkgaGFz
IG5vIGNoaWxkcmVuLCBidXQgdGhlIHByZWRlY2Vzc29ycyBoYXZlIFVwc2lsb25zCisvLyAgIHRo
YXQgaGF2ZSBhIHdlYWsgcmVmZXJlbmNlIHRvIHRoZSBQaGkgKF5lIGluc3RlYWQgb2YgQGU7IHdl
IHN0b3JlIGl0CisvLyAgIGluIHRoZSBPcEluZm8gcmF0aGVyIHRoYW4gdGhlIEFkamFjZW5jeUxp
c3QpLiBUaGluayBvZiB0aGUgVXBzaWxvbgorLy8gICBhcyAiYXNzaWduaW5nIiB0byB0aGUgInZh
cmlhYmxlIiBhc3NvY2lhdGVkIHdpdGggdGhlIFBoaSwgYW5kIHRoYXQKKy8vICAgdGhpcyBpcyB0
aGUgb25lIHBsYWNlIGluIFNTQSBmb3JtIHdoZXJlIHlvdSBjYW4gaGF2ZSBtdWx0aXBsZQorLy8g
ICBhc3NpZ25tZW50cy4KKy8vCisvLyAgIFRoaXMgaW1wbGllcyBzb21lIG90aGVyIGxvb3Nlbmlu
Z3Mgb2YgU1NBLiBGb3IgZXhhbXBsZSwgYW4gVXBzaWxvbgorLy8gICBtYXkgcHJlY2VkZSBhIFBo
aSBpbiB0aGUgc2FtZSBiYXNpYyBibG9jazsgdGhpcyBtYXkgYXJpc2UgYWZ0ZXIgQ0ZHCisvLyAg
IHNpbXBsaWZpY2F0aW9uLiBBbHRob3VnaCBpdCdzIHByb2ZpdGFibGUgZm9yIENGRyBzaW1wbGlm
aWNhdGlvbiAob3IKKy8vICAgc29tZSBvdGhlciBwaGFzZSkgdG8gcmVtb3ZlIHRoZXNlLCBpdCdz
IG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuIEFzCisvLyAgIHdlbGwsIHRoaXMgZm9ybSBhbGxvd3Mg
dGhlIFVwc2lsb24gdG8gYmUgaW4gYW55IGJsb2NrIHRoYXQgZG9taW5hdGVzCisvLyAgIHRoZSBw
cmVkZWNlc3NvciBibG9jayBvZiB0aGUgUGhpLCB3aGljaCBhbGxvd3MgZm9yIGJsb2NrIHNwbGl0
dGluZyB0bworLy8gICBpZ25vcmUgdGhlIHBvc3NpYmlsaXR5IG9mIGludHJvZHVjaW5nIGFuIGV4
dHJhIGVkZ2UgYmV0d2VlbiB0aGUgUGhpCisvLyAgIGFuZCB0aGUgcHJlZGVjZXNzb3IgKHRob3Vn
aCBub3JtYWwgU1NBIHdvdWxkIGFsbG93IHRoaXMsIGFsc28sIHdpdGgKKy8vICAgdGhlIGNhdmVh
dCB0aGF0IHRoZSBQaGkgcHJlZGVjZXNzb3IgYmxvY2sgbGlzdHMgd291bGQgaGF2ZSB0byBiZQor
Ly8gICB1cGRhdGVkKS4KKy8vCisvLyAgIFRoZSBlYXNpZXN0IHdheSB0byBjb252ZXJ0IGZyb20g
dGhpcyBTU0EgZm9ybSBpbnRvIGEgZGlmZmVyZW50IFNTQQorLy8gICBmb3JtIGlzIHRvIHJlZG8g
U1NBIGNvbnZlcnNpb24gZm9yIFBoaSBmdW5jdGlvbnMuIFRoYXQgaXMsIHRyZWF0IGVhY2gKKy8v
ICAgUGhpIGluIG91ciBJUiBhcyBhIG5vbi1TU0EgdmFyaWFibGUgaW4gdGhlIGZvcmVpZ24gSVIg
KHNvLCBhcyBhbgorLy8gICBhbGxvY2EgaW4gTExWTSBJUiwgZm9yIGV4YW1wbGUpOyB0aGUgVXBz
aWxvbnMgdGhhdCByZWZlciB0byB0aGUgUGhpCisvLyAgIGJlY29tZSBzdG9yZXMgYW5kIHRoZSBQ
aGlzIHRoZW1zZWx2ZXMgYmVjb21lIGxvYWRzLgorLy8KKy8vICAgRnVuIGZhY3Q6IFVwc2lsb24g
aXMgc28gbmFtZWQgYmVjYXVzZSBpdCBjb21lcyBiZWZvcmUgUGhpIGluIHRoZQorLy8gICBhbHBo
YWJldC4gSXQgY2FuIGJlIHdyaXR0ZW4gYXMgIlkiLgorCitib29sIHBlcmZvcm1TU0FDb252ZXJz
aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHU1NBQ29udmVyc2lvblBoYXNlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mzk1LDcgKzQz
OTUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgUGhpOgogICAgIGNhc2UgRmx1c2g6CiAgICAgICAg
IGJyZWFrOwogCkBAIC00ODI5LDYgKzQ4MjgsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6
CisgICAgY2FzZSBQaGk6CisgICAgY2FzZSBVcHNpbG9uOgorICAgIGNhc2UgR2V0QXJndW1lbnQ6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI5Niw3ICs0
Mjk2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0K
IAogICAgIGNhc2UgRmx1c2g6Ci0gICAgY2FzZSBQaGk6CiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBCcmVha3BvaW50OgpAQCAtNDY5MCw2ICs0Njg5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBMYXN0Tm9kZVR5cGU6CisgICAgY2FzZSBQaGk6CisgICAgY2FzZSBVcHNpbG9uOgorICAgIGNh
c2UgR2V0QXJndW1lbnQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMjQgKzgxLDI4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIFZfRVFVQUwoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
aSksIDApLCBzdGF0aWNfY2FzdDxOb2RlKj4oMCksIHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2Nh
bChpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBWYWxpZGF0ZSByZWYgY291bnRzIGFuZCB1c2Vz
LgotICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gbXlSZWZDb3VudHM7CiAgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVt
QmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jayB8fCAh
YmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFZBTElEQVRFKChibG9jayksIGJsb2NrLT5pc1Jl
YWNoYWJsZSk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1O
b2RlcygpOyArK2kpCi0gICAgICAgICAgICAgICAgbXlSZWZDb3VudHMuYWRkKGJsb2NrLT5ub2Rl
KGkpLCAwKTsKKyAgICAgICAgICAgICAgICBtX215UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShp
KSwgMCk7CiAgICAgICAgIH0KLSAgICAgICAgSGFzaFNldDxOb2RlKj4gYWNjZXB0YWJsZU5vZGVz
OwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICgh
YmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGlmICghYmxvY2spCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPm5vZGUoaSk7Ci0gICAgICAgICAgICAgICAgYWNjZXB0YWJsZU5vZGVzLmFkZChu
b2RlKTsKKyAgICAgICAgICAgICAgICBtX2FjY2VwdGFibGVOb2Rlcy5hZGQobm9kZSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBVcHNpbG9u
KSB7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbV9ncmFwaC5tX2Zvcm0g
PT0gU1NBKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBoaSgpLT5zaG91bGRHZW5l
cmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9teVJlZkNvdW50cy5maW5kKG5vZGUp
LT52YWx1ZSsrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFBoaSBjaGlsZHJlbiBpbiBMb2FkU3RvcmUgZm9ybSBhcmUgaW52YWxp
ZC4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAm
JiBibG9jay0+aXNQaGlJbmRleChpKSkKQEAgLTEwOCwyMiArMTEyLDI4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBteVJlZkNv
dW50cy5maW5kKGVkZ2Uubm9kZSgpKS0+dmFsdWUrKzsKKyAgICAgICAgICAgICAgICAgICAgbV9t
eVJlZkNvdW50cy5maW5kKGVkZ2Uubm9kZSgpKS0+dmFsdWUrKzsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEluIFNTQSwgYWxsIGVkZ2VzIG11c3QgaGFzUmVzdWx0
KCkuCisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2Ut
Pmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAvLyBVbmxlc3MgSSdtIGEgRmx1c2gsIFBoYW50b20sIEdldExvY2FsLCBvciBQaGksIG15IGNo
aWxkcmVuIHNob3VsZCBoYXNSZXN1bHQoKS4KICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKG1fZ3JhcGgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlLCBlZGdlKSwgZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgotICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1Zhcmlh
YmxlQWNjZXNzRGF0YShtX2dyYXBoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSwgZWRnZSksIGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBlZGdlKSwgZWRnZS0+b3AoKSAhPSBTZXRMb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0
YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRn
ZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBMb2NhbGx5VW5pZmllZCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwpAQCAtMTQ4LDYgKzE1OCw5IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNSZXN1bHQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFNTQToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNTcsOSArMTcwLDQ0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jayB8
fCAhYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxv
Y2stPm51bU5vZGVzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+bm9kZShpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3JlZkNvdW50U3RhdGUg
PT0gRXhhY3RSZWZDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG1f
bXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5vZGUt
PnJlZkNvdW50KCksIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9mb3JtKSB7CisgICAgICAgIGNhc2UgTG9hZFN0b3JlOgor
ICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOgorICAgICAgICAgICAgdmFsaWRhdGVDUFMoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU1NBOgorICAgICAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBTU0EgdmVyaWZpY2F0aW9uLgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dy
YXBoOworICAgIEdyYXBoRHVtcE1vZGUgbV9ncmFwaER1bXBNb2RlOworICAgIAorICAgIEhhc2hN
YXA8Tm9kZSosIHVuc2lnbmVkPiBtX215UmVmQ291bnRzOworICAgIEhhc2hTZXQ8Tm9kZSo+IG1f
YWNjZXB0YWJsZU5vZGVzOworICAgIAorICAgIHZvaWQgdmFsaWRhdGVDUFMoKQorICAgIHsKKyAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2Nr
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBI
YXNoU2V0PE5vZGUqPiBwaGlzSW5UaGlzQmxvY2s7CkBAIC0xNzAsMTUgKzIxOCwxMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5hZGQobm9kZSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGJsb2NrLT5pc1BoaUluZGV4KGkpKQogICAgICAgICAgICAgICAgICAgICBw
aGlzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
cmVmQ291bnRTdGF0ZSA9PSBFeGFjdFJlZkNvdW50KQotICAgICAgICAgICAgICAgICAgICBWX0VR
VUFMKChub2RlKSwgbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50
KCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgo
bm9kZSksIG5vZGUtPnJlZkNvdW50KCksIDEpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAg
ICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgYWNjZXB0YWJsZU5v
ZGVzLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlLCBlZGdlKSwgbV9hY2NlcHRhYmxlTm9kZXMuY29udGFpbnMoZWRnZS5ub2RlKCkpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIyOCw3
ICsyNzIsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9
IDA7IGsgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBibG9jay0+cHJlZGVjZXNzb3JzW2td
OwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNb
a10pLCBwcmV2QmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2Nr
LT5wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChsb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
UGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVj
ZXNzb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBh
dmFpbGFibGUuCkBAIC0yNzQsMTcgKzMxNywxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICAgICAgICAgIFZBTElEQVRFKChz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGFyZ3VtZW50VG9PcGVyYW5kKGkpKSwgYmxvY2sp
LCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVz
QXRIZWFkLmFyZ3VtZW50KGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09w
ZXJhbmQoaSkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0
YShtX2dyYXBoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVh
ZGVkQ1BTKQotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihhcmd1bWVudFRvT3BlcmFuZChpKSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChp
KS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihhcmd1bWVudFRvT3BlcmFuZChpKSksIGJs
b2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5hcmd1bWVudChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5hcmd1
bWVudChpKSA9IG5vdFNldDsKICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5hcmd1
bWVudChpKSA9IG5vdFNldDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
PihpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSB8fCBibG9jay0+
dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIGJs
b2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkgfHwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCi0gICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCBibG9j
ayksICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIGJsb2NrKSwg
IWJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1fZ3JhcGgpKTsKIAogICAgICAgICAg
ICAgICAgIGdldExvY2FsUG9zaXRpb25zLmxvY2FsKGkpID0gbm90U2V0OwogICAgICAgICAgICAg
ICAgIHNldExvY2FsUG9zaXRpb25zLmxvY2FsKGkpID0gbm90U2V0OwpAQCAtMzIxLDcgKzM2NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAvLyBJZ25vcmUgR2V0TG9jYWwncyB0aGF0IHdlIGtub3cgdG8gYmUgZGVhZCwgYnV0
IHRoYXQgdGhlIGdyYXBoCiAgICAgICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgeWV0IGtub3cg
dG8gYmUgZGVhZC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFteVJlZkNvdW50cy5nZXQobm9k
ZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9teVJlZkNvdW50cy5nZXQobm9kZSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQogICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9PSBub3RTZXQpOwpAQCAtMzU1LDEwICszOTgsNiBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi1wcml2YXRlOgotICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIEdyYXBoRHVt
cE1vZGUgbV9ncmFwaER1bXBNb2RlOwotICAgIAogICAgIHZvaWQgY2hlY2tPcGVyYW5kKAogICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jaywgT3BlcmFuZHM8c2l6ZV90PiYgZ2V0TG9jYWxQb3NpdGlv
bnMsCiAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4mIHNldExvY2FsUG9zaXRpb25zLCBpbnQgb3Bl
cmFuZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2RlZmluZSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAogCiAjaW5jbHVkZSAiREZHRG91
YmxlRm9ybWF0U3RhdGUuaCIKKyNpbmNsdWRlICJERkdGbHVzaEZvcm1hdC5oIgogI2luY2x1ZGUg
IkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiU3BlY3Vs
YXRlZFR5cGUuaCIKQEAgLTMxOCw2ICszMTksMjkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
Y2hlY2tBbmRTZXQobV9mbGFncywgbV9mbGFncyB8IG5ld0ZsYWdzKTsKICAgICB9CiAgICAgCisg
ICAgRmx1c2hGb3JtYXQgZmx1c2hGb3JtYXQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZpbmQo
KSA9PSB0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGlmICghc2hvdWxkVW5ib3hJZlBvc3NpYmxl
KCkpCisgICAgICAgICAgICByZXR1cm4gRmx1c2hlZEpTVmFsdWU7CisgICAgICAgIAorICAgICAg
ICBpZiAoc2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCisgICAgICAgICAgICByZXR1cm4gRmx1c2hl
ZERvdWJsZTsKKyAgICAgICAgCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBh
cmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRJbnQzMjsKKyAgICAgICAg
CisgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAg
IHJldHVybiBGbHVzaGVkQ2VsbDsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBGbHVzaGVkQm9vbGVhbjsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBGbHVzaGVkSlNWYWx1ZTsKKyAgICB9CisgICAgCiBw
cml2YXRlOgogICAgIC8vIFRoaXMgaXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNl
IGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAogICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2FtZSBv
cGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9u
IDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxl
KE5vZGUqIG5vZGUpCiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAg
IGNhc2UgRm9yd2FyZEZvcmNlT1NSRXhpdDoKKyAgICBjYXNlIFBoaToKKyAgICBjYXNlIFVwc2ls
b246CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBH
ZXRBcnJheUxlbmd0aDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRl
ICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5o
IgorI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKICNpbmNsdWRlICJGVExPdXRwdXQu
aCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJGVExWYWx1ZVNvdXJjZS5oIgpA
QCAtNjEsMTAgKzYyLDYgQEAgcHVibGljOgogICAgICAgICAsIG1fZnRsU3RhdGUoc3RhdGUpCiAg
ICAgICAgICwgbV9oZWFwcyhzdGF0ZS5jb250ZXh0KQogICAgICAgICAsIG1fb3V0KHN0YXRlLmNv
bnRleHQpCi0gICAgICAgICwgbV9sb2NhbHNCb29sZWFuKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAgLCBtX2xvY2FsczMyKE9wZXJh
bmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAg
LCBtX2xvY2FsczY0KE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZCkKLSAgICAgICAgLCBtX2xvY2Fsc0RvdWJsZShPcGVyYW5kc0xpa2UsIHN0YXRlLmdy
YXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAgICwgbV92YWx1ZVNvdXJjZXMo
T3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAg
ICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkK
ICAgICAgICAgLCBtX2V4aXRUaHVua0dlbmVyYXRvcihzdGF0ZSkKQEAgLTc0LDYgKzcxLDggQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgbG93ZXIoKQogICAgIHsKKyAgICAgICAgbV9ncmFwaC5t
X2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAgICAKICAgICAg
ICAgbV9mdGxTdGF0ZS5tb2R1bGUgPQogICAgICAgICAgICAgTExWTU1vZHVsZUNyZWF0ZVdpdGhO
YW1lSW5Db250ZXh0KCJqc0JvZHkiLCBtX2Z0bFN0YXRlLmNvbnRleHQpOwogICAgICAgICAKQEAg
LTg1LDE1ICs4NCw5IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fcHJvbG9ndWUgPSBh
cHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuY29udGV4dCwgbV9mdGxTdGF0ZS5mdW5jdGlvbik7
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gbV9sb2NhbHNCb29sZWFuLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAg
ICAgIG1fbG9jYWxzQm9vbGVhbltpbmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIs
IG1fb3V0LmJvb2xlYW4pOwotICAgICAgICAgICAgbV9sb2NhbHMzMltpbmRleF0gPSBidWlsZEFs
bG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmludDMyKTsKLSAgICAgICAgICAgIG1fbG9jYWxz
NjRbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291dC5pbnQ2NCk7Ci0g
ICAgICAgICAgICBtX2xvY2Fsc0RvdWJsZVtpbmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1
aWxkZXIsIG1fb3V0LmRvdWJsZVR5cGUpOwotICAgICAgICB9CisgICAgICAgIGNyZWF0ZVBoaVZh
cmlhYmxlcygpOwogICAgICAgICAKICAgICAgICAgbV9pbml0aWFsaXphdGlvbiA9IGFwcGVuZEJh
c2ljQmxvY2sobV9mdGxTdGF0ZS5jb250ZXh0LCBtX2Z0bFN0YXRlLmZ1bmN0aW9uKTsKLSAgICAg
ICAgbV9hcmd1bWVudENoZWNrcyA9IGFwcGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5jb250ZXh0
LCBtX2Z0bFN0YXRlLmZ1bmN0aW9uKTsKIAogICAgICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0LnBh
cmFtKDApOwogICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5
cGVOdW1iZXIpOwpAQCAtMTA0LDIzICs5NywxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAo
IW1faGlnaEJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgbV9i
bG9ja3MuYWRkKG1faGlnaEJsb2NrLCBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJsb2NrICIsICpt
X2hpZ2hCbG9jaykpKTsKLSAgICAgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wUm9vdHMoKTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgY2xvc2VPdmVyRmx1c2hlZExvY2FsT3BzKCk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhtX2FyZ3VtZW50Q2hlY2tzLCBsb3dCbG9j
ayhtX2dyYXBoLmJsb2NrKDApKSk7Ci0KLSAgICAgICAgdHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50
cygpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX2dyYXBoLmJsb2Nr
KDApKSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpCi0gICAgICAg
ICAgICBjb21waWxlQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gZGVwdGhGaXJzdDsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRl
cihkZXB0aEZpcnN0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmly
c3Quc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjb21waWxlQmxvY2soZGVwdGhGaXJzdFtpXSk7
CiAgICAgICAgIAogICAgICAgICAvLyBBbmQgbm93IGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlv
biBibG9jay4KICAgICAgICAgbGlua09TUkV4aXRzQW5kQ29tcGxldGVJbml0aWFsaXphdGlvbkJs
b2NrcygpOwogCisgICAgICAgIGlmIChPcHRpb25zOjpkdW1wTExWTUlSKCkpCisgICAgICAgICAg
ICBkdW1wTW9kdWxlKG1fZnRsU3RhdGUubW9kdWxlKTsKKyAgICAgICAgCiAgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBtX2Z0bFN0YXRlLmR1bXBT
dGF0ZSgiYWZ0ZXIgbG93ZXJpbmciKTsKICAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkp
CkBAIC0xMjksOTkgKzExOCw1MiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgCi0gICAgdm9p
ZCBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
bm9kZUluZGV4ID0gbV9oaWdoQmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7Ci0gICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV9oaWdoQmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSAhPSBGbHVzaCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wKG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIHZvaWQgY2xvc2VPdmVyRmx1c2hlZExvY2FsT3BzKCkKLSAgICB7Ci0gICAgICAgIHdo
aWxlICghbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgICAg
ICBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3QucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBBU1NFUlQobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBu
b2RlLCBhZGRGbHVzaGVkTG9jYWxFZGdlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2
b2lkIGFkZEZsdXNoZWRMb2NhbE9wKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAobV9m
bHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIG1fZmx1c2hlZExvY2FsT3BzLmFkZChub2RlKTsKLSAgICAgICAgbV9mbHVzaGVkTG9jYWxP
cFdvcmtsaXN0LmFwcGVuZChub2RlKTsKLSAgICB9Ci0gICAgdm9pZCBhZGRGbHVzaGVkTG9jYWxF
ZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcChl
ZGdlLm5vZGUoKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdHJhbnNmZXJBbmRDaGVja0FyZ3Vt
ZW50cygpCisgICAgdm9pZCBjcmVhdGVQaGlWYXJpYWJsZXMoKQogICAgIHsKLSAgICAgICAgLy8g
V2hpbGUgY2hlY2tpbmcgYXJndW1lbnRzLCBldmVyeXRoaW5nIGlzIGluIHRoZSBzdGFjay4KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YWx1ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KQotICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7
Ci0gICAgICAgIAotICAgICAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKDApOwotICAgICAg
ICBtX25vZGUgPSAwOwotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2dy
YXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewotICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07Ci0gICAgICAgICAgICBpZiAoIW5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYg
KCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwotICAgICAgICAgICAgLy8gSWYgaXQncyBjYXB0dXJlZCB0aGVuIHdlJ2xsIGJlIGFj
Y2Vzc2luZyBpdCB0aHJvdWdoIGxvYWRzIGFuZCBzdG9yZXMKLSAgICAgICAgICAgIC8vIGFueXdh
eSAtIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gdHJhbnNmZXJpbmcgaXQgb3V0LgotICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFk
ZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCF2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24g
PSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1
ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fb3V0LnNldCh1bmJveEludDMyKGpzVmFsdWUpLCBtX2xvY2FsczMyLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0NlbGxT
cGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVC
YWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChq
c1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldChqc1ZhbHVlLCBtX2xvY2Fs
czY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5T
cGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVC
YWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Qm9vbGVh
bihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldCh1bmJveEJvb2xlYW4o
anNWYWx1ZSksIG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJ
bmRleC0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBQaGkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIExUeXBlIHR5cGU7CisgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5mbGFncygpICYgTm9kZVJlc3VsdE1hc2spIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHROdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIHR5
cGUgPSBtX291dC5kb3VibGVUeXBlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9IG1fb3V0LmludDMyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIE5vZGVSZXN1bHRCb29sZWFuOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0g
bV9vdXQuYm9vbGVhbjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBOb2RlUmVzdWx0SlM6CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtX291dC5p
bnQ2NDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIG1fcGhpcy5hZGQobm9kZSwgYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCB0eXBlKSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LnNldChqc1Zh
bHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgp
CisgICAgdm9pZCBjb21waWxlQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAg
ICBtX2hpZ2hCbG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb21waWxp
bmcgYmxvY2sgIiwgKmJsb2NrLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIG1faGlnaEJsb2Nr
ID0gYmxvY2s7CiAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayA9IG1fYmxvY2tzLmdldCht
X2hpZ2hCbG9jayk7CiAgICAgICAgIAogICAgICAgICBtX25leHRIaWdoQmxvY2sgPSAwOwotICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBibG9ja0luZGV4ICsgMTsgbmV4
dEJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK25leHRCbG9ja0luZGV4KSB7Cisg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBuZXh0QmxvY2tJbmRleCA9IG1faGlnaEJsb2NrLT5pbmRl
eCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytuZXh0QmxvY2tJ
bmRleCkgewogICAgICAgICAgICAgbV9uZXh0SGlnaEJsb2NrID0gbV9ncmFwaC5ibG9jayhuZXh0
QmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAobV9uZXh0SGlnaEJsb2NrKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjQxLDExICsxODMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKCk7CiAgICAgICAgIAotICAgICAg
ICBtX2ludDMyVmFsdWVzLmNsZWFyKCk7Ci0gICAgICAgIG1fanNWYWx1ZVZhbHVlcy5jbGVhcigp
OwotICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuY2xlYXIoKTsKLSAgICAgICAgbV9zdG9yYWdlVmFs
dWVzLmNsZWFyKCk7Ci0gICAgICAgIG1fdGltZVRvTGl2ZS5jbGVhcigpOworICAgICAgICBtX2xp
dmUgPSBibG9jay0+c3NhLT5saXZlQXRIZWFkOwogICAgICAgICAKICAgICAgICAgbV9zdGF0ZS5y
ZXNldCgpOwogICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhtX2hpZ2hCbG9jayk7CkBA
IC0yNzQsMTIgKzIxMiwyMSBAQCBwcml2YXRlOgogICAgICAgICBtX2RpcmVjdGlvbiA9IChtX25v
ZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSA/IEZvcndhcmRTcGVjdWxhdGlvbiA6IEJh
Y2t3YXJkU3BlY3VsYXRpb247CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+b3Ao
KSkgeworICAgICAgICBjYXNlIFVwc2lsb246CisgICAgICAgICAgICBjb21waWxlVXBzaWxvbigp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgY29t
cGlsZVBoaSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoK
ICAgICAgICAgICAgIGNvbXBpbGVKU0NvbnN0YW50KCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKICAgICAgICAgICAgIGNvbXBpbGVXZWFrSlNDb25z
dGFudCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6Cisg
ICAgICAgICAgICBjb21waWxlR2V0QXJndW1lbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgY29tcGlsZUdldExvY2FsKCk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTQ0NSw4ICszOTIsOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAo
bV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJ
TERSRU4obV9ncmFwaCwgbV9ub2RlLCB1c2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9k
ZS0+aGFzUmVzdWx0KCkpCi0gICAgICAgICAgICBtX3RpbWVUb0xpdmUuYWRkKG1fbm9kZSwgbV9u
b2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICBpZiAobV9ub2RlLT5hZGp1c3RlZFJl
ZkNvdW50KCkpCisgICAgICAgICAgICBtX2xpdmUuYWRkKG1fbm9kZSk7CiAgICAgICAgIAogICAg
ICAgICBpZiAoc2hvdWxkRXhlY3V0ZUVmZmVjdHMpCiAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1
dGVFZmZlY3RzKG5vZGVJbmRleCk7CkBAIC00NTQsNzMgKzQwMSwxMTYgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29tcGlsZVVwc2lsb24o
KQorICAgIHsKKyAgICAgICAgTFZhbHVlIGRlc3RpbmF0aW9uID0gbV9waGlzLmdldChtX25vZGUt
PnBoaSgpKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBtX291dC5zZXQo
bG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgIG1fb3V0LnNldChsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgICAgIG1fb3V0LnNldChsb3dCb29s
ZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBtX291dC5zZXQobG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxl
UGhpKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBzb3VyY2UgPSBtX3BoaXMuZ2V0KG1fbm9kZSk7
CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRN
YXNrKSB7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdE51bWJlcjoKKyAgICAgICAgICAgIHNldERv
dWJsZShtX291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOb2RlUmVzdWx0SW50MzI6CisgICAgICAgICAgICBzZXRJbnQzMihtX291dC5nZXQoc291cmNl
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoK
KyAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQuZ2V0KHNvdXJjZSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEpTOgorICAgICAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5nZXQoc291cmNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICB2b2lkIGNvbXBpbGVKU0NvbnN0
YW50KCkKICAgICB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0Nv
bnN0YW50KG1fbm9kZSk7CiAgICAgICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQotICAgICAgICAg
ICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuY29uc3REb3VibGUodmFsdWUuYXNE
b3VibGUoKSkpOworICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmNvbnN0RG91YmxlKHZhbHVl
LmFzRG91YmxlKCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVz
LmFkZChtX25vZGUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSkpOwor
ICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZSh2
YWx1ZSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlV2Vha0pTQ29uc3RhbnQoKQog
ICAgIHsKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIHdlYWtQb2ludGVyKG1f
bm9kZS0+d2Vha0NvbnN0YW50KCkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh3ZWFrUG9pbnRlciht
X25vZGUtPndlYWtDb25zdGFudCgpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdl
dEFyZ3VtZW50KCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBpbnQgb3BlcmFuZCA9IHZh
cmlhYmxlLT5vcGVyYW5kKCk7CisKKyAgICAgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZSBwcm9maWxlID0KKyAgICAgICAgICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmZy
b21MYXp5T3BlcmFuZCgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jaywK
KyAgICAgICAgICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgwLCBvcGVyYW5kKSk7
CisKKyAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVy
YW5kKSk7CisKKyAgICAgICAgc3dpdGNoICh1c2VLaW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1h
dCgpKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlQmFj
a3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBwcm9maWxlLCBpc05vdEludDMy
KGpzVmFsdWUpKTsKKyAgICAgICAgICAgIHNldEludDMyKHVuYm94SW50MzIoanNWYWx1ZSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgcHJvZmlsZSwg
aXNOb3RDZWxsKGpzVmFsdWUpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoanNWYWx1ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICAgICAg
c3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBwcm9maWxl
LCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOworICAgICAgICAgICAgc2V0Qm9vbGVhbih1bmJveEJv
b2xlYW4oanNWYWx1ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVW50eXBl
ZFVzZToKKyAgICAgICAgICAgIHNldEpTVmFsdWUoanNWYWx1ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2
b2lkIGNvbXBpbGVHZXRMb2NhbCgpCiAgICAgewotICAgICAgICAvLyBHZXRMb2NhbCBpcyBvbmUg
b2YgdGhlIGZldyBub2RlcyB0aGF0IG1heSBiZSBsZWZ0IGJlaGluZCwgd2l0aCAhc2hvdWxkR2Vu
ZXJhdGUoKS4KLSAgICAgICAgaWYgKCFtX25vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIC8vIEdldExvY2FscyBhcmlzZSBvbmx5IGZvciBjYXB0dXJl
ZCB2YXJpYWJsZXMuCiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAg
ICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBT
cGVjTm9uZSkgewotICAgICAgICAgICAgdGVybWluYXRlKEluYWRlcXVhdGVDb3ZlcmFnZSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFy
aWFibGUtPmlzQ2FwdHVyZWQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmFsdWUuaXNDbGVh
cigpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyYXAgaW5zdGVhZC4KLSAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAz
ODMKLSAgICAgICAgICAgIHRlcm1pbmF0ZShJbmFkZXF1YXRlQ292ZXJhZ2UpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodmFyaWFibGUtPmlz
Q2FwdHVyZWQoKSkgewotICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5t
X3ZhbHVlKSkKLSAgICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0
LmxvYWQzMihwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5sb2Fk
NjQoYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElm
UG9zc2libGUoKSkgewotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVG
b3JtYXQoKSkgewotICAgICAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZChtX25vZGUsIG1f
b3V0LmdldChtX2xvY2Fsc0RvdWJsZS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgLy8gTG9jYWxzIHRoYXQgYXJlIG1hcmtlZCBzaG91bGRVbmJveElmUG9zc2libGUoKSB0
aGF0IGFyZW4ndCBhbHNvIGZvcmNlZCB0bwotICAgICAgICAgICAgLy8gdXNlIGRvdWJsZSBmb3Jt
YXQsIGFuZCB0aGF0IGhhdmUgdGhlIHJpZ2h0IHByZWRpY3Rpb24sIHdpbGwgYWx3YXlzIGJlCi0g
ICAgICAgICAgICAvLyBzcGVjdWxhdGVkIG9uIFNldExvY2FsIGFuZCB3aWxsIGFsd2F5cyBiZSBz
dG9yZWQgaW50byBhbiBhcHByb3ByaWF0ZWx5Ci0gICAgICAgICAgICAvLyB0eXBlZCByZWZlcmVu
Y2UgTFZhbHVlLgotICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9u
KSkgewotICAgICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZ2V0
KG1fbG9jYWxzMzIub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3Vs
YXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRk
KG1fbm9kZSwgbV9vdXQuZ2V0KG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIC8vIFdlIHNraXAgdGhlIENlbGwgY2FzZSBoZXJlIGJlY2F1c2UgdGhhdCBnZXRzIHRyZWF0
ZWQgaWRlbnRpY2FsbHkgdG8KLSAgICAgICAgICAgIC8vIEpTVmFsdWVzLCBzaW5jZSBjZWxscyBh
cmUgc3RvcmVkIHVudGFnZ2VkLgotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2pzVmFs
dWVWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZ2V0KG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkpKTsKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5tX3Zh
bHVlKSkKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKHZhcmlh
YmxlLT5sb2NhbCgpKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LmxvYWQ2NChhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNvbXBpbGVTZXRMb2NhbCgpCkBAIC01MjksNjQgKzUxOSw0MCBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKLSAgICAgICAgYm9vbCBu
ZWVkc0ZsdXNoaW5nID0gbV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobV9ub2RlKTsKICAgICAg
ICAgCiAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKICAgICAg
ICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2Fsc0RvdWJsZS5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3Io
dmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2sp
OwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291
cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUluTG9j
YWxzKTsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0Zv
cih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKICAgICAgICAg
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzMzIub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRGb3IodmFyaWFibGUtPmxv
Y2FsKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJbkxvY2Fscyk7CisgICAgICAg
ICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwo
KSkpOworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkgewogICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2Fs
czY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVl
ZHNGbHVzaGluZykgewotICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBh
ZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFs
dWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJ
bkpTU3RhY2spOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZh
bHVlSW5Mb2NhbHMpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJl
c3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNl
cy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNr
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICBt
X291dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgbV9sb2NhbHNCb29sZWFuLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVz
aGluZykgewotICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSksIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBW
YWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
ID0gVmFsdWVTb3VyY2UoVmFsdWVJbkxvY2Fscyk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRl
Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0
KAorICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbiksCisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NGb3IodmFy
aWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAgICAgICBtX291dC5zdG9y
ZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICBt
X3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZh
bHVlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpKTsKLSAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKLSAgICAgICAgICAgIG1fb3V0
LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3Vy
Y2UoVmFsdWVJbkpTU3RhY2spOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkxv
Y2Fscyk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUt
PmxvY2FsKCkpKTsKKyAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgY29tcGlsZU1vdkhpbnQoKQpAQCAtNjIwLDE5ICs1ODYsMTggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihtX25vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9u
b2RlLCBtX291dC5hZGQobGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMiht
X291dC5hZGQobGVmdCwgcmlnaHQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmFk
ZFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVy
Zmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAxKSk7Ci0gICAg
ICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1
bHQsIDApKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQs
IDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZCgKLSAg
ICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXREb3VibGUoCiAgICAgICAgICAg
ICAgICAgbV9vdXQuZG91YmxlQWRkKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91
YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtNjUxLDE5ICs2MTYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihtX25vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5zdWIobGVmdCwg
cmlnaHQpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihtX291dC5zdWIobGVmdCwgcmlnaHQp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnN1YldpdGhPdmVyZmxvdzMyKGxlZnQs
IHJpZ2h0KTsKICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBt
X291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAxKSk7Ci0gICAgICAgICAgICBtX2ludDMyVmFsdWVz
LmFkZChtX25vZGUsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApKTsKKyAgICAgICAgICAg
IHNldEludDMyKG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsK
LSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUs
CisgICAgICAgICAgICBzZXREb3VibGUoCiAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlU3Vi
KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNzAzLDEzICs2NjcsMTIgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9pbnQz
MlZhbHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91YmxlVmFsdWVzLmFkZCgKLSAgICAg
ICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXREb3VibGUoCiAgICAgICAgICAgICAg
ICAgbV9vdXQuZG91YmxlTXVsKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91Ymxl
KG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
ODAwLDEzICs3NjMsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oZG9uZSwgbGFzdE5leHQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cykp
OworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQoCi0gICAgICAg
ICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0RG91YmxlKAogICAgICAgICAgICAgICAg
IG1fb3V0LmRvdWJsZURpdihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTg5
MSwxMyArODUzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGRvbmUsIGxhc3ROZXh0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9p
bnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpKTsK
KyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cykpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IE51bWJlclVzZTogewotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKAotICAgICAgICAg
ICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldERvdWJsZSgKICAgICAgICAgICAgICAgICBt
X291dC5kb3VibGVSZW0obG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC05MTUs
OCArODc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIo
bV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9pbnQzMlZhbHVl
cy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0SW50MzIoCiAg
ICAgICAgICAgICAgICAgbV9vdXQuc2VsZWN0KAogICAgICAgICAgICAgICAgICAgICBtX25vZGUt
Pm9wKCkgPT0gQXJpdGhNaW4KICAgICAgICAgICAgICAgICAgICAgICAgID8gbV9vdXQubGVzc1Ro
YW4obGVmdCwgcmlnaHQpCkBAIC05NTAsNyArOTEwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBtX2RvdWJs
ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgcmVzdWx0cykp
OworICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCByZXN1
bHRzKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC05
NzEsMTIgKzkzMSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBzcGVj
dWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXF1YWwocmVzdWx0LCBtX291dC5j
b25zdEludDMyKDEgPDwgMzEpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faW50MzJW
YWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBtX2RvdWJsZVZhbHVlcy5hZGQobV9ub2RlLCBt
X291dC5kb3VibGVBYnMobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAg
ICBzZXREb3VibGUobV9vdXQuZG91YmxlQWJzKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTAwMywx
MiArOTYzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuZXh0
cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOworICAgICAg
ICAgICAgc2V0SW50MzIocmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgICAgIG1fZG91
YmxlVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmRvdWJsZU5lZyhsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5kb3VibGVOZWcobG93RG91
YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC0xMDIwLDQ3ICs5ODAsMzggQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIGNvbXBpbGVCaXRBbmQoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0g
ICAgICAgICAgICBtX25vZGUsIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgp
KSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQu
Yml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVCaXRPcigpCiAgICAgewotICAg
ICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwgbV9vdXQuYml0T3Io
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7
CisgICAgICAgIHNldEludDMyKG1fb3V0LmJpdE9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkp
LCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVCaXRYb3IoKQogICAgIHsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAg
ICAgICBtX25vZGUsIG1fb3V0LmJpdFhvcihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQuYml0WG9y
KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVCaXRSU2hpZnQoKQogICAgIHsKLSAgICAg
ICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsCi0gICAgICAgICAgICBt
X291dC5hU2hyKAotICAgICAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAot
ICAgICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwg
bV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmFTaHIoCisg
ICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgIG1fb3V0
LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkp
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdExTaGlmdCgpCiAgICAgewotICAg
ICAgICBtX2ludDMyVmFsdWVzLmFkZCgKLSAgICAgICAgICAgIG1fbm9kZSwKLSAgICAgICAgICAg
IG1fb3V0LnNobCgKLSAgICAgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwK
LSAgICAgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSks
IG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5zaGwoCisg
ICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgIG1fb3V0
LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkp
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJpdFVSU2hpZnQoKQogICAgIHsKLSAg
ICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsCi0gICAgICAgICAg
ICBtX291dC5sU2hyKAotICAgICAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkp
LAotICAgICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigp
KSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmxTaHIo
CisgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgIG1f
b3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigz
MSkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVVJbnQzMlRvTnVtYmVyKCkKQEAg
LTEwNjgsMTQgKzEwMTksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgaWYgKCFub2RlQ2FuU3BlY3VsYXRl
SW50ZWdlcihtX25vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7Ci0gICAgICAgICAgICBtX2RvdWJs
ZVZhbHVlcy5hZGQobV9ub2RlLCBtX291dC51bnNpZ25lZFRvRG91YmxlKHZhbHVlKSk7CisgICAg
ICAgICAgICBzZXREb3VibGUobV9vdXQudW5zaWduZWRUb0RvdWJsZSh2YWx1ZSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGVGb3J3
YXJkKAogICAgICAgICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4o
dmFsdWUsIG1fb3V0LmludDMyWmVybyksCiAgICAgICAgICAgICBGb3JtYXR0ZWRWYWx1ZShWYWx1
ZUZvcm1hdFVJbnQzMiwgdmFsdWUpKTsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2Rl
LCB2YWx1ZSk7CisgICAgICAgIHNldEludDMyKHZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlSW50MzJUb0RvdWJsZSgpCkBAIC0xMDg3LDcgKzEwMzgsNyBAQCBwcml2YXRlOgog
ICAgICAgICAvLyBjb250ZW1wb3JhbmVvdXMgbG93LWxldmVsIHJlcHJlc2VudGF0aW9ucy4gU28s
IHRoaXMgZ2l2ZXMgY2hpbGQxIGEgZG91YmxlCiAgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGFu
ZCB0aGVuIGZvcndhcmRzIHRoYXQgcmVwcmVzZW50YXRpb24gdG8gbV9ub2RlLgogICAgICAgICAK
LSAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgbG93RG91YmxlKG1fbm9kZS0+Y2hp
bGQxKCkpKTsKKyAgICAgICAgc2V0RG91YmxlKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKCkKQEAgLTEyMTUs
OCArMTE2Niw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0QnV0dGVyZmx5
KCkKICAgICB7Ci0gICAgICAgIG1fc3RvcmFnZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25v
ZGUsIG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU09i
amVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgc2V0U3RvcmFnZShtX291dC5sb2FkUHRyKGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEFycmF5TGVuZ3RoKCkKQEAgLTEyMjUsOCArMTE3
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAg
ICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAotICAgICAgICAgICAgICAgIG1fbm9kZSwgbV9vdXQu
bG9hZDMyKGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDIoKSksIG1faGVhcHMuQnV0dGVyZmx5X3B1
YmxpY0xlbmd0aCkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKGxvd1N0b3Jh
Z2UobV9ub2RlLT5jaGlsZDIoKSksIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTI1Niw3ICsx
MjA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSwgbV9vdXQuemVy
b0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5m
b3JOb2RlKG1fbm9kZS0+Y2hpbGQyKCkpLm1fdmFsdWUpKTsKICAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIDAsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkp
OwotICAgICAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEyODgsNyArMTIzNyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwg
MCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQocmVzdWx0LCByZXN1bHQpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
bV9kb3VibGVWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBzZXRE
b3VibGUocmVzdWx0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtMTM4OCw4ICsxMzM3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFn
ZUFjY2Vzc0RhdGEmIGRhdGEgPQogICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW21fbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCi0gICAgICAg
IG1fanNWYWx1ZVZhbHVlcy5hZGQoCi0gICAgICAgICAgICBtX25vZGUsCisgICAgICAgIHNldEpT
VmFsdWUoCiAgICAgICAgICAgICBtX291dC5sb2FkNjQoCiAgICAgICAgICAgICAgICAgbV9vdXQu
YWRkcmVzcygKICAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzW2RhdGEuaWRl
bnRpZmllck51bWJlcl0sCkBAIC0xNDEyLDcgKzEzNjAsNyBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgY29tcGlsZUdldEdsb2JhbFZhcigpCiAgICAgewotICAgICAgICBtX2pzVmFsdWVWYWx1
ZXMuYWRkKG1fbm9kZSwgbV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKG1fbm9kZS0+cmVnaXN0
ZXJQb2ludGVyKCkpKSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFi
c29sdXRlKG1fbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgY29tcGlsZVB1dEdsb2JhbFZhcigpCkBAIC0xNDM3LDMwICsxMzg1LDI3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBBU1NFUlQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX25vZGUt
PmNoaWxkMigpLm5vZGUoKSkuaXNOdWxsKCkpOwogICAgICAgICBtYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludElmSXNTdGlsbFZhbGlkKCk7Ci0gICAgICAgIG1fYm9vbGVhblZhbHVlcy5h
ZGQoCi0gICAgICAgICAgICBtX25vZGUsIGVxdWFsTnVsbE9yVW5kZWZpbmVkKAorICAgICAgICBz
ZXRCb29sZWFuKAorICAgICAgICAgICAgZXF1YWxOdWxsT3JVbmRlZmluZWQoCiAgICAgICAgICAg
ICAgICAgbV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxOdWxsT3JVbmRl
ZmluZWQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ29tcGFyZVN0cmljdEVxKCkK
ICAgICB7CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpIHsK
LSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2Rl
LAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5lcXVhbChs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1f
bm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVh
blZhbHVlcy5hZGQoCi0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9v
bGVhbigKICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbChsb3dEb3VibGUobV9ub2Rl
LT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkg
ewogICAgICAgICAgICAgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJZklzU3RpbGxW
YWxpZCgpOwotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAg
ICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0
LmVxdWFsKAogICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxsT2JqZWN0KG1fbm9kZS0+Y2hp
bGQxKCkpLAogICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxsT2JqZWN0KG1fbm9kZS0+Y2hp
bGQyKCkpKSk7CkBAIC0xNDc3LDE5ICsxNDIyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChj
b25zdGFudC5pc1VuZGVmaW5lZE9yTnVsbCgpCiAgICAgICAgICAgICAmJiAhbWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnRJZklzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAgICBpZiAo
Y29uc3RhbnQuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRk
KAotICAgICAgICAgICAgICAgICAgICBtX25vZGUsIGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9k
ZS0+Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsTnVsbCkpOworICAgICAgICAgICAg
ICAgIHNldEJvb2xlYW4oZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxs
Q2VsbHNBcmVGYWxzZSwgRXF1YWxOdWxsKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIEFTU0VSVChjb25zdGFudC5pc1VuZGVm
aW5lZCgpKTsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAg
ICAgbV9ub2RlLCBlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxs
c0FyZUZhbHNlLCBFcXVhbFVuZGVmaW5lZCkpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihlcXVh
bE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVh
bFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAgbV9ub2RlLAorICAgICAg
ICBzZXRCb29sZWFuKAogICAgICAgICAgICAgbV9vdXQuZXF1YWwoCiAgICAgICAgICAgICAgICAg
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwKICAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDY0KEpTVmFsdWU6OmVuY29kZShjb25zdGFudCkpKSk7CkBAIC0xNDk4LDE1ICsxNDQwLDEz
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlQ29tcGFyZUxlc3MoKQogICAgIHsKICAgICAg
ICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgewotICAgICAgICAgICAg
bV9ib29sZWFuVmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAg
ICBzZXRCb29sZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0Lmxlc3NUaGFuKGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5pc0Jp
bmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFk
ZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29sZWFuKAogICAg
ICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUxlc3NUaGFuKGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTE1MTcsMTUgKzE0NTcsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNv
bXBpbGVDb21wYXJlTGVzc0VxKCkKICAgICB7CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5
VXNlS2luZChJbnQzMlVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0g
ICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAg
ICAgICAgICBtX291dC5sZXNzVGhhbk9yRXF1YWwobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSks
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChOdW1i
ZXJVc2UpKSB7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAotICAgICAgICAgICAg
ICAgIG1fbm9kZSwKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgbV9v
dXQuZG91YmxlTGVzc1RoYW5PckVxdWFsKAogICAgICAgICAgICAgICAgICAgICBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMTUzNywxNSArMTQ3NSwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y29tcGlsZUNvbXBhcmVHcmVhdGVyKCkKICAgICB7CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQo
Ci0gICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAg
ICAgICAgICAgICBtX291dC5ncmVhdGVyVGhhbihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwg
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJl
clVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0gICAgICAgICAgICAg
ICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291
dC5kb3VibGVHcmVhdGVyVGhhbigKICAgICAgICAgICAgICAgICAgICAgbG93RG91YmxlKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTE1NTcsMTYgKzE0OTMsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBp
bGVDb21wYXJlR3JlYXRlckVxKCkKICAgICB7CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5
VXNlS2luZChJbnQzMlVzZSkpIHsKLSAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5hZGQoCi0g
ICAgICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAg
ICAgICAgICBtX291dC5ncmVhdGVyVGhhbk9yRXF1YWwoCiAgICAgICAgICAgICAgICAgICAgIGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9u
b2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkgewotICAgICAgICAgICAgbV9ib29sZWFu
VmFsdWVzLmFkZCgKLSAgICAgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBzZXRCb29s
ZWFuKAogICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCgKICAg
ICAgICAgICAgICAgICAgICAgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1NzcsNyArMTUx
MSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlTG9naWNhbE5vdCgpCiAgICAg
ewotICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuYml0Tm90KGJvb2xp
ZnkobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgc2V0Qm9vbGVhbihtX291dC5iaXROb3Qo
Ym9vbGlmeShtX25vZGUtPmNoaWxkMSgpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBp
bGVKdW1wKCkKQEAgLTE5MzEsNiArMTg2NSwxNCBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAg
ICB2b2lkIHNwZWN1bGF0ZUJhY2t3YXJkKAorICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0
ZWRWYWx1ZSBsb3dWYWx1ZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBwcm9maWxlLAor
ICAgICAgICBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB7CisgICAgICAgIGFwcGVuZE9TUkV4
aXQoCisgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZSwgcHJvZmlsZSwgZmFpbENvbmRpdGlvbiwg
QmFja3dhcmRTcGVjdWxhdGlvbiwgRm9ybWF0dGVkVmFsdWUoKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc3BlY3VsYXRlQmFja3dhcmQoCiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQog
ICAgIHsKICAgICAgICAgYXBwZW5kT1NSRXhpdCgKQEAgLTE5OTksMTQgKzE5NDEsMTcgQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IEludDMyVXNlIHx8IGVkZ2Uu
dXNlS2luZCgpID09IEtub3duSW50MzJVc2UpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFs
dWUgcmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQotICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgYm94ZWRSZXN1bHQg
PSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgeworICAgICAgICBMb3dlcmVkTm9k
ZVZhbHVlIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBp
ZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAg
ICAgICAgCisgICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7
CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIGJveGVk
UmVzdWx0ID0gdmFsdWUudmFsdWUoKTsKICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAogICAg
ICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZShib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNJbnQzMiwg
aXNOb3RJbnQzMihib3hlZFJlc3VsdCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVu
Ym94SW50MzIoYm94ZWRSZXN1bHQpOwotICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoZWRn
ZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgICAgICBzZXRJbnQzMihlZGdlLm5vZGUoKSwgcmVz
dWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIApAQCAtMjAxOSwx
MCArMTk2NCwxMiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2Rl
LCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBpc0NlbGwoZWRnZS51c2VLaW5k
KCkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgdW5jaGVja2VkUmVzdWx0ID0gbV9q
c1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1
ZSB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAo
aXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSB1bmNoZWNrZWRWYWx1ZSA9IHZh
bHVlLnZhbHVlKCk7CiAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAgICAg
ICBqc1ZhbHVlVmFsdWUodW5jaGVja2VkUmVzdWx0KSwgZWRnZSwgU3BlY0NlbGwsIGlzTm90Q2Vs
bCh1bmNoZWNrZWRSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybiB1bmNoZWNrZWRSZXN1bHQ7
CisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHVuY2hlY2tlZFZhbHVlKSwgZWRnZSwgU3Bl
Y0NlbGwsIGlzTm90Q2VsbCh1bmNoZWNrZWRWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHVu
Y2hlY2tlZFZhbHVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VS
VCghKG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUgJiBTcGVjQ2VsbCkpOwpAQCAtMjA2MSwx
NCArMjAwOCwxNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2Rl
LCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBC
b29sZWFuVXNlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9ib29s
ZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9qc1ZhbHVlVmFs
dWVzLmdldChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9
IG1fYm9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2
YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgCisgICAg
ICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlm
IChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSB2
YWx1ZS52YWx1ZSgpOwogICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICAg
ICAganNWYWx1ZVZhbHVlKHVuYm94ZWRSZXN1bHQpLCBlZGdlLCBTcGVjQm9vbGVhbiwgaXNOb3RC
b29sZWFuKHVuYm94ZWRSZXN1bHQpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJv
eEJvb2xlYW4odW5ib3hlZFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRk
KGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihlZGdlLm5vZGUo
KSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC0yMDgxLDE2ICsyMDMxLDIxIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NF
UlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzRG91
YmxlKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3Vs
dCA9IG1fZG91YmxlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSBpbnRSZXN1bHQgPSBtX2ludDMy
VmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBt
X291dC5pbnRUb0RvdWJsZShpbnRSZXN1bHQpOwotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMu
YWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVl
ID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAg
ICAgICB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYg
KGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuaW50
VG9Eb3VibGUodmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBzZXREb3VibGUoZWRnZS5ub2Rl
KCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBpZiAoTFZhbHVlIGJveGVkUmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdl
dChlZGdlLm5vZGUoKSkpIHsKKyAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVk
Z2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBM
VmFsdWUgYm94ZWRSZXN1bHQgPSB2YWx1ZS52YWx1ZSgpOworICAgICAgICAgICAgCiAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGUg
dW5ib3hpbmcgaW50IGNhc2UiKSk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGUgdW5ib3hpbmcgZG91YmxlIGNhc2UiKSk7
CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkRvdWJsZSB1bmJveGluZyBjb250aW51YXRpb24iKSk7CkBAIC0yMTE1LDcgKzIwNzAs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
bV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludFRvRG91YmxlLCB1bmJveGVkRG91YmxlKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9kb3VibGVWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgp
LCByZXN1bHQpOworICAgICAgICAgICAgc2V0RG91YmxlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwog
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIxMjgs
MjQgKzIwODMsMjggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9k
ZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fanNW
YWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1faW50MzJWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveElu
dDMyKHVuYm94ZWRSZXN1bHQpOwotICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFkZChlZGdl
Lm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fanNW
YWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIHZh
bHVlID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxp
ZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hJbnQzMih2YWx1ZS52
YWx1ZSgpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBp
ZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEJvb2xlYW4odW5ib3hlZFJlc3Vs
dCk7Ci0gICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQp
OworICAgICAgICB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAg
ICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBi
b3hCb29sZWFuKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShlZGdlLm5v
ZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fZG91YmxlVmFsdWVz
LmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hEb3Vi
bGUodW5ib3hlZFJlc3VsdCk7Ci0gICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKGVkZ2Uu
bm9kZSgpLCByZXN1bHQpOworICAgICAgICB2YWx1ZSA9IG1fZG91YmxlVmFsdWVzLmdldChlZGdl
Lm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGJveERvdWJsZSh2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMjE1NSwxMSArMjExNCwxMiBAQCBwcml2YXRlOgogICAg
IAogICAgIExWYWx1ZSBsb3dTdG9yYWdlKEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGlmIChM
VmFsdWUgcmVzdWx0ID0gbV9zdG9yYWdlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9z
dG9yYWdlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOwogICAgICAgICAKICAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSk7Ci0gICAgICAgIG1fc3RvcmFnZVZhbHVlcy5h
ZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2RlKCks
IHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtMjI0Miw2
ICsyMjAyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6CiAgICAgICAgICAg
ICBzcGVjdWxhdGVOdW1iZXIoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBCb29sZWFuVXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihlZGdlKTsKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpAQCAtMjM0Miw2ICsyMzA1LDExIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNSZWFsTnVtYmVy
LAogICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgdmFs
dWUpKTsKICAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRnZSkK
KyAgICB7CisgICAgICAgIGxvd0Jvb2xlYW4oZWRnZSk7CisgICAgfQogCiAgICAgYm9vbCBtYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpCiAgICAgewpAQCAtMjQz
MCwyMiArMjM5OCwxNSBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgaXNMaXZlKE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3RpbWVUb0xpdmUuZmluZChub2RlKTsKLSAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV90
aW1lVG9MaXZlLmVuZCgpKTsKLSAgICAgICAgcmV0dXJuICEhaXRlci0+dmFsdWU7CisgICAgICAg
IHJldHVybiBtX2xpdmUuY29udGFpbnMobm9kZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgdXNl
KEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIGlmICghZWRnZS0+aGFzUmVzdWx0KCkpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChlZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAg
IEFTU0VSVChlZGdlLT5oYXNSZXN1bHQoKSk7CisgICAgICAgIGlmICghZWRnZS5kb2VzS2lsbCgp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBIYXNo
TWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuZmluZChl
ZGdlLm5vZGUoKSk7Ci0gICAgICAgIEFTU0VSVChpdGVyICE9IG1fdGltZVRvTGl2ZS5lbmQoKSk7
Ci0gICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZSk7Ci0gICAgICAgIGl0ZXItPnZhbHVlLS07Cisg
ICAgICAgIG1fbGl2ZS5yZW1vdmUoZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKICAgICAvLyBX
cmFwcGVyIHVzZWQgb25seSBmb3IgREZHX05PREVfRE9fVE9fQ0hJTERSRU4KQEAgLTI0NjIsNjMg
KzI0MjMsMzQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JC
bG9jaygpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhbHVlU291cmNlcy5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9jay0+dmFy
aWFibGVzQXRIZWFkW2ldOwotICAgICAgICAgICAgaWYgKCFub2RlKSB7Ci0gICAgICAgICAgICAg
ICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUt
PmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+aXNBcmd1bWVudHNBbGlhcygpKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShBcmd1bWVudHNTb3VyY2UpOwotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlU291
cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX2Zs
dXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMg
dmFsdWUgd2lsbCBoYXZlIGJlZW4gZmx1c2hlZCB0byB0aGUgSlNTdGFjayBpbiBzb21lIGZvcm0g
b3IKLSAgICAgICAgICAgICAgICAvLyBhbm90aGVyLgotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShE
b3VibGVJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2sp
OwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IG1faGlnaEJsb2NrLT5zc2EtPmZs
dXNoRm9ybWF0QXRIZWFkW2ldOworICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAg
ICAgICAgIGNhc2UgRGVhZEZsdXNoOiB7CisgICAgICAgICAgICAgICAgLy8gTXVzdCBjb25zaWRl
ciBhdmFpbGFibGUgbm9kZXMgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9oaWdoQmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkW2ldOworICAgICAgICAgICAgICAg
IGlmICghbm9kZSkgeworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZh
bHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX3ZhbHVl
U291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291
cmNlKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQo
KSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNl
KERvdWJsZUluTG9jYWxzKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluTG9jYWxzKTsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGbHVzaGVk
SW50MzI6CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJ
bnQzMkluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoQm9v
bGVhbkluTG9jYWxzKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICAgICAgICAg
IG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRmx1
c2hlZENlbGw6CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0g
PSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAg
LTI1MjYsNiArMjQ1OCwxNSBAQCBwcml2YXRlOgogICAgICAgICBFeGl0S2luZCBraW5kLCBGb3Jt
YXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlv
biwKICAgICAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBGb3JtYXR0ZWRWYWx1
ZSByZWNvdmVyeSkKICAgICB7CisgICAgICAgIGFwcGVuZE9TUkV4aXQoCisgICAgICAgICAgICBr
aW5kLCBsb3dWYWx1ZSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhp
Z2hWYWx1ZSksCisgICAgICAgICAgICBmYWlsQ29uZGl0aW9uLCBkaXJlY3Rpb24sIHJlY292ZXJ5
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRPU1JFeGl0KAorICAgICAgICBFeGl0S2lu
ZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZSBwcm9maWxlLAorICAgICAgICBMVmFsdWUgZmFpbENvbmRpdGlvbiwgU3BlY3VsYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uLCBGb3JtYXR0ZWRWYWx1ZSByZWNvdmVyeSkKKyAgICB7CiAgICAg
ICAgIGlmIChPcHRpb25zOjpmdGxUcmFwc09uT1NSRXhpdCgpKSB7CiAgICAgICAgICAgICBMQmFz
aWNCbG9jayBmYWlsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiT1NSIGV4aXQgZmFpbENh
c2UiKSk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIk9TUiBleGl0IGNvbnRpbnVhdGlvbiIpKTsKQEAgLTI1NDYsMTEgKzI0ODcs
OSBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0
LnNpemUoKSA9PSBtX2Z0bFN0YXRlLm9zckV4aXQuc2l6ZSgpKTsKICAgICAgICAgdW5zaWduZWQg
aW5kZXggPSBtX2Z0bFN0YXRlLm9zckV4aXQuc2l6ZSgpOwogICAgICAgICAKLSAgICAgICAgbV9m
dGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZCgKLSAgICAgICAgICAgIE9TUkV4aXQoCi0g
ICAgICAgICAgICAgICAga2luZCwgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAotICAgICAgICAgICAgICAgIG1fY29k
ZU9yaWdpbiwgbV9sYXN0U2V0T3BlcmFuZCwgbV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZBcmd1bWVu
dHMoKSwKLSAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkxvY2FscygpKSk7
CisgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKKyAg
ICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBwcm9maWxlLCBtX2NvZGVPcmlnaW4s
IG1fbGFzdFNldE9wZXJhbmQsCisgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFy
Z3VtZW50cygpLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1f
ZnRsU3RhdGUub3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKICAgICAg
ICAgCiAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQu
bGFzdCgpOwpAQCAtMjYwMiwyNyArMjU0MSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNl
IERvdWJsZUluSlNTdGFjazoKICAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhp
dFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBWYWx1ZUluTG9jYWxzOgotICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1
bWVudCgKLSAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1h
dEpTVmFsdWUsIG1fb3V0LmdldChtX2xvY2FsczY0W2ldKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEludDMySW5Mb2NhbHM6Ci0gICAgICAgICAgICAgICAgYWRk
RXhpdEFyZ3VtZW50KAotICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZh
bHVlRm9ybWF0SW50MzIsIG1fb3V0LmdldChtX2xvY2FsczMyW2ldKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJvb2xlYW5JbkxvY2FsczoKLSAgICAgICAgICAg
ICAgICBhZGRFeGl0QXJndW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50
cywgaSwgVmFsdWVGb3JtYXRCb29sZWFuLCBtX291dC5nZXQobV9sb2NhbHNCb29sZWFuW2ldKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERvdWJsZUluTG9jYWxz
OgotICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKLSAgICAgICAgICAgICAgICAgICAg
ZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdERvdWJsZSwgbV9vdXQuZ2V0KG1fbG9jYWxz
RG91YmxlW2ldKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFy
Z3VtZW50c1NvdXJjZToKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IFBoYW50
b21Bcmd1bWVudHMuCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMzk4NgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNv
dXJjZUlzRGVhZDoKICAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVl
OjpkZWFkKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNjgyLDEyICsyNjAwLDEwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSogdWludDMyVG9OdW1iZXIgPSAwOwogICAg
ICAgICAgICAgICAgIE5vZGUqIGRvdWJsZUFzSW50MzIgPSAwOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9
IG1fdGltZVRvTGl2ZS5iZWdpbigpOwotICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVu
c2lnbmVkPjo6aXRlcmF0b3IgZW5kID0gbV90aW1lVG9MaXZlLmVuZCgpOworICAgICAgICAgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbV9saXZlLmJlZ2luKCk7CisgICAg
ICAgICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fbGl2ZS5lbmQoKTsK
ICAgICAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IGl0ZXItPmtleTsK
KyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gKml0ZXI7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghY2FuZGlkYXRlLT5jaGlsZDEoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5jaGlsZDEo
KSAhPSBub2RlKQpAQCAtMjczMiwyNCArMjY0OCwyOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBBU1NFUlQoaXNMaXZlKG5vZGUpKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChMVmFsdWUgcmVzdWx0ID0gbV9pbnQzMlZhbHVlcy5nZXQobm9kZSkpIHsKLSAgICAgICAg
ICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdElu
dDMyLCByZXN1bHQpOworCisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMy
VmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAg
ICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRJ
bnQzMiwgdmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9ib29sZWFuVmFsdWVzLmdldChu
b2RlKSkgewotICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5k
ZXgsIFZhbHVlRm9ybWF0Qm9vbGVhbiwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBtX2Jvb2xl
YW5WYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1h
dEJvb2xlYW4sIHZhbHVlLnZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5n
ZXQobm9kZSkpIHsKLSAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMs
IGluZGV4LCBWYWx1ZUZvcm1hdEpTVmFsdWUsIHJlc3VsdCk7CisgICAgICAgIHZhbHVlID0gbV9q
c1ZhbHVlVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Cisg
ICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVG
b3JtYXRKU1ZhbHVlLCB2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2RvdWJsZVZhbHVl
cy5nZXQobm9kZSkpIHsKLSAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVu
dHMsIGluZGV4LCBWYWx1ZUZvcm1hdERvdWJsZSwgcmVzdWx0KTsKKyAgICAgICAgdmFsdWUgPSBt
X2RvdWJsZVZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgewor
ICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVl
Rm9ybWF0RG91YmxlLCB2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkBAIC0yODIwLDcgKzI3NDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9mdGxT
dGF0ZS5maW5hbGl6ZXItPmluaXRpYWxpemVFeGl0VGh1bmtzTGlua0J1ZmZlcihsaW5rQnVmZmVy
LnJlbGVhc2UoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBtX291dC5qdW1wKG1fYXJndW1lbnRD
aGVja3MpOworICAgICAgICBtX291dC5qdW1wKGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBvYnNlcnZlTW92SGludChOb2RlKiBub2RlKQpAQCAtMjgz
NCw2ICsyNzU0LDU3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQo
b3BlcmFuZCkgPSBWYWx1ZVNvdXJjZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIHNldEludDMyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIG1faW50MzJWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1f
aGlnaEJsb2NrKSk7CisgICAgfQorICAgIHZvaWQgc2V0SlNWYWx1ZShOb2RlKiBub2RlLCBMVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuc2V0KG5vZGUsIExvd2Vy
ZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorICAgIHZvaWQgc2V0Qm9v
bGVhbihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2Jvb2xlYW5W
YWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7Cisg
ICAgfQorICAgIHZvaWQgc2V0U3RvcmFnZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBtX3N0b3JhZ2VWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFs
dWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorICAgIHZvaWQgc2V0RG91YmxlKE5vZGUqIG5vZGUs
IExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fZG91YmxlVmFsdWVzLnNldChub2RlLCBM
b3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKworICAgIHZvaWQg
c2V0SW50MzIoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW50MzIobV9ub2RlLCB2
YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0SlNWYWx1ZShMVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBzZXRKU1ZhbHVlKG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIHNldEJv
b2xlYW4oTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0Qm9vbGVhbihtX25vZGUsIHZh
bHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXRTdG9yYWdlKExWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHNldFN0b3JhZ2UobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0RG91
YmxlKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldERvdWJsZShtX25vZGUsIHZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKGNvbnN0IExvd2VyZWROb2RlVmFsdWUm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXModmFsdWUu
YmxvY2soKSwgbV9oaWdoQmxvY2spKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlKEpT
Q2VsbCogdGFyZ2V0KQogICAgIHsKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24u
d2Vha1JlZmVyZW5jZXMuYXBwZW5kKApAQCAtMjg4MSwyNyArMjg1MiwyMCBAQCBwcml2YXRlOgog
ICAgIAogICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7CiAgICAgTEJhc2ljQmxvY2sgbV9pbml0
aWFsaXphdGlvbjsKLSAgICBMQmFzaWNCbG9jayBtX2FyZ3VtZW50Q2hlY2tzOwogICAgIEhhc2hN
YXA8QmFzaWNCbG9jayosIExCYXNpY0Jsb2NrPiBtX2Jsb2NrczsKICAgICAKICAgICBMVmFsdWUg
bV9jYWxsRnJhbWU7CiAgICAgTFZhbHVlIG1fdGFnVHlwZU51bWJlcjsKICAgICBMVmFsdWUgbV90
YWdNYXNrOwogICAgIAotICAgIEhhc2hTZXQ8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BzOwotICAg
IFZlY3RvcjxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OworICAgIEhhc2hNYXA8Tm9k
ZSosIExvd2VyZWROb2RlVmFsdWU+IG1faW50MzJWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwg
TG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExv
d2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dl
cmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJl
ZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7CisgICAgSGFzaFNldDxOb2RlKj4gbV9saXZlOwog
ICAgIAotICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9pbnQzMlZhbHVlczsKLSAgICBIYXNo
TWFwPE5vZGUqLCBMVmFsdWU+IG1fanNWYWx1ZVZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCBM
VmFsdWU+IG1fYm9vbGVhblZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fc3Rv
cmFnZVZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fZG91YmxlVmFsdWVzOwot
ICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBtX3RpbWVUb0xpdmU7Ci0gICAgCi0gICAgT3Bl
cmFuZHM8TFZhbHVlPiBtX2xvY2Fsc0Jvb2xlYW47Ci0gICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xv
Y2FsczMyOwotICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHM2NDsKLSAgICBPcGVyYW5kczxM
VmFsdWU+IG1fbG9jYWxzRG91YmxlOworICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9waGlz
OwogICAgIAogICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBtX3ZhbHVlU291cmNlczsKICAgICBp
bnQgbV9sYXN0U2V0T3BlcmFuZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJlZE5vZGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJlZE5vZGVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlcmVkTm9kZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEZUTExvd2VyZWROb2RlVmFsdWVfaAorI2RlZmluZSBGVExMb3dlcmVkTm9kZVZhbHVl
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisK
KyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBl
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIFJlcHJlc2VudHMg
dGhlIGFjdCBvZiBoYXZpbmcgbG93ZXJlZCBhIERGRzo6Tm9kZSB0byBhbiBMVmFsdWUsIGFuZCBy
ZWNvcmRzIHRoZQorLy8gREZHOjpCYXNpY0Jsb2NrIHRoYXQgZGlkIHRoZSBsb3dlcmluZy4gVGhl
IExWYWx1ZSBpcyB3aGF0IHdlIHVzZSBtb3N0IG9mdGVuLCBidXQKKy8vIHdlIG5lZWQgdG8gdmVy
aWZ5IHRoYXQgd2UncmUgaW4gYSBibG9jayB0aGF0IGlzIGRvbWluYXRlZCBieSB0aGUgb25lIHRo
YXQgZGlkCisvLyB0aGUgbG93ZXJpbmcuIFdlJ3JlIGd1YXJhbnRlZWQgdGhhdCBmb3IgZWFjaCBE
Rkc6Ok5vZGUsIHRoZXJlIHdpbGwgYmUgb25lCisvLyBMb3dlcmVkTm9kZVZhbHVlIHRoYXQgYWx3
YXlzIGRvbWluYXRlcyBhbGwgdXNlcyBvZiB0aGUgREZHOjpOb2RlOyBidXQgdGhlcmUgbWF5Cisv
LyBiZSBvdGhlcnMgdGhhdCBkb24ndCBkb21pbmF0ZSBhbmQgd2UncmUgZWZmZWN0aXZlbHkgZG9p
bmcgb3Bwb3J0dW5pc3RpYyBHVk4gb24KKy8vIHRoZSBsb3dlcmluZyBjb2RlLgorCitjbGFzcyBM
b3dlcmVkTm9kZVZhbHVlIHsKK3B1YmxpYzoKKyAgICBMb3dlcmVkTm9kZVZhbHVlKCkKKyAgICAg
ICAgOiBtX3ZhbHVlKDApCisgICAgICAgICwgbV9ibG9jaygwKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgTG93ZXJlZE5vZGVWYWx1ZShMVmFsdWUgdmFsdWUsIERGRzo6QmFzaWNCbG9jayogYmxv
Y2spCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX2Jsb2NrKGJsb2NrKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdmFsdWUpOworICAgICAgICBBU1NFUlQobV9ibG9jayk7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7
IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CisgICAg
CisgICAgTFZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIERGRzo6
QmFzaWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgCitwcml2
YXRlOgorICAgIExWYWx1ZSBtX3ZhbHVlOworICAgIERGRzo6QmFzaWNCbG9jayogbV9ibG9jazsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorCisjZW5kaWYgLy8gRlRMTG93ZXJlZE5vZGVWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmgJKHJldmlzaW9uIDE1MjU4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgewogCiBjbGFzcyBWYWx1ZUZyb21CbG9jayB7CiBwdWJsaWM6CisgICAgVmFsdWVGcm9tQmxv
Y2soKQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAgICAgICAgLCBtX2Jsb2NrKDApCisgICAgewor
ICAgIH0KKyAgICAKICAgICBWYWx1ZUZyb21CbG9jayhMVmFsdWUgdmFsdWUsIExCYXNpY0Jsb2Nr
IGJsb2NrKQogICAgICAgICA6IG1fdmFsdWUodmFsdWUpCiAgICAgICAgICwgbV9ibG9jayhibG9j
aykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3Bw
CShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVl
U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMjEgKzQ1LDYgQEAgdm9pZCBWYWx1ZVNv
dXJjZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgIGNhc2UgRG91YmxlSW5KU1N0YWNrOgog
ICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUluSlNTdGFjayIpOwogICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBWYWx1ZUluTG9jYWxzOgotICAgICAgICBvdXQucHJpbnQoIlZhbHVlSW5Mb2NhbHMi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW50MzJJbkxvY2FsczoKLSAgICAgICAgb3V0
LnByaW50KCJJbnQzMkluTG9jYWxzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEJvb2xl
YW5JbkxvY2FsczoKLSAgICAgICAgb3V0LnByaW50KCJCb29sZWFuSW5Mb2NhbHMiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgRG91YmxlSW5Mb2NhbHM6Ci0gICAgICAgIG91dC5wcmludCgi
RG91YmxlSW5Mb2NhbHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQXJndW1lbnRzU291
cmNlOgotICAgICAgICBvdXQucHJpbnQoIkFyZ3VtZW50c1NvdXJjZSIpOwotICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBTb3VyY2VJc0RlYWQ6CiAgICAgICAgIG91dC5wcmludCgiU291cmNlSXNE
ZWFkIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFZhbHVlU291cmNlLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDYg
QEAgZW51bSBWYWx1ZVNvdXJjZUtpbmQgewogICAgIFZhbHVlSW5KU1N0YWNrLAogICAgIEludDMy
SW5KU1N0YWNrLAogICAgIERvdWJsZUluSlNTdGFjaywKLSAgICBWYWx1ZUluTG9jYWxzLAotICAg
IEludDMySW5Mb2NhbHMsCi0gICAgQm9vbGVhbkluTG9jYWxzLAotICAgIERvdWJsZUluTG9jYWxz
LAotICAgIEFyZ3VtZW50c1NvdXJjZSwKICAgICBTb3VyY2VJc0RlYWQsCiAgICAgSGF2ZU5vZGUK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lv
biAxNTI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdihib29s
LCB1c2VMTFZNU21hbGxDb2RlTW9kZWwsIGZhbHNlKSBcCiAgICAgdihib29sLCBmdGxUcmFwc09u
T1NSRXhpdCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIGZ0bE9TUkV4aXRPbWl0c01hcnNoYWxsaW5n
LCBmYWxzZSkgXAorICAgIHYoYm9vbCwgZHVtcExMVk1JUiwgZmFsc2UpIFwKICAgICB2KHVuc2ln
bmVkLCBsbHZtQmFja2VuZE9wdGltaXphdGlvbkxldmVsLCAyKSBcCiAgICAgdih1bnNpZ25lZCwg
bGx2bU9wdGltaXphdGlvbkxldmVsLCAyKSBcCiAgICAgdih1bnNpZ25lZCwgbGx2bVNpemVMZXZl
bCwgMCkgXApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MjYwOCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTMtMDctMTIgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBmb3VydGhUaWVyOiBERkcgc2hvdWxkIGhh
dmUgYW4gU1NBIGZvcm0gZm9yIHVzZSBieSBGVEwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExODMzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgLSBFeHRlbmQgdmFyaWFkaWNpdHkgb2YgUHJp
bnRTdHJlYW0gYW5kIGRhdGFMb2cuCisgICAgICAgIAorICAgICAgICAtIEdpdmUgSGFzaFNldCB0
aGUgYWJpbGl0eSB0byBhZGQgYSBzcGFuIG9mIHRoaW5ncy4KKyAgICAgICAgCisgICAgICAgIC0g
R2l2ZSBIYXNoU2V0IHRoZSBhYmlsaXR5IHRvID09IGFub3RoZXIgSGFzaFNldC4KKyAgICAgICAg
CisgICAgICAgIC0gTm90ZSBGSVhNRSdzIGluIEhhc2hUYWJsZSBjb25jZXJuaW5nIGNvcHlpbmcg
cGVyZm9ybWFuY2UsIHRoYXQgYWZmZWN0cworICAgICAgICAgIHRoZSB3YXkgdGhhdCB0aGUgREZH
IG5vdyB1c2VzIEhhc2hTZXRzIGFuZCBIYXNoTWFwcy4KKyAgICAgICAgCisgICAgICAgIC0gRmFj
dG9yIG91dCB0aGUgYnVsay1pbnNlcnRpb24gbG9naWMgb2YgSlNDOjpERkc6Okluc2VydGlvblNl
dCBpbnRvCisgICAgICAgICAgV1RGOjpJbnNlcnRpb24sIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQg
aW4gbW9yZSBwbGFjZXMuCisgICAgICAgIAorICAgICAgICAtIENyZWF0ZSBhIGR1bXBlciBmb3Ig
bGlzdHMgYW5kIG1hcHMuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiB3dGYvRGF0YUxvZy5oOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdU
Rjo6ZGF0YUxvZyk6CisgICAgICAgICogd3RmL0hhc2hTZXQuaDoKKyAgICAgICAgKEhhc2hTZXQp
OgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6OjphZGQpOgorICAgICAgICAoV1RGOjo9
KToKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6Ojo6SGFzaFRhYmxl
KToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgICogd3RmL0luc2VydGlvbi5oOiBBZGRlZC4K
KyAgICAgICAgKFdURik6CisgICAgICAgIChJbnNlcnRpb24pOgorICAgICAgICAoV1RGOjpJbnNl
cnRpb246Okluc2VydGlvbik6CisgICAgICAgIChXVEY6Okluc2VydGlvbjo6aW5kZXgpOgorICAg
ICAgICAoV1RGOjpJbnNlcnRpb246OmVsZW1lbnQpOgorICAgICAgICAoV1RGOjpJbnNlcnRpb246
Om9wZXJhdG9yPCk6CisgICAgICAgIChXVEY6OmV4ZWN1dGVJbnNlcnRpb25zKToKKyAgICAgICAg
KiB3dGYvTGlzdER1bXAuaDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAoTGlzdER1
bXApOgorICAgICAgICAoV1RGOjpMaXN0RHVtcDo6TGlzdER1bXApOgorICAgICAgICAoV1RGOjpM
aXN0RHVtcDo6ZHVtcCk6CisgICAgICAgIChNYXBEdW1wKToKKyAgICAgICAgKFdURjo6TWFwRHVt
cDo6TWFwRHVtcCk6CisgICAgICAgIChXVEY6Ok1hcER1bXA6OmR1bXApOgorICAgICAgICAoV1RG
OjpsaXN0RHVtcCk6CisgICAgICAgIChXVEY6OnNvcnRlZExpc3REdW1wKToKKyAgICAgICAgKFdU
Rjo6bGVzc1RoYW4pOgorICAgICAgICAoV1RGOjptYXBEdW1wKToKKyAgICAgICAgKFdURjo6c29y
dGVkTWFwRHVtcCk6CisgICAgICAgICogd3RmL1ByaW50U3RyZWFtLmg6CisgICAgICAgIChQcmlu
dFN0cmVhbSk6CisgICAgICAgIChXVEY6OlByaW50U3RyZWFtOjpwcmludCk6CisKIDIwMTMtMDct
MDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBmaXggMzItYml0IGJ1aWxkLgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNTI1ODIpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAJCTBGRDgx
QUM1MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyog
RmFzdEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJ
CTBGRERCRkE3MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNTE2NjZERkEz
MDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRkREQkZBODE2NjZE
RkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJp
bmdQcmludFN0cmVhbS5oICovOyB9OworCQkwRkU1MDU1NzE3ODdBODA2MDBCMzVGOEMgLyogSW5z
ZXJ0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkU1MDU1NjE3ODdBODAyMDBCMzVGOEMgLyogSW5zZXJ0aW9uLmggKi87IH07CisJCTBGRTUwNTdG
MTc5MDg5RkUwMEIzNUY4QyAvKiBMaXN0RHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1N0UxNzkwODlGOTAwQjM1RjhDIC8qIExpc3REdW1w
LmggKi87IH07CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFEMTU2NUYw
RjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsKIAkJMTQzRjYxMjAxNTY1RjBGOTAwREI1
MTRBIC8qIFJBTVNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMTQ2OTQxOTIxNkVBQUY2RDAwMjRFMTQ2IC8q
IFJ1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ2OTQxOTAxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTIsNiArMzU0LDgg
QEAKIAkJMEZEODFBQzQxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRT
dHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nUHJp
bnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkREQkZBNjE2NjZE
RkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RyaW5nUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFNTA1NTYxNzg3QTgwMjAwQjM1RjhDIC8qIEluc2VydGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbnNlcnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1N0Ux
NzkwODlGOTAwQjM1RjhDIC8qIExpc3REdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpc3REdW1wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAv
KiBCeXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXpl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJBTVNpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyog
UkFNU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSQU1TaXplLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODUsMTEgKzc4OSwxMyBAQAogCQkJCUE4QTQ3
MkJBMTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoVHJhaXRzLmggKi8sCiAJCQkJQThBNDcyQkIxNTFB
ODI1QTAwNDEyM0ZGIC8qIEhleE51bWJlci5oICovLAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQx
MjNGRiAvKiBJbmxpbmVBU00uaCAqLywKKwkJCQkwRkU1MDU1NjE3ODdBODAyMDBCMzVGOEMgLyog
SW5zZXJ0aW9uLmggKi8sCiAJCQkJQThBNDcyQkUxNTFBODI1QTAwNDEyM0ZGIC8qIEludDE2QXJy
YXkuaCAqLywKIAkJCQlBOEE0NzJCRjE1MUE4MjVBMDA0MTIzRkYgLyogSW50MzJBcnJheS5oICov
LAogCQkJCUE4QTQ3MkJEMTUxQTgyNUEwMDQxMjNGRiAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlB
OEE0NzJDMDE1MUE4MjVBMDA0MTIzRkYgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oICovLAog
CQkJCTBGNDZFNkREMTc3Q0JBNkEwMEUxRjc1NSAvKiBMTFZNSGVhZGVycy5oICovLAorCQkJCTBG
RTUwNTdFMTc5MDg5RjkwMEIzNUY4QyAvKiBMaXN0RHVtcC5oICovLAogCQkJCUE4QTQ3MkMxMTUx
QTgyNUEwMDQxMjNGRiAvKiBMaXN0SGFzaFNldC5oICovLAogCQkJCUE4QTQ3MkMyMTUxQTgyNUEw
MDQxMjNGRiAvKiBMaXN0UmVmUHRyLmggKi8sCiAJCQkJQThBNDcyQzMxNTFBODI1QTAwNDEyM0ZG
IC8qIExvY2tlci5oICovLApAQCAtMTE4MSw2ICsxMTg3LDcgQEAKIAkJCQlBOEE0NzNFODE1MUE4
MjVCMDA0MTIzRkYgLyogTWF0aEV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRUEx
NTFBODI1QjAwNDEyM0ZGIC8qIE1ENS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1NDk3QUQxNTg1
N0QwMzAwQjVCQzMwIC8qIE1lZGlhVGltZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1NTcx
Nzg3QTgwNjAwQjM1RjhDIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEYxRDEx
NTQxNUZGMTFCRTAwMjZFOTA4IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNEZEODU1NDcxNjEzM0UwRTAwQzVCNzA0IC8qIE1lbW9yeUluc3RydW1lbnRhdGlv
bkFycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjNGQkM3MUUxNjFBRjdCRjAw
QkI0QkQ0IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hDb3VudGVkU2V0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTEzMDgsNiArMTMxNSw3IEBACiAJCQkJOTc0Q0ZDOEUxNkE0RjMyNzAwNkQ1NDA0
IC8qIFdlYWtQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQ2MTUxQTgyNUIwMDQxMjNG
RiAvKiBXVEZTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDg3MTUxQTgyNUIwMDQx
MjNGRiAvKiBXVEZUaHJlYWREYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU3RjE3OTA4
OUZFMDBCMzVGOEMgLyogTGlzdER1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzQ0ODgzMTZG
RTlGRTEwMDg0NEJFOSAvKiBQcm9jZXNzSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDZFNkRF
MTc3Q0JBNkEwMEUxRjc1NSAvKiBMTFZNSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwpJ
bmRleDogU291cmNlL1dURi93dGYvRGF0YUxvZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0RhdGFMb2cuaAkocmV2aXNpb24gMTUyNTgyKQorKysgU291cmNlL1dURi93dGYvRGF0YUxv
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDE4IEBAIHZvaWQgZGF0YUxvZyhjb25z
dCBUMSYgdmFsdWUxLCBjb25zdCBUMiYKICAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlMSwgdmFs
dWUyLCB2YWx1ZTMsIHZhbHVlNCwgdmFsdWU1LCB2YWx1ZTYsIHZhbHVlNywgdmFsdWU4LCB2YWx1
ZTksIHZhbHVlMTAsIHZhbHVlMTEsIHZhbHVlMTIsIHZhbHVlMTMpOwogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5h
bWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5
LCB0eXBlbmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMs
IHR5cGVuYW1lIFQxND4KK3ZvaWQgZGF0YUxvZyhjb25zdCBUMSYgdmFsdWUxLCBjb25zdCBUMiYg
dmFsdWUyLCBjb25zdCBUMyYgdmFsdWUzLCBjb25zdCBUNCYgdmFsdWU0LCBjb25zdCBUNSYgdmFs
dWU1LCBjb25zdCBUNiYgdmFsdWU2LCBjb25zdCBUNyYgdmFsdWU3LCBjb25zdCBUOCYgdmFsdWU4
LCBjb25zdCBUOSYgdmFsdWU5LCBjb25zdCBUMTAmIHZhbHVlMTAsIGNvbnN0IFQxMSYgdmFsdWUx
MSwgY29uc3QgVDEyJiB2YWx1ZTEyLCBjb25zdCBUMTMmIHZhbHVlMTMsIGNvbnN0IFQxNCYgdmFs
dWUxNCkKK3sKKyAgICBkYXRhRmlsZSgpLnByaW50KHZhbHVlMSwgdmFsdWUyLCB2YWx1ZTMsIHZh
bHVlNCwgdmFsdWU1LCB2YWx1ZTYsIHZhbHVlNywgdmFsdWU4LCB2YWx1ZTksIHZhbHVlMTAsIHZh
bHVlMTEsIHZhbHVlMTIsIHZhbHVlMTMsIHZhbHVlMTQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUs
IHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LCB0eXBl
bmFtZSBUMTAsIHR5cGVuYW1lIFQxMSwgdHlwZW5hbWUgVDEyLCB0eXBlbmFtZSBUMTMsIHR5cGVu
YW1lIFQxNCwgdHlwZW5hbWUgVDE1Pgordm9pZCBkYXRhTG9nKGNvbnN0IFQxJiB2YWx1ZTEsIGNv
bnN0IFQyJiB2YWx1ZTIsIGNvbnN0IFQzJiB2YWx1ZTMsIGNvbnN0IFQ0JiB2YWx1ZTQsIGNvbnN0
IFQ1JiB2YWx1ZTUsIGNvbnN0IFQ2JiB2YWx1ZTYsIGNvbnN0IFQ3JiB2YWx1ZTcsIGNvbnN0IFQ4
JiB2YWx1ZTgsIGNvbnN0IFQ5JiB2YWx1ZTksIGNvbnN0IFQxMCYgdmFsdWUxMCwgY29uc3QgVDEx
JiB2YWx1ZTExLCBjb25zdCBUMTImIHZhbHVlMTIsIGNvbnN0IFQxMyYgdmFsdWUxMywgY29uc3Qg
VDE0JiB2YWx1ZTE0LCBjb25zdCBUMTUmIHZhbHVlMTUpCit7CisgICAgZGF0YUZpbGUoKS5wcmlu
dCh2YWx1ZTEsIHZhbHVlMiwgdmFsdWUzLCB2YWx1ZTQsIHZhbHVlNSwgdmFsdWU2LCB2YWx1ZTcs
IHZhbHVlOCwgdmFsdWU5LCB2YWx1ZTEwLCB2YWx1ZTExLCB2YWx1ZTEyLCB2YWx1ZTEzLCB2YWx1
ZTE0LCB2YWx1ZTE1KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6ZGF0
YUxvZzsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJjZS9XVEYvd3Rm
L0hhc2hTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtODYsMTIgKzg2LDE5IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJldmVyc2UgdGhlIG9yZGVyIG9mIHRo
ZSB0ZW1wbGF0ZSBhcmd1bWVudHMgc28gdGhhdCBjYWxsZXJzCiAgICAgICAgIC8vIGNhbiBqdXN0
IHBhc3MgdGhlIHRyYW5zbGF0b3IgYW5kIGxldCB0aGUgY29tcGlsZXIgZGVkdWNlIFQuCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiBBZGRSZXN1
bHQgYWRkKGNvbnN0IFQmKTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0dGVtcHRzIHRvIGFkZCBh
IGxpc3Qgb2YgdGhpbmdzIHRvIHRoZSBzZXQuIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YKKyAgICAg
ICAgLy8gdGhlbSBhcmUgbmV3IHRvIHRoZSBzZXQuIFJldHVybnMgZmFsc2UgaWYgdGhlIHNldCBp
cyB1bmNoYW5nZWQuCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKyAg
ICAgICAgYm9vbCBhZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRvclR5cGUgZW5kKTsKIAog
ICAgICAgICB2b2lkIHJlbW92ZShjb25zdCBWYWx1ZVR5cGUmKTsKICAgICAgICAgdm9pZCByZW1v
dmUoaXRlcmF0b3IpOwogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICAgICAgc3RhdGljIGJv
b2wgaXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYpOworICAgICAgICAKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEhhc2hTZXQmKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIGZyaWVuZCB2b2lkIGRlbGV0ZUFsbFZhbHVlczw+KGNvbnN0IEhhc2hTZXQmKTsKQEAgLTE5
MSw2ICsxOTgsMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
dGVyYXRvclR5cGU+CisgICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6YWRkKEl0ZXJh
dG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKEl0ZXJhdG9yVHlwZSBpdGVyID0gYmVnaW47IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IGFkZCgqaXRlcikuaXNO
ZXdFbnRyeTsKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KICAgICBpbmxpbmUgdm9pZCBIYXNo
U2V0PFQsIFUsIFY+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCiAgICAgewogICAgICAgICBpZiAoaXQu
bV9pbXBsID09IG1faW1wbC5lbmQoKSkKQEAgLTI1Niw2ICsyNzMsMTggQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgICAgICB2ZWN0b3JbaV0gPSAqaXQ7CiAgICAgfSAgCiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIGlubGluZSBib29sIEhh
c2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yPT0oY29uc3QgSGFzaFNldCYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoc2l6ZSgpICE9IG90aGVyLnNpemUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdGVyID0gYmVnaW4oKTsg
aXRlciAhPSBlbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAoIW90aGVyLmNvbnRhaW5z
KCppdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RG
OjpIYXNoU2V0OwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE1MjU4MikKKysrIFNvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcwLDYgKzExNzAsOCBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICB7CiAgICAgICAgIC8vIENvcHkgdGhlIGhhc2ggdGFibGUg
dGhlIGR1bWIgd2F5LCBieSBhZGRpbmcgZWFjaCBlbGVtZW50IHRvIHRoZSBuZXcgdGFibGUuCiAg
ICAgICAgIC8vIEl0IG1pZ2h0IGJlIG1vcmUgZWZmaWNpZW50IHRvIGNvcHkgdGhlIHRhYmxlIHNs
b3RzLCBidXQgaXQncyBub3QgY2xlYXIgdGhhdCBlZmZpY2llbmN5IGlzIG5lZWRlZC4KKyAgICAg
ICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQsIGZvciBz
dGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKICAgICAgICAgY29uc3RfaXRlcmF0
b3IgZW5kID0gb3RoZXIuZW5kKCk7CiAgICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBv
dGhlci5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBhZGQoKml0KTsKQEAg
LTEyMDksNiArMTIxMSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+JiBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHMsIEtleVRyYWl0cz46Om9wZXJhdG9yPShjb25zdCBIYXNoVGFibGUmIG90aGVyKQogICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IEl0J3MgbGlrZWx5IHRoYXQgdGhpcyBjYW4gYmUgaW1wcm92ZWQs
IGZvciBzdGF0aWMgYW5hbHlzZXMgdGhhdCB1c2UKKyAgICAgICAgLy8gSGFzaFNldHMuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg0NTUKICAgICAgICAgSGFzaFRh
YmxlIHRtcChvdGhlcik7CiAgICAgICAgIHN3YXAodG1wKTsKICAgICAgICAgcmV0dXJuICp0aGlz
OwpJbmRleDogU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvSW5zZXJ0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9JbnNl
cnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5zZXJ0aW9uX2gKKyNkZWZp
bmUgSW5zZXJ0aW9uX2gKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitjbGFzcyBJbnNlcnRpb24geworcHVibGljOgorICAgIEluc2VydGlvbigpIHsgfQorICAgIAor
ICAgIEluc2VydGlvbihzaXplX3QgaW5kZXgsIFQgZWxlbWVudCkKKyAgICAgICAgOiBtX2luZGV4
KGluZGV4KQorICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgIHsKKyAgICB9CisgICAg
CisgICAgc2l6ZV90IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIFQgZWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IEluc2VydGlvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9pbmRleCA8IG90aGVyLm1faW5kZXg7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzaXpl
X3QgbV9pbmRleDsKKyAgICBUIG1fZWxlbWVudDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRh
cmdldFZlY3RvclR5cGUsIHR5cGVuYW1lIEluc2VydGlvblZlY3RvclR5cGU+Cit2b2lkIGV4ZWN1
dGVJbnNlcnRpb25zKFRhcmdldFZlY3RvclR5cGUmIHRhcmdldCwgSW5zZXJ0aW9uVmVjdG9yVHlw
ZSYgaW5zZXJ0aW9ucykKK3sKKyAgICBpZiAoIWluc2VydGlvbnMuc2l6ZSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgdGFyZ2V0Lmdyb3codGFyZ2V0LnNpemUoKSArIGluc2VydGlvbnMuc2l6ZSgp
KTsKKyAgICBzaXplX3QgbGFzdEluZGV4ID0gdGFyZ2V0LnNpemUoKTsKKyAgICBmb3IgKHNpemVf
dCBpbmRleEluSW5zZXJ0aW9ucyA9IGluc2VydGlvbnMuc2l6ZSgpOyBpbmRleEluSW5zZXJ0aW9u
cy0tOykgeworICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbnNbaW5kZXhJbklu
c2VydGlvbnNdLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKKyAgICAgICAgc2l6ZV90IGlu
ZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gbGFzdEluZGV4OyAtLWkgPiBmaXJzdEluZGV4OykKKyAgICAgICAgICAgIHRhcmdldFtpXSA9
IHRhcmdldFtpIC0gaW5kZXhPZmZzZXRdOworICAgICAgICB0YXJnZXRbZmlyc3RJbmRleF0gPSBp
bnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5lbGVtZW50KCk7CisgICAgICAgIGxhc3RJbmRl
eCA9IGZpcnN0SW5kZXg7CisgICAgfQorICAgIGluc2VydGlvbnMucmVzaXplKDApOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpJbnNlcnRpb247Cit1c2luZyBXVEY6OmV4
ZWN1dGVJbnNlcnRpb25zOworCisjZW5kaWYgLy8gSW5zZXJ0aW9uX2gKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0xpc3REdW1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBMaXN0RHVtcF9oCisjZGVmaW5lIExpc3REdW1wX2gKKworI2lu
Y2x1ZGUgIkNvbW1hUHJpbnRlci5oIgorI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisjaW5jbHVk
ZSAiU3RyaW5nUHJpbnRTdHJlYW0uaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitjbGFzcyBMaXN0RHVtcCB7CitwdWJsaWM6CisgICAgTGlzdER1bXAoY29uc3Qg
VCYgbGlzdCwgY29uc3QgY2hhciogY29tbWEpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAg
ICAgICwgbV9jb21tYShjb21tYSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBUOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbV9saXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9saXN0LmVuZCgp
OyArK2l0ZXIpCisgICAgICAgICAgICBvdXQucHJpbnQobV9jb21tYSwgKml0ZXIpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBjb25zdCBUJiBtX2xpc3Q7CisgICAgQ29tbWFQcmludGVyIG1fY29t
bWE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgTWFwRHVtcCB7CitwdWJsaWM6
CisgICAgTWFwRHVtcChjb25zdCBUJiBtYXAsIGNvbnN0IGNoYXIqIGFycm93LCBjb25zdCBjaGFy
KiBjb21tYSkKKyAgICAgICAgOiBtX21hcChtYXApCisgICAgICAgICwgbV9hcnJvdyhhcnJvdykK
KyAgICAgICAgLCBtX2NvbW1hKGNvbW1hKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHR5cGVuYW1l
IFQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX21hcC5iZWdpbigpOyBpdGVyICE9IG1fbWFwLmVu
ZCgpOyArK2l0ZXIpCisgICAgICAgICAgICBvdXQucHJpbnQobV9jb21tYSwgaXRlci0+a2V5LCBt
X2Fycm93LCBpdGVyLT52YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCBU
JiBtX21hcDsKKyAgICBjb25zdCBjaGFyKiBtX2Fycm93OworICAgIENvbW1hUHJpbnRlciBtX2Nv
bW1hOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0xpc3REdW1wPFQ+IGxpc3REdW1wKGNv
bnN0IFQmIGxpc3QsIGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIikKK3sKKyAgICByZXR1cm4gTGlz
dER1bXA8VD4obGlzdCwgY29tbWEpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBDb21wYXJhdG9yPgorQ1N0cmluZyBzb3J0ZWRMaXN0RHVtcChjb25zdCBUJiBsaXN0LCBjb25z
dCBDb21wYXJhdG9yJiBjb21wYXJhdG9yLCBjb25zdCBjaGFyKiBjb21tYSA9ICIsICIpCit7Cisg
ICAgVmVjdG9yPHR5cGVuYW1lIFQ6OlZhbHVlVHlwZT4gbXlMaXN0OworICAgIG15TGlzdC5hcHBl
bmRSYW5nZShsaXN0LmJlZ2luKCksIGxpc3QuZW5kKCkpOworICAgIHN0ZDo6c29ydChteUxpc3Qu
YmVnaW4oKSwgbXlMaXN0LmVuZCgpLCBjb21wYXJhdG9yKTsKKyAgICBTdHJpbmdQcmludFN0cmVh
bSBvdXQ7CisgICAgQ29tbWFQcmludGVyIGNvbW1hUHJpbnRlcihjb21tYSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG15TGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hUHJpbnRlciwgbXlMaXN0W2ldKTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgbGVzc1RoYW4oY29uc3QgVCYg
YSwgY29uc3QgVCYgYikKK3sKKyAgICByZXR1cm4gYSA8IGI7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitDU3RyaW5nIHNvcnRlZExpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnN0IGNoYXIq
IGNvbW1hID0gIiwgIikKK3sKKyAgICByZXR1cm4gc29ydGVkTGlzdER1bXAobGlzdCwgbGVzc1Ro
YW48VDo6VmFsdWVUeXBlPiwgY29tbWEpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorTWFw
RHVtcDxUPiBtYXBEdW1wKGNvbnN0IFQmIG1hcCwgY29uc3QgY2hhciogYXJyb3cgPSAiPT4iLCBj
b25zdCBjaGFyKiBjb21tYSA9ICIsICIpCit7CisgICAgcmV0dXJuIE1hcER1bXA8VD4obWFwLCBh
cnJvdywgY29tbWEpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb21wYXJh
dG9yPgorQ1N0cmluZyBzb3J0ZWRNYXBEdW1wKGNvbnN0IFQmIG1hcCwgY29uc3QgQ29tcGFyYXRv
ciYgY29tcGFyYXRvciwgY29uc3QgY2hhciogYXJyb3cgPSAiPT4iLCBjb25zdCBjaGFyKiBjb21t
YSA9ICIsICIpCit7CisgICAgVmVjdG9yPHR5cGVuYW1lIFQ6OktleVR5cGU+IGtleXM7CisgICAg
Zm9yICh0eXBlbmFtZSBUOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFwLmJlZ2luKCk7IGl0ZXIg
IT0gbWFwLmVuZCgpOyArK2l0ZXIpCisgICAgICAgIGtleXMuYXBwZW5kKGl0ZXItPmtleSk7Cisg
ICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSwgY29tcGFyYXRvcik7CisgICAg
U3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIENvbW1hUHJpbnRlciBjb21tYVByaW50ZXIoY29t
bWEpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWFQcmludGVyLCBrZXlzW2ldLCBhcnJvdywgbWFwLmdldChrZXlz
W2ldKSk7CisgICAgcmV0dXJuIG91dC50b0NTdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKK3VzaW5nIFdURjo6bGlzdER1bXA7Cit1c2luZyBXVEY6OnNvcnRlZExpc3REdW1wOwor
dXNpbmcgV1RGOjptYXBEdW1wOwordXNpbmcgV1RGOjpzb3J0ZWRNYXBEdW1wOworCisjZW5kaWYg
Ly8gTGlzdER1bXBfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmgJKHJldmlzaW9uIDE1MjU4MikK
KysrIFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw2
ICsyMDcsNDUgQEAgcHVibGljOgogICAgICAgICBwcmludCh2YWx1ZTEyKTsKICAgICAgICAgcHJp
bnQodmFsdWUxMyk7CiAgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUg
VDYsIHR5cGVuYW1lIFQ3LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwg
dHlwZW5hbWUgVDExLCB0eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0Pgor
ICAgIHZvaWQgcHJpbnQoY29uc3QgVDEmIHZhbHVlMSwgY29uc3QgVDImIHZhbHVlMiwgY29uc3Qg
VDMmIHZhbHVlMywgY29uc3QgVDQmIHZhbHVlNCwgY29uc3QgVDUmIHZhbHVlNSwgY29uc3QgVDYm
IHZhbHVlNiwgY29uc3QgVDcmIHZhbHVlNywgY29uc3QgVDgmIHZhbHVlOCwgY29uc3QgVDkmIHZh
bHVlOSwgY29uc3QgVDEwJiB2YWx1ZTEwLCBjb25zdCBUMTEmIHZhbHVlMTEsIGNvbnN0IFQxMiYg
dmFsdWUxMiwgY29uc3QgVDEzJiB2YWx1ZTEzLCBjb25zdCBUMTQmIHZhbHVlMTQpCisgICAgewor
ICAgICAgICBwcmludCh2YWx1ZTEpOworICAgICAgICBwcmludCh2YWx1ZTIpOworICAgICAgICBw
cmludCh2YWx1ZTMpOworICAgICAgICBwcmludCh2YWx1ZTQpOworICAgICAgICBwcmludCh2YWx1
ZTUpOworICAgICAgICBwcmludCh2YWx1ZTYpOworICAgICAgICBwcmludCh2YWx1ZTcpOworICAg
ICAgICBwcmludCh2YWx1ZTgpOworICAgICAgICBwcmludCh2YWx1ZTkpOworICAgICAgICBwcmlu
dCh2YWx1ZTEwKTsKKyAgICAgICAgcHJpbnQodmFsdWUxMSk7CisgICAgICAgIHByaW50KHZhbHVl
MTIpOworICAgICAgICBwcmludCh2YWx1ZTEzKTsKKyAgICAgICAgcHJpbnQodmFsdWUxNCk7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h
bWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3
LCB0eXBlbmFtZSBUOCwgdHlwZW5hbWUgVDksIHR5cGVuYW1lIFQxMCwgdHlwZW5hbWUgVDExLCB0
eXBlbmFtZSBUMTIsIHR5cGVuYW1lIFQxMywgdHlwZW5hbWUgVDE0LCB0eXBlbmFtZSBUMTU+Cisg
ICAgdm9pZCBwcmludChjb25zdCBUMSYgdmFsdWUxLCBjb25zdCBUMiYgdmFsdWUyLCBjb25zdCBU
MyYgdmFsdWUzLCBjb25zdCBUNCYgdmFsdWU0LCBjb25zdCBUNSYgdmFsdWU1LCBjb25zdCBUNiYg
dmFsdWU2LCBjb25zdCBUNyYgdmFsdWU3LCBjb25zdCBUOCYgdmFsdWU4LCBjb25zdCBUOSYgdmFs
dWU5LCBjb25zdCBUMTAmIHZhbHVlMTAsIGNvbnN0IFQxMSYgdmFsdWUxMSwgY29uc3QgVDEyJiB2
YWx1ZTEyLCBjb25zdCBUMTMmIHZhbHVlMTMsIGNvbnN0IFQxNCYgdmFsdWUxNCwgY29uc3QgVDE1
JiB2YWx1ZTE1KQorICAgIHsKKyAgICAgICAgcHJpbnQodmFsdWUxKTsKKyAgICAgICAgcHJpbnQo
dmFsdWUyKTsKKyAgICAgICAgcHJpbnQodmFsdWUzKTsKKyAgICAgICAgcHJpbnQodmFsdWU0KTsK
KyAgICAgICAgcHJpbnQodmFsdWU1KTsKKyAgICAgICAgcHJpbnQodmFsdWU2KTsKKyAgICAgICAg
cHJpbnQodmFsdWU3KTsKKyAgICAgICAgcHJpbnQodmFsdWU4KTsKKyAgICAgICAgcHJpbnQodmFs
dWU5KTsKKyAgICAgICAgcHJpbnQodmFsdWUxMCk7CisgICAgICAgIHByaW50KHZhbHVlMTEpOwor
ICAgICAgICBwcmludCh2YWx1ZTEyKTsKKyAgICAgICAgcHJpbnQodmFsdWUxMyk7CisgICAgICAg
IHByaW50KHZhbHVlMTQpOworICAgICAgICBwcmludCh2YWx1ZTE1KTsKKyAgICB9CiB9OwogCiBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgY29uc3Qg
Y2hhciopOwo=
</data>
<flag name="review"
          id="228281"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>