<?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>142200</bug_id>
          
          <creation_ts>2015-03-02 17:41:27 -0800</creation_ts>
          <short_desc>Support extends and super keywords</short_desc>
          <delta_ts>2020-05-21 17:07:08 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>140491</blocked>
    
    <blocked>157972</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1073539</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-02 17:41:27 -0800</bug_when>
    <thetext>Support extends and super keywords for ES6 class syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073545</commentid>
    <comment_count>1</comment_count>
      <attachid>247727</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-02 17:51:40 -0800</bug_when>
    <thetext>Created attachment 247727
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074476</commentid>
    <comment_count>2</comment_count>
      <attachid>247944</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-05 04:28:06 -0800</bug_when>
    <thetext>Created attachment 247944
Implements the feature</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074477</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-05 04:30:17 -0800</bug_when>
    <thetext>Attachment 247944 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/Nodes.h:1604:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Nodes.h:1606:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:86:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:184:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:557:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Parser.h:373:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 6 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074478</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-05 04:30:17 -0800</bug_when>
    <thetext>I&apos;ll implment TDZ in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074479</commentid>
    <comment_count>5</comment_count>
      <attachid>247945</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-05 04:31:48 -0800</bug_when>
    <thetext>Created attachment 247945
Fixed build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074481</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-05 04:33:24 -0800</bug_when>
    <thetext>Attachment 247945 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/Nodes.h:1604:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Nodes.h:1606:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:86:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:184:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:557:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Parser.h:373:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 6 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074781</commentid>
    <comment_count>7</comment_count>
      <attachid>248026</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-05 18:07:06 -0800</bug_when>
    <thetext>Created attachment 248026
Updated for ToT and removed redundant code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074782</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-05 18:08:53 -0800</bug_when>
    <thetext>Attachment 248026 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/Nodes.h:1604:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Nodes.h:1606:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:86:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:184:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:557:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Parser.h:373:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 6 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074783</commentid>
    <comment_count>9</comment_count>
      <attachid>248026</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-03-05 18:11:22 -0800</bug_when>
    <thetext>Comment on attachment 248026
Updated for ToT and removed redundant code

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

minor minor suggestions from review while building something else

&gt; Source/JavaScriptCore/parser/Parser.h:756
&gt; +    template &lt;class TreeBuilder&gt; TreeProperty parseGetterSetter(TreeBuilder&amp;, bool strict, PropertyNode::Type, unsigned getterOrSetterStartOffset, bool isMethod = false);

Could you make isMethod an enum type? for my own sanity? I regret every bool in this :(

&gt; Source/JavaScriptCore/parser/SyntaxChecker.h:239
&gt; +    Property createGetterOrSetterProperty(const JSTokenLocation&amp;, PropertyNode::Type type, bool strict, const Identifier* name, const ParserFunctionInfo&lt;SyntaxChecker&gt;&amp;, unsigned, bool)

again ends make the world nicer :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075155</commentid>
    <comment_count>10</comment_count>
      <attachid>248113</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-06 16:40:47 -0800</bug_when>
    <thetext>Created attachment 248113
Updated for ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075156</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-06 16:41:15 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 248026 [details]
&gt; Updated for ToT and removed redundant code
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248026&amp;action=review
&gt; 
&gt; minor minor suggestions from review while building something else
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/Parser.h:756
&gt; &gt; +    template &lt;class TreeBuilder&gt; TreeProperty parseGetterSetter(TreeBuilder&amp;, bool strict, PropertyNode::Type, unsigned getterOrSetterStartOffset, bool isMethod = false);
&gt; 
&gt; Could you make isMethod an enum type? for my own sanity? I regret every bool
&gt; in this :(

I think I can get rid of this argument altogether.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075158</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-06 16:44:09 -0800</bug_when>
    <thetext>Attachment 248113 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/Nodes.h:1607:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Nodes.h:1609:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:86:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:184:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:557:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Parser.h:371:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 6 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075202</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-06 19:14:04 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; Comment on attachment 248026 [details]
&gt; &gt; Updated for ToT and removed redundant code
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=248026&amp;action=review
&gt; &gt; 
&gt; &gt; minor minor suggestions from review while building something else
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/parser/Parser.h:756
&gt; &gt; &gt; +    template &lt;class TreeBuilder&gt; TreeProperty parseGetterSetter(TreeBuilder&amp;, bool strict, PropertyNode::Type, unsigned getterOrSetterStartOffset, bool isMethod = false);
&gt; &gt; 
&gt; &gt; Could you make isMethod an enum type? for my own sanity? I regret every bool
&gt; &gt; in this :(
&gt; 
&gt; I think I can get rid of this argument altogether.

Scratch that idea. I&apos;m adding SuperBinding enum instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075205</commentid>
    <comment_count>14</comment_count>
      <attachid>248132</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-06 19:42:56 -0800</bug_when>
    <thetext>Created attachment 248132
Addresses Oliver&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075206</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-06 19:45:11 -0800</bug_when>
    <thetext>Attachment 248132 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/Nodes.h:1607:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Nodes.h:1609:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:86:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:184:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:557:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Parser.h:371:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 6 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075207</commentid>
    <comment_count>16</comment_count>
      <attachid>248133</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-06 19:45:40 -0800</bug_when>
    <thetext>Created attachment 248133
Fixed the merge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075208</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-06 19:48:26 -0800</bug_when>
    <thetext>Attachment 248133 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/Nodes.h:1607:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Nodes.h:1609:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:86:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:184:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:557:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Parser.h:371:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 6 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075727</commentid>
    <comment_count>18</comment_count>
      <attachid>248133</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-09 13:06:24 -0700</bug_when>
    <thetext>Comment on attachment 248133
Fixed the merge

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

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:88
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

When would we disable this?

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:76
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)
&gt; +        , m_constructorKindIsDerived(constructorKindIsDerived)
&gt; +#endif

You could set this unconditionally without the #if.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:78
&gt; +        UNUSED_PARAM(constructorKindIsDerived);

... and RELEASE_ASSERT that it&apos;s false if !ENABLE(ES6_CLASS_SYNTAX)

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:87
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)
&gt; +    bool m_constructorKindIsDerived : 1;
&gt; +#endif

No need for this field to be conditionalized.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:130
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)
&gt; +    bool constructorKindIsDerived() const { return m_constructorKindIsDerived; }
&gt; +#else
&gt; +    bool constructorKindIsDerived() const { return false; }
&gt; +#endif

If you make the field always present unconditionally, then you don&apos;t need this #if here.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:185
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)
&gt; +    bool m_constructorKindIsDerived : 1;
&gt; +#endif

This doesn&apos;t need to be conditionalized.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:363
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)
&gt; +    bool constructorKindIsDerived() const { return m_constructorKindIsDerived; }
&gt; +#endif

No need for this to be conditionalized.

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:558
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)
&gt; +    bool m_constructorKindIsDerived : 1;
&gt; +#endif

No need for this to be conditionalized.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:405
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)
&gt; +        if (constructorKindIsDerived()) {

No need for this to be conditionalized with an #if; constructorKindIsDerived() will always be false if !ENABLE(ES6_CLASS_SYNTAX).

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1915
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)
&gt; +    bool thisMightBeUninitialized = constructorKindIsDerived();
&gt; +#else
&gt; +    bool thisMightBeUninitialized = false;
&gt; +#endif

No need for conditionalization here.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1921
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:273
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:296
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:772
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:368
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

No need for #if here, you should just ensure that needsSuperBinding() always returns false if the feature is disabled.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:386
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

No need for this condition.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:395
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

No need for this.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:408
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:418
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)
&gt; +            if (pair.second &amp;&amp; pair.second-&gt;needsSuperBinding())

Ditto.  needsSuperBinding() will already return false if !ES6_CLASS_SYNTAX

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:432
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:503
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:597
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:659
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:670
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:693
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:703
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:1049
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:1063
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/parser/Nodes.h:1609
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)
&gt; +        bool m_constructorKindIsDerived : 1;

Ditto - this field should just always be false if !ES6_CLASS_SYNTAX

&gt; Source/JavaScriptCore/parser/Parser.cpp:1375
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/parser/Parser.cpp:1383
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/parser/Parser.cpp:2384
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/parser/Parser.cpp:2425
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/parser/Parser.cpp:2446
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/parser/Parser.cpp:2451
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/parser/Parser.h:116
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/parser/Parser.h:134
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/parser/Parser.h:272
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/parser/Parser.h:370
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.

&gt; Source/JavaScriptCore/parser/SyntaxChecker.h:76
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

It would be great if you could remove this, also - by just allowing ClassExpr and SuperXYZ stuff to just always be declared even if unused.

&gt; Source/JavaScriptCore/parser/SyntaxChecker.h:152
&gt; +#if ENABLE(ES6_CLASS_SYNTAX)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075788</commentid>
    <comment_count>19</comment_count>
      <attachid>248284</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-09 15:50:21 -0700</bug_when>
    <thetext>Created attachment 248284
Fixed per pizlo&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075790</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-09 15:53:11 -0700</bug_when>
    <thetext>Attachment 248284 did not pass style-queue:


ERROR: Source/JavaScriptCore/parser/Nodes.h:1603:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Nodes.h:1604:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:82:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:173:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:542:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
ERROR: Source/JavaScriptCore/parser/Parser.h:368:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 6 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075795</commentid>
    <comment_count>21</comment_count>
      <attachid>248284</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-09 16:02:21 -0700</bug_when>
    <thetext>Comment on attachment 248284
Fixed per pizlo&apos;s comment

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075813</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-09 16:47:31 -0700</bug_when>
    <thetext>Committed r181293: &lt;http://trac.webkit.org/changeset/181293&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247727</attachid>
            <date>2015-03-02 17:51:40 -0800</date>
            <delta_ts>2015-03-05 04:28:01 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-142200-20150302175123.patch</filename>
            <type>text/plain</type>
            <size>53151</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwOTEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBA
CisyMDE1LTAzLTAyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAg
IFN1cHBvcnQgZXh0ZW5kcyBhbmQgc3VwZXIga2V5d29yZHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjIwMAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2Nr
KToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlND
OjpFeGVjdXRhYmxlSW5mbzo6RXhlY3V0YWJsZUluZm8pOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCk6
CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmlzQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6Y29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6Om5ld1RhcmdldCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHA6CisgICAgICAgIChKU0M6OlN1cGVyTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6ZW1pdFN1cGVyQmFzZUZvckNhbGxlZSk6CisgICAgICAgIChKU0M6OlN1cGVyQnJhY2tl
dEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6U3VwZXJEb3RBY2Nl
c3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OmVtaXRQdXRIb21lT2JqZWN0
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFB1dENvbnN0YW50UHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAo
SlNDOjpEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25D
YWxsQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRlbGV0ZUJyYWNrZXROb2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpEZWxldGVEb3ROb2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAg
ICAqIHBhcnNlci9BU1RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OnN1cGVy
RXhwcik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVN1cGVyQ2FsbCk6CisgICAg
ICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVN1cGVyQnJhY2tldEFjY2Vzcyk6CisgICAgICAg
IChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVN1cGVyRG90QWNjZXNzKToKKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY3Rpb25Cb2R5KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6Y3JlYXRlUHJvcGVydHkpOgorICAgICAgICAqIHBhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmg6
CisgICAgICAgIChKU0M6OlN1cGVyTm9kZTo6U3VwZXJOb2RlKToKKyAgICAgICAgKEpTQzo6U3Vw
ZXJCcmFja2V0QWNjZXNzb3JOb2RlOjpTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGUpOgorICAgICAg
ICAoSlNDOjpTdXBlckRvdEFjY2Vzc29yTm9kZTo6U3VwZXJEb3RBY2Nlc3Nvck5vZGUpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZSk6CisgICAgICAgICogcGFyc2Vy
L05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5
Tm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkV4cHJlc3Np
b25Ob2RlOjppc1N1cGVyTm9kZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Tm9kZTo6dHlwZSk6
CisgICAgICAgIChKU0M6OlByb3BlcnR5Tm9kZTo6aXNNZXRob2QpOgorICAgICAgICAqIHBhcnNl
ci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5j
dGlvbkJvZHkpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlv
bkluZm8pOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkRl
Y2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3Mp
OgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VHZXR0ZXJTZXR0ZXIpOgor
ICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24p
OgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyTW9k
ZXMuaDoKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAgICAgICAoSlNDOjpT
eW50YXhDaGVja2VyOjpzdXBlckV4cHIpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpj
cmVhdGVTdXBlckNhbGwpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVTdXBl
ckJyYWNrZXRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVTdXBl
ckRvdEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZ1bmN0aW9u
Qm9keSk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVByb3BlcnR5KToKKyAg
ICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGltZS9F
eGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpleGVjdXRhYmxlSW5m
byk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpleGVjdXRhYmxlSW5mbyk6CisK
IDIwMTUtMDMtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlQXJndW1lbnRzKCkgc2hvdWxkIGJlIGEgYml0IGZh
c3RlciwgYW5kIHNob3VsZG4ndCBkbyBkZXN0cnVjdG9yIGluaXRpYWxpemF0aW9uCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDE4MDg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDggQEAg
c3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGdlbmVyYQogICAgIGZ1bmN0aW9uLT5m
aW5pc2hQYXJzaW5nKGV4ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgp
LCBleGVjdXRhYmxlLT5mdW5jdGlvbk1vZGUoKSk7CiAgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFy
c2UoZnVuY3Rpb24tPmZlYXR1cmVzKCksIGZ1bmN0aW9uLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygp
KTsKICAgICAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUsIEV4ZWN1dGFibGVJ
bmZvKGZ1bmN0aW9uLT5uZWVkc0FjdGl2YXRpb24oKSwgZnVuY3Rpb24tPnVzZXNFdmFsKCksIGZ1
bmN0aW9uLT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0LCBmdW5jdGlv
bktpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24pKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZt
LCBGdW5jdGlvbkNvZGUsCisgICAgICAgIEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT5uZWVkc0Fj
dGl2YXRpb24oKSwgZnVuY3Rpb24tPnVzZXNFdmFsKCksIGZ1bmN0aW9uLT5pc1N0cmljdE1vZGUo
KSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0LCBmdW5jdGlvbktpbmQgPT0gVW5saW5rZWRCdWls
dGluRnVuY3Rpb24sIGV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCgpKSk7
CiAgICAgYXV0byBnZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxCeXRlY29kZUdlbmVyYXRvcj4o
dm0sIGZ1bmN0aW9uLmdldCgpLCByZXN1bHQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlKSk7
CiAgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAgICAgaWYgKGVycm9yLmlzVmFs
aWQoKSkKQEAgLTg0LDYgKzg1LDcgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlu
a2VkRnVuYwogICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChub2RlLT5pc0luU3RyaWN0Q29udGV4
dCgpKQogICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKICAgICAsIG1faXNCdWls
dGluRnVuY3Rpb24oa2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbikKKyAgICAsIG1fY29u
c3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKG5vZGUtPmNvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZl
ZCgpKQogICAgICwgbV9uYW1lKG5vZGUtPmlkZW50KCkpCiAgICAgLCBtX2luZmVycmVkTmFtZShu
b2RlLT5pbmZlcnJlZE5hbWUoKSkKICAgICAsIG1fcGFyYW1ldGVycyhub2RlLT5wYXJhbWV0ZXJz
KCkpCkBAIC0yMDUsNiArMjA3LDcgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJs
b2NrKFZNKgogICAgICwgbV9pc0NvbnN0cnVjdG9yKGluZm8ubV9pc0NvbnN0cnVjdG9yKQogICAg
ICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKICAgICAsIG1faXNCdWlsdGluRnVuY3Rp
b24oaW5mby5tX2lzQnVpbHRpbkZ1bmN0aW9uKQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmRNYXli
ZURlcml2ZWQoaW5mby5tX2NvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCkKICAgICAsIG1fZmly
c3RMaW5lKDApCiAgICAgLCBtX2xpbmVDb3VudCgwKQogICAgICwgbV9lbmRDb2x1bW4oVUlOVF9N
QVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTgwODk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEyICs2
NiwxMyBAQCB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvCiB0eXBlZGVm
IHVuc2lnbmVkIFVubGlua2VkTExJbnRDYWxsTGlua0luZm87CiAKIHN0cnVjdCBFeGVjdXRhYmxl
SW5mbyB7Ci0gICAgRXhlY3V0YWJsZUluZm8oYm9vbCBuZWVkc0FjdGl2YXRpb24sIGJvb2wgdXNl
c0V2YWwsIGJvb2wgaXNTdHJpY3RNb2RlLCBib29sIGlzQ29uc3RydWN0b3IsIGJvb2wgaXNCdWls
dGluRnVuY3Rpb24pCisgICAgRXhlY3V0YWJsZUluZm8oYm9vbCBuZWVkc0FjdGl2YXRpb24sIGJv
b2wgdXNlc0V2YWwsIGJvb2wgaXNTdHJpY3RNb2RlLCBib29sIGlzQ29uc3RydWN0b3IsIGJvb2wg
aXNCdWlsdGluRnVuY3Rpb24sIGJvb2wgY29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKQogICAg
ICAgICA6IG1fbmVlZHNBY3RpdmF0aW9uKG5lZWRzQWN0aXZhdGlvbikKICAgICAgICAgLCBtX3Vz
ZXNFdmFsKHVzZXNFdmFsKQogICAgICAgICAsIG1faXNTdHJpY3RNb2RlKGlzU3RyaWN0TW9kZSkK
ICAgICAgICAgLCBtX2lzQ29uc3RydWN0b3IoaXNDb25zdHJ1Y3RvcikKICAgICAgICAgLCBtX2lz
QnVpbHRpbkZ1bmN0aW9uKGlzQnVpbHRpbkZ1bmN0aW9uKQorICAgICAgICAsIG1fY29uc3RydWN0
b3JLaW5kTWF5YmVEZXJpdmVkKGNvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCkKICAgICB7CiAg
ICAgfQogICAgIGJvb2wgbV9uZWVkc0FjdGl2YXRpb24gOiAxOwpAQCAtNzksNiArODAsNyBAQCBz
dHJ1Y3QgRXhlY3V0YWJsZUluZm8gewogICAgIGJvb2wgbV9pc1N0cmljdE1vZGUgOiAxOwogICAg
IGJvb2wgbV9pc0NvbnN0cnVjdG9yIDogMTsKICAgICBib29sIG1faXNCdWlsdGluRnVuY3Rpb24g
OiAxOworICAgIGJvb2wgbV9jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQgOiAxOwogfTsKIAog
ZW51bSBVbmxpbmtlZEZ1bmN0aW9uS2luZCB7CkBAIC0xMTcsNiArMTE5LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIEpTUGFyc2VTdHJpY3Q7CiAgICAgICAgIHJldHVybiBKU1BhcnNl
Tm9ybWFsOwogICAgIH0KKyAgICBib29sIGNvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkOyB9CiAKICAgICB1bnNp
Z25lZCBmaXJzdExpbmVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGluZU9mZnNldDsg
fQogICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50OyB9
CkBAIC0xNjksNiArMTcyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNJblN0cmljdENvbnRl
eHQgOiAxOwogICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CiAgICAgYm9vbCBt
X2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyAgICBib29sIG1fY29uc3RydWN0b3JLaW5kTWF5YmVE
ZXJpdmVkIDogMTsKIAogICAgIElkZW50aWZpZXIgbV9uYW1lOwogICAgIElkZW50aWZpZXIgbV9p
bmZlcnJlZE5hbWU7CkBAIC0zNDMsNiArMzQ3LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNOdW1l
cmljQ29tcGFyZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc051bWVyaWNDb21wYXJlRnVu
Y3Rpb247IH0KIAogICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X2lzQnVpbHRpbkZ1bmN0aW9uOyB9CisgICAgYm9vbCBjb25zdHJ1Y3RvcktpbmRNYXliZURlcml2
ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZDsgfQogICAg
IAogICAgIHZvaWQgc2hyaW5rVG9GaXQoKQogICAgIHsKQEAgLTUzNSw2ICs1NDAsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9yIDogMTsKICAgICBib29sIG1faGFzQ2FwdHVy
ZWRWYXJpYWJsZXMgOiAxOwogICAgIGJvb2wgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAg
Ym9vbCBtX2NvbnN0cnVjdG9yS2luZE1heWJlRGVyaXZlZCA6IDE7CiAgICAgdW5zaWduZWQgbV9m
aXJzdExpbmU7CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CiAgICAgdW5zaWduZWQgbV9lbmRD
b2x1bW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTgwODk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwMSw3ICs0MDEsMjYgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKFZNJgogICAgIGFkZENhbGxlZShmdW5jdGlvbk5vZGUsIGNhbGxlZVJlZ2lzdGVy
KTsKIAogICAgIGlmIChpc0NvbnN0cnVjdG9yKCkpIHsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZ
TlRBWCkKKyAgICAgICAgYm9vbCBtYXliZURlcml2ZWQgPSBjb25zdHJ1Y3RvcktpbmRNYXliZURl
cml2ZWQoKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQ7
CisgICAgICAgIG1fbmV3VGFyZ2V0UmVnaXN0ZXIgPSBhZGRWYXIoKTsKKyAgICAgICAgZW1pdE1v
dmUobV9uZXdUYXJnZXRSZWdpc3RlciwgJm1fdGhpc1JlZ2lzdGVyKTsKKyAgICAgICAgaWYgKG1h
eWJlRGVyaXZlZCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBjYWxsZWUoSlNTdGFjazo6Q2Fs
bGVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpc0Rlcml2ZWRSZWcgPSBlbWl0
R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgJmNhbGxlZSwgcHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yS2luZElzRGVyaXZlZFByaXZhdGVOYW1lKTsKKyAgICAgICAgICAgIGNvbnN0cnVjdG9yS2lu
ZElzRGVyaXZlZCA9IG5ld0xhYmVsKCk7CisgICAgICAgICAgICBlbWl0SnVtcElmVHJ1ZShpc0Rl
cml2ZWRSZWcuZ2V0KCksIGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZC5nZXQoKSk7CisgICAgICAg
IH0KKyNlbmRpZgogICAgICAgICBlbWl0Q3JlYXRlVGhpcygmbV90aGlzUmVnaXN0ZXIpOworI2lm
IEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICBpZiAobWF5YmVEZXJpdmVkKSB7Cisg
ICAgICAgICAgICBSZWZQdHI8TGFiZWw+IGNvbnN0cnVjdG9yS2luZElzQmFzZTsKKyAgICAgICAg
ICAgIGVtaXRMYWJlbChjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQuZ2V0KCkpOworICAgICAgICAg
ICAgZW1pdE1vdmUoJm1fdGhpc1JlZ2lzdGVyLCBhZGRDb25zdGFudEVtcHR5VmFsdWUoKSk7Cisg
ICAgICAgIH0KKyNlbmRpZgogICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25Ob2RlLT51c2VzVGhpcygp
IHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSkgewogICAgICAgICBtX2NvZGVCbG9jay0+YWRkUHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogICAgICAgICBl
bWl0T3Bjb2RlKG9wX3RvX3RoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTgwODk1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNyArMjY5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVO
b2RlLT5wYXJzZXJBcmVuYSgpOyB9CiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBw
cm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKm1fdm0tPnByb3BlcnR5TmFtZXM7IH0KIAot
ICAgICAgICBib29sIGlzQ29uc3RydWN0b3IoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25z
dHJ1Y3RvcigpOyB9CisgICAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCk7IH0KKyAgICAgICAgYm9vbCBjb25zdHJ1Y3Rv
cktpbmRNYXliZURlcml2ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+Y29uc3RydWN0
b3JLaW5kTWF5YmVEZXJpdmVkKCk7IH0KIAogICAgICAgICBQYXJzZXJFcnJvciBnZW5lcmF0ZSgp
OwogCkBAIC0yOTAsNyArMjkxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gUmV0
dXJucyB0aGUgcmVnaXN0ZXIgc3RvcmluZyAidGhpcyIKICAgICAgICAgUmVnaXN0ZXJJRCogdGhp
c1JlZ2lzdGVyKCkgeyByZXR1cm4gJm1fdGhpc1JlZ2lzdGVyOyB9Ci0gICAgICAgIAorICAgICAg
ICBSZWdpc3RlcklEKiBuZXdUYXJnZXQoKSB7IHJldHVybiBtX25ld1RhcmdldFJlZ2lzdGVyOyB9
CisKICAgICAgICAgUmVnaXN0ZXJJRCogc2NvcGVSZWdpc3RlcigpIHsgcmV0dXJuIG1fc2NvcGVS
ZWdpc3RlcjsgfQogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIHRlbXBv
cmFyeSByZWdpc3Rlci4gUmVnaXN0ZXJzIHJldHVybmVkIGJ5CkBAIC00NTIsNiArNDU0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRVbmFyeU5vRHN0T3AoT3Bj
b2RlSUQsIFJlZ2lzdGVySUQqIHNyYyk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENyZWF0
ZVRoaXMoUmVnaXN0ZXJJRCogZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0VERaQ2hlY2soUmVnaXN0
ZXJJRCopOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3T2JqZWN0KFJlZ2lzdGVySUQqIGRz
dCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdBcnJheShSZWdpc3RlcklEKiBkc3QsIEVs
ZW1lbnROb2RlKiwgdW5zaWduZWQgbGVuZ3RoKTsgLy8gc3RvcHMgYXQgZmlyc3QgZWxpc2lvbgog
CkBAIC03NTksNiArNzYyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQq
IG1fZW1wdHlWYWx1ZVJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBt
X2dsb2JhbE9iamVjdFJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBt
X2xvY2FsQXJndW1lbnRzUmVnaXN0ZXIgeyBudWxscHRyIH07CisgICAgICAgIFJlZ2lzdGVySUQq
IG1fbmV3VGFyZ2V0UmVnaXN0ZXIgeyBudWxscHRyIH07CiAKICAgICAgICAgVmVjdG9yPElkZW50
aWZpZXIsIDE2PiBtX3dhdGNoYWJsZVZhcmlhYmxlczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9y
PFJlZ2lzdGVySUQsIDMyPiBtX2NvbnN0YW50UG9vbFJlZ2lzdGVyczsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJl
dmlzaW9uIDE4MDg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1Niw2NiBAQCBSZWdpc3Rl
cklEKiBUaGlzTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gU3VwZXJOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworUmVnaXN0ZXJJRCogU3VwZXJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIGlmIChkc3QgPT0gZ2VuZXJh
dG9yLmlnbm9yZWRSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWdpc3RlcklE
IGNhbGxlZTsKKyAgICBjYWxsZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKKworICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBob21lT2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgJmNhbGxlZSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5o
b21lT2JqZWN0UHJpdmF0ZU5hbWUpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90b1BhcmVu
dCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGhvbWVP
YmplY3QuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKTsK
KyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIHByb3RvUGFyZW50LmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmNv
bnN0cnVjdG9yKTsKK30KKworc3RhdGljIFJlZ2lzdGVySUQqIGVtaXRTdXBlckJhc2VGb3JDYWxs
ZWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKK3sKKyAgICBSZWdpc3RlcklEIGNhbGxl
ZTsKKyAgICBjYWxsZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKKworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBob21lT2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgJmNhbGxlZSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ob21lT2Jq
ZWN0UHJpdmF0ZU5hbWUpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpLCBob21lT2JqZWN0LmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlO
YW1lcygpLnVuZGVyc2NvcmVQcm90byk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKG1fc3Vic2NyaXB0KTsKKyAgICBpZiAoZHN0ID09IGdlbmVy
YXRvci5pZ25vcmVkUmVzdWx0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVnaXN0ZXJJ
RCBjYWxsZWU7CisgICAgY2FsbGVlLnNldEluZGV4KEpTU3RhY2s6OkNhbGxlZSk7CisKKworCisg
ICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgJmNhbGxl
ZSAvKiBnZW5lcmF0b3Iuc2NvcGVSZWdpc3RlcigpICovKTsKK30KKworLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIFN1cGVyRG90QWNjZXNzb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCogU3VwZXJEb3RBY2Nlc3Nvck5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCit7CisgICAgVU5VU0VEX1BBUkFNKG1faWRlbnQpOworICAgIGlmIChkc3QgPT0gZ2VuZXJh
dG9yLmlnbm9yZWRSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWdpc3RlcklE
IGNhbGxlZTsKKyAgICBjYWxsZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKKworICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBob21lT2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgJmNhbGxlZSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5o
b21lT2JqZWN0UHJpdmF0ZU5hbWUpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlVmFsdWUg
PSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBob21lT2Jq
ZWN0LmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90byk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9u
KGRzdCksIGJhc2VWYWx1ZS5nZXQoKSwgbV9pZGVudCk7Cit9CisKKyNlbmRpZgorCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBib29sIFJlc29sdmVOb2RlOjppc1B1cmUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvcikgY29uc3QKQEAgLTI5NCw2ICszNTQsMTMgQEAgUmVnaXN0ZXJJRCog
T2JqZWN0TGl0ZXJhbE5vZGU6OmVtaXRCeXRlYwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gUHJvcGVydHlMaXN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCitzdGF0aWMgaW5saW5lIHZvaWQgZW1pdFB1
dEhvbWVPYmplY3QoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZnVu
Y3Rpb24sIFJlZ2lzdGVySUQqIGhvbWVPYmplY3QpCit7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRC
eUlkKGZ1bmN0aW9uLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRl
TmFtZSwgaG9tZU9iamVjdCk7Cit9CisjZW5kaWYKKwogUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIHsKICAgICAvLyBGYXN0IGNhc2U6IHRoaXMgbG9vcCBqdXN0IGhhbmRsZXMgcmVn
dWxhciB2YWx1ZSBwcm9wZXJ0aWVzLgpAQCAtMzMwLDYgKzM5NywxMCBAQCBSZWdpc3RlcklEKiBQ
cm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IFJlZ2lzdGVySUQqIHZhbHVlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUtPm1fYXNzaWduKTsK
KyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgICAgIGlmIChub2RlLT5pc01l
dGhvZCgpKQorICAgICAgICAgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgdmFs
dWUsIGRzdCk7CisjZW5kaWYKIAogICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGdldC9zZXQgcHJv
cGVydHksIGZpbmQgaXRzIGVudHJ5IGluIHRoZSBtYXAuCiAgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+bV90eXBlID09IFByb3BlcnR5Tm9kZTo6R2V0dGVyIHx8IG5vZGUtPm1fdHlwZSA9PSBQcm9w
ZXJ0eU5vZGU6OlNldHRlcik7CkBAIC0zNzUsMTggKzQ0NiwzNCBAQCBSZWdpc3RlcklEKiBQcm9w
ZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvCiAKIHZvaWQgUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFB1
dENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogbmV3T2JqLCBQcm9wZXJ0eU5vZGUmIG5vZGUpCiB7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUubV9hc3NpZ24pOworI2lmIEVOQUJMRShF
UzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmIChub2RlLmlzTWV0aG9kKCkpCisgICAgICAgIGVtaXRQ
dXRIb21lT2JqZWN0KGdlbmVyYXRvciwgdmFsdWUuZ2V0KCksIG5ld09iaik7CisjZW5kaWYKICAg
ICBpZiAobm9kZS5uYW1lKCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlk
KG5ld09iaiwgKm5vZGUubmFtZSgpLCBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2lnbikp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQobmV3T2JqLCAqbm9kZS5uYW1l
KCksIHZhbHVlLmdldCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUubV9leHByZXNz
aW9uKTsKLSAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5VmFsKG5ld09iaiwgcHJvcGVydHlO
YW1lLmdldCgpLCBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2lnbikpOworICAgIGdlbmVy
YXRvci5lbWl0RGlyZWN0UHV0QnlWYWwobmV3T2JqLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHZhbHVl
LmdldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyYWNrZXRB
Y2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJ
RCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKKyAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBT
aG91bGQgd2UgZ2VuZXJhdGUgdGhlIHByb2ZpbGVyIGluZm8/CisgICAgICAgIGlmIChtX3N1YnNj
cmlwdC0+aXNTdHJpbmcoKSkgeworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWQgPSBz
dGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpOworICAgICAgICAg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpLCBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvciksIGlkKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QpLCBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvciksIGdlbmVy
YXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCkpOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKG1f
YmFzZS0+aXNSZXNvbHZlTm9kZSgpIAogICAgICAgICAmJiBnZW5lcmF0b3Iud2lsbFJlc29sdmVU
b0FyZ3VtZW50c1JlZ2lzdGVyKHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+aWRl
bnRpZmllcigpKQogICAgICAgICAmJiAhZ2VuZXJhdG9yLnN5bWJvbFRhYmxlKCkuc2xvd0FyZ3Vt
ZW50cygpKSB7CkBAIC00MzEsNyArNTE4LDExIEBAIFJlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9k
ZTo6ZW1pdEJ5dGVjb2QKICAgICB9CiAKIG5vbkFyZ3VtZW50c1BhdGg6CisjaWYgRU5BQkxFKEVT
Nl9DTEFTU19TWU5UQVgpCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBtX2Jhc2UtPmlz
U3VwZXJOb2RlKCkgPyBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBnZW5lcmF0
b3IuZW1pdE5vZGUobV9iYXNlKTsKKyNlbHNlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyNlbmRpZgogICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBS
ZWdpc3RlcklEKiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwog
ICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJh
c2UuZ2V0KCksIG1faWRlbnQpOwpAQCAtNTIxLDYgKzYxMiwxNCBAQCBSZWdpc3RlcklEKiBGdW5j
dGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJu
VmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwogICAg
IENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisjaWYgRU5B
QkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgaWYgKG1fZXhwci0+aXNTdXBlck5vZGUoKSkgewor
ICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwg
Z2VuZXJhdG9yLm5ld1RhcmdldCgpKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJh
dG9yLmVtaXRDb25zdHJ1Y3QocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0
ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50aGlzUmVnaXN0ZXIo
KSwgcmV0KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisjZW5kaWYKICAgICBnZW5lcmF0
b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7
CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdl
dCgpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50
eXBlUHJvZmlsZXIoKSkgewpAQCAtNTc0LDEzICs2NzMsMjUgQEAgUmVnaXN0ZXJJRCogRnVuY3Rp
b25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIHsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIGJhc2VJ
c1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBi
YXNlID0gYmFzZUlzU3VwZXIgPyBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyNlbHNlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyNlbmRpZgogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3Vi
ZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVtcERl
c3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qs
IGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJh
dG9yLCBtX2FyZ3MpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmIChiYXNl
SXNTdXBlcikKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1Jl
Z2lzdGVyKCksIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisgICAgZWxzZQorICAgICAgICBn
ZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQo
KSk7CisjZWxzZQogICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBiYXNlLmdldCgpKTsKKyNlbmRpZgogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVy
YXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0
ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBl
Qnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKQEAgLTU5Niw5ICs3MDcsMjEg
QEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dAogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVu
dHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAg
IGJvb2wgYmFzZUlzU3VwZXIgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7CisgICAgaWYgKGJhc2VJ
c1N1cGVyKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpKTsKKyAgICBlbHNlCisgICAgICAgIGdl
bmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2Jhc2UpOwor
I2Vsc2UKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIo
KSwgbV9iYXNlKTsKKyNlbmRpZgogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3Vi
ZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5k
KCkpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGdlbmVyYXRvci5lbWl0R2V0
QnlJZChmdW5jdGlvbi5nZXQoKSwgYmFzZUlzU3VwZXIgPyBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVl
KGdlbmVyYXRvcikgOiBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50KTsKKyNl
bHNlCiAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50KTsKKyNlbmRpZgogICAgIFJlZ2lzdGVySUQqIHJl
dCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCks
IE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIFBy
b2ZpbGVUeXBlQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKQEAgLTk0MCw2
ICsxMDYzLDEwIEBAIFJlZ2lzdGVySUQqIERlbGV0ZUJyYWNrZXROb2RlOjplbWl0Qnl0ZWMKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQp
OwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmICht
X2Jhc2UtPmlzU3VwZXJOb2RlKCkpCisgICAgICAgIHJldHVybiBlbWl0VGhyb3dSZWZlcmVuY2VF
cnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVydHkiKTsKKyNlbmRp
ZgogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMS5nZXQoKSk7CiB9CiAKQEAgLTk1MCw2ICsxMDc3
LDEwIEBAIFJlZ2lzdGVySUQqIERlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSgKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKIAogICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobV9iYXNlLT5pc1N1
cGVyTm9kZSgpKQorICAgICAgICByZXR1cm4gZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJh
dG9yLCAiQ2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5Iik7CisjZW5kaWYKICAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCksIHIwLmdldCgpLCBtX2lkZW50KTsKIH0KIApAQCAtMjgwNywxMSArMjkzOCw0MSBAQCB2b2lk
IENsYXNzRGVjbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kCiAKIFJlZ2lzdGVySUQqIENsYXNz
RXhwck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiB7Ci0gICAgQVNTRVJUKCFtX3BhcmVudENsYXNzRXhwcmVzc2lvbik7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNsYXNzSGVyaXRhZ2U7CisgICAgaWYgKG1fcGFyZW50Q2xh
c3NFeHByZXNzaW9uKSB7CisgICAgICAgIGNsYXNzSGVyaXRhZ2UgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjbGFzc0hlcml0YWdlLmdldCgp
LCBtX3BhcmVudENsYXNzRXhwcmVzc2lvbik7CisgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGNvbnN0cnVjdG9yID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9jb25zdHJ1Y3RvckV4
cHJlc3Npb24pOworICAgIC8vIEZJWE1FOiBNYWtlIHRoZSBwcm90b3R5cGUgbm9uLWNvbmZpZ3Vy
YWJsZSAmIG5vbi13cml0YWJsZS4KICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdG90eXBlID0g
Z2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgY29uc3RydWN0
b3IuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKIAorICAgIGlm
IChjbGFzc0hlcml0YWdlKSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90b1BhcmVu
dCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBjbGFz
c0hlcml0YWdlSXNOdWxsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIFJlZlB0cjxM
YWJlbD4gcHJvdG9QYXJlbnRJc1NldCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworCisgICAgICAg
IGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3BfZXFfbnVs
bCwgcHJvdG9QYXJlbnQuZ2V0KCksIGNsYXNzSGVyaXRhZ2UuZ2V0KCkpLCBjbGFzc0hlcml0YWdl
SXNOdWxsLmdldCgpKTsKKworICAgICAgICAvLyBGSVhNRTogVGhyb3cgVHlwZUVycm9yIGlmIGlz
Q29uc3RydWN0b3IocGFyZW50Q2xhc3MpIGlzIGZhbHNlIG9yIGl0J3MgYSBnZW5lcmF0b3IgZnVu
Y3Rpb24uCisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChwcm90b1BhcmVudC5nZXQoKSwg
Y2xhc3NIZXJpdGFnZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUp
OworICAgICAgICAvLyBGSVhNRTogVGhyb3cgVHlwZUVycm9yIGlmIFR5cGUocHJvdG9QYXJlbnQp
IGlzIG5vdCBPYmplY3Qgb3IgbnVsbC4KKworICAgICAgICAvLyBFUzYgZHJhZnQgZG9lc24ndCBz
dG9yZSBob21lT2JqZWN0IG9uIHRoZSBjb25zdHJ1Y3RvciBidXQgdGhpcyB3b3VsZCBtYWtlIHN1
cHBvcnRpbmcgIm5ldyBzdXBlciIgaW4gY29uc3RydWN0b3IgY3VtYmVyc29tZS4KKyAgICAgICAg
ZW1pdFB1dEhvbWVPYmplY3QoZ2VuZXJhdG9yLCBjb25zdHJ1Y3Rvci5nZXQoKSwgcHJvdG90eXBl
LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKGNvbnN0cnVjdG9y
LmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yS2luZElzRGVyaXZl
ZFByaXZhdGVOYW1lLAorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwganNCb29sZWFuKHRydWUpKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXREaXJlY3RQdXRCeUlkKHByb3RvdHlwZS5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMo
KS51bmRlcnNjb3JlUHJvdG8sIHByb3RvUGFyZW50LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRKdW1wKHByb3RvUGFyZW50SXNTZXQuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwoY2xhc3NIZXJpdGFnZUlzTnVsbC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0RGlyZWN0UHV0QnlJZChwcm90b3R5cGUuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVz
KCkudW5kZXJzY29yZVByb3RvLCBjbGFzc0hlcml0YWdlLmdldCgpKTsKKworICAgICAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKHByb3RvUGFyZW50SXNTZXQuZ2V0KCkpOworICAgIH0KKwogICAgIGlm
IChtX3N0YXRpY01ldGhvZHMpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjb25zdHJ1Y3Rv
ci5nZXQoKSwgbV9zdGF0aWNNZXRob2RzKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE4MDg5NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNiArMTY5
LDM2IEBAIHB1YmxpYzoKICAgICAgICAgdXNlc1RoaXMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgVGhpc05vZGUobG9jYXRpb24pOwogICAgIH0KKyNpZiBFTkFCTEUoRVM2
X0NMQVNTX1NZTlRBWCkKKyAgICBFeHByZXNzaW9uTm9kZSogc3VwZXJFeHByKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24pCisgICAgeworICAgICAgICAvLyBGSVhNRTogQWRkIGFuZCBj
YWxsIHVzZXNTdXBlcigpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBTdXBl
ck5vZGUobG9jYXRpb24pOworICAgIH0KKyAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlU3VwZXJD
YWxsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFyZ3VtZW50c05vZGUqIGFyZ3Vt
ZW50cywgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCisgICAgeworICAgICAgICBVTlVTRURf
UEFSQU0oYXJndW1lbnRzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHN0YXJ0KTsKKyAgICAgICAg
VU5VU0VEX1BBUkFNKGRpdm90KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGVuZCk7CisgICAgICAg
IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFN1cGVyTm9kZShsb2NhdGlvbik7CisgICAgfQor
ICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVTdXBlckJyYWNrZXRBY2Nlc3MoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIHByb3BlcnR5LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGVuZCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShwcm9wZXJ0eSk7
CisgICAgICAgIFVOVVNFRF9QQVJBTShzdGFydCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkaXZv
dCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShlbmQpOworICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBTdXBlckJyYWNrZXRBY2Nlc3Nvck5vZGUobG9jYXRpb24sIHByb3BlcnR5KTsK
KyAgICB9CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVN1cGVyRG90QWNjZXNzKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIHByb3BlcnR5LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdGFy
dCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkaXZvdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShl
bmQpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBTdXBlckRvdEFjY2Vzc29y
Tm9kZShsb2NhdGlvbiwgKnByb3BlcnR5KTsKKyAgICB9CisjZW5kaWYKICAgICBFeHByZXNzaW9u
Tm9kZSogY3JlYXRlUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQogICAgIHsK
ICAgICAgICAgaWYgKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQpCkBA
IC0yOTgsOSArMzI4LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAotICAgIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRp
b24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaW5TdHJp
Y3RDb250ZXh0KQorICAgIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZUZ1bmN0aW9uQm9keShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
ZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJv
b2wgaW5TdHJpY3RDb250ZXh0LCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3Rvcktp
bmQpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jdGlvbkJv
ZHlOb2RlKG1fcGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENv
bHVtbiwgZW5kQ29sdW1uLCBpblN0cmljdENvbnRleHQpOworICAgICAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBGdW5jdGlvbkJvZHlOb2RlKG1fcGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRp
b24sIGVuZExvY2F0aW9uLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBpblN0cmljdENvbnRleHQs
IGNvbnN0cnVjdG9yS2luZCk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRGdW5jdGlvbk5hbWVTdGFy
dChGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBpbnQgZnVuY3Rpb25OYW1lU3RhcnQpCkBAIC0zMzMs
MTEgKzM2MywxMSBAQCBwdWJsaWM6CiAgICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1l
bnRzTGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSog
YXJnKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRp
b24sIGFyZyk7IH0KICAgICBBcmd1bWVudExpc3ROb2RlKiBjcmVhdGVBcmd1bWVudHNMaXN0KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MsIEV4
cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQXJndW1lbnRM
aXN0Tm9kZShsb2NhdGlvbiwgYXJncywgYXJnKTsgfQogCi0gICAgUHJvcGVydHlOb2RlKiBjcmVh
dGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2Rl
KiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCkKKyAgICBQcm9wZXJ0eU5vZGUq
IGNyZWF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lv
bk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sLCBib29sIGlzTWV0aG9k
ID0gZmFsc2UpCiAgICAgewogICAgICAgICBpZiAobm9kZS0+aXNGdW5jRXhwck5vZGUoKSkKICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KG5vZGUpLT5ib2R5KCktPnNldElu
ZmVycmVkTmFtZSgqcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgUHJvcGVydHlOb2RlKCpwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoKnByb3BlcnR5TmFtZSwgbm9k
ZSwgdHlwZSwgaXNNZXRob2QpOwogICAgIH0KICAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVByb3Bl
cnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBkb3VibGUgcHJvcGVydHlOYW1l
LCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wpCiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3Jz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3Ry
dWN0b3JzLmgJKHJldmlzaW9uIDE4MDg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDI1IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZ
TlRBWCkKKyAgICBpbmxpbmUgU3VwZXJOb2RlOjpTdXBlck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbikKKyAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKKyAgICB7
CisgICAgfQorCisgICAgaW5saW5lIFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZTo6U3VwZXJCcmFj
a2V0QWNjZXNzb3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Np
b25Ob2RlKiBzdWJzY3JpcHQpCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCisg
ICAgICAgICwgbV9zdWJzY3JpcHQoc3Vic2NyaXB0KQorICAgIHsKKyAgICB9CisKKyAgICBpbmxp
bmUgU3VwZXJEb3RBY2Nlc3Nvck5vZGU6OlN1cGVyRG90QWNjZXNzb3JOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQorICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQorICAgICAgICAsIG1faWRlbnQoaWRlbnQpCisgICAg
eworICAgIH0KKyNlbmRpZgorCiBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRp
b24pCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKQEAgLTE1OSwxMCArMTc4LDExIEBAIGlubGlu
ZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMKICAgICB7CiAgICAgfQogCi0gICAg
aW5saW5lIFByb3BlcnR5Tm9kZTo6UHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImIG5hbWUs
IEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24sIFR5cGUgdHlwZSkKKyAgICBpbmxpbmUgUHJvcGVydHlO
b2RlOjpQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUq
IGFzc2lnbiwgVHlwZSB0eXBlLCBib29sIGlzTWV0aG9kID0gZmFsc2UpCiAgICAgICAgIDogbV9u
YW1lKCZuYW1lKQogICAgICAgICAsIG1fYXNzaWduKGFzc2lnbikKICAgICAgICAgLCBtX3R5cGUo
dHlwZSkKKyAgICAgICAgLCBtX2lzTWV0aG9kKGlzTWV0aG9kKQogICAgIHsKICAgICB9CiAKQEAg
LTE3MSw2ICsxOTEsNyBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpT
CiAgICAgICAgICwgbV9leHByZXNzaW9uKG5hbWUpCiAgICAgICAgICwgbV9hc3NpZ24oYXNzaWdu
KQogICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1faXNNZXRob2QoZmFsc2UpCiAg
ICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJ
KHJldmlzaW9uIDE4MDg5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsMTIgKzE2NywxMyBAQCBGdW5jdGlvblBhcmFtZXRl
cnM6On5GdW5jdGlvblBhcmFtZXRlcnMoCiAgICAgICAgIHBhdHRlcm5zKClbaV0tPmRlcmVmKCk7
CiB9CiAKLUZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoUGFyc2VyQXJlbmEmLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4s
IGJvb2wgaXNJblN0cmljdENvbnRleHQpCitGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlO
b2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwg
dW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBKU1BhcnNlckNvbnN0
cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQpCiAgICAgOiBTdGF0ZW1lbnROb2RlKGVuZExvY2F0
aW9uKQogICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVtbikKICAgICAsIG1fZW5kQ29sdW1u
KGVuZENvbHVtbikKICAgICAsIG1fc3RhcnRTdGFydE9mZnNldChzdGFydExvY2F0aW9uLnN0YXJ0
T2Zmc2V0KQogICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChpc0luU3RyaWN0Q29udGV4dCkKKyAg
ICAsIG1fY29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKGNvbnN0cnVjdG9yS2luZCA9PSBKU1Bh
cnNlckNvbnN0cnVjdG9yS2luZDo6TWF5YmVEZXJpdmVkKQogewogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxODA4OTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzU3VidHJhY3QoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCb29sZWFuKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzU3ByZWFkRXhw
cmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1N1cGVyTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIGVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExh
YmVsKiwgTGFiZWwqLCBGYWxsVGhyb3VnaE1vZGUpOwogCkBAIC00NDUsNiArNDQ2LDM3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CiAgICAgfTsKIAor
I2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGNsYXNzIFN1cGVyTm9kZSBmaW5hbCA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBTdXBlck5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNTdXBlck5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKKyAgICB9OworCisgICAgY2xhc3MgU3VwZXJCcmFj
a2V0QWNjZXNzb3JOb2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFN1cGVyQnJhY2tldEFjY2Vzc29yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uTm9kZSogc3Vic2NyaXB0KTsKKworICAgIHByaXZhdGU6CisgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKKworICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9zdWJz
Y3JpcHQ7CisgICAgfTsKKworICAgIGNsYXNzIFN1cGVyRG90QWNjZXNzb3JOb2RlIGZpbmFsIDog
cHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN1cGVyRG90QWNj
ZXNzb3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImKTsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKKworICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBtX2lkZW50OworICAgIH07CisjZW5kaWYKKwogICAgIGNsYXNzIFJl
c29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpOwpAQCAtNTAwLDIwICs1MzIsMjIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFR5cGUgeyBDb25zdGFudCA9IDEs
IEdldHRlciA9IDIsIFNldHRlciA9IDQgfTsKIAotICAgICAgICBQcm9wZXJ0eU5vZGUoY29uc3Qg
SWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSk7CisgICAgICAgIFByb3BlcnR5Tm9k
ZShjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBUeXBlLCBib29sIGlzTWV0aG9k
KTsKICAgICAgICAgUHJvcGVydHlOb2RlKEV4cHJlc3Npb25Ob2RlKiBwcm9wZXJ0eU5hbWUsIEV4
cHJlc3Npb25Ob2RlKiwgVHlwZSk7CiAgICAgICAgIAogICAgICAgICBFeHByZXNzaW9uTm9kZSog
ZXhwcmVzc2lvbk5hbWUoKSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Npb247IH0KICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCi0gICAg
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgICAgICBUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9CisgICAgICAg
IGJvb2wgaXNNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2lzTWV0aG9kOyB9CiAKICAgICBwcml2
YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlMaXN0Tm9kZTsKICAgICAgICAgY29u
c3QgSWRlbnRpZmllciogbV9uYW1lOwogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9leHByZXNz
aW9uOwogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9hc3NpZ247Ci0gICAgICAgIFR5cGUgbV90
eXBlOworICAgICAgICB1bnNpZ25lZCBtX3R5cGUgOiAzOworICAgICAgICB1bnNpZ25lZCBtX2lz
TWV0aG9kIDogMTsKICAgICB9OwogCiAgICAgY2xhc3MgUHJvcGVydHlMaXN0Tm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSB7CkBAIC0xNTQ0LDcgKzE1NzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIFBhcnNlckFyZW5hRGVsZXRhYmxlOjpvcGVyYXRv
ciBuZXc7CiAKLSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25l
ZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0
KTsKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFy
dENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBKU1Bh
cnNlckNvbnN0cnVjdG9yS2luZCk7CiAKICAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJh
bWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9CiAKQEAgLTE1NzIs
NiArMTYwNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGludCBzdGFydFN0YXJ0T2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydFN0YXJ0T2Zmc2V0OyB9CiAgICAgICAgIGJvb2wg
aXNJblN0cmljdENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzSW5TdHJpY3RDb250ZXh0OyB9
CisgICAgICAgIGJvb2wgY29uc3RydWN0b3JLaW5kTWF5YmVEZXJpdmVkKCkgeyByZXR1cm4gbV9j
b25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQ7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAg
SWRlbnRpZmllciBtX2lkZW50OwpAQCAtMTU4NCw3ICsxNjE5LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOwogICAgICAgICBTb3VyY2VDb2RlIG1fc291
cmNlOwogICAgICAgICBpbnQgbV9zdGFydFN0YXJ0T2Zmc2V0OwotICAgICAgICBib29sIG1faXNJ
blN0cmljdENvbnRleHQ7CisgICAgICAgIGJvb2wgbV9pc0luU3RyaWN0Q29udGV4dCA6IDE7Cisg
ICAgICAgIGJvb2wgbV9jb25zdHJ1Y3RvcktpbmRNYXliZURlcml2ZWQgOiAxOwogICAgIH07CiAK
ICAgICBjbGFzcyBGdW5jdGlvbk5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHJldmlzaW9uIDE4MDg5NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI1NSw3ICsxMjU1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
Rm9ybWFsUAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlv
bkJvZHkoVHJlZUJ1aWxkZXImIGNvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kIGNvbnN0
cnVjdG9yS2luZCkKIHsKICAgICBKU1Rva2VuTG9jYXRpb24gc3RhcnRMb2NhdGlvbih0b2tlbkxv
Y2F0aW9uKCkpOwogICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdG9rZW5Db2x1bW4oKTsKQEAg
LTEyNjMsMTQgKzEyNjMsMTQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVu
Y3RpbwogCiAgICAgaWYgKG1hdGNoKENMT1NFQlJBQ0UpKSB7CiAgICAgICAgIHVuc2lnbmVkIGVu
ZENvbHVtbiA9IHRva2VuQ29sdW1uKCk7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1
bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBl
bmRDb2x1bW4sIHN0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1
bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBl
bmRDb2x1bW4sIHN0cmljdE1vZGUoKSwgY29uc3RydWN0b3JLaW5kKTsKICAgICB9CiAgICAgRGVw
dGhNYW5hZ2VyIHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVudERlcHRoKTsKICAgICBtX3N0YXRl
bWVudERlcHRoID0gMDsKICAgICB0eXBlbmFtZSBUcmVlQnVpbGRlcjo6RnVuY3Rpb25Cb2R5QnVp
bGRlciBib2R5QnVpbGRlcihjb25zdF9jYXN0PFZNKj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOwog
ICAgIGZhaWxJZkZhbHNlKHBhcnNlU291cmNlRWxlbWVudHMoYm9keUJ1aWxkZXIsIENoZWNrRm9y
U3RyaWN0TW9kZSksICJDYW5ub3QgcGFyc2UgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIik7CiAgICAg
dW5zaWduZWQgZW5kQ29sdW1uID0gdG9rZW5Db2x1bW4oKTsKLSAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdGFydENv
bHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCkpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1u
LCBlbmRDb2x1bW4sIHN0cmljdE1vZGUoKSwgY29uc3RydWN0b3JLaW5kKTsKIH0KIAogc3RhdGlj
IGNvbnN0IGNoYXIqIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShGdW5jdGlvblBhcnNlTW9kZSBtb2Rl
KQpAQCAtMTI5Miw3ICsxMjkyLDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIHN0cmluZ0ZvckZ1bmN0
aW9uTW9kZQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5m
byhUcmVlQnVpbGRlciYgY29udGV4dCwgRnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRz
LCBGdW5jdGlvblBhcnNlTW9kZSBtb2RlLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBQ
YXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+JiBpbmZvKQordGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVl
QnVpbGRlciYgY29udGV4dCwgRnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBGdW5j
dGlvblBhcnNlTW9kZSBtb2RlLAorICAgIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIEpT
UGFyc2VyQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCwgUGFyc2VyRnVuY3Rpb25JbmZv
PFRyZWVCdWlsZGVyPiYgaW5mbykKIHsKICAgICBBdXRvUG9wU2NvcGVSZWYgZnVuY3Rpb25TY29w
ZSh0aGlzLCBwdXNoU2NvcGUoKSk7CiAgICAgZnVuY3Rpb25TY29wZS0+c2V0SXNGdW5jdGlvbigp
OwpAQCAtMTM0NSw3ICsxMzQ2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29s
IFBhcnNlcgogICAgICAgICAgICAgZW5kTG9jYXRpb24uc3RhcnRPZmZzZXQgLSBlbmRMb2NhdGlv
bi5saW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRMaW5lU3RhcnRPZmZz
ZXQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwogCi0gICAgICAgIGluZm8u
Ym9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0
aW9uLCBpbmZvLmJvZHlTdGFydENvbHVtbiwgYm9keUVuZENvbHVtbiwgY2FjaGVkSW5mby0+c3Ry
aWN0TW9kZSk7CisgICAgICAgIGluZm8uYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5
KHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBpbmZvLmJvZHlTdGFydENvbHVtbiwgYm9keUVu
ZENvbHVtbiwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSwgY29uc3RydWN0b3JLaW5kKTsKICAgICAg
ICAgCiAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPnJlc3RvcmVGcm9tU291cmNlUHJvdmlkZXJDYWNo
ZShjYWNoZWRJbmZvKTsKICAgICAgICAgZmFpbElmRmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29w
ZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5mbyksICJQYXJzZXIgZXJyb3IiKTsK
QEAgLTEzNjgsNyArMTM2OSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQ
YXJzZXIKICAgICB9CiAgICAgbV9sYXN0RnVuY3Rpb25OYW1lID0gbGFzdEZ1bmN0aW9uTmFtZTsK
ICAgICBQYXJzZXJTdGF0ZSBvbGRTdGF0ZSA9IHNhdmVTdGF0ZSgpOwotICAgIGluZm8uYm9keSA9
IHBhcnNlRnVuY3Rpb25Cb2R5KGNvbnRleHQpOworICAgIGluZm8uYm9keSA9IHBhcnNlRnVuY3Rp
b25Cb2R5KGNvbnRleHQsIGNvbnN0cnVjdG9yS2luZCk7CiAgICAgcmVzdG9yZVN0YXRlKG9sZFN0
YXRlKTsKICAgICBmYWlsSWZGYWxzZShpbmZvLmJvZHksICJDYW5ub3QgcGFyc2UgdGhlIGJvZHkg
b2YgdGhpcyAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSkpOwogICAgIGNvbnRleHQuc2V0
RW5kT2Zmc2V0KGluZm8uYm9keSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpKTsKQEAgLTE0MTcs
NyArMTQxOCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKICAg
ICB1bnNpZ25lZCBmdW5jdGlvbktleXdvcmRTdGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBuZXh0
KCk7CiAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwotICAgIGZhaWxJ
ZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVu
Y3Rpb25Nb2RlLCB0cnVlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBmdW5jdGlvbiIpOwor
ICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5lZWRz
TmFtZSwgRnVuY3Rpb25Nb2RlLCB0cnVlLCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZDo6QmFzZSwg
aW5mbykpLCAiQ2Fubm90IHBhcnNlIHRoaXMgZnVuY3Rpb24iKTsKICAgICBmYWlsSWZGYWxzZShp
bmZvLm5hbWUsICJGdW5jdGlvbiBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgICBm
YWlsSWZGYWxzZUlmU3RyaWN0KGRlY2xhcmVWYXJpYWJsZShpbmZvLm5hbWUpLCAiQ2Fubm90IGRl
Y2xhcmUgYSBmdW5jdGlvbiBuYW1lZCAnIiwgaW5mby5uYW1lLT5pbXBsKCksICInIGluIHN0cmlj
dCBtb2RlIik7CiAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQobG9j
YXRpb24sIGluZm8sIGZ1bmN0aW9uS2V5d29yZFN0YXJ0KTsKQEAgLTE0NjcsOCArMTQ2OCw4IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXgKICAgICBpZiAoY29uc3Vt
ZShFWFRFTkRTKSkgewogICAgICAgICBwYXJlbnRDbGFzcyA9IHBhcnNlUHJpbWFyeUV4cHJlc3Np
b24oY29udGV4dCk7CiAgICAgICAgIGZhaWxJZkZhbHNlKHBhcmVudENsYXNzLCAiQ2Fubm90IHBh
cnNlIHRoZSBwYXJlbnQgY2xhc3MgbmFtZSIpOwotICAgICAgICBmYWlsV2l0aE1lc3NhZ2UoIklu
aGVyaXRhbmNlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7CiAgICAgfQorICAgIGNvbnN0IEpTUGFy
c2VyQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCA9IHBhcmVudENsYXNzID8gSlNQYXJz
ZXJDb25zdHJ1Y3RvcktpbmQ6Ok1heWJlRGVyaXZlZCA6IEpTUGFyc2VyQ29uc3RydWN0b3JLaW5k
OjpCYXNlOwogCiAgICAgY29uc3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOQlJBQ0UsIFRyZWVCdWls
ZGVyOjpEb250QnVpbGRTdHJpbmdzLCAiRXhwZWN0ZWQgb3BlbmluZyAneycgYXQgdGhlIHN0YXJ0
IG9mIGEgY2xhc3MgYm9keSIpOwogCkBAIC0xNTA0LDcgKzE1MDUsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShwcm9w
ZXJ0eSwgIkNhbm5vdCBwYXJzZSB0aGlzIG1ldGhvZCIpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBtZXRob2RJbmZvOwotICAg
ICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9u
TmVlZHNOYW1lLCBGdW5jdGlvbk1vZGUsIGZhbHNlLCBtZXRob2RJbmZvKSksICJDYW5ub3QgcGFy
c2UgdGhpcyBtZXRob2QiKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9u
SW5mbyhjb250ZXh0LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCBmYWxzZSwgY29u
c3RydWN0b3JLaW5kLCBtZXRob2RJbmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsK
ICAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1ldGhvZEluZm8ubmFtZSwgIm1ldGhvZCBtdXN0IGhh
dmUgYSBuYW1lIik7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShkZWNsYXJlVmFyaWFibGUobWV0
aG9kSW5mby5uYW1lKSwgIkNhbm5vdCBkZWNsYXJlIGEgbWV0aG9kIG5hbWVkICciLCBtZXRob2RJ
bmZvLm5hbWUtPmltcGwoKSwgIiciKTsKIApAQCAtMTUyMiw3ICsxNTIzLDggQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeAogICAgICAgICAgICAgLy8gRklYTUU6IFN5
bnRheCBlcnJvciB3aGVuIHN1cGVyKCkgaXMgY2FsbGVkCiAgICAgICAgICAgICBzZW1hbnRpY0Zh
aWxJZlRydWUoaXNTdGF0aWNNZXRob2QgJiYgKm1ldGhvZEluZm8ubmFtZSA9PSBwcm9wZXJ0eU5h
bWVzLnByb3RvdHlwZSwKICAgICAgICAgICAgICAgICAiQ2Fubm90IGRlY2xhcmUgYSBzdGF0aWMg
bWV0aG9kIG5hbWVkICdwcm90b3R5cGUnIik7Ci0gICAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRl
eHQuY3JlYXRlUHJvcGVydHkobWV0aG9kSW5mby5uYW1lLCBtZXRob2QsIFByb3BlcnR5Tm9kZTo6
Q29uc3RhbnQsIGFsd2F5c1N0cmljdEluc2lkZUNsYXNzKTsKKyAgICAgICAgICAgIGJvb2wgaXNN
ZXRob2QgPSB0cnVlOworICAgICAgICAgICAgcHJvcGVydHkgPSBjb250ZXh0LmNyZWF0ZVByb3Bl
cnR5KG1ldGhvZEluZm8ubmFtZSwgbWV0aG9kLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCBhbHdh
eXNTdHJpY3RJbnNpZGVDbGFzcywgaXNNZXRob2QpOwogICAgICAgICB9CiAKICAgICAgICAgVHJl
ZVByb3BlcnR5TGlzdCYgdGFpbCA9IGlzU3RhdGljTWV0aG9kID8gc3RhdGljTWV0aG9kc1RhaWwg
OiBpbnN0YW5jZU1ldGhvZHNUYWlsOwpAQCAtMTk5MCwxMCArMTk5MiwxMCBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0CiAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRy
ZWVCdWlsZGVyPiBpbmZvOwogICAgIGlmICh0eXBlID09IFByb3BlcnR5Tm9kZTo6R2V0dGVyKSB7
CiAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoKE9QRU5QQVJFTiksICJFeHBlY3RlZCBhIHBhcmFt
ZXRlciBsaXN0IGZvciBnZXR0ZXIgZGVmaW5pdGlvbiIpOwotICAgICAgICBmYWlsSWZGYWxzZSgo
cGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgR2V0dGVy
TW9kZSwgZmFsc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBnZXR0ZXIgZGVmaW5pdGlvbiIpOwor
ICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25O
b1JlcXVpcmVtZW50cywgR2V0dGVyTW9kZSwgZmFsc2UsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5k
OjpCYXNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgZ2V0dGVyIGRlZmluaXRpb24iKTsKICAgICB9
IGVsc2UgewogICAgICAgICBmYWlsSWZGYWxzZShtYXRjaChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQg
YSBwYXJhbWV0ZXIgbGlzdCBmb3Igc2V0dGVyIGRlZmluaXRpb24iKTsKLSAgICAgICAgZmFpbElm
RmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMs
IFNldHRlck1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRp
b24iKTsKKyAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1
bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNldHRlck1vZGUsIGZhbHNlLCBKU1BhcnNlckNvbnN0cnVj
dG9yS2luZDo6QmFzZSwgaW5mbykpLCAiQ2Fubm90IHBhcnNlIHNldHRlciBkZWZpbml0aW9uIik7
CiAgICAgfQogICAgIGlmIChzdHJpbmdQcm9wZXJ0eU5hbWUpCiAgICAgICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkobG9jYXRpb24sIHR5cGUsIHN0cmljdCwg
c3RyaW5nUHJvcGVydHlOYW1lLCBpbmZvLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KTsKQEAg
LTIxODIsNyArMjE4NCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJl
c3MKICAgICAgICAgbmV4dCgpOwogICAgICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxk
ZXI+IGluZm87CiAgICAgICAgIGluZm8ubmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxs
SWRlbnRpZmllcjsKLSAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRl
eHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEZ1bmN0aW9uTW9kZSwgZmFsc2UsIGluZm8pKSwg
IkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBleHByZXNzaW9uIik7CisgICAgICAgIGZhaWxJZkZhbHNl
KChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBGdW5j
dGlvbk1vZGUsIGZhbHNlLCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZDo6QmFzZSwgaW5mbykpLCAi
Q2Fubm90IHBhcnNlIGZ1bmN0aW9uIGV4cHJlc3Npb24iKTsKICAgICAgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlRnVuY3Rpb25FeHByKGxvY2F0aW9uLCBpbmZvLCBmdW5jdGlvbktleXdvcmRTdGFy
dCk7CiAgICAgfQogI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQpAQCAtMjMzMiw3ICsyMzM0
LDE2IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAg
bmV3Q291bnQrKzsKICAgICB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBi
b29sIGJhc2VJc1N1cGVyID0gbWF0Y2goU1VQRVIpOworICAgIGlmIChiYXNlSXNTdXBlcikgewor
ICAgICAgICBiYXNlID0gY29udGV4dC5zdXBlckV4cHIobG9jYXRpb24pOworICAgICAgICBuZXh0
KCk7CisgICAgfSBlbHNlCisgICAgICAgIGJhc2UgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKGNv
bnRleHQpOworI2Vsc2UKICAgICBiYXNlID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbihjb250ZXh0
KTsKKyNlbmRpZgogICAgIAogICAgIGZhaWxJZkZhbHNlKGJhc2UsICJDYW5ub3QgcGFyc2UgYmFz
ZSBleHByZXNzaW9uIik7CiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTIzNDYsNiArMjM1NywxMCBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgICAgICBp
bnQgaW5pdGlhbEFzc2lnbm1lbnRzID0gbV9hc3NpZ25tZW50Q291bnQ7CiAgICAgICAgICAgICBU
cmVlRXhwcmVzc2lvbiBwcm9wZXJ0eSA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIHN1YnNjcmlwdCBleHBy
ZXNzaW9uIik7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgICAgICBpZiAo
YmFzZUlzU3VwZXIpCisgICAgICAgICAgICAgICAgZmFpbElmVHJ1ZShpbml0aWFsQXNzaWdubWVu
dHMgfHwgbV9hc3NpZ25tZW50Q291bnQsICJDYW5ub3QgYXNzaWduIGEgdmFsdWUgdG8gc3VwZXIi
KTsKKyNlbmRpZgogICAgICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlQnJhY2tldEFjY2Vz
cyhsb2NhdGlvbiwgYmFzZSwgcHJvcGVydHksIGluaXRpYWxBc3NpZ25tZW50cyAhPSBtX2Fzc2ln
bm1lbnRDb3VudCwgZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCB0b2tlbkVuZFBvc2l0
aW9uKCkpOwogICAgICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNLRVQs
ICJdIiwgImVuZCIsICJzdWJzY3JpcHQgZXhwcmVzc2lvbiIpOwogICAgICAgICAgICAgbV9ub25M
SFNDb3VudCA9IG5vbkxIU0NvdW50OwpAQCAtMjM2NCw2ICsyMzc5LDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0
aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAg
ICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCwgQWxs
b3dTcHJlYWQpOwogICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5v
dCBwYXJzZSBjYWxsIGFyZ3VtZW50cyIpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpZiBi
YXNlSXNTdXBlcjogZmFpbElmRmFsc2UoaXNDb25zdHJ1Y3RvciwgIkNhbm5vdCBjYWxsIHN1cGVy
KCkgaW4gdGhpcyBmdW5jdGlvbiIpLgogICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1h
a2VGdW5jdGlvbkNhbGxOb2RlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVz
c2lvblN0YXJ0LCBleHByZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIG1fbm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKQEAgLTIz
ODEsOCArMjM5NywxNCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNz
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBnb3RvIGVuZE1lbWJlckV4cHJlc3Npb247
CiAgICAgICAgIH0KKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgYmFzZUlz
U3VwZXIgPSBmYWxzZTsKKyNlbmRpZgogICAgIH0KIGVuZE1lbWJlckV4cHJlc3Npb246CisjaWYg
RU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgZmFpbElmVHJ1ZShiYXNlSXNTdXBlciAmJiAh
bmV3Q291bnQsICJDYW5ub3QgcmVmZXJlbmNlIHN1cGVyIik7CisjZW5kaWYKICAgICB3aGlsZSAo
bmV3Q291bnQtLSkKICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlv
biwgYmFzZSwgZXhwcmVzc2lvblN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICBy
ZXR1cm4gYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2
aXNpb24gMTgwODk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNzQwLDcgKzc0MCw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVBcmd1bWVudHMgcGFyc2VBcmd1
bWVudHMoVHJlZUJ1aWxkZXImLCBTcHJlYWRNb2RlKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBwYXJzZVByb3BlcnR5KFRyZWVCdWlsZGVyJiwgYm9vbCBz
dHJpY3QpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IHBh
cnNlR2V0dGVyU2V0dGVyKFRyZWVCdWlsZGVyJiwgYm9vbCBzdHJpY3QsIFByb3BlcnR5Tm9kZTo6
VHlwZSwgdW5zaWduZWQgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCk7Ci0gICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5jdGlvbkJvZHkgcGFyc2VG
dW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZ1bmN0aW9uQm9keSBwYXJzZUZ1bmN0aW9uQm9keShUcmVl
QnVpbGRlciYsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFyc2VG
b3JtYWxQYXJhbWV0ZXJzKFRyZWVCdWlsZGVyJik7CiAgICAgZW51bSBWYXJEZWNsYXJhdGlvbkxp
c3RDb250ZXh0IHsgRm9yTG9vcENvbnRleHQsIFZhckRlY2xhcmF0aW9uQ29udGV4dCB9OwogICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gcGFyc2VWYXJEZWNs
YXJhdGlvbkxpc3QoVHJlZUJ1aWxkZXImLCBpbnQmIGRlY2xhcmF0aW9ucywgVHJlZURlY29uc3Ry
dWN0aW9uUGF0dGVybiYgbGFzdFBhdHRlcm4sIFRyZWVFeHByZXNzaW9uJiBsYXN0SW5pdGlhbGl6
ZXIsIEpTVGV4dFBvc2l0aW9uJiBpZGVudFN0YXJ0LCBKU1RleHRQb3NpdGlvbiYgaW5pdFN0YXJ0
LCBKU1RleHRQb3NpdGlvbiYgaW5pdEVuZCwgVmFyRGVjbGFyYXRpb25MaXN0Q29udGV4dCk7CkBA
IC03NTAsNyArNzUwLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IE5FVkVSX0lOTElORSBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuIHBhcnNlRGVjb25zdHJ1
Y3Rpb25QYXR0ZXJuKFRyZWVCdWlsZGVyJiwgRGVjb25zdHJ1Y3Rpb25LaW5kLCBpbnQgZGVwdGgg
PSAwKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBUcmVl
RGVjb25zdHJ1Y3Rpb25QYXR0ZXJuIHRyeVBhcnNlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuRXhwcmVz
c2lvbihUcmVlQnVpbGRlciYpOwogCi0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBO
RVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYsIEZ1bmN0aW9u
UmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdT
Y29wZSwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYpOworICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIGJvb2wgcGFyc2VGdW5jdGlvbkluZm8oVHJl
ZUJ1aWxkZXImLCBGdW5jdGlvblJlcXVpcmVtZW50cywgRnVuY3Rpb25QYXJzZU1vZGUsIGJvb2wg
bmFtZUlzSW5Db250YWluaW5nU2NvcGUsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kLCBQYXJzZXJG
dW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+Jik7CiAjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgp
CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgVHJlZUNsYXNz
RXhwcmVzc2lvbiBwYXJzZUNsYXNzKFRyZWVCdWlsZGVyJiwgRnVuY3Rpb25SZXF1aXJlbWVudHMp
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rl
cy5oCShyZXZpc2lvbiAxODA4OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlck1vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGVudW0gSlNQYXJzZXJTdHJpY3RuZXNzIHsgSlNQYXJzZU5vcm1hbCwgSlNQYXJzZUJ1
aWx0aW4sIEpTUGFyc2VTdHJpY3QgfTsKIGVudW0gSlNQYXJzZXJNb2RlIHsgSlNQYXJzZVByb2dy
YW1Db2RlLCBKU1BhcnNlRnVuY3Rpb25Db2RlIH07CitlbnVtIGNsYXNzIEpTUGFyc2VyQ29uc3Ry
dWN0b3JLaW5kIHsgQmFzZSwgTWF5YmVEZXJpdmVkIH07CiAKIGVudW0gUHJvZmlsZXJNb2RlIHsg
UHJvZmlsZXJPZmYsIFByb2ZpbGVyT24gfTsKIGVudW0gRGVidWdnZXJNb2RlIHsgRGVidWdnZXJP
ZmYsIERlYnVnZ2VyT24gfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3lu
dGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
U3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiAxODA4OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsMTAg
QEAgcHVibGljOgogICAgIGVudW0geyBOb25lRXhwciA9IDAsCiAgICAgICAgIFJlc29sdmVFdmFs
RXhwciwgUmVzb2x2ZUV4cHIsIEludGVnZXJFeHByLCBEb3VibGVFeHByLCBTdHJpbmdFeHByLAog
ICAgICAgICBUaGlzRXhwciwgTnVsbEV4cHIsIEJvb2xFeHByLCBSZWdFeHBFeHByLCBPYmplY3RM
aXRlcmFsRXhwciwKLSAgICAgICAgRnVuY3Rpb25FeHByLCBDbGFzc0V4cHIsIEJyYWNrZXRFeHBy
LCBEb3RFeHByLCBDYWxsRXhwciwKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAg
ICAgQ2xhc3NFeHByLCBTdXBlckV4cHIsIFN1cGVyQnJhY2tldEV4cHIsIFN1cGVyRG90RXhwciwK
KyNlbmRpZgorICAgICAgICBGdW5jdGlvbkV4cHIsIEJyYWNrZXRFeHByLCBEb3RFeHByLCBDYWxs
RXhwciwKICAgICAgICAgTmV3RXhwciwgUHJlRXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwgQmlu
YXJ5RXhwciwKICAgICAgICAgQ29uZGl0aW9uYWxFeHByLCBBc3NpZ25tZW50RXhwciwgVHlwZW9m
RXhwciwKICAgICAgICAgRGVsZXRlRXhwciwgQXJyYXlMaXRlcmFsRXhwciwgQmluZGluZ0RlY29u
c3RydWN0aW9uLApAQCAtMTQ2LDYgKzE0OSwxMiBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlVW5hcnlQbHVzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBl
KSB7IHJldHVybiBVbmFyeUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVWb2lkKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7
IH0KICAgICBFeHByZXNzaW9uVHlwZSB0aGlzRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7
IHJldHVybiBUaGlzRXhwcjsgfQorICAgIEV4cHJlc3Npb25UeXBlIHN1cGVyRXhwcihjb25zdCBK
U1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBUaGlzRXhwcjsgfQorI2lmIEVOQUJMRShFUzZfQ0xB
U1NfU1lOVEFYKQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVN1cGVyQ2FsbChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgY29uc3QgSlNUZXh0UG9zaXRpb24mLCBjb25z
dCBKU1RleHRQb3NpdGlvbiYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJikgeyByZXR1cm4gU3VwZXJF
eHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlU3VwZXJCcmFja2V0QWNjZXNzKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBjb25zdCBKU1RleHRQb3NpdGlvbiYs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mKSB7IHJldHVybiBT
dXBlckJyYWNrZXRFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlU3VwZXJEb3RBY2Nl
c3MoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mLCBjb25zdCBKU1RleHRQb3NpdGlvbiYp
IHsgcmV0dXJuIFN1cGVyRG90RXhwcjsgfQorI2VuZGlmCiAgICAgRXhwcmVzc2lvblR5cGUgY3Jl
YXRlUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50
KSB7IHJldHVybiBSZXNvbHZlRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9iamVj
dExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gT2JqZWN0TGl0ZXJhbEV4
cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4gT2JqZWN0TGl0ZXJhbEV4cHI7IH0KQEAgLTE2OCwx
NCArMTc3LDE0IEBAIHB1YmxpYzoKICAgICBDbGFzc0V4cHJlc3Npb24gY3JlYXRlQ2xhc3NFeHBy
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uVHlw
ZSwgRXhwcmVzc2lvblR5cGUsIFByb3BlcnR5TGlzdCwgUHJvcGVydHlMaXN0KSB7IHJldHVybiBD
bGFzc0V4cHI7IH0KICNlbmRpZgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhw
cihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4
Q2hlY2tlcj4mLCBpbnQpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQotICAgIGludCBjcmVhdGVG
dW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgaW50LCBpbnQsIGJvb2wpIHsgcmV0dXJuIEZ1bmN0aW9uQm9keVJlc3VsdDsgfQorICAgIGlu
dCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgaW50LCBpbnQsIGJvb2wsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kKSB7IHJl
dHVybiBGdW5jdGlvbkJvZHlSZXN1bHQ7IH0KICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZVN0YXJ0
KGludCwgaW50KSB7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzKCkgeyByZXR1cm4gQXJndW1l
bnRzUmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50cyhpbnQpIHsgcmV0dXJuIEFyZ3Vt
ZW50c1Jlc3VsdDsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVNwcmVhZEV4cHJlc3Npb24o
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQpIHsg
cmV0dXJuIFNwcmVhZEV4cHI7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBpbnQpIHsgcmV0dXJuIEFyZ3VtZW50c0xpc3RSZXN1bHQ7IH0KICAg
ICBpbnQgY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGlu
dCkgeyByZXR1cm4gQXJndW1lbnRzTGlzdFJlc3VsdDsgfQotICAgIFByb3BlcnR5IGNyZWF0ZVBy
b3BlcnR5KGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGludCwgUHJvcGVydHlOb2RlOjpUeXBlIHR5
cGUsIGJvb2wgY29tcGxldGUpCisgICAgUHJvcGVydHkgY3JlYXRlUHJvcGVydHkoY29uc3QgSWRl
bnRpZmllciogbmFtZSwgaW50LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBjb21wbGV0
ZSwgYm9vbCA9IGZhbHNlKQogICAgIHsKICAgICAgICAgaWYgKCFjb21wbGV0ZSkKICAgICAgICAg
ICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTgwODk1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUzLDcgKzI1MywxMCBAQAogICAgIG1hY3JvKGlzRmluaXRlKSBcCiAgICAg
bWFjcm8oVHlwZUVycm9yKSBcCiAgICAgbWFjcm8odW5kZWZpbmVkKSBcCi0gICAgbWFjcm8oQnVp
bHRpbkxvZykKKyAgICBtYWNybyhCdWlsdGluTG9nKSBcCisgICAgbWFjcm8oaG9tZU9iamVjdCkg
XAorICAgIG1hY3JvKGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCkgXAorICAgIG1hY3JvKGlzSW5U
ZW1wb3JhbERlYWRab25lKSBcCiAKIG5hbWVzcGFjZSBKU0MgewogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTgwODk1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NjcsNyArNDY3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhckNvZGUoKTsK
IAotICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhl
Y3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgp
LCBmYWxzZSwgZmFsc2UpOyB9CisgICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBj
b25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwo
KSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSwgZmFsc2UpOyB9CiAKICAgICB1bnNpZ25l
ZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiBtX3VubGlua2VkRXZhbENvZGVCbG9jay0+bnVtVmFy
aWFibGVzKCk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVy
biBtX3VubGlua2VkRXZhbENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCk7IH0KQEAg
LTUyMiw3ICs1MjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyQ29kZSgpOwogCi0gICAg
RXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxl
SW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNl
LCBmYWxzZSk7IH0KKyAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsg
cmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0
cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7IH0KIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247944</attachid>
            <date>2015-03-05 04:28:06 -0800</date>
            <delta_ts>2015-03-05 04:31:42 -0800</delta_ts>
            <desc>Implements the feature</desc>
            <filename>bug-142200-20150305042746.patch</filename>
            <type>text/plain</type>
            <size>82733</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
Y2ZiOGM3MjczM2ZkYWNjZTExNmEzMDMwNWZlMGU1NzllYzkwZmEzLi5lMjQ2NzhjMDMzODU4NTAw
YWRlMzdmZGM2Y2IzY2NjYzMwNzgzYTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDUgQEAKKzIwMTUtMDMtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgU3VwcG9ydCBleHRlbmRzIGFuZCBzdXBlciBrZXl3b3JkcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMjAwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIHN1cHBvcnQg
Zm9yIEVTNiBjbGFzcyBzeW50YXggaW5oZXJpdGFuY2UuCisKKyAgICAgICAgQWRkZWQgSlNQYXJz
ZXJDb25zdHJ1Y3RvcktpbmQgYXMgd2VsbCBhcyBib29sZWFuIGZsYWdzIGluZGljYXRpbmcgdGhl
IGNvbnN0cnVjdG9yIGtpbmQgdG8KKyAgICAgICAgdmFyaW91cyBjbGFzc2VzIGluIFVubGlua2Vk
Q29kZUJsb2NrIGFzIHdlbGwgYXMgQVNUIG5vZGVzLgorCisgICAgICAgIEVhY2ggbWV0aG9kIHN0
b3JlcyB0aGUgYXNzb2NpYXRlZCBjbGFzcyBhcyBpdHMgaG9tZU9iamVjdFByaXZhdGVOYW1lLiBU
aGlzIHZhbHVlIGlzIHVzZWQgdG8KKyAgICAgICAgbWFrZSBzdXBlciBjYWxscy4KKworICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6CisKKyAgICAgICAgKiBieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlSW5mbzo6RXhlY3V0
YWJsZUluZm8pOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29u
c3RydWN0b3JLaW5kSXNEZXJpdmVkKTogQWRkZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjpjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQpOiBBZGRlZC4KKworICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6IERvbid0IGVtaXQgb3BfY3JlYXRlX3RoaXMg
aW4gYSBkZXJpdmVkIGNsYXNzCisgICAgICAgIGFzIHRoZSBvYmplY3QgaXMgYWxsb2NhdGVkIGJ5
IHRoZSBoaWdoZXN0IGJhc2UgY2xhc3MncyBjb25zdHJ1Y3Rvci4gQWxzbyBzZXQgInRoaXMiIHRv
IG51bGwKKyAgICAgICAgYW5kIHN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbiBtX25ld1Rhcmdl
dFJlZ2lzdGVyLiAidGhpcyIgaXMgc3VwcG9zZWQgdG8gYmUgaW4gVERaIGJ1dAorICAgICAgICB0
aGF0IHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gYSBzZXBhcmF0ZSBwYXRjaC4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZPYmplY3QpOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXR1cm4pOiBBbGxvdyAidW5kZWZpbmVkIiB0
byBiZSByZXR1cm5lZCBmcm9tIGEgZGVyaXZlZCBjbGFzcy4KKyAgICAgICAgSW4gYSBkZXJpdmVk
IGNsYXNzJ3MgY29uc3RydWN0b3IsIG5vdCByZXR1cm5pbmcgInVuZGVmaW5lZCIgb3IgYW4gb2Jq
ZWN0IHJlc3VsdHMgaW4gYSB0eXBlCisgICAgICAgIGVycm9yIGluc3RlYWQgb2YgInRoaXMiIGJl
aW5nIHJldHVybmVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93
VHlwZUVycm9yKTogQWRkZWQuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnN0cnVjdG9yS2lu
ZElzRGVyaXZlZCk6IEFkZGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6bmV3
VGFyZ2V0KTogQWRkZWQuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cDoKKyAgICAgICAgKEpTQzo6U3VwZXJOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZC4gRW1pdHMg
dGhlIGNvZGUgdG8gb2J0YWluIHRoZSBjYWxsZWUncyBwYXJlbnQgY2xhc3MuCisgICAgICAgIChK
U0M6OmVtaXRTdXBlckJhc2VGb3JDYWxsZWUpOiBBZGRlZC4gRW1pdHMgdGhlIGNvZGUgdG8gb2J0
YWluIHRoZSBwYXJlbnQgY2xhc3MncyBwcm90b3R5cGUuCisgICAgICAgIChKU0M6OmVtaXRQdXRI
b21lT2JqZWN0KTogQWRkZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRC
eXRlY29kZSk6IFN0b3JlcyB0aGUgaG9tZSBvYmplY3Qgd2hlbiBhZGRpbmcgbWV0aG9kcy4KKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFB1dENvbnN0YW50UHJvcGVydHkpOiBE
aXR0by4KKyAgICAgICAgKEpTQzo6QnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKTog
QWRkZWQgdGhlIHN1cHBvcnQgZm9yIHN1cGVyWydmb28nXS4KKyAgICAgICAgKEpTQzo6RG90QWNj
ZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZCB0aGUgc3VwcG9ydCBmb3Igc3VwZXIuZm9v
LgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6IEFk
ZGVkIHRoZSBzdXBwb3J0IGZvciBzdXBlcigpLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxC
cmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogQWRkZWQgdGhlIHN1cHBvcnQgZm9yIHN1cGVyWydm
b28nXSgpLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUp
OiBBZGRlZCB0aGUgc3VwcG9ydCBmb3Igc3VwZXIuZm9vKCkuCisgICAgICAgIChKU0M6OkRlbGV0
ZUJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUpOiBGb3JiaWQgImRlbGV0ZSBzdXBlci5mb28iLgor
ICAgICAgICAoSlNDOjpEZWxldGVEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOiBGb3JiaWQgImRlbGV0
ZSBzdXBlclsnZm9vJ10iLgorICAgICAgICAoSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNv
ZGUpOiBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgImNsYXNzSGVyaXRhZ2UiLiBUaGlzIGlzIHRoZSBt
YWluCisgICAgICAgIGxvZ2ljIGZvciBpbmhlcml0YW5jZS4gV2hlbiBhIGNsYXNzIEIgaW5oZXJp
dHMgZnJvbSBhIGNsYXNzIEEsIHNldCBCLl9fcHJvdG9fXyB0byBBIGFuZCBzZXQKKyAgICAgICAg
Qi5wcm90b3R5cGUuX19wcm90b19fIHRvIEEucHJvdG90eXBlLiBUaHJvdyBleGNlcHRpb25zIHdo
ZW4gZWl0aGVyIEEgb3IgQS5fX3Byb3RvX18gaXMgbm90CisgICAgICAgIGFuIG9iamVjdC4KKwor
ICAgICAgICAqIHBhcnNlci9BU1RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OnN1cGVyRXhwcik6IEFkZGVkLgorCisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aDoKKyAgICAgICAgKEpTQzo6U3VwZXJOb2RlOjpTdXBlck5vZGUpOiBBZGRlZC4KKworICAgICAg
ICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OkZ1
bmN0aW9uQm9keU5vZGUpOgorCisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChK
U0M6OkV4cHJlc3Npb25Ob2RlOjppc1N1cGVyTm9kZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Tm9kZTo6dHlwZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Tm9kZTo6aXNNZXRob2QpOgorCisg
ICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUZ1bmN0aW9uSW5mbyk6IFRocm93IGEgcGFyc2VyIGVycm9yIGlmIHN1cGVyKCkgaXMg
dXNlZCBvdXRzaWRlCisgICAgICAgIG9mIGNsYXNzIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgKEpT
Qzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAg
IChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKTogQ29uc3RydWN0b3JLaW5kIGlz
ICJkZXJpdmVkIiBpZiBhbmQgb25seSBpZiB0aGUgcGFyZW50CisgICAgICAgIGNsYXNzIGlzIHNw
ZWNpZmllZCBpbiB0aGUgZGVjbGFyYXRpb24gLyBleHByZXNzaW9uLgorICAgICAgICAoSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAoSlNDOjpQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOiBBZGRlZCB0aGUgc3VwcG9y
dCBmb3IgInN1cGVyKCkiLCAic3VwZXIuZm9vIiwKKyAgICAgICAgYW5kICJzdXBlclsnZm9vJ10i
LiBUaHJvdyBhIHNlbWFudGljIGVycm9yIGlmICJzdXBlciIgYXBwZWFycyBieSBpdHNlbGYuCisK
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3BlOjpTY29wZSk6
IEFkZGVkIG1faGFzRGlyZWN0U3VwZXIuIFRoaXMgdmFyaWFibGUga2VlcHMgdHJhY2sgb2YgdGhl
IHVzZSBvZiAic3VwZXIoKSIKKyAgICAgICAgc28gdGhhdCBwYXJzZUZ1bmN0aW9uSW5mbyBjYW4g
c3BpdCBhbiBlcnJvciBpZiBpdCdzIHVzZWQgb3V0c2lkZSBvZiBjbGFzcyBjb25zdHJ1Y3RvcnMu
CisgICAgICAgIChKU0M6OlNjb3BlOjpoYXNEaXJlY3RTdXBlcik6IEFkZGVkLgorICAgICAgICAo
SlNDOjpTY29wZTo6c2V0SGFzRGlyZWN0U3VwZXIpOiBBZGRlZC4KKworICAgICAgICAqIHBhcnNl
ci9QYXJzZXJNb2Rlcy5oOgorICAgICAgICAoSlNDOjpKU1BhcnNlckNvbnN0cnVjdG9yS2luZCk6
IEFkZGVkLgorCisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6c3VwZXJFeHByKTogQWRkZWQuCisKKyAgICAgICAgKiBydW50aW1l
L0NvbW1vbklkZW50aWZpZXJzLmg6IEFkZGVkIGhvbWVPYmplY3RQcml2YXRlTmFtZS4KKworICAg
ICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJs
ZTo6ZXhlY3V0YWJsZUluZm8pOiAKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmV4
ZWN1dGFibGVJbmZvKToKKwogMjAxNS0wMy0wNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KIAogICAgICAgICBIaWRlIFByb21pc2Ugd2l0aCBydW50aW1lIGZsYWdzIHVu
ZGVyIENvY29hIEpTQ29udGV4dCBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IDY0MGJkZTc3OGZjZWI1YjNlYjVh
MDkxMTc5NzA0ZDlmMGQ5ZGVlOTkuLmI5YTE2NTcwNjE4NmMxNGUwYTAwNzAxMzQ3OTJjM2ViNWQ5
ZDA3MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcApAQCAtNjEsNyArNjEsOCBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogZ2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9jayhWTSYgdm0sIFVubGlua2VkRnVu
YwogICAgIGZ1bmN0aW9uLT5maW5pc2hQYXJzaW5nKGV4ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwg
ZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5mdW5jdGlvbk1vZGUoKSk7CiAgICAgZXhl
Y3V0YWJsZS0+cmVjb3JkUGFyc2UoZnVuY3Rpb24tPmZlYXR1cmVzKCksIGZ1bmN0aW9uLT5oYXND
YXB0dXJlZFZhcmlhYmxlcygpKTsKICAgICAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlv
bkNvZGUsIEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT5uZWVkc0FjdGl2YXRpb24oKSwgZnVuY3Rp
b24tPnVzZXNFdmFsKCksIGZ1bmN0aW9uLT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9y
Q29uc3RydWN0LCBmdW5jdGlvbktpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24pKTsKKyAg
ICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUsCisgICAgICAgIEV4ZWN1dGFibGVJbmZv
KGZ1bmN0aW9uLT5uZWVkc0FjdGl2YXRpb24oKSwgZnVuY3Rpb24tPnVzZXNFdmFsKCksIGZ1bmN0
aW9uLT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0LCBmdW5jdGlvbktp
bmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24sIGV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yS2lu
ZElzRGVyaXZlZCgpKSk7CiAgICAgYXV0byBnZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxCeXRl
Y29kZUdlbmVyYXRvcj4odm0sIGZ1bmN0aW9uLmdldCgpLCByZXN1bHQsIGRlYnVnZ2VyTW9kZSwg
cHJvZmlsZXJNb2RlKSk7CiAgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAgICAg
aWYgKGVycm9yLmlzVmFsaWQoKSkKQEAgLTg0LDYgKzg1LDkgQEAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3QKICAgICAsIG1faXNJblN0cmljdENvbnRleHQobm9kZS0+aXNJblN0cmljdENvbnRleHQo
KSkKICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCiAgICAgLCBtX2lzQnVpbHRp
bkZ1bmN0aW9uKGtpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24pCisjaWYgRU5BQkxFKEVT
Nl9DTEFTU19TWU5UQVgpCisgICAgLCBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZChub2RlLT5j
b25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKSkKKyNlbmRpZgogICAgICwgbV9uYW1lKG5vZGUtPmlk
ZW50KCkpCiAgICAgLCBtX2luZmVycmVkTmFtZShub2RlLT5pbmZlcnJlZE5hbWUoKSkKICAgICAs
IG1fcGFyYW1ldGVycyhub2RlLT5wYXJhbWV0ZXJzKCkpCkBAIC0yMDUsNiArMjA5LDkgQEAgVW5s
aW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1faXNDb25zdHJ1Y3RvcihpbmZvLm1faXNDb25z
dHJ1Y3RvcikKICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCiAgICAgLCBtX2lz
QnVpbHRpbkZ1bmN0aW9uKGluZm8ubV9pc0J1aWx0aW5GdW5jdGlvbikKKyNpZiBFTkFCTEUoRVM2
X0NMQVNTX1NZTlRBWCkKKyAgICAsIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKGluZm8ubV9j
b25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQpCisjZW5kaWYKICAgICAsIG1fZmlyc3RMaW5lKDApCiAg
ICAgLCBtX2xpbmVDb3VudCgwKQogICAgICwgbV9lbmRDb2x1bW4oVUlOVF9NQVgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4
IGYxZWY1ZDgxNTNmNTQ0MzVjOTU1NmJkNzZlNGY5NTM0YWUyNzY2NDMuLmM0ZGZmNThmMDJkNzhm
ZjZmNDIzMmM5ODM5NTc3NjQzZWZlYTcxYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC02NSwxOSArNjUsMjYgQEAgdHlw
ZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1
bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwogCiBzdHJ1Y3QgRXhlY3V0YWJsZUlu
Zm8gewotICAgIEV4ZWN1dGFibGVJbmZvKGJvb2wgbmVlZHNBY3RpdmF0aW9uLCBib29sIHVzZXNF
dmFsLCBib29sIGlzU3RyaWN0TW9kZSwgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGlzQnVpbHRp
bkZ1bmN0aW9uKQorICAgIEV4ZWN1dGFibGVJbmZvKGJvb2wgbmVlZHNBY3RpdmF0aW9uLCBib29s
IHVzZXNFdmFsLCBib29sIGlzU3RyaWN0TW9kZSwgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGlz
QnVpbHRpbkZ1bmN0aW9uLCBib29sIGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCkKICAgICAgICAg
OiBtX25lZWRzQWN0aXZhdGlvbihuZWVkc0FjdGl2YXRpb24pCiAgICAgICAgICwgbV91c2VzRXZh
bCh1c2VzRXZhbCkKICAgICAgICAgLCBtX2lzU3RyaWN0TW9kZShpc1N0cmljdE1vZGUpCiAgICAg
ICAgICwgbV9pc0NvbnN0cnVjdG9yKGlzQ29uc3RydWN0b3IpCiAgICAgICAgICwgbV9pc0J1aWx0
aW5GdW5jdGlvbihpc0J1aWx0aW5GdW5jdGlvbikKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKKyAgICAgICAgLCBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZChjb25zdHJ1Y3RvcktpbmRJ
c0Rlcml2ZWQpCisjZW5kaWYKICAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShjb25zdHJ1Y3Rv
cktpbmRJc0Rlcml2ZWQpOwogICAgIH0KICAgICBib29sIG1fbmVlZHNBY3RpdmF0aW9uIDogMTsK
ICAgICBib29sIG1fdXNlc0V2YWwgOiAxOwogICAgIGJvb2wgbV9pc1N0cmljdE1vZGUgOiAxOwog
ICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9yIDogMTsKICAgICBib29sIG1faXNCdWlsdGluRnVuY3Rp
b24gOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGJvb2wgbV9jb25zdHJ1
Y3RvcktpbmRJc0Rlcml2ZWQgOiAxOworI2VuZGlmCiB9OwogCiBlbnVtIFVubGlua2VkRnVuY3Rp
b25LaW5kIHsKQEAgLTExNiw2ICsxMjMsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IEpTUGFyc2VTdHJpY3Q7CiAgICAgICAgIHJldHVybiBKU1BhcnNlTm9ybWFsOwogICAgIH0KKyNp
ZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIGNvbnN0cnVjdG9yS2luZElzRGVy
aXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkOyB9CisjZWxz
ZQorICAgIGJvb2wgY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyNlbmRpZgogCiAgICAgdW5zaWduZWQgZmlyc3RMaW5lT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9maXJzdExpbmVPZmZzZXQ7IH0KICAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQpAQCAtMTY4LDYgKzE4MCw5IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2lzSW5TdHJpY3RDb250ZXh0IDogMTsKICAgICBib29sIG1faGFzQ2FwdHVyZWRW
YXJpYWJsZXMgOiAxOwogICAgIGJvb2wgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisjaWYgRU5B
QkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZl
ZCA6IDE7CisjZW5kaWYKIAogICAgIElkZW50aWZpZXIgbV9uYW1lOwogICAgIElkZW50aWZpZXIg
bV9pbmZlcnJlZE5hbWU7CkBAIC0zNDIsNyArMzU3LDExIEBAIHB1YmxpYzoKICAgICBib29sIGlz
TnVtZXJpY0NvbXBhcmVGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNOdW1lcmljQ29tcGFy
ZUZ1bmN0aW9uOyB9CiAKICAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9pc0J1aWx0aW5GdW5jdGlvbjsgfQotICAgIAorCisjaWYgRU5BQkxFKEVTNl9DTEFTU19T
WU5UQVgpCisgICAgYm9vbCBjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZDsgfQorI2VuZGlmCisKICAgICB2b2lkIHNocmlu
a1RvRml0KCkKICAgICB7CiAgICAgICAgIG1fanVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKQEAg
LTUzNCw2ICs1NTMsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9yIDogMTsK
ICAgICBib29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOwogICAgIGJvb2wgbV9pc0J1aWx0
aW5GdW5jdGlvbiA6IDE7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBt
X2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZCA6IDE7CisjZW5kaWYKICAgICB1bnNpZ25lZCBtX2Zp
cnN0TGluZTsKICAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKICAgICB1bnNpZ25lZCBtX2VuZENv
bHVtbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggMDgxNzhlNDA1NzNmMjQyOTYzN2FjNzIzMzdmYmQz
OWNiYmJhNDc0ZC4uMGNhZDg3YWQwZGQxMDgwMTdjNTA5NmE1NDAyNWNkOWU2NDFhYjY5ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKQEAgLTQwMSw3ICs0MDEsMTQgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlu
a2UKICAgICBhZGRDYWxsZWUoZnVuY3Rpb25Ob2RlLCBjYWxsZWVSZWdpc3Rlcik7CiAKICAgICBp
ZiAoaXNDb25zdHJ1Y3RvcigpKSB7Ci0gICAgICAgIGVtaXRDcmVhdGVUaGlzKCZtX3RoaXNSZWdp
c3Rlcik7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIGlmIChjb25zdHJ1
Y3RvcktpbmRJc0Rlcml2ZWQoKSkgeworICAgICAgICAgICAgbV9uZXdUYXJnZXRSZWdpc3RlciA9
IGFkZFZhcigpOworICAgICAgICAgICAgZW1pdE1vdmUobV9uZXdUYXJnZXRSZWdpc3RlciwgJm1f
dGhpc1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIGVtaXRMb2FkKCZtX3RoaXNSZWdpc3RlciwganNO
dWxsKCkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgZW1pdENyZWF0ZVRo
aXMoJm1fdGhpc1JlZ2lzdGVyKTsKICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uTm9kZS0+dXNlc1Ro
aXMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkpIHsKICAgICAgICAgbV9jb2RlQmxvY2stPmFk
ZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICAg
ICAgZW1pdE9wY29kZShvcF90b190aGlzKTsKQEAgLTk0OSw2ICs5NTYsMjAgQEAgUGFzc1JlZlB0
cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZOb3RGdW5jdGlvbkFwcGx5KFJl
Z2lzdGVySUQqIGNvbmQKICAgICByZXR1cm4gdGFyZ2V0OwogfQogCitQYXNzUmVmUHRyPExhYmVs
PiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZk9iamVjdChSZWdpc3RlcklEKiBjb25kLCBM
YWJlbCogdGFyZ2V0KQoreworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpc09iamVjdFJlZ2lzdGVy
ID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgZW1pdE9wY29kZShvcF9pc19vYmplY3QpOworICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChpc09iamVjdFJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoY29uZC0+aW5kZXgoKSk7CisKKyAgICBzaXplX3QgYmVnaW4gPSBp
bnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgZW1pdE9wY29kZShvcF9qdHJ1ZSk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGlzT2JqZWN0UmVnaXN0ZXItPmluZGV4KCkpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUo
KSkpOworICAgIHJldHVybiB0YXJnZXQ7Cit9CisKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6Omhh
c0NvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBjb25zdAogewogICAgIFN0cmluZ0lt
cGwqIHJlcCA9IGlkZW50LmltcGwoKTsKQEAgLTE5MDMsOCArMTkyNCwxNCBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJldHVybihSZWdpc3RlcklEKiBzcmMpCiAgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyID8gbV9s
ZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSA6IGVtaXRMb2FkKDAsIEpTVmFsdWUo
KSktPmluZGV4KCkpOwogICAgIH0KIAotICAgIGlmIChpc0NvbnN0cnVjdG9yKCkgJiYgc3JjLT5p
bmRleCgpICE9IG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkpIHsKLSAgICAgICAgUmVmUHRyPExhYmVs
PiBpc09iamVjdExhYmVsID0gbmV3TGFiZWwoKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKKyAgICBib29sIHRoaXNNaWdodEJlVW5pbml0aWFsaXplZCA9IGNvbnN0cnVjdG9yS2luZElz
RGVyaXZlZCgpOworI2Vsc2UKKyAgICBib29sIHRoaXNNaWdodEJlVW5pbml0aWFsaXplZCA9IGZh
bHNlOworI2VuZGlmCisKKyAgICBpZiAoaXNDb25zdHJ1Y3RvcigpICYmIChzcmMtPmluZGV4KCkg
IT0gbV90aGlzUmVnaXN0ZXIuaW5kZXgoKSB8fCB0aGlzTWlnaHRCZVVuaW5pdGlhbGl6ZWQpKSB7
CisgICAgICAgIFJlZlB0cjxMYWJlbD4gaXNPYmplY3RPck51bGxMYWJlbCA9IG5ld0xhYmVsKCk7
CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpc09iamVjdFJlZ2lzdGVyID0gbmV3VGVtcG9y
YXJ5KCk7CiAKICAgICAgICAgZW1pdE9wY29kZShvcF9pc19vYmplY3QpOwpAQCAtMTkxNCwxMSAr
MTk0MSwyMCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJldHVybihSZWdp
c3RlcklEKiBzcmMpCiAgICAgICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUo
KTsKICAgICAgICAgZW1pdE9wY29kZShvcF9qdHJ1ZSk7CiAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChpc09iamVjdFJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGlzT2JqZWN0TGFiZWwtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUo
KSkpOwotCi0gICAgICAgIGVtaXRVbmFyeU5vRHN0T3Aob3BfcmV0LCAmbV90aGlzUmVnaXN0ZXIp
OworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaXNPYmplY3RPck51bGxMYWJlbC0+Ymlu
ZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisKKyNpZiBFTkFCTEUoRVM2X0NMQVNT
X1NZTlRBWCkKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpKSB7CisgICAg
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXNVbmRlZmluZWRSZWdpc3RlciA9IG5ld1RlbXBv
cmFyeU9yKGlzT2JqZWN0UmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHVuZGVmaW5lZFJlZ2lzdGVyID0gZW1pdExvYWQobmV3VGVtcG9yYXJ5KCksIGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICAgICAgZW1pdEVxdWFsaXR5T3Aob3Bfc3RyaWN0ZXEsIGlzVW5k
ZWZpbmVkUmVnaXN0ZXIuZ2V0KCksIHNyYywgdW5kZWZpbmVkUmVnaXN0ZXIuZ2V0KCkpOworICAg
ICAgICAgICAgZW1pdEp1bXBJZlRydWUoaXNVbmRlZmluZWRSZWdpc3Rlci5nZXQoKSwgaXNPYmpl
Y3RPck51bGxMYWJlbC5nZXQoKSk7CisgICAgICAgICAgICBlbWl0VGhyb3dUeXBlRXJyb3IoIkNh
bm5vdCByZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVy
aXZlZCBjbGFzcy4iKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIGVtaXRV
bmFyeU5vRHN0T3Aob3BfcmV0LCAmbV90aGlzUmVnaXN0ZXIpOwogCi0gICAgICAgIGVtaXRMYWJl
bChpc09iamVjdExhYmVsLmdldCgpKTsKKyAgICAgICAgZW1pdExhYmVsKGlzT2JqZWN0T3JOdWxs
TGFiZWwuZ2V0KCkpOwogICAgIH0KICAgICByZXR1cm4gZW1pdFVuYXJ5Tm9Ec3RPcChvcF9yZXQs
IHNyYyk7CiB9CkBAIC0yMzUyLDYgKzIzODgsMTMgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCh0cnVlKTsKIH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRocm93VHlwZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBlbWl0T3Bjb2Rl
KG9wX3Rocm93X3N0YXRpY19lcnJvcik7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENv
bnN0YW50VmFsdWUoYWRkU3RyaW5nQ29uc3RhbnQoSWRlbnRpZmllcihtX3ZtLCBtZXNzYWdlKSkp
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOworfQorCiB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKFJlZ2lzdGVySUQq
IGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQogewogICAgIGVtaXRPcGNvZGUob3BfcHVzaF9uYW1lX3Njb3BlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAppbmRleCA1YzgzMjNhYzBjZjY1NmRlZjkzY2VhYjE1OGJmMmYwNmFlYWYwMzg5
Li45OGRjNzM4NjgwNzQxMjRhMGEzMjBhOTQ3OTkxMGQ3MjVjYzQ1NThmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CkBAIC0yNjksNyArMjY5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBQYXJzZXJBcmVu
YSYgcGFyc2VyQXJlbmEoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlTm9kZS0+cGFyc2VyQXJlbmEo
KTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNv
bnN0IHsgcmV0dXJuICptX3ZtLT5wcm9wZXJ0eU5hbWVzOyB9CiAKLSAgICAgICAgYm9vbCBpc0Nv
bnN0cnVjdG9yKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsgfQorICAg
ICAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aXND
b25zdHJ1Y3RvcigpOyB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIGJv
b2wgY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2st
PmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpOyB9CisjZW5kaWYKIAogICAgICAgICBQYXJzZXJF
cnJvciBnZW5lcmF0ZSgpOwogCkBAIC0yOTAsNyArMjkzLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRoaXMiCiAgICAgICAg
IFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNSZWdpc3RlcjsgfQot
ICAgICAgICAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgUmVnaXN0ZXJJ
RCogbmV3VGFyZ2V0KCkgeyByZXR1cm4gbV9uZXdUYXJnZXRSZWdpc3RlcjsgfQorI2VuZGlmCisK
ICAgICAgICAgUmVnaXN0ZXJJRCogc2NvcGVSZWdpc3RlcigpIHsgcmV0dXJuIG1fc2NvcGVSZWdp
c3RlcjsgfQogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIHRlbXBvcmFy
eSByZWdpc3Rlci4gUmVnaXN0ZXJzIHJldHVybmVkIGJ5CkBAIC01MTgsNiArNTI0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRKdW1wSWZGYWxzZShS
ZWdpc3RlcklEKiBjb25kLCBMYWJlbCogdGFyZ2V0KTsKICAgICAgICAgUGFzc1JlZlB0cjxMYWJl
bD4gZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2FsbChSZWdpc3RlcklEKiBjb25kLCBMYWJlbCogdGFy
Z2V0KTsKICAgICAgICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBw
bHkoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcmdldCk7CisgICAgICAgIFBhc3NSZWZQdHI8
TGFiZWw+IGVtaXRKdW1wSWZPYmplY3QoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcmdldCk7
CiAgICAgICAgIHZvaWQgZW1pdFBvcFNjb3BlcyhSZWdpc3RlcklEKiBzcmNEc3QsIGludCB0YXJn
ZXRTY29wZURlcHRoKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzSW5kZXhlZFByb3Bl
cnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVy
dHlOYW1lKTsKQEAgLTU0Myw2ICs1NTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
CiAgICAgICAgIHZvaWQgZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKTsKKyAgICAgICAgdm9pZCBlbWl0VGhyb3dUeXBlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKTsKIAogICAgICAgICB2b2lkIGVtaXRQdXNoRnVuY3Rpb25OYW1lU2NvcGUoUmVnaXN0ZXJJ
RCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgICAgICB2b2lkIGVtaXRQdXNoQ2F0Y2hTY29wZShSZWdp
c3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CkBAIC03NTksNiArNzY3LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyIHsgbnVsbHB0ciB9
OwogICAgICAgICBSZWdpc3RlcklEKiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyIHsgbnVsbHB0ciB9
OwogICAgICAgICBSZWdpc3RlcklEKiBtX2xvY2FsQXJndW1lbnRzUmVnaXN0ZXIgeyBudWxscHRy
IH07CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIFJlZ2lzdGVySUQqIG1f
bmV3VGFyZ2V0UmVnaXN0ZXIgeyBudWxscHRyIH07CisjZW5kaWYKIAogICAgICAgICBWZWN0b3I8
SWRlbnRpZmllciwgMTY+IG1fd2F0Y2hhYmxlVmFyaWFibGVzOwogICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29uc3RhbnRQb29sUmVnaXN0ZXJzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4
IDUwZTY4Zjg4ZWY5Y2MxY2E1OWIxZDdmNTBlZGYyZWEwZTA4ZWZiNDAuLjQxMGUxYTBhMDViODMw
OTIyMzkwMTQ2YTE4NGVkMjMyNWUwYjM0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTE1Niw2ICsxNTYsMzQgQEAg
UmVnaXN0ZXJJRCogVGhpc05vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgRU5B
QkxFKEVTNl9DTEFTU19TWU5UQVgpCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBTdXBlck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdp
c3RlcklEKiBTdXBlck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3Jl
ZFJlc3VsdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZ2lzdGVySUQgY2FsbGVlOwor
ICAgIGNhbGxlZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGhvbWVPYmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCAmY2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQ
cml2YXRlTmFtZSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvUGFyZW50ID0gZ2VuZXJh
dG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaG9tZU9iamVjdC5nZXQo
KSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pOworICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwg
cHJvdG9QYXJlbnQuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Ip
OworfQorCitzdGF0aWMgUmVnaXN0ZXJJRCogZW1pdFN1cGVyQmFzZUZvckNhbGxlZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQoreworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNh
bGxlZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGhvbWVPYmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCAmY2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRl
TmFtZSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIGhvbWVPYmplY3QuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5k
ZXJzY29yZVByb3RvKTsKK30KKworI2VuZGlmCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IGJvb2wgUmVzb2x2ZU5vZGU6OmlzUHVyZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKSBj
b25zdApAQCAtMjk0LDYgKzMyMiwxMyBAQCBSZWdpc3RlcklEKiBPYmplY3RMaXRlcmFsTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlMaXN0Tm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCitzdGF0
aWMgaW5saW5lIHZvaWQgZW1pdFB1dEhvbWVPYmplY3QoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZnVuY3Rpb24sIFJlZ2lzdGVySUQqIGhvbWVPYmplY3QpCit7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGZ1bmN0aW9uLCBnZW5lcmF0b3IucHJvcGVydHlOYW1l
cygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSwgaG9tZU9iamVjdCk7Cit9CisjZW5kaWYKKwogUmVn
aXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICAvLyBGYXN0IGNhc2U6IHRoaXMg
bG9vcCBqdXN0IGhhbmRsZXMgcmVndWxhciB2YWx1ZSBwcm9wZXJ0aWVzLgpAQCAtMzMwLDYgKzM2
NSwxMCBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLT5tX2Fzc2ln
bik7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgICAgICBpZiAobm9kZS0+
aXNNZXRob2QoKSkKKyAgICAgICAgICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3Is
IHZhbHVlLCBkc3QpOworI2VuZGlmCiAKICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBnZXQvc2V0
IHByb3BlcnR5LCBmaW5kIGl0cyBlbnRyeSBpbiB0aGUgbWFwLgogICAgICAgICAgICAgQVNTRVJU
KG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRlciB8fCBub2RlLT5tX3R5cGUgPT0g
UHJvcGVydHlOb2RlOjpTZXR0ZXIpOwpAQCAtMzQ0LDEyICszODMsMTQgQEAgUmVnaXN0ZXJJRCog
UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBwYWlyZWQgbm9kZSBub3cu
CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZ2V0dGVyUmVnOwogICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHNldHRlclJlZzsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNl
Y29uZFJlZyA9IG51bGxwdHI7CiAKICAgICAgICAgICAgIGlmIChub2RlLT5tX3R5cGUgPT0gUHJv
cGVydHlOb2RlOjpHZXR0ZXIpIHsKICAgICAgICAgICAgICAgICBnZXR0ZXJSZWcgPSB2YWx1ZTsK
ICAgICAgICAgICAgICAgICBpZiAocGFpci5zZWNvbmQpIHsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHBhaXIuc2Vjb25kLT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpTZXR0ZXIpOwogICAg
ICAgICAgICAgICAgICAgICBzZXR0ZXJSZWcgPSBnZW5lcmF0b3IuZW1pdE5vZGUocGFpci5zZWNv
bmQtPm1fYXNzaWduKTsKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kUmVnID0gc2V0dGVyUmVn
LmdldCgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNl
dHRlclJlZyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICAgICAgICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRMb2FkKHNldHRlclJlZy5nZXQoKSwganNVbmRlZmluZWQoKSk7CkBAIC0z
NjAsMTIgKzQwMSwxOCBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogICAgICAgICAgICAgICAg
IGlmIChwYWlyLnNlY29uZCkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGFpci5zZWNv
bmQtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRlcik7CiAgICAgICAgICAgICAgICAgICAg
IGdldHRlclJlZyA9IGdlbmVyYXRvci5lbWl0Tm9kZShwYWlyLnNlY29uZC0+bV9hc3NpZ24pOwor
ICAgICAgICAgICAgICAgICAgICBzZWNvbmRSZWcgPSBnZXR0ZXJSZWcuZ2V0KCk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyUmVnID0gZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpOwogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExv
YWQoZ2V0dGVyUmVnLmdldCgpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgICAg
IGlmIChwYWlyLnNlY29uZCAmJiBwYWlyLnNlY29uZC0+aXNNZXRob2QoKSkKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIHNlY29uZFJlZywgZHN0KTsKKyNlbmRp
ZgorCiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEdldHRlclNldHRlcihkc3QsICpub2Rl
LT5uYW1lKCksIGdldHRlclJlZy5nZXQoKSwgc2V0dGVyUmVnLmdldCgpKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTM3NSwxOCArNDIyLDM0IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAKIHZv
aWQgUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFB1dENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogbmV3T2JqLCBQcm9wZXJ0eU5vZGUmIG5vZGUp
CiB7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5v
ZGUubV9hc3NpZ24pOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmIChub2Rl
LmlzTWV0aG9kKCkpCisgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgdmFsdWUu
Z2V0KCksIG5ld09iaik7CisjZW5kaWYKICAgICBpZiAobm9kZS5uYW1lKCkpIHsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKG5ld09iaiwgKm5vZGUubmFtZSgpLCBnZW5lcmF0
b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2lnbikpOworICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVj
dFB1dEJ5SWQobmV3T2JqLCAqbm9kZS5uYW1lKCksIHZhbHVlLmdldCgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG5vZGUubV9leHByZXNzaW9uKTsKLSAgICBnZW5lcmF0b3IuZW1pdERpcmVj
dFB1dEJ5VmFsKG5ld09iaiwgcHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmF0b3IuZW1pdE5vZGUo
bm9kZS5tX2Fzc2lnbikpOworICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlWYWwobmV3T2Jq
LCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHZhbHVlLmdldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
KyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9k
ZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgZ2VuZXJhdGUgdGhlIHByb2ZpbGVy
IGluZm8/CisgICAgICAgIGlmIChtX3N1YnNjcmlwdC0+aXNTdHJpbmcoKSkgeworICAgICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWQgPSBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJz
Y3JpcHQpLT52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJ
ZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVl
KGdlbmVyYXRvciksIGlkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRHZXRCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBlbWl0U3VwZXJCYXNl
Rm9yQ2FsbGVlKGdlbmVyYXRvciksIGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCkpOwor
ICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpIAogICAgICAg
ICAmJiBnZW5lcmF0b3Iud2lsbFJlc29sdmVUb0FyZ3VtZW50c1JlZ2lzdGVyKHN0YXRpY19jYXN0
PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpKQogICAgICAgICAmJiAhZ2VuZXJh
dG9yLnN5bWJvbFRhYmxlKCkuc2xvd0FyZ3VtZW50cygpKSB7CkBAIC00MzEsNyArNDk0LDExIEBA
IFJlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVyCiAgICAgfQogCiBub25Bcmd1bWVudHNQYXRoOgorI2lm
IEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0g
bV9iYXNlLT5pc1N1cGVyTm9kZSgpID8gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3Ip
IDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisjZWxzZQogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisjZW5kaWYKICAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgUmVnaXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0KTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZmlu
YWxEZXN0LCBiYXNlLmdldCgpLCBtX2lkZW50KTsKQEAgLTUyMSw2ICs1ODgsMTUgQEAgUmVnaXN0
ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmUKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2V4cHIpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9
IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CiAgICAgQ2FsbEFy
Z3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKyNpZiBFTkFCTEUoRVM2
X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobV9leHByLT5pc1N1cGVyTm9kZSgpKSB7CisgICAgICAg
IEFTU0VSVChnZW5lcmF0b3IuY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9y
Lm5ld1RhcmdldCgpKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRD
b25zdHJ1Y3QocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSwgcmV0KTsK
KyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisjZW5kaWYKICAgICBnZW5lcmF0b3IuZW1pdExv
YWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CiAgICAgUmVn
aXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5j
LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmls
ZXIoKSkgewpAQCAtNTc0LDEzICs2NTAsMjUgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogCiBS
ZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyNpZiBFTkFCTEUoRVM2
X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9k
ZSgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gYmFzZUlzU3VwZXIgPyBlbWl0U3Vw
ZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsK
KyNlbHNlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
bV9iYXNlKTsKKyNlbmRpZgogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJl
c3Npb25FbmQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9y
LmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCks
IHByb3BlcnR5LmdldCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworI2lmIEVOQUJMRShF
UzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRvci50aGlzUmVn
aXN0ZXIoKSk7CisgICAgZWxzZQorICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7CisjZWxzZQogICAgIGdlbmVyYXRvci5l
bWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKKyNlbmRp
ZgogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5n
ZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywg
ZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZt
KCktPnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUo
cmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElE
LCBudWxscHRyKTsKQEAgLTU5Niw5ICs2ODQsMjEgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxs
RG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2kK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0
aW9uKGRzdCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50
cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNT
X1NZTlRBWCkKKyAgICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOwor
ICAgIGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisgICAgZWxz
ZQorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIo
KSwgbV9iYXNlKTsKKyNlbHNlCiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMu
dGhpc1JlZ2lzdGVyKCksIG1fYmFzZSk7CisjZW5kaWYKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3Vi
ZXhwcmVzc2lvbkVuZCgpKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBnZW5l
cmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIGJhc2VJc1N1cGVyID8gZW1pdFN1cGVy
QmFzZUZvckNhbGxlZShnZW5lcmF0b3IpIDogY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwg
bV9pZGVudCk7CisjZWxzZQogICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQo
KSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CisjZW5kaWYKICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1
bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBl
UHJvZmlsZXIoKSkgewogICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZh
bHVlLmdldCgpLCBQcm9maWxlVHlwZUJ5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0
cik7CkBAIC05NDAsNiArMTA0MCwxMCBAQCBSZWdpc3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiByMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAK
ICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgaWYgKG1fYmFz
ZS0+aXNTdXBlck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9y
KGdlbmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIpOworI2VuZGlmCiAg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KSwgcjAuZ2V0KCksIHIxLmdldCgpKTsKIH0KIApAQCAtOTUwLDYgKzEwNTQsMTAg
QEAgUmVnaXN0ZXJJRCogRGVsZXRlRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyNpZiBFTkFCTEUoRVM2
X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKQorICAgICAgICBy
ZXR1cm4gZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAiQ2Fubm90IGRlbGV0ZSBh
IHN1cGVyIHByb3BlcnR5Iik7CisjZW5kaWYKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxl
dGVCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCBtX2lkZW50
KTsKIH0KIApAQCAtMjgwNywxMSArMjkxNSw0OCBAQCB2b2lkIENsYXNzRGVjbE5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAK
IFJlZ2lzdGVySUQqIENsYXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgQVNTRVJUKCFtX3BhcmVudENs
YXNzRXhwcmVzc2lvbik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHN1cGVyY2xhc3M7CisgICAg
aWYgKG1fY2xhc3NIZXJpdGFnZSkgeworICAgICAgICBzdXBlcmNsYXNzID0gZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoc3VwZXJjbGFzcy5nZXQo
KSwgbV9jbGFzc0hlcml0YWdlKTsKKyAgICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gY29u
c3RydWN0b3IgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2NvbnN0cnVjdG9yRXhwcmVzc2lv
bik7CisgICAgLy8gRklYTUU6IE1ha2UgdGhlIHByb3RvdHlwZSBub24tY29uZmlndXJhYmxlICYg
bm9uLXdyaXRhYmxlLgogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90b3R5cGUgPSBnZW5lcmF0
b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBjb25zdHJ1Y3Rvci5nZXQo
KSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwogCisgICAgaWYgKHN1cGVy
Y2xhc3MpIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBSZWdpc3RlciA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBzdXBlcmNsYXNzSXNO
dWxsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElm
VHJ1ZShnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3BfZXFfbnVsbCwgdGVtcFJlZ2lzdGVyLmdldCgp
LCBzdXBlcmNsYXNzLmdldCgpKSwgc3VwZXJjbGFzc0lzTnVsbC5nZXQoKSk7CisKKyAgICAgICAg
Ly8gRklYTUU6IFRocm93IFR5cGVFcnJvciBpZiBpdCdzIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLgor
ICAgICAgICBSZWZQdHI8TGFiZWw+IHN1cGVyY2xhc3NJc09iamVjdCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZk9iamVjdChzdXBlcmNsYXNzLmdl
dCgpLCBzdXBlcmNsYXNzSXNPYmplY3QuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFRo
cm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiVGhlIHN1cGVyY2xhc3MgaXMgbm90IGFuIG9iamVj
dC4iKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc3VwZXJjbGFzc0lzT2JqZWN0Lmdl
dCgpKTsKKworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdG9QYXJlbnQgPSBnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChwcm90b1Bh
cmVudC5nZXQoKSwgc3VwZXJjbGFzcy5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5w
cm90b3R5cGUpOworCisgICAgICAgIFJlZlB0cjxMYWJlbD4gcHJvdG9QYXJlbnRJc09iamVjdE9y
TnVsbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJ
ZlRydWUoZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIHRlbXBSZWdpc3Rlci5nZXQo
KSwgcHJvdG9QYXJlbnQuZ2V0KCkpLCBwcm90b1BhcmVudElzT2JqZWN0T3JOdWxsLmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZPYmplY3QocHJvdG9QYXJlbnQuZ2V0KCksIHBy
b3RvUGFyZW50SXNPYmplY3RPck51bGwuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFRo
cm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiVGhlIHN1cGVyY2xhc3MncyBwcm90b3R5cGUgaXMg
bm90IGFuIG9iamVjdC4iKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwocHJvdG9QYXJl
bnRJc09iamVjdE9yTnVsbC5nZXQoKSk7CisKKyAgICAgICAgZW1pdFB1dEhvbWVPYmplY3QoZ2Vu
ZXJhdG9yLCBjb25zdHJ1Y3Rvci5nZXQoKSwgcHJvdG90eXBlLmdldCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKGNvbnN0cnVjdG9yLmdldCgpLCBnZW5lcmF0b3IucHJv
cGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgc3VwZXJjbGFzcy5nZXQoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJZChwcm90b3R5cGUuZ2V0KCksIGdlbmVyYXRvci5w
cm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b1BhcmVudC5nZXQoKSk7CisKKyAg
ICAgICAgUmVmUHRyPExhYmVsPiBzdXBlcmNsYXNzSXNTZXQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKHN1cGVyY2xhc3NJc1NldC5nZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc3VwZXJjbGFzc0lzTnVsbC5nZXQoKSk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJZChwcm90b3R5cGUuZ2V0KCksIGdlbmVyYXRv
ci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBzdXBlcmNsYXNzLmdldCgpKTsKKwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHN1cGVyY2xhc3NJc1NldC5nZXQoKSk7CisgICAg
fQorCiAgICAgaWYgKG1fc3RhdGljTWV0aG9kcykKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2Rl
KGNvbnN0cnVjdG9yLmdldCgpLCBtX3N0YXRpY01ldGhvZHMpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCmluZGV4IGZhNjQ5NTFhOWRmMmI2YjY0NTA1ZmExZWEz
N2ExMDA0YjlhOGQ5OTYuLjA0YTg5MjA3MDFhYTMzMWNjMGY5MmY3MjA1N2VlZGYzNTNjZGYxYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCkBAIC0xNjksNiAr
MTY5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgdXNlc1RoaXMoKTsKICAgICAgICAgcmV0dXJuIG5l
dyAobV9wYXJzZXJBcmVuYSkgVGhpc05vZGUobG9jYXRpb24pOwogICAgIH0KKyNpZiBFTkFCTEUo
RVM2X0NMQVNTX1NZTlRBWCkKKyAgICBFeHByZXNzaW9uTm9kZSogc3VwZXJFeHByKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCisgICAgeworICAgICAgICAvLyBGSVhNRTogQWRkIGFu
ZCBjYWxsIHVzZXNTdXBlcigpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBT
dXBlck5vZGUobG9jYXRpb24pOworICAgIH0KKyNlbmRpZgogICAgIEV4cHJlc3Npb25Ob2RlKiBj
cmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgewogICAgICAg
ICBpZiAobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVudCkKQEAgLTI5OCw5
ICszMDUsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAg
RnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5z
aWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRl
eHQpCisgICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2Nh
dGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0
cmljdENvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9uQm9keU5vZGUo
bV9wYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBl
bmRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIEZ1bmN0aW9uQm9keU5vZGUobV9wYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5k
TG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCwgY29uc3Ry
dWN0b3JLaW5kKTsKICAgICB9CiAKICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZVN0YXJ0KEZ1bmN0
aW9uQm9keU5vZGUqIGJvZHksIGludCBmdW5jdGlvbk5hbWVTdGFydCkKQEAgLTMwOSwyMyArMzE2
LDI0IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5Tm9k
ZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwKLSAgICAgICAgY29uc3QgSWRl
bnRpZmllciogbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZv
LCB1bnNpZ25lZCBnZXRPclNldFN0YXJ0T2Zmc2V0KQorICAgICAgICBjb25zdCBJZGVudGlmaWVy
KiBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGluZm8sIHVuc2ln
bmVkIGdldE9yU2V0U3RhcnRPZmZzZXQsIGJvb2wgaXNNZXRob2QpCiAgICAgewogICAgICAgICBB
U1NFUlQobmFtZSk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGlu
ZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVT
dGFydE9mZnNldCk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0SW5mZXJyZWROYW1lKCpuYW1lKTsK
ICAgICAgICAgaW5mby5ib2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFydChnZXRPclNldFN0YXJ0
T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2Rl
KCpuYW1lLCBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgbV92bS0+
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsCi0gICAgICAgICAgICBpbmZvLmJvZHksIG1f
c291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9z
ZUJyYWNlT2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwg
aW5mby5wYXJhbWV0ZXJzKSwgdHlwZSk7CisgICAgICAgICAgICBpbmZvLmJvZHksIG1fc291cmNl
Q29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNl
T2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5mby5w
YXJhbWV0ZXJzKSwgdHlwZSwgaXNNZXRob2QpOwogICAgIH0KICAgICAKLSAgICBORVZFUl9JTkxJ
TkUgUHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNKiB2bSwgUGFy
c2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQ
cm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwgZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1
bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbywgdW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNl
dCkKKyAgICBORVZFUl9JTkxJTkUgUHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRlclBy
b3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwKKyAgICAgICAg
ZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbywg
dW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNldCwgYm9vbCBpc01ldGhvZCkKICAgICB7CiAgICAg
ICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5RW5kTGlu
ZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAg
ICAgIGluZm8uYm9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQoZ2V0T3JTZXRTdGFydE9mZnNl
dCk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gcGFyc2VyQXJlbmEuaWRlbnRp
ZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKHZtLCBuYW1lKTsKICAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKGlkZW50LCBuZXcgKG1fcGFyc2Vy
QXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVu
dGlmaWVyLAotICAgICAgICAgICAgaW5mby5ib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Np
b24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5
U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycyksIHR5cGUp
OworICAgICAgICAgICAgaW5mby5ib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5m
by5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRM
aW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycyksIHR5cGUsIGlzTWV0
aG9kKTsKICAgICB9CiAKICAgICBBcmd1bWVudHNOb2RlKiBjcmVhdGVBcmd1bWVudHMoKSB7IHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFyZ3VtZW50c05vZGUoKTsgfQpAQCAtMzMzLDExICsz
NDEsMTEgQEAgcHVibGljOgogICAgIEFyZ3VtZW50TGlzdE5vZGUqIGNyZWF0ZUFyZ3VtZW50c0xp
c3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGFyZykg
eyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0aW9uLCBh
cmcpOyB9CiAgICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBBcmd1bWVudExpc3ROb2RlKiBhcmdzLCBFeHByZXNz
aW9uTm9kZSogYXJnKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFyZ3VtZW50TGlzdE5v
ZGUobG9jYXRpb24sIGFyZ3MsIGFyZyk7IH0KIAotICAgIFByb3BlcnR5Tm9kZSogY3JlYXRlUHJv
cGVydHkoY29uc3QgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9k
ZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wpCisgICAgUHJvcGVydHlOb2RlKiBjcmVh
dGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2Rl
KiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwgYm9vbCBpc01ldGhvZCA9IGZh
bHNlKQogICAgIHsKICAgICAgICAgaWYgKG5vZGUtPmlzRnVuY0V4cHJOb2RlKCkpCiAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihub2RlKS0+Ym9keSgpLT5zZXRJbmZlcnJl
ZE5hbWUoKnByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IFByb3BlcnR5Tm9kZSgqcHJvcGVydHlOYW1lLCBub2RlLCB0eXBlKTsKKyAgICAgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKCpwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5
cGUsIGlzTWV0aG9kKTsKICAgICB9CiAgICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShW
TSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgZG91YmxlIHByb3BlcnR5TmFtZSwgRXhw
cmVzc2lvbk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sKQogICAgIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9y
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKaW5k
ZXggMTJlM2Q0ZDZiODk1MmEwMDFiNDZhMzE4YjAwNzQ4M2I3NTc2ZTcwNS4uM2I2Nzg5NTA5ODQ2
ZWMyNmVmZjFmZTZiNzEwYjk5M2JmODRmN2NhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKQEAgLTExMiw2ICsxMTIsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgewogICAgIH0KIAorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQor
ICAgIGlubGluZSBTdXBlck5vZGU6OlN1cGVyTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uKQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQorICAgIHsKKyAgICB9
CisjZW5kaWYKKwogaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIHN0YXJ0KQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQogICAg
ICAgICAsIG1faWRlbnQoaWRlbnQpCkBAIC0xNTksMTAgKzE2NiwxMSBAQCBpbmxpbmUgUmVzb2x2
ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0
IElkZW50aWZpZQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUHJvcGVydHlOb2RlOjpQcm9w
ZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGFzc2lnbiwg
VHlwZSB0eXBlKQorICAgIGlubGluZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZShjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBFeHByZXNzaW9uTm9kZSogYXNzaWduLCBUeXBlIHR5cGUsIGJvb2wg
aXNNZXRob2QgPSBmYWxzZSkKICAgICAgICAgOiBtX25hbWUoJm5hbWUpCiAgICAgICAgICwgbV9h
c3NpZ24oYXNzaWduKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1faXNNZXRo
b2QoaXNNZXRob2QpCiAgICAgewogICAgIH0KIApAQCAtMTcxLDYgKzE3OSw3IEBAIGlubGluZSBS
ZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgSWRlbnRpZmllCiAgICAgICAgICwgbV9leHByZXNzaW9uKG5hbWUpCiAgICAgICAgICwg
bV9hc3NpZ24oYXNzaWduKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1faXNN
ZXRob2QoZmFsc2UpCiAgICAgewogICAgIH0KIApAQCAtNzg1LDExICs3OTQsMTEgQEAgaW5saW5l
IFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBJZGVudGlmaWUKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIENsYXNzRXhwck5v
ZGU6OkNsYXNzRXhwck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGNvbnN0cnVjdG9yRXhwcmVzc2lvbiwg
RXhwcmVzc2lvbk5vZGUqIHBhcmVudENsYXNzRXhwcmVzc2lvbiwgUHJvcGVydHlMaXN0Tm9kZSog
aW5zdGFuY2VNZXRob2RzLCBQcm9wZXJ0eUxpc3ROb2RlKiBzdGF0aWNNZXRob2RzKQorICAgIGlu
bGluZSBDbGFzc0V4cHJOb2RlOjpDbGFzc0V4cHJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBjb25zdHJ1
Y3RvckV4cHJlc3Npb24sIEV4cHJlc3Npb25Ob2RlKiBjbGFzc0hlcml0YWdlLCBQcm9wZXJ0eUxp
c3ROb2RlKiBpbnN0YW5jZU1ldGhvZHMsIFByb3BlcnR5TGlzdE5vZGUqIHN0YXRpY01ldGhvZHMp
CiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9uYW1lKG5h
bWUpCiAgICAgICAgICwgbV9jb25zdHJ1Y3RvckV4cHJlc3Npb24oY29uc3RydWN0b3JFeHByZXNz
aW9uKQotICAgICAgICAsIG1fcGFyZW50Q2xhc3NFeHByZXNzaW9uKHBhcmVudENsYXNzRXhwcmVz
c2lvbikKKyAgICAgICAgLCBtX2NsYXNzSGVyaXRhZ2UoY2xhc3NIZXJpdGFnZSkKICAgICAgICAg
LCBtX2luc3RhbmNlTWV0aG9kcyhpbnN0YW5jZU1ldGhvZHMpCiAgICAgICAgICwgbV9zdGF0aWNN
ZXRob2RzKHN0YXRpY01ldGhvZHMpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmNwcAppbmRleCAwNGFmNjFkOWFiYThmNDI1MDBhOGRlNmNlZjUwODgzOWMxNzhiMWM0Li4y
MTEzZDkxYTlkOTFiZTJkNTgzOGFjN2JhY2U2MWNjZDZkNGJkZmFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmNwcApAQCAtMTY3LDEzICsxNjcsMTcgQEAgRnVuY3Rpb25QYXJh
bWV0ZXJzOjp+RnVuY3Rpb25QYXJhbWV0ZXJzKCkKICAgICAgICAgcGF0dGVybnMoKVtpXS0+ZGVy
ZWYoKTsKIH0KIAotRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVu
YSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKK0Z1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9u
Qm9keU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRp
b24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29s
dW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaXNJblN0cmljdENvbnRleHQsIEpTUGFyc2Vy
Q29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCkKICAgICA6IFN0YXRlbWVudE5vZGUoZW5k
TG9jYXRpb24pCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQogICAgICwgbV9lbmRD
b2x1bW4oZW5kQ29sdW1uKQogICAgICwgbV9zdGFydFN0YXJ0T2Zmc2V0KHN0YXJ0TG9jYXRpb24u
c3RhcnRPZmZzZXQpCiAgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KGlzSW5TdHJpY3RDb250ZXh0
KQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmRJ
c0Rlcml2ZWQoY29uc3RydWN0b3JLaW5kID09IEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpEZXJp
dmVkKQorI2VuZGlmCiB7CisgICAgVU5VU0VEX1BBUkFNKGNvbnN0cnVjdG9yS2luZCk7CiB9CiAK
IHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIFBhcmFtZXRlck5vZGUqIGZpcnN0UGFyYW1ldGVyLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgZW51bSBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCmluZGV4IDMwZWRiMGFlMGMyZGE1M2YzYjQwZjg5NDYwMzM4ZjE5ZTkwOTky
OTcuLjkwMGZmOTU0ZDMyOTk5ZmQ2OTk5ZjlkMWU0Njg0OGQ1ZjFjNzZkNGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTE2NCw2ICsxNjQsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdmlydHVhbCBib29sIGlzU3VidHJhY3QoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCb29sZWFuKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzU3ByZWFkRXhwcmVzc2lvbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1cGVyTm9kZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZUlu
Q29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsKiwgTGFiZWwqLCBGYWxs
VGhyb3VnaE1vZGUpOwogCkBAIC00NDUsNiArNDQ2LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CiAgICAgfTsKIAorI2lmIEVOQUJMRShFUzZfQ0xB
U1NfU1lOVEFYKQorICAgIGNsYXNzIFN1cGVyTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBTdXBlck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdXBlck5vZGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBv
dmVycmlkZTsKKyAgICB9OworI2VuZGlmCisKICAgICBjbGFzcyBSZXNvbHZlTm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBSZXNvbHZlTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIHN0YXJ0KTsKQEAgLTUwMCwyMCArNTEyLDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1
YmxpYzoKICAgICAgICAgZW51bSBUeXBlIHsgQ29uc3RhbnQgPSAxLCBHZXR0ZXIgPSAyLCBTZXR0
ZXIgPSA0IH07CiAKLSAgICAgICAgUHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImLCBFeHBy
ZXNzaW9uTm9kZSosIFR5cGUpOworICAgICAgICBQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmll
ciYsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSwgYm9vbCBpc01ldGhvZCk7CiAgICAgICAgIFByb3Bl
cnR5Tm9kZShFeHByZXNzaW9uTm9kZSogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSosIFR5
cGUpOwogICAgICAgICAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGV4cHJlc3Npb25OYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uOyB9CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIq
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAotICAgICAgICBUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQorICAgICAgICBib29sIGlzTWV0aG9kKCkg
Y29uc3QgeyByZXR1cm4gbV9pc01ldGhvZDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJp
ZW5kIGNsYXNzIFByb3BlcnR5TGlzdE5vZGU7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIG1f
bmFtZTsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcmVzc2lvbjsKICAgICAgICAgRXhw
cmVzc2lvbk5vZGUqIG1fYXNzaWduOwotICAgICAgICBUeXBlIG1fdHlwZTsKKyAgICAgICAgdW5z
aWduZWQgbV90eXBlIDogMzsKKyAgICAgICAgdW5zaWduZWQgbV9pc01ldGhvZCA6IDE7CiAgICAg
fTsKIAogICAgIGNsYXNzIFByb3BlcnR5TGlzdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUg
ewpAQCAtMTU0NCw3ICsxNTU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAg
ICAgICB1c2luZyBQYXJzZXJBcmVuYURlbGV0YWJsZTo6b3BlcmF0b3IgbmV3OwogCi0gICAgICAg
IEZ1bmN0aW9uQm9keU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVu
c2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCk7CisgICAgICAgIEZ1bmN0
aW9uQm9keU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVk
IGVuZENvbHVtbiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgSlNQYXJzZXJDb25zdHJ1Y3Rvcktp
bmQpOwogCiAgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyYW1ldGVycy5nZXQoKTsgfQogCkBAIC0xNTcyLDYgKzE1ODYsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBpbnQgc3RhcnRTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhcnRTdGFydE9mZnNldDsgfQogICAgICAgICBib29sIGlzSW5TdHJpY3RDb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0Q29udGV4dDsgfQorI2lmIEVOQUJMRShFUzZf
Q0xBU1NfU1lOVEFYKQorICAgICAgICBib29sIGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpIHsg
cmV0dXJuIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkOyB9CisjZW5kaWYKIAogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwpAQCAtMTU4NCw3ICsxNjAxLDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICAgICAg
U291cmNlQ29kZSBtX3NvdXJjZTsKICAgICAgICAgaW50IG1fc3RhcnRTdGFydE9mZnNldDsKLSAg
ICAgICAgYm9vbCBtX2lzSW5TdHJpY3RDb250ZXh0OworICAgICAgICBib29sIG1faXNJblN0cmlj
dENvbnRleHQgOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICBib29s
IG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkIDogMTsKKyNlbmRpZgogICAgIH07CiAKICAgICBj
bGFzcyBGdW5jdGlvbk5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKQEAgLTE2NDEsNyAr
MTY2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1f
bmFtZTsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fY29uc3RydWN0b3JFeHByZXNzaW9uOwot
ICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9wYXJlbnRDbGFzc0V4cHJlc3Npb247CisgICAgICAg
IEV4cHJlc3Npb25Ob2RlKiBtX2NsYXNzSGVyaXRhZ2U7CiAgICAgICAgIFByb3BlcnR5TGlzdE5v
ZGUqIG1faW5zdGFuY2VNZXRob2RzOwogICAgICAgICBQcm9wZXJ0eUxpc3ROb2RlKiBtX3N0YXRp
Y01ldGhvZHM7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcApp
bmRleCA2MzE4ZmQ2MzZiZWIzZTdiOTFkMjhmNjQ5NmFlZDlhZjdiZDg3MThjLi43NWZkZmEzODFj
MmYxNjU0YjE1NTM3M2IyZWEwYTI0NGEzMjJhNjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwCkBAIC0xMjU1LDcgKzEyNTUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUZvcgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1
bmN0aW9uQm9keShUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJv
ZHkoVHJlZUJ1aWxkZXImIGNvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVj
dG9yS2luZCkKIHsKICAgICBKU1Rva2VuTG9jYXRpb24gc3RhcnRMb2NhdGlvbih0b2tlbkxvY2F0
aW9uKCkpOwogICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdG9rZW5Db2x1bW4oKTsKQEAgLTEy
NjMsMTQgKzEyNjMsMTQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rp
b25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uQm8KIAogICAgIGlmIChtYXRj
aChDTE9TRUJSQUNFKSkgewogICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB0b2tlbkNvbHVt
bigpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2Nh
dGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2Rl
KCkpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2Nh
dGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2Rl
KCksIGNvbnN0cnVjdG9yS2luZCk7CiAgICAgfQogICAgIERlcHRoTWFuYWdlciBzdGF0ZW1lbnRE
ZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CiAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDA7CiAgICAg
dHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIoY29u
c3RfY2FzdDxWTSo+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKICAgICBmYWlsSWZGYWxzZShwYXJz
ZVNvdXJjZUVsZW1lbnRzKGJvZHlCdWlsZGVyLCBDaGVja0ZvclN0cmljdE1vZGUpLCAiQ2Fubm90
IHBhcnNlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiIpOwogICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9
IHRva2VuQ29sdW1uKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0
YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3Ry
aWN0TW9kZSgpKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRM
b2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RN
b2RlKCksIGNvbnN0cnVjdG9yS2luZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdG
b3JGdW5jdGlvbk1vZGUoRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSkKQEAgLTEyOTIsNyArMTI5Miw4
IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdGb3JGdW5jdGlvbk1vZGUoRnVuY3Rpb25QYXJz
ZU1vZGUgbW9kZSkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlv
bkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVt
ZW50cywgRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29w
ZSwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYgaW5mbykKK3RlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8o
VHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cywg
RnVuY3Rpb25QYXJzZU1vZGUgbW9kZSwKKyAgICBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3Bl
LCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQsIFBhcnNlckZ1bmN0aW9u
SW5mbzxUcmVlQnVpbGRlcj4mIGluZm8pCiB7CiAgICAgQXV0b1BvcFNjb3BlUmVmIGZ1bmN0aW9u
U2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOwogICAgIGZ1bmN0aW9uU2NvcGUtPnNldElzRnVuY3Rp
b24oKTsKQEAgLTEzNDUsNyArMTM0Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
Ym9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkCiAgICAg
ICAgICAgICBlbmRMb2NhdGlvbi5zdGFydE9mZnNldCAtIGVuZExvY2F0aW9uLmxpbmVTdGFydE9m
ZnNldDsKICAgICAgICAgdW5zaWduZWQgY3VycmVudExpbmVTdGFydE9mZnNldCA9IG1fdG9rZW4u
bV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAKLSAgICAgICAgaW5mby5ib2R5ID0gY29udGV4
dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluZm8uYm9k
eVN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKKyAg
ICAgICAgaW5mby5ib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlv
biwgZW5kTG9jYXRpb24sIGluZm8uYm9keVN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBjYWNo
ZWRJbmZvLT5zdHJpY3RNb2RlLCBjb25zdHJ1Y3RvcktpbmQpOwogICAgICAgICAKICAgICAgICAg
ZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZyb21Tb3VyY2VQcm92aWRlckNhY2hlKGNhY2hlZEluZm8p
OwogICAgICAgICBmYWlsSWZGYWxzZShwb3BTY29wZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRl
cjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKSwgIlBhcnNlciBlcnJvciIpOwpAQCAtMTM2OCwxNSAr
MTM2OSwyNSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZAogICAgIH0KICAgICBtX2xhc3RGdW5j
dGlvbk5hbWUgPSBsYXN0RnVuY3Rpb25OYW1lOwogICAgIFBhcnNlclN0YXRlIG9sZFN0YXRlID0g
c2F2ZVN0YXRlKCk7Ci0gICAgaW5mby5ib2R5ID0gcGFyc2VGdW5jdGlvbkJvZHkoY29udGV4dCk7
CisgICAgaW5mby5ib2R5ID0gcGFyc2VGdW5jdGlvbkJvZHkoY29udGV4dCwgY29uc3RydWN0b3JL
aW5kKTsKICAgICByZXN0b3JlU3RhdGUob2xkU3RhdGUpOwogICAgIGZhaWxJZkZhbHNlKGluZm8u
Ym9keSwgIkNhbm5vdCBwYXJzZSB0aGUgYm9keSBvZiB0aGlzICIsIHN0cmluZ0ZvckZ1bmN0aW9u
TW9kZShtb2RlKSk7CiAgICAgY29udGV4dC5zZXRFbmRPZmZzZXQoaW5mby5ib2R5LCBtX2xleGVy
LT5jdXJyZW50T2Zmc2V0KCkpOwogICAgIGlmIChmdW5jdGlvblNjb3BlLT5zdHJpY3RNb2RlKCkg
JiYgaW5mby5uYW1lKSB7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1vZGUgPT0gRnVuY3Rpb25Nb2RlIHx8IG1vZGUgPT0gTWV0aG9kTW9kZSk7
CisjZWxzZQogICAgICAgICBSRUxFQVNFX0FTU0VSVChtb2RlID09IEZ1bmN0aW9uTW9kZSk7Cisj
ZW5kaWYKICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFy
Z3VtZW50cyA9PSAqaW5mby5uYW1lLCAiJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3Qg
YSB2YWxpZCBmdW5jdGlvbiBuYW1lIGluIHN0cmljdCBtb2RlIik7CiAgICAgICAgIHNlbWFudGlj
RmFpbElmVHJ1ZShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppbmZvLm5hbWUsICInIiwg
aW5mby5uYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4gc3Ry
aWN0IG1vZGUiKTsKICAgICB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgaWYg
KGZ1bmN0aW9uU2NvcGUtPmhhc0RpcmVjdFN1cGVyKCkpIHsKKyAgICAgICAgYm9vbCBuYW1lSXND
b25zdHJ1Y3RvciA9IGluZm8ubmFtZSAmJiAqaW5mby5uYW1lID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmNvbnN0cnVjdG9yOworICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobW9kZSAhPSBNZXRo
b2RNb2RlIHx8ICFuYW1lSXNDb25zdHJ1Y3RvciwgIkNhbm5vdCBjYWxsIHN1cGVyKCkgb3V0c2lk
ZSBvZiBhIGNsYXNzIGNvbnN0cnVjdG9yIik7CisgICAgfQorI2VuZGlmCiAgICAgaW5mby5jbG9z
ZUJyYWNlT2Zmc2V0ID0gbV90b2tlbi5tX2RhdGEub2Zmc2V0OwogICAgIHVuc2lnbmVkIGNsb3Nl
QnJhY2VMaW5lID0gbV90b2tlbi5tX2RhdGEubGluZTsKICAgICB1bnNpZ25lZCBjbG9zZUJyYWNl
TGluZVN0YXJ0T2Zmc2V0ID0gbV90b2tlbi5tX2RhdGEubGluZVN0YXJ0T2Zmc2V0OwpAQCAtMTQx
Nyw3ICsxNDI4LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uRGVjbGEKICAgICB1bnNpZ25lZCBmdW5j
dGlvbktleXdvcmRTdGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBuZXh0KCk7CiAgICAgUGFyc2Vy
RnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwotICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1
bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCB0cnVl
LCBpbmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBmdW5jdGlvbiIpOworICAgIGZhaWxJZkZhbHNl
KChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25N
b2RlLCB0cnVlLCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZDo6QmFzZSwgaW5mbykpLCAiQ2Fubm90
IHBhcnNlIHRoaXMgZnVuY3Rpb24iKTsKICAgICBmYWlsSWZGYWxzZShpbmZvLm5hbWUsICJGdW5j
dGlvbiBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgICBmYWlsSWZGYWxzZUlmU3Ry
aWN0KGRlY2xhcmVWYXJpYWJsZShpbmZvLm5hbWUpLCAiQ2Fubm90IGRlY2xhcmUgYSBmdW5jdGlv
biBuYW1lZCAnIiwgaW5mby5uYW1lLT5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7CiAgICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQobG9jYXRpb24sIGluZm8sIGZ1
bmN0aW9uS2V5d29yZFN0YXJ0KTsKQEAgLTE0NjcsOCArMTQ3OCw4IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VDbGFzcyhUCiAgICAgaWYgKGNvbnN1bWUoRVhURU5EUykpIHsKICAgICAgICAgcGFyZW50Q2xh
c3MgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICBmYWlsSWZGYWxz
ZShwYXJlbnRDbGFzcywgIkNhbm5vdCBwYXJzZSB0aGUgcGFyZW50IGNsYXNzIG5hbWUiKTsKLSAg
ICAgICAgZmFpbFdpdGhNZXNzYWdlKCJJbmhlcml0YW5jZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIp
OwogICAgIH0KKyAgICBjb25zdCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3Rvcktp
bmQgPSBwYXJlbnRDbGFzcyA/IEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkIDogSlNQ
YXJzZXJDb25zdHJ1Y3RvcktpbmQ6OkJhc2U7CiAKICAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdz
KE9QRU5CUkFDRSwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MsICJFeHBlY3RlZCBvcGVu
aW5nICd7JyBhdCB0aGUgc3RhcnQgb2YgYSBjbGFzcyBib2R5Iik7CiAKQEAgLTE1MDAsMTEgKzE1
MTEsMTIgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeHByZXNzaW9u
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKFQKICAgICAgICAgaWYgKGlzR2V0dGVyIHx8
IGlzU2V0dGVyKSB7CiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNTdGF0aWNNZXRo
b2QsICJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShpc0dl
dHRlciA/IEdldHRlck1vZGUgOiBTZXR0ZXJNb2RlKSk7CiAgICAgICAgICAgICBuZXh0RXhwZWN0
SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3Jkcyk7Ci0gICAgICAgICAgICBw
cm9wZXJ0eSA9IHBhcnNlR2V0dGVyU2V0dGVyKGNvbnRleHQsIGFsd2F5c1N0cmljdEluc2lkZUNs
YXNzLCBpc0dldHRlciA/IFByb3BlcnR5Tm9kZTo6R2V0dGVyIDogUHJvcGVydHlOb2RlOjpTZXR0
ZXIsIG1ldGhvZFN0YXJ0KTsKKyAgICAgICAgICAgIGJvb2wgaXNNZXRob2QgPSB0cnVlOworICAg
ICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUdldHRlclNldHRlcihjb250ZXh0LCBhbHdheXNTdHJp
Y3RJbnNpZGVDbGFzcywgaXNHZXR0ZXIgPyBQcm9wZXJ0eU5vZGU6OkdldHRlciA6IFByb3BlcnR5
Tm9kZTo6U2V0dGVyLCBtZXRob2RTdGFydCwgaXNNZXRob2QpOwogICAgICAgICAgICAgZmFpbElm
RmFsc2UocHJvcGVydHksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gbWV0aG9k
SW5mbzsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0
LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCBmYWxzZSwgbWV0aG9kSW5mbykpLCAi
Q2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CisgICAgICAgICAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIE1ldGhvZE1vZGUsIGZh
bHNlLCBjb25zdHJ1Y3RvcktpbmQsIG1ldGhvZEluZm8pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIG1l
dGhvZCIpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UobWV0aG9kSW5mby5uYW1lLCAibWV0aG9k
IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGRlY2xhcmVWYXJp
YWJsZShtZXRob2RJbmZvLm5hbWUpLCAiQ2Fubm90IGRlY2xhcmUgYSBtZXRob2QgbmFtZWQgJyIs
IG1ldGhvZEluZm8ubmFtZS0+aW1wbCgpLCAiJyIpOwogCkBAIC0xNTIyLDcgKzE1MzQsOCBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4cHJlc3Npb24gUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlQ2xhc3MoVAogICAgICAgICAgICAgLy8gRklYTUU6IFN5bnRheCBlcnJv
ciB3aGVuIHN1cGVyKCkgaXMgY2FsbGVkCiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUo
aXNTdGF0aWNNZXRob2QgJiYgKm1ldGhvZEluZm8ubmFtZSA9PSBwcm9wZXJ0eU5hbWVzLnByb3Rv
dHlwZSwKICAgICAgICAgICAgICAgICAiQ2Fubm90IGRlY2xhcmUgYSBzdGF0aWMgbWV0aG9kIG5h
bWVkICdwcm90b3R5cGUnIik7Ci0gICAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQuY3JlYXRl
UHJvcGVydHkobWV0aG9kSW5mby5uYW1lLCBtZXRob2QsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQs
IGFsd2F5c1N0cmljdEluc2lkZUNsYXNzKTsKKyAgICAgICAgICAgIGJvb2wgaXNNZXRob2QgPSB0
cnVlOworICAgICAgICAgICAgcHJvcGVydHkgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KG1ldGhv
ZEluZm8ubmFtZSwgbWV0aG9kLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCBhbHdheXNTdHJpY3RJ
bnNpZGVDbGFzcywgaXNNZXRob2QpOwogICAgICAgICB9CiAKICAgICAgICAgVHJlZVByb3BlcnR5
TGlzdCYgdGFpbCA9IGlzU3RhdGljTWV0aG9kID8gc3RhdGljTWV0aG9kc1RhaWwgOiBpbnN0YW5j
ZU1ldGhvZHNUYWlsOwpAQCAtMTk3NSw3ICsxOTg4LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlUHJvcGVydHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlUHJvcGVydHkoVHJl
ZUIKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUdldHRlclNl
dHRlcihUcmVlQnVpbGRlciYgY29udGV4dCwgYm9vbCBzdHJpY3QsIFByb3BlcnR5Tm9kZTo6VHlw
ZSB0eXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KQordGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlR2V0
dGVyU2V0dGVyKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBib29sIHN0cmljdCwgUHJvcGVydHlOb2Rl
OjpUeXBlIHR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQsIGJvb2wgaXNN
ZXRob2QpCiB7CiAgICAgY29uc3QgSWRlbnRpZmllciogc3RyaW5nUHJvcGVydHlOYW1lID0gMDsK
ICAgICBkb3VibGUgbnVtZXJpY1Byb3BlcnR5TmFtZSA9IDA7CkBAIC0xOTkwLDE0ICsyMDAzLDE0
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZUdldHRlclNldHRlcihUCiAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVC
dWlsZGVyPiBpbmZvOwogICAgIGlmICh0eXBlID09IFByb3BlcnR5Tm9kZTo6R2V0dGVyKSB7CiAg
ICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoKE9QRU5QQVJFTiksICJFeHBlY3RlZCBhIHBhcmFtZXRl
ciBsaXN0IGZvciBnZXR0ZXIgZGVmaW5pdGlvbiIpOwotICAgICAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgR2V0dGVyTW9k
ZSwgZmFsc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBnZXR0ZXIgZGVmaW5pdGlvbiIpOworICAg
ICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1Jl
cXVpcmVtZW50cywgR2V0dGVyTW9kZSwgZmFsc2UsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpC
YXNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgZ2V0dGVyIGRlZmluaXRpb24iKTsKICAgICB9IGVs
c2UgewogICAgICAgICBmYWlsSWZGYWxzZShtYXRjaChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBw
YXJhbWV0ZXIgbGlzdCBmb3Igc2V0dGVyIGRlZmluaXRpb24iKTsKLSAgICAgICAgZmFpbElmRmFs
c2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNl
dHRlck1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRpb24i
KTsKKyAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0
aW9uTm9SZXF1aXJlbWVudHMsIFNldHRlck1vZGUsIGZhbHNlLCBKU1BhcnNlckNvbnN0cnVjdG9y
S2luZDo6QmFzZSwgaW5mbykpLCAiQ2Fubm90IHBhcnNlIHNldHRlciBkZWZpbml0aW9uIik7CiAg
ICAgfQogICAgIGlmIChzdHJpbmdQcm9wZXJ0eU5hbWUpCi0gICAgICAgIHJldHVybiBjb250ZXh0
LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkobG9jYXRpb24sIHR5cGUsIHN0cmljdCwgc3Ry
aW5nUHJvcGVydHlOYW1lLCBpbmZvLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KTsKLSAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0X2Nhc3Q8Vk0q
PihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgbG9jYXRpb24sIHR5cGUsIHN0cmljdCwgbnVtZXJpY1By
b3BlcnR5TmFtZSwgaW5mbywgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCk7CisgICAgICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkobG9jYXRpb24sIHR5cGUs
IHN0cmljdCwgc3RyaW5nUHJvcGVydHlOYW1lLCBpbmZvLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zm
c2V0LCBpc01ldGhvZCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlR2V0dGVyT3JTZXR0ZXJQ
cm9wZXJ0eShjb25zdF9jYXN0PFZNKj4obV92bSksIG1fcGFyc2VyQXJlbmEsIGxvY2F0aW9uLCB0
eXBlLCBzdHJpY3QsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIGluZm8sIGdldHRlck9yU2V0dGVyU3Rh
cnRPZmZzZXQsIGlzTWV0aG9kKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4K
QEAgLTIxODIsNyArMjE5NSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4
cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlUHJpbWFyeUV4cHJlCiAgICAgICAgIG5l
eHQoKTsKICAgICAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwogICAg
ICAgICBpbmZvLm5hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7Ci0g
ICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5v
UmVxdWlyZW1lbnRzLCBGdW5jdGlvbk1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2Ug
ZnVuY3Rpb24gZXhwcmVzc2lvbiIpOworICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlv
bkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25Nb2RlLCBmYWxz
ZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBm
dW5jdGlvbiBleHByZXNzaW9uIik7CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0
aW9uRXhwcihsb2NhdGlvbiwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwogICAgIH0KICNp
ZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKQEAgLTIzMzIsNyArMjM0NSwxNiBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZU1lbWJlckV4cHJlcwogICAgICAgICBuZXdDb3VudCsrOwogICAgIH0KIAorI2lmIEVOQUJM
RShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtYXRjaChTVVBFUik7
CisgICAgaWYgKGJhc2VJc1N1cGVyKSB7CisgICAgICAgIGJhc2UgPSBjb250ZXh0LnN1cGVyRXhw
cihsb2NhdGlvbik7CisgICAgICAgIG5leHQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYmFzZSA9
IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oY29udGV4dCk7CisjZWxzZQogICAgIGJhc2UgPSBwYXJz
ZVByaW1hcnlFeHByZXNzaW9uKGNvbnRleHQpOworI2VuZGlmCiAgICAgCiAgICAgZmFpbElmRmFs
c2UoYmFzZSwgIkNhbm5vdCBwYXJzZSBiYXNlIGV4cHJlc3Npb24iKTsKICAgICB3aGlsZSAodHJ1
ZSkgewpAQCAtMjM2NCw2ICsyMzg2LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVzCiAgICAg
ICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBv
c2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJz
ZUFyZ3VtZW50cyhjb250ZXh0LCBBbGxvd1NwcmVhZCk7CiAgICAgICAgICAgICAgICAgZmFpbElm
RmFsc2UoYXJndW1lbnRzLCAiQ2Fubm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7CisjaWYgRU5B
QkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgICAgICAgICAgaWYgKGJhc2VJc1N1cGVyKQor
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0SGFzRGlyZWN0U3VwZXIoKTsK
KyNlbmRpZgogICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNhbGxO
b2RlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHBy
ZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIG1fbm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKQEAgLTIzODEsOCArMjQwNywxNCBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZU1lbWJlckV4cHJlcwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
Z290byBlbmRNZW1iZXJFeHByZXNzaW9uOwogICAgICAgICB9CisjaWYgRU5BQkxFKEVTNl9DTEFT
U19TWU5UQVgpCisgICAgICAgIGJhc2VJc1N1cGVyID0gZmFsc2U7CisjZW5kaWYKICAgICB9CiBl
bmRNZW1iZXJFeHByZXNzaW9uOgorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIHNl
bWFudGljRmFpbElmVHJ1ZShiYXNlSXNTdXBlciAmJiAhbmV3Q291bnQsICJDYW5ub3QgcmVmZXJl
bmNlIHN1cGVyIik7CisjZW5kaWYKICAgICB3aGlsZSAobmV3Q291bnQtLSkKICAgICAgICAgYmFz
ZSA9IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgZXhwcmVzc2lvblN0YXJ0
LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICByZXR1cm4gYmFzZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDUwMWMwMzY0NGQ1NTk3YjhhMWExYWYzZTlmOWM4
MmUxODRlZDJkOGMuLmRkYTFjYmJiZDNmM2NkNmEzYzNjZTAwZTM0NjcyNjg3MDdmMDczODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAtMTE1LDYgKzExNSw5IEBAIHN0
cnVjdCBTY29wZSB7CiAgICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKGZhbHNlKQogICAgICAg
ICAsIG1fdXNlc0V2YWwoZmFsc2UpCiAgICAgICAgICwgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uKGZh
bHNlKQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICAsIG1faGFzRGlyZWN0
U3VwZXIoZmFsc2UpCisjZW5kaWYKICAgICAgICAgLCBtX2FsbG93c05ld0RlY2xzKHRydWUpCiAg
ICAgICAgICwgbV9zdHJpY3RNb2RlKHN0cmljdE1vZGUpCiAgICAgICAgICwgbV9pc0Z1bmN0aW9u
KGlzRnVuY3Rpb24pCkBAIC0xMzAsNiArMTMzLDkgQEAgc3RydWN0IFNjb3BlIHsKICAgICAgICAg
LCBtX3NoYWRvd3NBcmd1bWVudHMocmhzLm1fc2hhZG93c0FyZ3VtZW50cykKICAgICAgICAgLCBt
X3VzZXNFdmFsKHJocy5tX3VzZXNFdmFsKQogICAgICAgICAsIG1fbmVlZHNGdWxsQWN0aXZhdGlv
bihyaHMubV9uZWVkc0Z1bGxBY3RpdmF0aW9uKQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgICAgICAsIG1faGFzRGlyZWN0U3VwZXIocmhzLm1faGFzRGlyZWN0U3VwZXIpCisjZW5k
aWYKICAgICAgICAgLCBtX2FsbG93c05ld0RlY2xzKHJocy5tX2FsbG93c05ld0RlY2xzKQogICAg
ICAgICAsIG1fc3RyaWN0TW9kZShyaHMubV9zdHJpY3RNb2RlKQogICAgICAgICAsIG1faXNGdW5j
dGlvbihyaHMubV9pc0Z1bmN0aW9uKQpAQCAtMjY1LDYgKzI3MSwxMSBAQCBzdHJ1Y3QgU2NvcGUg
ewogCiAgICAgdm9pZCBzZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCkgeyBtX25lZWRzRnVsbEFjdGl2
YXRpb24gPSB0cnVlOyB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29s
IGhhc0RpcmVjdFN1cGVyKCkgeyByZXR1cm4gbV9oYXNEaXJlY3RTdXBlcjsgfQorICAgIHZvaWQg
c2V0SGFzRGlyZWN0U3VwZXIoKSB7IG1faGFzRGlyZWN0U3VwZXIgPSB0cnVlOyB9CisjZW5kaWYK
KwogICAgIGJvb2wgY29sbGVjdEZyZWVWYXJpYWJsZXMoU2NvcGUqIG5lc3RlZFNjb3BlLCBib29s
IHNob3VsZFRyYWNrQ2xvc2VkVmFyaWFibGVzKQogICAgIHsKICAgICAgICAgaWYgKG5lc3RlZFNj
b3BlLT5tX3VzZXNFdmFsKQpAQCAtMzU4LDYgKzM2OSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3NoYWRvd3NBcmd1bWVudHMgOiAxOwogICAgIGJvb2wgbV91c2VzRXZhbCA6IDE7CiAgICAgYm9v
bCBtX25lZWRzRnVsbEFjdGl2YXRpb24gOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgIGJvb2wgbV9oYXNEaXJlY3RTdXBlciA6IDE7CisjZW5kaWYKICAgICBib29sIG1fYWxs
b3dzTmV3RGVjbHMgOiAxOwogICAgIGJvb2wgbV9zdHJpY3RNb2RlIDogMTsKICAgICBib29sIG1f
aXNGdW5jdGlvbiA6IDE7CkBAIC03MzksOCArNzUzLDggQEAgcHJpdmF0ZToKICAgICBlbnVtIFNw
cmVhZE1vZGUgeyBBbGxvd1NwcmVhZCwgRG9udEFsbG93U3ByZWFkIH07CiAgICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVBcmd1bWVudHMgcGFyc2VBcmd1
bWVudHMoVHJlZUJ1aWxkZXImLCBTcHJlYWRNb2RlKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBwYXJzZVByb3BlcnR5KFRyZWVCdWlsZGVyJiwgYm9vbCBz
dHJpY3QpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IHBh
cnNlR2V0dGVyU2V0dGVyKFRyZWVCdWlsZGVyJiwgYm9vbCBzdHJpY3QsIFByb3BlcnR5Tm9kZTo6
VHlwZSwgdW5zaWduZWQgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCk7Ci0gICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5jdGlvbkJvZHkgcGFyc2VG
dW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVQcm9wZXJ0eSBwYXJzZUdldHRlclNldHRlcihUcmVlQnVpbGRlciYsIGJvb2wgc3Ry
aWN0LCBQcm9wZXJ0eU5vZGU6OlR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZz
ZXQsIGJvb2wgaXNNZXRob2QgPSBmYWxzZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5jdGlvbkJvZHkgcGFyc2VGdW5jdGlvbkJvZHkoVHJl
ZUJ1aWxkZXImLCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCk7CiAgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHBhcnNl
Rm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYpOwogICAgIGVudW0gVmFyRGVjbGFyYXRpb25M
aXN0Q29udGV4dCB7IEZvckxvb3BDb250ZXh0LCBWYXJEZWNsYXJhdGlvbkNvbnRleHQgfTsKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIHBhcnNlVmFyRGVj
bGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiwgaW50JiBkZWNsYXJhdGlvbnMsIFRyZWVEZWNvbnN0
cnVjdGlvblBhdHRlcm4mIGxhc3RQYXR0ZXJuLCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxp
emVyLCBKU1RleHRQb3NpdGlvbiYgaWRlbnRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGluaXRTdGFy
dCwgSlNUZXh0UG9zaXRpb24mIGluaXRFbmQsIFZhckRlY2xhcmF0aW9uTGlzdENvbnRleHQpOwpA
QCAtNzUwLDcgKzc2NCw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBORVZFUl9JTkxJTkUgVHJlZURlY29uc3RydWN0aW9uUGF0dGVybiBwYXJzZURlY29uc3Ry
dWN0aW9uUGF0dGVybihUcmVlQnVpbGRlciYsIERlY29uc3RydWN0aW9uS2luZCwgaW50IGRlcHRo
ID0gMCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgVHJl
ZURlY29uc3RydWN0aW9uUGF0dGVybiB0cnlQYXJzZURlY29uc3RydWN0aW9uUGF0dGVybkV4cHJl
c3Npb24oVHJlZUJ1aWxkZXImKTsKIAotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
TkVWRVJfSU5MSU5FIGJvb2wgcGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImLCBGdW5jdGlv
blJlcXVpcmVtZW50cywgRnVuY3Rpb25QYXJzZU1vZGUsIGJvb2wgbmFtZUlzSW5Db250YWluaW5n
U2NvcGUsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mKTsKKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRy
ZWVCdWlsZGVyJiwgRnVuY3Rpb25SZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlLCBib29s
IG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCwgUGFyc2Vy
RnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYpOwogI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVDbGFz
c0V4cHJlc3Npb24gcGFyc2VDbGFzcyhUcmVlQnVpbGRlciYsIEZ1bmN0aW9uUmVxdWlyZW1lbnRz
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXJNb2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCmlu
ZGV4IDA2MTFiODhlNzBjZWE2NThjYzgzNTI3OGNiNDY3MGZhMjExYmUxMTcuLmJiYjBmOGNmMmRl
MTUzYWNkZGRkYzM2MTI4MWNiY2QxZjYyMDdiMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlck1vZGVzLmgKQEAgLTMzLDYgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGVudW0gSlNQYXJzZXJTdHJpY3RuZXNzIHsgSlNQYXJzZU5vcm1hbCwgSlNQYXJzZUJ1aWx0aW4s
IEpTUGFyc2VTdHJpY3QgfTsKIGVudW0gSlNQYXJzZXJNb2RlIHsgSlNQYXJzZVByb2dyYW1Db2Rl
LCBKU1BhcnNlRnVuY3Rpb25Db2RlIH07CitlbnVtIGNsYXNzIEpTUGFyc2VyQ29uc3RydWN0b3JL
aW5kIHsgQmFzZSwgRGVyaXZlZCB9OwogCiBlbnVtIFByb2ZpbGVyTW9kZSB7IFByb2ZpbGVyT2Zm
LCBQcm9maWxlck9uIH07CiBlbnVtIERlYnVnZ2VyTW9kZSB7IERlYnVnZ2VyT2ZmLCBEZWJ1Z2dl
ck9uIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENo
ZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCmlu
ZGV4IDU4ODRmYjI4MmU3NTYxYTY1ODZkMGY2ZTFkYTU5MTUxYjhkNTRhNDcuLmI4N2NlY2E2MWY3
MWVhODA0ZjhmYWI2MzU4NTFlZDEyYzIzMjAzMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCkBAIC03Myw3ICs3MywxMCBAQCBwdWJsaWM6CiAgICAg
ZW51bSB7IE5vbmVFeHByID0gMCwKICAgICAgICAgUmVzb2x2ZUV2YWxFeHByLCBSZXNvbHZlRXhw
ciwgSW50ZWdlckV4cHIsIERvdWJsZUV4cHIsIFN0cmluZ0V4cHIsCiAgICAgICAgIFRoaXNFeHBy
LCBOdWxsRXhwciwgQm9vbEV4cHIsIFJlZ0V4cEV4cHIsIE9iamVjdExpdGVyYWxFeHByLAotICAg
ICAgICBGdW5jdGlvbkV4cHIsIENsYXNzRXhwciwgQnJhY2tldEV4cHIsIERvdEV4cHIsIENhbGxF
eHByLAorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICBDbGFzc0V4cHIsIFN1
cGVyRXhwciwgU3VwZXJCcmFja2V0RXhwciwgU3VwZXJEb3RFeHByLAorI2VuZGlmCisgICAgICAg
IEZ1bmN0aW9uRXhwciwgQnJhY2tldEV4cHIsIERvdEV4cHIsIENhbGxFeHByLAogICAgICAgICBO
ZXdFeHByLCBQcmVFeHByLCBQb3N0RXhwciwgVW5hcnlFeHByLCBCaW5hcnlFeHByLAogICAgICAg
ICBDb25kaXRpb25hbEV4cHIsIEFzc2lnbm1lbnRFeHByLCBUeXBlb2ZFeHByLAogICAgICAgICBE
ZWxldGVFeHByLCBBcnJheUxpdGVyYWxFeHByLCBCaW5kaW5nRGVjb25zdHJ1Y3Rpb24sCkBAIC0x
NDYsNiArMTQ5LDkgQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVVuYXJ5UGx1
cyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlF
eHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlVm9pZChjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhwcmVzc2lv
blR5cGUgdGhpc0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gVGhpc0V4cHI7
IH0KKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBFeHByZXNzaW9uVHlwZSBzdXBl
ckV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gU3VwZXJFeHByOyB9CisjZW5k
aWYKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQpIHsgcmV0dXJuIFJlc29sdmVFeHByOyB9CiAgICAg
RXhwcmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24m
KSB7IHJldHVybiBPYmplY3RMaXRlcmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50KSB7IHJldHVybiBPYmpl
Y3RMaXRlcmFsRXhwcjsgfQpAQCAtMTY4LDE0ICsxNzQsMTQgQEAgcHVibGljOgogICAgIENsYXNz
RXhwcmVzc2lvbiBjcmVhdGVDbGFzc0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgUHJvcGVydHlMaXN0
LCBQcm9wZXJ0eUxpc3QpIHsgcmV0dXJuIENsYXNzRXhwcjsgfQogI2VuZGlmCiAgICAgRXhwcmVz
c2lvblR5cGUgY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0
IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIGludCkgeyByZXR1cm4gRnVuY3Rp
b25FeHByOyB9Ci0gICAgaW50IGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgYm9vbCkgeyByZXR1cm4gRnVu
Y3Rpb25Cb2R5UmVzdWx0OyB9CisgICAgaW50IGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgYm9vbCwgSlNQ
YXJzZXJDb25zdHJ1Y3RvcktpbmQpIHsgcmV0dXJuIEZ1bmN0aW9uQm9keVJlc3VsdDsgfQogICAg
IHZvaWQgc2V0RnVuY3Rpb25OYW1lU3RhcnQoaW50LCBpbnQpIHsgfQogICAgIGludCBjcmVhdGVB
cmd1bWVudHMoKSB7IHJldHVybiBBcmd1bWVudHNSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlQXJn
dW1lbnRzKGludCkgeyByZXR1cm4gQXJndW1lbnRzUmVzdWx0OyB9CiAgICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlU3ByZWFkRXhwcmVzc2lvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uVHlwZSwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gU3ByZWFkRXhwcjsgfQogICAgIGludCBj
cmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4g
QXJndW1lbnRzTGlzdFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50KSB7IHJldHVybiBBcmd1bWVudHNMaXN0UmVzdWx0
OyB9Ci0gICAgUHJvcGVydHkgY3JlYXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciogbmFtZSwg
aW50LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBjb21wbGV0ZSkKKyAgICBQcm9wZXJ0
eSBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBpbnQsIFByb3BlcnR5Tm9k
ZTo6VHlwZSB0eXBlLCBib29sIGNvbXBsZXRlLCBib29sID0gZmFsc2UpCiAgICAgewogICAgICAg
ICBpZiAoIWNvbXBsZXRlKQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwpAQCAt
MjMwLDE0ICsyMzYsMTQgQEAgcHVibGljOgogICAgIGludCBjcmVhdGVEZWJ1Z2dlcihjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAg
ICAgaW50IGNyZWF0ZUNvbnN0U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwg
aW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGludCBhcHBlbmRDb25z
dERlY2woY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBjb25zdCBJZGVudGlmaWVyKiwgaW50
KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KLSAgICBQcm9wZXJ0eSBjcmVhdGVHZXR0ZXJP
clNldHRlclByb3BlcnR5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3BlcnR5Tm9kZTo6VHlw
ZSB0eXBlLCBib29sIHN0cmljdCwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgY29uc3QgUGFyc2Vy
RnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgdW5zaWduZWQpCisgICAgUHJvcGVydHkgY3Jl
YXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0
eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBzdHJpY3QsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGNv
bnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIHVuc2lnbmVkLCBib29sKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG5hbWUpOwogICAgICAgICBpZiAoIXN0cmljdCkKICAgICAg
ICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKICAgICAgICAgcmV0dXJuIFByb3BlcnR5KG5h
bWUsIHR5cGUpOwogICAgIH0KLSAgICBQcm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3Bl
cnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBzdHJpY3QsIGRvdWJsZSBuYW1lLCBj
b25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCB1bnNpZ25lZCkKKyAgICBQ
cm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEm
IHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUg
dHlwZSwgYm9vbCBzdHJpY3QsIGRvdWJsZSBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88
U3ludGF4Q2hlY2tlcj4mLCB1bnNpZ25lZCwgYm9vbCkKICAgICB7CiAgICAgICAgIGlmICghc3Ry
aWN0KQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKaW5kZXggZjExMTc3M2Yx
MDU1NzQ5ODFlOTY4NzdjNDc5M2U0ZTk1YWRiNTg1OC4uZmJlMzU4MzYwNmI5MDViMGZiODA5ZjQ0
OTcxZWIzNWNmMzYyNjNkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC0yNTMsNyArMjUzLDggQEAKICAgICBtYWNybyhpc0Zp
bml0ZSkgXAogICAgIG1hY3JvKFR5cGVFcnJvcikgXAogICAgIG1hY3JvKHVuZGVmaW5lZCkgXAot
ICAgIG1hY3JvKEJ1aWx0aW5Mb2cpCisgICAgbWFjcm8oQnVpbHRpbkxvZykgXAorICAgIG1hY3Jv
KGhvbWVPYmplY3QpCiAKIG5hbWVzcGFjZSBKU0MgewogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCmluZGV4IDcxNDkxZGE0ZjBkYzg4NzM0NGMzYTY4ODc4
Y2Y5NjE5MmJlM2E4ODguLjcyNDI5NTNjOTRiYWZlMzA4NGM4Mjg5YTEwMzBkM2I0NTU5YWE3MjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTQ2Nyw3
ICs0NjcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyQ29kZSgpOwogCi0gICAgRXhlY3V0
YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhu
ZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxz
ZSk7IH0KKyAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJu
IEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1v
ZGUoKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7IH0KIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxl
cygpIHsgcmV0dXJuIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLT5udW1WYXJpYWJsZXMoKTsgfQog
ICAgIHVuc2lnbmVkIG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fdW5saW5rZWRF
dmFsQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsgfQpAQCAtNTIyLDcgKzUyMiw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXJDb2RlKCk7CiAKLSAgICBFeGVjdXRhYmxlSW5m
byBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0
aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlKTsgfQor
ICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0
YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBm
YWxzZSwgZmFsc2UsIGZhbHNlKTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBTY3Jp
cHRFeGVjdXRhYmxlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGYzNDBmNzU5NDU3NTljYmM1ODI5MDQ1ODA2N2E2NzBiNDg1
OGU2NzcuLjY1ZjNlMWFlNTgyNzliMTVlMTMxNTg4NTRjNDJiNTdmZDE3YmJjMjMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMCBAQAorMjAxNS0wMy0wNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KKworICAgICAgICBTdXBwb3J0IGV4dGVuZHMgYW5kIHN1cGVyIGtleXdvcmRzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIyMDAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0cyBmb3Ig
ImV4dGVuZHMiIGFuZCAic3VwZXIiIGtleXdvcmRzLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0
aW9uczoKKyAgICAgICAgKiBqcy9jbGFzcy1zeW50YXgtZXh0ZW5kcy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGpzL2NsYXNzLXN5bnRheC1leHRlbmRzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGpzL2NsYXNzLXN5bnRheC1zdXBlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGpzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9zY3Jp
cHQtdGVzdHMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3Nj
cmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtc3VwZXIuanM6IEFkZGVkLgorCiAyMDE1LTAzLTA0ICBK
b3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogQXJyYXkvQ29sbGVjdGlvbiBTaXplcyBzaG91bGQgYmUgdmlzaWJsZSBhbmQgZGlzdGlu
Y3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGI4ZWZiZGRhY2RkNDUxOTk4NGM5NmVmZTZlZWQ4MTE0
NjE0MGY1ZjcuLjVhZjEwMjQ1MDZkMTk1OTM3YmQ2MDVlNjk4YzlkNTcwZTBhYzA4YjIgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvVGVz
dEV4cGVjdGF0aW9ucwpAQCAtNjksNiArNjksOCBAQCB3ZWJraXQub3JnL2IvMTI3ODYwIFsgRGVi
dWcgXSBqcy9mdW5jdGlvbi1hcHBseS1hbGlhc2VkLmh0bWwgWyBTa2lwIF0KICMgRVM2IGNsYXNz
IHN5bnRheCBoYXNuJ3QgYmVlbiBlbmFibGVkIHlldC4KIHdlYmtpdC5vcmcvYi8xNDA0OTEganMv
Y2xhc3Mtc3ludGF4LWRlY2xhcmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8x
NDA0OTEganMvY2xhc3Mtc3ludGF4LWV4cHJlc3Npb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzE0MDQ5MSBqcy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMTQwNDkxIGpzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sIFsgRmFpbHVyZSBd
CiAKICMgVGhpcyB0ZXN0IHZlcmlmaWVzIGR5bmFtaWMgbWFuaXB1bGF0aW9uIG9mIHRoZSBtcm9v
dCBhbmQgbXNxcnQgZWxlbWVudHMuCiBtYXRobWwvcm9vdHMtcmVtb3ZlQ2hpbGQuaHRtbCBbIElt
YWdlT25seUZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4
LWV4dGVuZHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LWV4dGVu
ZHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwNTRiZWYyZDgzYWI5ZGExZWM3ZWJlNjc0ODZh
MDAzNmQ2NDc4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50
YXgtZXh0ZW5kcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMSBAQAorVGVzdHMgZm9yIEVTNiBj
bGFzcyBzeW50YXggImV4dGVuZHMiCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIChuZXcgQmFzZSkgaW5zdGFuY2VvZiBCYXNlIGlzIHRydWUKK1BBU1MgKG5ldyBEZXJpdmVk
KSBpbnN0YW5jZW9mIERlcml2ZWQgaXMgdHJ1ZQorUEFTUyAobmV3IERlcml2ZWQpLmJhc2VNZXRo
b2QoKSBpcyAiYmFzZSIKK1BBU1MgKG5ldyBEZXJpdmVkKS5vdmVycmlkZW5NZXRob2QoKSBpcyAi
ZGVyaXZlZCIKK1BBU1MgRGVyaXZlZC5zdGF0aWNCYXNlTWV0aG9kKCkgaXMgImJhc2UiCitQQVNT
IERlcml2ZWQuc3RhdGljT3ZlcnJpZGVuTWV0aG9kKCkgaXMgImRlcml2ZWQiCitQQVNTIHggPSBj
bGFzcyBleHRlbmRzIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQg
b2Ygc2NyaXB0LgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyB0aHJldyBleGNlcHRpb24gU3ludGF4
RXJyb3I6IFVuZXhwZWN0ZWQgZW5kIG9mIHNjcmlwdC4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMg
QmFzZSB7IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQgb2Ygc2Ny
aXB0LgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHt9IHRocmV3IGV4Y2VwdGlvbiBTeW50
YXhFcnJvcjogQ2xhc3MgZGVjbGFyYXRpb24gd2l0aG91dCBhIGNvbnN0cnVjdG9yIGlzIG5vdCBz
dXBwb3J0ZWQgeWV0Li4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9y
KCkgeyB9IH0gZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHguX19wcm90b19fIGlzIEJh
c2UKK1BBU1MgeC5wcm90b3R5cGUuX19wcm90b19fIGlzIEJhc2UucHJvdG90eXBlCitQQVNTIHgg
PSBjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXyBp
cyBGdW5jdGlvbi5wcm90b3R5cGUKK1BBU1MgeC5fX3Byb3RvX18gaXMgRnVuY3Rpb24ucHJvdG90
eXBlCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIDMgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9f
cHJvdG9fXyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcyBpcyBub3Qg
YW4gb2JqZWN0Li4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgImFiYyIgeyBjb25zdHJ1Y3Rvcigp
IHsgfSB9OyB4Ll9fcHJvdG9fXyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJj
bGFzcyBpcyBub3QgYW4gb2JqZWN0Li4KK2Jhc2VXaXRoQmFkUHJvdG90eXBlID0gY2xhc3MgeyBj
b25zdHJ1Y3RvcigpIHsgfSB9OyBiYXNlV2l0aEJhZFByb3RvdHlwZS5wcm90b3R5cGUgPSAzCitQ
QVNTIHggPSBjbGFzcyBleHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3Io
KSB7IH0gfSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcydzIHByb3Rv
dHlwZSBpcyBub3QgYW4gb2JqZWN0Li4KK2Jhc2VXaXRoQmFkUHJvdG90eXBlLnByb3RvdHlwZSA9
ICJhYmMiCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29u
c3RydWN0b3IoKSB7IH0gfSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFz
cydzIHByb3RvdHlwZSBpcyBub3QgYW4gb2JqZWN0Li4KK1BBU1MgYmFzZVdpdGhCYWRQcm90b3R5
cGUucHJvdG90eXBlID0gbnVsbDsgeCA9IGNsYXNzIGV4dGVuZHMgYmFzZVdpdGhCYWRQcm90b3R5
cGUgeyBjb25zdHJ1Y3RvcigpIHsgfSB9IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1leHRlbmRzLmh0bWwgYi9MYXlvdXRUZXN0cy9q
cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5MDA2YzUyNDA3NWZhNDY2
MDBlMWYzM2YxYWRkZDgxMDBkZGViNmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9q
cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5odG1sCkBAIC0wLDAgKzEsOCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NsYXNzLXN5bnRheC1l
eHRlbmRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9j
bGFzcy1zeW50YXgtc3VwZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjNGFhNjExMzBlYjM0
YTNkNjgyZTgxMDliOTRkY2UyZDQ0MzkwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9jbGFzcy1zeW50YXgtc3VwZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDAgQEAKK1Rl
c3RzIGZvciBFUzYgY2xhc3Mgc3ludGF4ICJzdXBlciIKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgKG5ldyBCYXNlKSBpbnN0YW5jZW9mIEJhc2UgaXMgdHJ1ZQorUEFTUyAo
bmV3IERlcml2ZWQpIGluc3RhbmNlb2YgRGVyaXZlZCBpcyB0cnVlCitQQVNTIChuZXcgRGVyaXZl
ZCkuY2FsbEJhc2VNZXRob2QoKSBpcyBiYXNlTWV0aG9kVmFsdWUKK1BBU1MgeCA9IChuZXcgRGVy
aXZlZCkuY2FsbEJhc2VNZXRob2Q7IHgoKSBpcyBiYXNlTWV0aG9kVmFsdWUKK1BBU1MgKG5ldyBE
ZXJpdmVkKS5jYWxsQmFzZU1ldGhvZEluR2V0dGVyIGlzIGJhc2VNZXRob2RWYWx1ZQorUEFTUyAo
bmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kSW5TZXR0ZXIgPSAxOyB2YWx1ZUluU2V0dGVyIGlz
IGJhc2VNZXRob2RWYWx1ZQorUEFTUyAobmV3IERlcml2ZWQpLmJhc2VNZXRob2RJbkdldHRlclNl
dHRlciBpcyAobmV3IEJhc2UpLmJhc2VNZXRob2QKK1BBU1MgKG5ldyBEZXJpdmVkKS5iYXNlTWV0
aG9kSW5HZXR0ZXJTZXR0ZXIgPSAxOyB2YWx1ZUluU2V0dGVyIGlzIChuZXcgQmFzZSkuYmFzZU1l
dGhvZAorUEFTUyBEZXJpdmVkLnN0YXRpY01ldGhvZCgpIGlzICJiYXNlMyIKK1BBU1MgKG5ldyBT
ZWNvbmREZXJpdmVkKS5jaGFpbk1ldGhvZCgpIGlzIFsiYmFzZSIsICJkZXJpdmVkIiwgInNlY29u
ZERlcml2ZWQiXQorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7
IHN1cGVyKCk7IH0gc3VwZXIoKSB7fSB9IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5l
eHBlY3RlZCBrZXl3b3JkICdzdXBlcicuIEV4cGVjdGVkIGFuIGluZGVudGlmaWVyLi4KK1BBU1Mg
eCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IG1ldGhv
ZCgpIHsgc3VwZXIoKSB9IH0gdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBDYW5ub3QgY2Fs
bCBzdXBlcigpIG91dHNpZGUgb2YgYSBjbGFzcyBjb25zdHJ1Y3Rvci4uCitQQVNTIHggPSBjbGFz
cyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBtZXRob2QoKSB7IHN1
cGVyIH0gfSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IENhbm5vdCByZWZlcmVuY2Ugc3Vw
ZXIuLgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVy
KCk7IH0gbWV0aG9kKCkgeyByZXR1cm4gbmV3IHN1cGVyIH0gfSBkaWQgbm90IHRocm93IGV4Y2Vw
dGlvbi4KK1BBU1MgKG5ldyB4KS5tZXRob2QoKSBpbnN0YW5jZW9mIEJhc2UgaXMgdHJ1ZQorUEFT
UyAobmV3IHgpLm1ldGhvZCgpIGluc3RhbmNlb2YgeCBpcyBmYWxzZQorUEFTUyB4ID0gY2xhc3Mg
ZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kMSgpIHsgZGVs
ZXRlIChzdXBlci5mb28pIH0gbWV0aG9kMigpIHsgZGVsZXRlIHN1cGVyWyJmb28iXSB9IH0gZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIChuZXcgeCkubWV0aG9kMSgpIHRocmV3IGV4Y2Vw
dGlvbiBSZWZlcmVuY2VFcnJvcjogQ2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5LgorUEFT
UyAobmV3IHgpLm1ldGhvZDIoKSB0aHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENhbm5v
dCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eS4KK1BBU1MgbmV3IChjbGFzcyB7IGNvbnN0cnVjdG9y
KCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IH0pIGluc3RhbmNlb2YgT2JqZWN0IGlzIHRydWUKK1BB
U1MgbmV3IChjbGFzcyB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gMTsgfSB9KSBpbnN0YW5jZW9m
IE9iamVjdCBpcyB0cnVlCitQQVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0
b3IoKSB7IHJldHVybiB1bmRlZmluZWQgfSB9KSBpcyB1bmRlZmluZWQKK1BBU1MgeCA9IHsgfTsg
bmV3IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9KTsg
aXMgeAorUEFTUyB4IGluc3RhbmNlb2YgQmFzZSBpcyBmYWxzZQorUEFTUyBuZXcgKGNsYXNzIGV4
dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IENhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9m
IGEgZGVyaXZlZCBjbGFzcy4uCitQQVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3Ry
dWN0b3IoKSB7IHJldHVybiAxOyB9IH0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5v
dCByZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZl
ZCBjbGFzcy4uCitQQVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0b3IoKSB7
IHJldHVybiB1bmRlZmluZWQgfSB9KSBpcyB1bmRlZmluZWQKK1BBU1MgeCA9IHsgfTsgbmV3IChj
bGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9KTsgaXMgeAor
UEFTUyB4IGluc3RhbmNlb2YgT2JqZWN0IGlzIHRydWUKK1BBU1MgbmV3IChjbGFzcyBleHRlbmRz
IG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBD
YW5ub3QgcmV0dXJuIGEgbm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRl
cml2ZWQgY2xhc3MuLgorUEFTUyBuZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9y
KCkgeyByZXR1cm4gMTsgfSB9KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW5ub3QgcmV0
dXJuIGEgbm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xh
c3MuLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sIGIvTGF5
b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LXN1cGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWNhMTg4NzNl
MTUzNzdkYmRlN2MxMDBhMDQ1NGY3MWU2MTI0Y2UxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sCkBAIC0wLDAgKzEsOCBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NsYXNzLXN5
bnRheC1zdXBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuanMgYi9MYXlvdXRU
ZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODc3Njk0MDE3MDc2MDk5MTc0NmQ3YjIyMGNmNjBlODFhYjFkZDRiNwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5qcwpA
QCAtMCwwICsxLDQzIEBACisvL0Agc2tpcAorCitkZXNjcmlwdGlvbignVGVzdHMgZm9yIEVTNiBj
bGFzcyBzeW50YXggImV4dGVuZHMiJyk7CisKK2NsYXNzIEJhc2UgeworICAgIGNvbnN0cnVjdG9y
KCkgeyB9CisgICAgYmFzZU1ldGhvZCgpIHsgcmV0dXJuICdiYXNlJzsgfQorICAgIG92ZXJyaWRl
bk1ldGhvZCgpIHsgcmV0dXJuICdiYXNlJzsgfQorICAgIHN0YXRpYyBzdGF0aWNCYXNlTWV0aG9k
KCkgeyByZXR1cm4gJ2Jhc2UnOyB9CisgICAgc3RhdGljIHN0YXRpY092ZXJyaWRlbk1ldGhvZCgp
IHsgcmV0dXJuICdiYXNlJzsgfQorfQorCitjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7Cisg
ICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0KKyAgICBvdmVycmlkZW5NZXRob2QoKSB7IHJl
dHVybiAnZGVyaXZlZCc7IH0KKyAgICBzdGF0aWMgc3RhdGljT3ZlcnJpZGVuTWV0aG9kKCkgeyBy
ZXR1cm4gJ2Rlcml2ZWQnOyB9Cit9CisKK3Nob3VsZEJlVHJ1ZSgnKG5ldyBCYXNlKSBpbnN0YW5j
ZW9mIEJhc2UnKTsKK3Nob3VsZEJlVHJ1ZSgnKG5ldyBEZXJpdmVkKSBpbnN0YW5jZW9mIERlcml2
ZWQnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmJhc2VNZXRob2QoKScsICciYmFzZSInKTsK
K3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLm92ZXJyaWRlbk1ldGhvZCgpJywgJyJkZXJpdmVkIicp
Oworc2hvdWxkQmUoJ0Rlcml2ZWQuc3RhdGljQmFzZU1ldGhvZCgpJywgJyJiYXNlIicpOworc2hv
dWxkQmUoJ0Rlcml2ZWQuc3RhdGljT3ZlcnJpZGVuTWV0aG9kKCknLCAnImRlcml2ZWQiJyk7CisK
K3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcycsICciU3ludGF4RXJyb3I6IFVuZXhwZWN0
ZWQgZW5kIG9mIHNjcmlwdCInKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcycsICci
U3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgZW5kIG9mIHNjcmlwdCInKTsKK3Nob3VsZFRocm93KCd4
ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsnLCAnIlN5bnRheEVycm9yOiBVbmV4cGVjdGVkIGVuZCBv
ZiBzY3JpcHQiJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7fScsICci
U3ludGF4RXJyb3I6IENsYXNzIGRlY2xhcmF0aW9uIHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBpcyBu
b3Qgc3VwcG9ydGVkIHlldC4iJyk7CitzaG91bGROb3RUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMg
QmFzZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0nKTsKK3Nob3VsZEJlKCd4Ll9fcHJvdG9fXycsICdC
YXNlJyk7CitzaG91bGRCZSgneC5wcm90b3R5cGUuX19wcm90b19fJywgJ0Jhc2UucHJvdG90eXBl
Jyk7CitzaG91bGRCZSgneCA9IGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyB9
IH07IHguX19wcm90b19fJywgJ0Z1bmN0aW9uLnByb3RvdHlwZScpOworc2hvdWxkQmUoJ3guX19w
cm90b19fJywgJ0Z1bmN0aW9uLnByb3RvdHlwZScpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBl
eHRlbmRzIDMgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXycsICciVHlwZUVycm9y
OiBUaGUgc3VwZXJjbGFzcyBpcyBub3QgYW4gb2JqZWN0LiInKTsKK3Nob3VsZFRocm93KCd4ID0g
Y2xhc3MgZXh0ZW5kcyAiYWJjIiB7IGNvbnN0cnVjdG9yKCkgeyB9IH07IHguX19wcm90b19fJywg
JyJUeXBlRXJyb3I6IFRoZSBzdXBlcmNsYXNzIGlzIG5vdCBhbiBvYmplY3QuIicpOworZXZhbEFu
ZExvZygnYmFzZVdpdGhCYWRQcm90b3R5cGUgPSBjbGFzcyB7IGNvbnN0cnVjdG9yKCkgeyB9IH07
IGJhc2VXaXRoQmFkUHJvdG90eXBlLnByb3RvdHlwZSA9IDMnKTsKK3Nob3VsZFRocm93KCd4ID0g
Y2xhc3MgZXh0ZW5kcyBiYXNlV2l0aEJhZFByb3RvdHlwZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0n
LCAnIlR5cGVFcnJvcjogVGhlIHN1cGVyY2xhc3NcJ3MgcHJvdG90eXBlIGlzIG5vdCBhbiBvYmpl
Y3QuIicpOworZXZhbEFuZExvZygnYmFzZVdpdGhCYWRQcm90b3R5cGUucHJvdG90eXBlID0gImFi
YyInKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBiYXNlV2l0aEJhZFByb3RvdHlw
ZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0nLCAnIlR5cGVFcnJvcjogVGhlIHN1cGVyY2xhc3NcJ3Mg
cHJvdG90eXBlIGlzIG5vdCBhbiBvYmplY3QuIicpOworc2hvdWxkTm90VGhyb3coJ2Jhc2VXaXRo
QmFkUHJvdG90eXBlLnByb3RvdHlwZSA9IG51bGw7IHggPSBjbGFzcyBleHRlbmRzIGJhc2VXaXRo
QmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3IoKSB7IH0gfScpOworCit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9j
bGFzcy1zeW50YXgtc3VwZXIuanMgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2xhc3Mt
c3ludGF4LXN1cGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjNWUyODBmZTU4YjJiNjk4MTA5ZjU2OTUxMzRm
MzYxYTg4ZjE5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVz
dHMvY2xhc3Mtc3ludGF4LXN1cGVyLmpzCkBAIC0wLDAgKzEsNjQgQEAKKy8vQCBza2lwCisKK2Rl
c2NyaXB0aW9uKCdUZXN0cyBmb3IgRVM2IGNsYXNzIHN5bnRheCAic3VwZXIiJyk7CisKK3ZhciBi
YXNlTWV0aG9kVmFsdWUgPSB7fTsKK3ZhciB2YWx1ZUluU2V0dGVyID0gbnVsbDsKKworY2xhc3Mg
QmFzZSB7CisgICAgY29uc3RydWN0b3IoKSB7IH0KKyAgICBiYXNlTWV0aG9kKCkgeyByZXR1cm4g
YmFzZU1ldGhvZFZhbHVlOyB9CisgICAgY2hhaW5NZXRob2QoKSB7IHJldHVybiAnYmFzZSc7IH0K
KyAgICBzdGF0aWMgc3RhdGljTWV0aG9kKCkgeyByZXR1cm4gJ2Jhc2UzJzsgfQorfQorCitjbGFz
cyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0K
KyAgICBjaGFpbk1ldGhvZCgpIHsgcmV0dXJuIFtzdXBlci5jaGFpbk1ldGhvZCgpLCAnZGVyaXZl
ZCddOyB9CisgICAgY2FsbEJhc2VNZXRob2QoKSB7IHJldHVybiBzdXBlci5iYXNlTWV0aG9kKCk7
IH0KKyAgICBnZXQgY2FsbEJhc2VNZXRob2RJbkdldHRlcigpIHsgcmV0dXJuIHN1cGVyWydiYXNl
TWV0aG9kJ10oKTsgfQorICAgIHNldCBjYWxsQmFzZU1ldGhvZEluU2V0dGVyKCkgeyB3aW5kb3cu
dmFsdWVJblNldHRlciA9IHN1cGVyLmJhc2VNZXRob2QoKTsgfQorICAgIGdldCBiYXNlTWV0aG9k
SW5HZXR0ZXJTZXR0ZXIoKSB7IHJldHVybiBzdXBlci5iYXNlTWV0aG9kOyB9CisgICAgc2V0IGJh
c2VNZXRob2RJbkdldHRlclNldHRlcigpIHsgd2luZG93LnZhbHVlSW5TZXR0ZXIgPSBzdXBlclsn
YmFzZU1ldGhvZCddOyB9CisgICAgc3RhdGljIHN0YXRpY01ldGhvZCgpIHsgcmV0dXJuIHN1cGVy
LnN0YXRpY01ldGhvZCgpOyB9Cit9CisKK2NsYXNzIFNlY29uZERlcml2ZWQgZXh0ZW5kcyBEZXJp
dmVkIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfQorICAgIGNoYWluTWV0aG9kKCkg
eyByZXR1cm4gc3VwZXIuY2hhaW5NZXRob2QoKS5jb25jYXQoWydzZWNvbmREZXJpdmVkJ10pOyB9
Cit9CisKK3Nob3VsZEJlVHJ1ZSgnKG5ldyBCYXNlKSBpbnN0YW5jZW9mIEJhc2UnKTsKK3Nob3Vs
ZEJlVHJ1ZSgnKG5ldyBEZXJpdmVkKSBpbnN0YW5jZW9mIERlcml2ZWQnKTsKK3Nob3VsZEJlKCco
bmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kKCknLCAnYmFzZU1ldGhvZFZhbHVlJyk7CitzaG91
bGRCZSgneCA9IChuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRob2Q7IHgoKScsICdiYXNlTWV0aG9k
VmFsdWUnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kSW5HZXR0ZXIn
LCAnYmFzZU1ldGhvZFZhbHVlJyk7CitzaG91bGRCZSgnKG5ldyBEZXJpdmVkKS5jYWxsQmFzZU1l
dGhvZEluU2V0dGVyID0gMTsgdmFsdWVJblNldHRlcicsICdiYXNlTWV0aG9kVmFsdWUnKTsKK3No
b3VsZEJlKCcobmV3IERlcml2ZWQpLmJhc2VNZXRob2RJbkdldHRlclNldHRlcicsICcobmV3IEJh
c2UpLmJhc2VNZXRob2QnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmJhc2VNZXRob2RJbkdl
dHRlclNldHRlciA9IDE7IHZhbHVlSW5TZXR0ZXInLCAnKG5ldyBCYXNlKS5iYXNlTWV0aG9kJyk7
CitzaG91bGRCZSgnRGVyaXZlZC5zdGF0aWNNZXRob2QoKScsICciYmFzZTMiJyk7CitzaG91bGRC
ZSgnKG5ldyBTZWNvbmREZXJpdmVkKS5jaGFpbk1ldGhvZCgpJywgJ1siYmFzZSIsICJkZXJpdmVk
IiwgInNlY29uZERlcml2ZWQiXScpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJh
c2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBzdXBlcigpIHt9IH0nLCAnIlN5bnRheEVy
cm9yOiBVbmV4cGVjdGVkIGtleXdvcmQgXCdzdXBlclwnLiBFeHBlY3RlZCBhbiBpbmRlbnRpZmll
ci4iJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9y
KCkgeyBzdXBlcigpOyB9IG1ldGhvZCgpIHsgc3VwZXIoKSB9IH0nLAorICAgICciU3ludGF4RXJy
b3I6IENhbm5vdCBjYWxsIHN1cGVyKCkgb3V0c2lkZSBvZiBhIGNsYXNzIGNvbnN0cnVjdG9yLiIn
KTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7
IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyBzdXBlciB9IH0nLCAnIlN5bnRheEVycm9yOiBDYW5ub3Qg
cmVmZXJlbmNlIHN1cGVyLiInKTsKK3Nob3VsZE5vdFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBC
YXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyByZXR1cm4gbmV3IHN1
cGVyIH0gfScpOworc2hvdWxkQmVUcnVlKCcobmV3IHgpLm1ldGhvZCgpIGluc3RhbmNlb2YgQmFz
ZScpOworc2hvdWxkQmVGYWxzZSgnKG5ldyB4KS5tZXRob2QoKSBpbnN0YW5jZW9mIHgnKTsKK3No
b3VsZE5vdFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1
cGVyKCk7IH0gbWV0aG9kMSgpIHsgZGVsZXRlIChzdXBlci5mb28pIH0gbWV0aG9kMigpIHsgZGVs
ZXRlIHN1cGVyWyJmb28iXSB9IH0nKTsKK3Nob3VsZFRocm93KCcobmV3IHgpLm1ldGhvZDEoKScs
ICciUmVmZXJlbmNlRXJyb3I6IENhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSInKTsKK3No
b3VsZFRocm93KCcobmV3IHgpLm1ldGhvZDIoKScsICciUmVmZXJlbmNlRXJyb3I6IENhbm5vdCBk
ZWxldGUgYSBzdXBlciBwcm9wZXJ0eSInKTsKK3Nob3VsZEJlVHJ1ZSgnbmV3IChjbGFzcyB7IGNv
bnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IH0pIGluc3RhbmNlb2YgT2JqZWN0Jyk7
CitzaG91bGRCZVRydWUoJ25ldyAoY2xhc3MgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIDE7IH0g
fSkgaW5zdGFuY2VvZiBPYmplY3QnKTsKK3Nob3VsZEJlKCduZXcgKGNsYXNzIGV4dGVuZHMgQmFz
ZSB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkIH0gfSknLCAndW5kZWZpbmVkJyk7
CitzaG91bGRCZSgneCA9IHsgfTsgbmV3IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3Rv
cigpIHsgcmV0dXJuIHggfSB9KTsnLCAneCcpOworc2hvdWxkQmVGYWxzZSgneCBpbnN0YW5jZW9m
IEJhc2UnKTsKK3Nob3VsZFRocm93KCduZXcgKGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVj
dG9yKCkgeyB9IH0pJywgJyJUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0IHR5
cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4iJyk7CitzaG91bGRUaHJv
dygnbmV3IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIDE7IH0g
fSknLCAnIlR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5vbi1vYmplY3QgdHlwZSBpbiB0aGUg
Y29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLiInKTsKK3Nob3VsZEJlKCduZXcgKGNsYXNz
IGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkIH0gfSknLCAn
dW5kZWZpbmVkJyk7CitzaG91bGRCZSgneCA9IHsgfTsgbmV3IChjbGFzcyBleHRlbmRzIG51bGwg
eyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9KTsnLCAneCcpOworc2hvdWxkQmVUcnVlKCd4
IGluc3RhbmNlb2YgT2JqZWN0Jyk7CitzaG91bGRUaHJvdygnbmV3IChjbGFzcyBleHRlbmRzIG51
bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9KScsICciVHlwZUVycm9yOiBDYW5ub3QgcmV0dXJuIGEg
bm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xhc3MuIicp
Oworc2hvdWxkVGhyb3coJ25ldyAoY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0b3IoKSB7
IHJldHVybiAxOyB9IH0pJywgJyJUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0
IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4iJyk7CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247945</attachid>
            <date>2015-03-05 04:31:48 -0800</date>
            <delta_ts>2015-03-05 18:07:02 -0800</delta_ts>
            <desc>Fixed build</desc>
            <filename>bug-142200-20150305043129.patch</filename>
            <type>text/plain</type>
            <size>82847</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
Y2ZiOGM3MjczM2ZkYWNjZTExNmEzMDMwNWZlMGU1NzllYzkwZmEzLi5lMjQ2NzhjMDMzODU4NTAw
YWRlMzdmZGM2Y2IzY2NjYzMwNzgzYTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDUgQEAKKzIwMTUtMDMtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgU3VwcG9ydCBleHRlbmRzIGFuZCBzdXBlciBrZXl3b3JkcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMjAwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIHN1cHBvcnQg
Zm9yIEVTNiBjbGFzcyBzeW50YXggaW5oZXJpdGFuY2UuCisKKyAgICAgICAgQWRkZWQgSlNQYXJz
ZXJDb25zdHJ1Y3RvcktpbmQgYXMgd2VsbCBhcyBib29sZWFuIGZsYWdzIGluZGljYXRpbmcgdGhl
IGNvbnN0cnVjdG9yIGtpbmQgdG8KKyAgICAgICAgdmFyaW91cyBjbGFzc2VzIGluIFVubGlua2Vk
Q29kZUJsb2NrIGFzIHdlbGwgYXMgQVNUIG5vZGVzLgorCisgICAgICAgIEVhY2ggbWV0aG9kIHN0
b3JlcyB0aGUgYXNzb2NpYXRlZCBjbGFzcyBhcyBpdHMgaG9tZU9iamVjdFByaXZhdGVOYW1lLiBU
aGlzIHZhbHVlIGlzIHVzZWQgdG8KKyAgICAgICAgbWFrZSBzdXBlciBjYWxscy4KKworICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6CisKKyAgICAgICAgKiBieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlSW5mbzo6RXhlY3V0
YWJsZUluZm8pOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29u
c3RydWN0b3JLaW5kSXNEZXJpdmVkKTogQWRkZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjpjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQpOiBBZGRlZC4KKworICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6IERvbid0IGVtaXQgb3BfY3JlYXRlX3RoaXMg
aW4gYSBkZXJpdmVkIGNsYXNzCisgICAgICAgIGFzIHRoZSBvYmplY3QgaXMgYWxsb2NhdGVkIGJ5
IHRoZSBoaWdoZXN0IGJhc2UgY2xhc3MncyBjb25zdHJ1Y3Rvci4gQWxzbyBzZXQgInRoaXMiIHRv
IG51bGwKKyAgICAgICAgYW5kIHN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbiBtX25ld1Rhcmdl
dFJlZ2lzdGVyLiAidGhpcyIgaXMgc3VwcG9zZWQgdG8gYmUgaW4gVERaIGJ1dAorICAgICAgICB0
aGF0IHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gYSBzZXBhcmF0ZSBwYXRjaC4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZPYmplY3QpOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXR1cm4pOiBBbGxvdyAidW5kZWZpbmVkIiB0
byBiZSByZXR1cm5lZCBmcm9tIGEgZGVyaXZlZCBjbGFzcy4KKyAgICAgICAgSW4gYSBkZXJpdmVk
IGNsYXNzJ3MgY29uc3RydWN0b3IsIG5vdCByZXR1cm5pbmcgInVuZGVmaW5lZCIgb3IgYW4gb2Jq
ZWN0IHJlc3VsdHMgaW4gYSB0eXBlCisgICAgICAgIGVycm9yIGluc3RlYWQgb2YgInRoaXMiIGJl
aW5nIHJldHVybmVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93
VHlwZUVycm9yKTogQWRkZWQuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnN0cnVjdG9yS2lu
ZElzRGVyaXZlZCk6IEFkZGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6bmV3
VGFyZ2V0KTogQWRkZWQuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cDoKKyAgICAgICAgKEpTQzo6U3VwZXJOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZC4gRW1pdHMg
dGhlIGNvZGUgdG8gb2J0YWluIHRoZSBjYWxsZWUncyBwYXJlbnQgY2xhc3MuCisgICAgICAgIChK
U0M6OmVtaXRTdXBlckJhc2VGb3JDYWxsZWUpOiBBZGRlZC4gRW1pdHMgdGhlIGNvZGUgdG8gb2J0
YWluIHRoZSBwYXJlbnQgY2xhc3MncyBwcm90b3R5cGUuCisgICAgICAgIChKU0M6OmVtaXRQdXRI
b21lT2JqZWN0KTogQWRkZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRC
eXRlY29kZSk6IFN0b3JlcyB0aGUgaG9tZSBvYmplY3Qgd2hlbiBhZGRpbmcgbWV0aG9kcy4KKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFB1dENvbnN0YW50UHJvcGVydHkpOiBE
aXR0by4KKyAgICAgICAgKEpTQzo6QnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKTog
QWRkZWQgdGhlIHN1cHBvcnQgZm9yIHN1cGVyWydmb28nXS4KKyAgICAgICAgKEpTQzo6RG90QWNj
ZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZCB0aGUgc3VwcG9ydCBmb3Igc3VwZXIuZm9v
LgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6IEFk
ZGVkIHRoZSBzdXBwb3J0IGZvciBzdXBlcigpLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxC
cmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogQWRkZWQgdGhlIHN1cHBvcnQgZm9yIHN1cGVyWydm
b28nXSgpLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUp
OiBBZGRlZCB0aGUgc3VwcG9ydCBmb3Igc3VwZXIuZm9vKCkuCisgICAgICAgIChKU0M6OkRlbGV0
ZUJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUpOiBGb3JiaWQgImRlbGV0ZSBzdXBlci5mb28iLgor
ICAgICAgICAoSlNDOjpEZWxldGVEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOiBGb3JiaWQgImRlbGV0
ZSBzdXBlclsnZm9vJ10iLgorICAgICAgICAoSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNv
ZGUpOiBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgImNsYXNzSGVyaXRhZ2UiLiBUaGlzIGlzIHRoZSBt
YWluCisgICAgICAgIGxvZ2ljIGZvciBpbmhlcml0YW5jZS4gV2hlbiBhIGNsYXNzIEIgaW5oZXJp
dHMgZnJvbSBhIGNsYXNzIEEsIHNldCBCLl9fcHJvdG9fXyB0byBBIGFuZCBzZXQKKyAgICAgICAg
Qi5wcm90b3R5cGUuX19wcm90b19fIHRvIEEucHJvdG90eXBlLiBUaHJvdyBleGNlcHRpb25zIHdo
ZW4gZWl0aGVyIEEgb3IgQS5fX3Byb3RvX18gaXMgbm90CisgICAgICAgIGFuIG9iamVjdC4KKwor
ICAgICAgICAqIHBhcnNlci9BU1RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OnN1cGVyRXhwcik6IEFkZGVkLgorCisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aDoKKyAgICAgICAgKEpTQzo6U3VwZXJOb2RlOjpTdXBlck5vZGUpOiBBZGRlZC4KKworICAgICAg
ICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OkZ1
bmN0aW9uQm9keU5vZGUpOgorCisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChK
U0M6OkV4cHJlc3Npb25Ob2RlOjppc1N1cGVyTm9kZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
Tm9kZTo6dHlwZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Tm9kZTo6aXNNZXRob2QpOgorCisg
ICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUZ1bmN0aW9uSW5mbyk6IFRocm93IGEgcGFyc2VyIGVycm9yIGlmIHN1cGVyKCkgaXMg
dXNlZCBvdXRzaWRlCisgICAgICAgIG9mIGNsYXNzIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgKEpT
Qzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAg
IChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKTogQ29uc3RydWN0b3JLaW5kIGlz
ICJkZXJpdmVkIiBpZiBhbmQgb25seSBpZiB0aGUgcGFyZW50CisgICAgICAgIGNsYXNzIGlzIHNw
ZWNpZmllZCBpbiB0aGUgZGVjbGFyYXRpb24gLyBleHByZXNzaW9uLgorICAgICAgICAoSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAoSlNDOjpQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOiBBZGRlZCB0aGUgc3VwcG9y
dCBmb3IgInN1cGVyKCkiLCAic3VwZXIuZm9vIiwKKyAgICAgICAgYW5kICJzdXBlclsnZm9vJ10i
LiBUaHJvdyBhIHNlbWFudGljIGVycm9yIGlmICJzdXBlciIgYXBwZWFycyBieSBpdHNlbGYuCisK
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3BlOjpTY29wZSk6
IEFkZGVkIG1faGFzRGlyZWN0U3VwZXIuIFRoaXMgdmFyaWFibGUga2VlcHMgdHJhY2sgb2YgdGhl
IHVzZSBvZiAic3VwZXIoKSIKKyAgICAgICAgc28gdGhhdCBwYXJzZUZ1bmN0aW9uSW5mbyBjYW4g
c3BpdCBhbiBlcnJvciBpZiBpdCdzIHVzZWQgb3V0c2lkZSBvZiBjbGFzcyBjb25zdHJ1Y3RvcnMu
CisgICAgICAgIChKU0M6OlNjb3BlOjpoYXNEaXJlY3RTdXBlcik6IEFkZGVkLgorICAgICAgICAo
SlNDOjpTY29wZTo6c2V0SGFzRGlyZWN0U3VwZXIpOiBBZGRlZC4KKworICAgICAgICAqIHBhcnNl
ci9QYXJzZXJNb2Rlcy5oOgorICAgICAgICAoSlNDOjpKU1BhcnNlckNvbnN0cnVjdG9yS2luZCk6
IEFkZGVkLgorCisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpT
Qzo6U3ludGF4Q2hlY2tlcjo6c3VwZXJFeHByKTogQWRkZWQuCisKKyAgICAgICAgKiBydW50aW1l
L0NvbW1vbklkZW50aWZpZXJzLmg6IEFkZGVkIGhvbWVPYmplY3RQcml2YXRlTmFtZS4KKworICAg
ICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJs
ZTo6ZXhlY3V0YWJsZUluZm8pOiAKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmV4
ZWN1dGFibGVJbmZvKToKKwogMjAxNS0wMy0wNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KIAogICAgICAgICBIaWRlIFByb21pc2Ugd2l0aCBydW50aW1lIGZsYWdzIHVu
ZGVyIENvY29hIEpTQ29udGV4dCBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IDY0MGJkZTc3OGZjZWI1YjNlYjVh
MDkxMTc5NzA0ZDlmMGQ5ZGVlOTkuLmI5YTE2NTcwNjE4NmMxNGUwYTAwNzAxMzQ3OTJjM2ViNWQ5
ZDA3MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcApAQCAtNjEsNyArNjEsOCBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogZ2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9jayhWTSYgdm0sIFVubGlua2VkRnVu
YwogICAgIGZ1bmN0aW9uLT5maW5pc2hQYXJzaW5nKGV4ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwg
ZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5mdW5jdGlvbk1vZGUoKSk7CiAgICAgZXhl
Y3V0YWJsZS0+cmVjb3JkUGFyc2UoZnVuY3Rpb24tPmZlYXR1cmVzKCksIGZ1bmN0aW9uLT5oYXND
YXB0dXJlZFZhcmlhYmxlcygpKTsKICAgICAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
KiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlv
bkNvZGUsIEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT5uZWVkc0FjdGl2YXRpb24oKSwgZnVuY3Rp
b24tPnVzZXNFdmFsKCksIGZ1bmN0aW9uLT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9y
Q29uc3RydWN0LCBmdW5jdGlvbktpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24pKTsKKyAg
ICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUsCisgICAgICAgIEV4ZWN1dGFibGVJbmZv
KGZ1bmN0aW9uLT5uZWVkc0FjdGl2YXRpb24oKSwgZnVuY3Rpb24tPnVzZXNFdmFsKCksIGZ1bmN0
aW9uLT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0LCBmdW5jdGlvbktp
bmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24sIGV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yS2lu
ZElzRGVyaXZlZCgpKSk7CiAgICAgYXV0byBnZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxCeXRl
Y29kZUdlbmVyYXRvcj4odm0sIGZ1bmN0aW9uLmdldCgpLCByZXN1bHQsIGRlYnVnZ2VyTW9kZSwg
cHJvZmlsZXJNb2RlKSk7CiAgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAgICAg
aWYgKGVycm9yLmlzVmFsaWQoKSkKQEAgLTg0LDYgKzg1LDkgQEAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3QKICAgICAsIG1faXNJblN0cmljdENvbnRleHQobm9kZS0+aXNJblN0cmljdENvbnRleHQo
KSkKICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCiAgICAgLCBtX2lzQnVpbHRp
bkZ1bmN0aW9uKGtpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24pCisjaWYgRU5BQkxFKEVT
Nl9DTEFTU19TWU5UQVgpCisgICAgLCBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZChub2RlLT5j
b25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKSkKKyNlbmRpZgogICAgICwgbV9uYW1lKG5vZGUtPmlk
ZW50KCkpCiAgICAgLCBtX2luZmVycmVkTmFtZShub2RlLT5pbmZlcnJlZE5hbWUoKSkKICAgICAs
IG1fcGFyYW1ldGVycyhub2RlLT5wYXJhbWV0ZXJzKCkpCkBAIC0yMDUsNiArMjA5LDkgQEAgVW5s
aW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1faXNDb25zdHJ1Y3RvcihpbmZvLm1faXNDb25z
dHJ1Y3RvcikKICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCiAgICAgLCBtX2lz
QnVpbHRpbkZ1bmN0aW9uKGluZm8ubV9pc0J1aWx0aW5GdW5jdGlvbikKKyNpZiBFTkFCTEUoRVM2
X0NMQVNTX1NZTlRBWCkKKyAgICAsIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKGluZm8ubV9j
b25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQpCisjZW5kaWYKICAgICAsIG1fZmlyc3RMaW5lKDApCiAg
ICAgLCBtX2xpbmVDb3VudCgwKQogICAgICwgbV9lbmRDb2x1bW4oVUlOVF9NQVgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4
IGYxZWY1ZDgxNTNmNTQ0MzVjOTU1NmJkNzZlNGY5NTM0YWUyNzY2NDMuLmM0ZGZmNThmMDJkNzhm
ZjZmNDIzMmM5ODM5NTc3NjQzZWZlYTcxYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC02NSwxOSArNjUsMjYgQEAgdHlw
ZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwogdHlwZWRlZiB1
bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwogCiBzdHJ1Y3QgRXhlY3V0YWJsZUlu
Zm8gewotICAgIEV4ZWN1dGFibGVJbmZvKGJvb2wgbmVlZHNBY3RpdmF0aW9uLCBib29sIHVzZXNF
dmFsLCBib29sIGlzU3RyaWN0TW9kZSwgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGlzQnVpbHRp
bkZ1bmN0aW9uKQorICAgIEV4ZWN1dGFibGVJbmZvKGJvb2wgbmVlZHNBY3RpdmF0aW9uLCBib29s
IHVzZXNFdmFsLCBib29sIGlzU3RyaWN0TW9kZSwgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGlz
QnVpbHRpbkZ1bmN0aW9uLCBib29sIGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCkKICAgICAgICAg
OiBtX25lZWRzQWN0aXZhdGlvbihuZWVkc0FjdGl2YXRpb24pCiAgICAgICAgICwgbV91c2VzRXZh
bCh1c2VzRXZhbCkKICAgICAgICAgLCBtX2lzU3RyaWN0TW9kZShpc1N0cmljdE1vZGUpCiAgICAg
ICAgICwgbV9pc0NvbnN0cnVjdG9yKGlzQ29uc3RydWN0b3IpCiAgICAgICAgICwgbV9pc0J1aWx0
aW5GdW5jdGlvbihpc0J1aWx0aW5GdW5jdGlvbikKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKKyAgICAgICAgLCBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZChjb25zdHJ1Y3RvcktpbmRJ
c0Rlcml2ZWQpCisjZW5kaWYKICAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShjb25zdHJ1Y3Rv
cktpbmRJc0Rlcml2ZWQpOwogICAgIH0KICAgICBib29sIG1fbmVlZHNBY3RpdmF0aW9uIDogMTsK
ICAgICBib29sIG1fdXNlc0V2YWwgOiAxOwogICAgIGJvb2wgbV9pc1N0cmljdE1vZGUgOiAxOwog
ICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9yIDogMTsKICAgICBib29sIG1faXNCdWlsdGluRnVuY3Rp
b24gOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGJvb2wgbV9jb25zdHJ1
Y3RvcktpbmRJc0Rlcml2ZWQgOiAxOworI2VuZGlmCiB9OwogCiBlbnVtIFVubGlua2VkRnVuY3Rp
b25LaW5kIHsKQEAgLTExNiw2ICsxMjMsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IEpTUGFyc2VTdHJpY3Q7CiAgICAgICAgIHJldHVybiBKU1BhcnNlTm9ybWFsOwogICAgIH0KKyNp
ZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIGNvbnN0cnVjdG9yS2luZElzRGVy
aXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkOyB9CisjZWxz
ZQorICAgIGJvb2wgY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyNlbmRpZgogCiAgICAgdW5zaWduZWQgZmlyc3RMaW5lT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9maXJzdExpbmVPZmZzZXQ7IH0KICAgICB1bnNpZ25lZCBsaW5lQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQpAQCAtMTY4LDYgKzE4MCw5IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2lzSW5TdHJpY3RDb250ZXh0IDogMTsKICAgICBib29sIG1faGFzQ2FwdHVyZWRW
YXJpYWJsZXMgOiAxOwogICAgIGJvb2wgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisjaWYgRU5B
QkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZl
ZCA6IDE7CisjZW5kaWYKIAogICAgIElkZW50aWZpZXIgbV9uYW1lOwogICAgIElkZW50aWZpZXIg
bV9pbmZlcnJlZE5hbWU7CkBAIC0zNDIsNyArMzU3LDExIEBAIHB1YmxpYzoKICAgICBib29sIGlz
TnVtZXJpY0NvbXBhcmVGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNOdW1lcmljQ29tcGFy
ZUZ1bmN0aW9uOyB9CiAKICAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9pc0J1aWx0aW5GdW5jdGlvbjsgfQotICAgIAorCisjaWYgRU5BQkxFKEVTNl9DTEFTU19T
WU5UQVgpCisgICAgYm9vbCBjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZDsgfQorI2VuZGlmCisKICAgICB2b2lkIHNocmlu
a1RvRml0KCkKICAgICB7CiAgICAgICAgIG1fanVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKQEAg
LTUzNCw2ICs1NTMsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9yIDogMTsK
ICAgICBib29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOwogICAgIGJvb2wgbV9pc0J1aWx0
aW5GdW5jdGlvbiA6IDE7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBt
X2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZCA6IDE7CisjZW5kaWYKICAgICB1bnNpZ25lZCBtX2Zp
cnN0TGluZTsKICAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKICAgICB1bnNpZ25lZCBtX2VuZENv
bHVtbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggMDgxNzhlNDA1NzNmMjQyOTYzN2FjNzIzMzdmYmQz
OWNiYmJhNDc0ZC4uMGNhZDg3YWQwZGQxMDgwMTdjNTA5NmE1NDAyNWNkOWU2NDFhYjY5ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKQEAgLTQwMSw3ICs0MDEsMTQgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlu
a2UKICAgICBhZGRDYWxsZWUoZnVuY3Rpb25Ob2RlLCBjYWxsZWVSZWdpc3Rlcik7CiAKICAgICBp
ZiAoaXNDb25zdHJ1Y3RvcigpKSB7Ci0gICAgICAgIGVtaXRDcmVhdGVUaGlzKCZtX3RoaXNSZWdp
c3Rlcik7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIGlmIChjb25zdHJ1
Y3RvcktpbmRJc0Rlcml2ZWQoKSkgeworICAgICAgICAgICAgbV9uZXdUYXJnZXRSZWdpc3RlciA9
IGFkZFZhcigpOworICAgICAgICAgICAgZW1pdE1vdmUobV9uZXdUYXJnZXRSZWdpc3RlciwgJm1f
dGhpc1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIGVtaXRMb2FkKCZtX3RoaXNSZWdpc3RlciwganNO
dWxsKCkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgZW1pdENyZWF0ZVRo
aXMoJm1fdGhpc1JlZ2lzdGVyKTsKICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uTm9kZS0+dXNlc1Ro
aXMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkpIHsKICAgICAgICAgbV9jb2RlQmxvY2stPmFk
ZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICAg
ICAgZW1pdE9wY29kZShvcF90b190aGlzKTsKQEAgLTk0OSw2ICs5NTYsMjAgQEAgUGFzc1JlZlB0
cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZOb3RGdW5jdGlvbkFwcGx5KFJl
Z2lzdGVySUQqIGNvbmQKICAgICByZXR1cm4gdGFyZ2V0OwogfQogCitQYXNzUmVmUHRyPExhYmVs
PiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZk9iamVjdChSZWdpc3RlcklEKiBjb25kLCBM
YWJlbCogdGFyZ2V0KQoreworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpc09iamVjdFJlZ2lzdGVy
ID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgZW1pdE9wY29kZShvcF9pc19vYmplY3QpOworICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChpc09iamVjdFJlZ2lzdGVyLT5pbmRleCgpKTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoY29uZC0+aW5kZXgoKSk7CisKKyAgICBzaXplX3QgYmVnaW4gPSBp
bnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgZW1pdE9wY29kZShvcF9qdHJ1ZSk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGlzT2JqZWN0UmVnaXN0ZXItPmluZGV4KCkpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUo
KSkpOworICAgIHJldHVybiB0YXJnZXQ7Cit9CisKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6Omhh
c0NvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50KSBjb25zdAogewogICAgIFN0cmluZ0lt
cGwqIHJlcCA9IGlkZW50LmltcGwoKTsKQEAgLTE5MDMsOCArMTkyNCwxNCBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJldHVybihSZWdpc3RlcklEKiBzcmMpCiAgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyID8gbV9s
ZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgoKSA6IGVtaXRMb2FkKDAsIEpTVmFsdWUo
KSktPmluZGV4KCkpOwogICAgIH0KIAotICAgIGlmIChpc0NvbnN0cnVjdG9yKCkgJiYgc3JjLT5p
bmRleCgpICE9IG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkpIHsKLSAgICAgICAgUmVmUHRyPExhYmVs
PiBpc09iamVjdExhYmVsID0gbmV3TGFiZWwoKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKKyAgICBib29sIHRoaXNNaWdodEJlVW5pbml0aWFsaXplZCA9IGNvbnN0cnVjdG9yS2luZElz
RGVyaXZlZCgpOworI2Vsc2UKKyAgICBib29sIHRoaXNNaWdodEJlVW5pbml0aWFsaXplZCA9IGZh
bHNlOworI2VuZGlmCisKKyAgICBpZiAoaXNDb25zdHJ1Y3RvcigpICYmIChzcmMtPmluZGV4KCkg
IT0gbV90aGlzUmVnaXN0ZXIuaW5kZXgoKSB8fCB0aGlzTWlnaHRCZVVuaW5pdGlhbGl6ZWQpKSB7
CisgICAgICAgIFJlZlB0cjxMYWJlbD4gaXNPYmplY3RPck51bGxMYWJlbCA9IG5ld0xhYmVsKCk7
CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpc09iamVjdFJlZ2lzdGVyID0gbmV3VGVtcG9y
YXJ5KCk7CiAKICAgICAgICAgZW1pdE9wY29kZShvcF9pc19vYmplY3QpOwpAQCAtMTkxNCwxMSAr
MTk0MSwyMCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJldHVybihSZWdp
c3RlcklEKiBzcmMpCiAgICAgICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUo
KTsKICAgICAgICAgZW1pdE9wY29kZShvcF9qdHJ1ZSk7CiAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChpc09iamVjdFJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGlzT2JqZWN0TGFiZWwtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUo
KSkpOwotCi0gICAgICAgIGVtaXRVbmFyeU5vRHN0T3Aob3BfcmV0LCAmbV90aGlzUmVnaXN0ZXIp
OworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaXNPYmplY3RPck51bGxMYWJlbC0+Ymlu
ZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisKKyNpZiBFTkFCTEUoRVM2X0NMQVNT
X1NZTlRBWCkKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpKSB7CisgICAg
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXNVbmRlZmluZWRSZWdpc3RlciA9IG5ld1RlbXBv
cmFyeU9yKGlzT2JqZWN0UmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHVuZGVmaW5lZFJlZ2lzdGVyID0gZW1pdExvYWQobmV3VGVtcG9yYXJ5KCksIGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICAgICAgZW1pdEVxdWFsaXR5T3Aob3Bfc3RyaWN0ZXEsIGlzVW5k
ZWZpbmVkUmVnaXN0ZXIuZ2V0KCksIHNyYywgdW5kZWZpbmVkUmVnaXN0ZXIuZ2V0KCkpOworICAg
ICAgICAgICAgZW1pdEp1bXBJZlRydWUoaXNVbmRlZmluZWRSZWdpc3Rlci5nZXQoKSwgaXNPYmpl
Y3RPck51bGxMYWJlbC5nZXQoKSk7CisgICAgICAgICAgICBlbWl0VGhyb3dUeXBlRXJyb3IoIkNh
bm5vdCByZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVy
aXZlZCBjbGFzcy4iKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIGVtaXRV
bmFyeU5vRHN0T3Aob3BfcmV0LCAmbV90aGlzUmVnaXN0ZXIpOwogCi0gICAgICAgIGVtaXRMYWJl
bChpc09iamVjdExhYmVsLmdldCgpKTsKKyAgICAgICAgZW1pdExhYmVsKGlzT2JqZWN0T3JOdWxs
TGFiZWwuZ2V0KCkpOwogICAgIH0KICAgICByZXR1cm4gZW1pdFVuYXJ5Tm9Ec3RPcChvcF9yZXQs
IHNyYyk7CiB9CkBAIC0yMzUyLDYgKzIzODgsMTMgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCh0cnVlKTsKIH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRocm93VHlwZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBlbWl0T3Bjb2Rl
KG9wX3Rocm93X3N0YXRpY19lcnJvcik7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENv
bnN0YW50VmFsdWUoYWRkU3RyaW5nQ29uc3RhbnQoSWRlbnRpZmllcihtX3ZtLCBtZXNzYWdlKSkp
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOworfQorCiB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKFJlZ2lzdGVySUQq
IGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQogewogICAgIGVtaXRPcGNvZGUob3BfcHVzaF9uYW1lX3Njb3BlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAppbmRleCA1YzgzMjNhYzBjZjY1NmRlZjkzY2VhYjE1OGJmMmYwNmFlYWYwMzg5
Li45OGRjNzM4NjgwNzQxMjRhMGEzMjBhOTQ3OTkxMGQ3MjVjYzQ1NThmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CkBAIC0yNjksNyArMjY5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBQYXJzZXJBcmVu
YSYgcGFyc2VyQXJlbmEoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlTm9kZS0+cGFyc2VyQXJlbmEo
KTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNv
bnN0IHsgcmV0dXJuICptX3ZtLT5wcm9wZXJ0eU5hbWVzOyB9CiAKLSAgICAgICAgYm9vbCBpc0Nv
bnN0cnVjdG9yKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsgfQorICAg
ICAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aXND
b25zdHJ1Y3RvcigpOyB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIGJv
b2wgY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2st
PmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpOyB9CisjZW5kaWYKIAogICAgICAgICBQYXJzZXJF
cnJvciBnZW5lcmF0ZSgpOwogCkBAIC0yOTAsNyArMjkzLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRoaXMiCiAgICAgICAg
IFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNSZWdpc3RlcjsgfQot
ICAgICAgICAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgUmVnaXN0ZXJJ
RCogbmV3VGFyZ2V0KCkgeyByZXR1cm4gbV9uZXdUYXJnZXRSZWdpc3RlcjsgfQorI2VuZGlmCisK
ICAgICAgICAgUmVnaXN0ZXJJRCogc2NvcGVSZWdpc3RlcigpIHsgcmV0dXJuIG1fc2NvcGVSZWdp
c3RlcjsgfQogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIG5leHQgYXZhaWxhYmxlIHRlbXBvcmFy
eSByZWdpc3Rlci4gUmVnaXN0ZXJzIHJldHVybmVkIGJ5CkBAIC01MTgsNiArNTI0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRKdW1wSWZGYWxzZShS
ZWdpc3RlcklEKiBjb25kLCBMYWJlbCogdGFyZ2V0KTsKICAgICAgICAgUGFzc1JlZlB0cjxMYWJl
bD4gZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2FsbChSZWdpc3RlcklEKiBjb25kLCBMYWJlbCogdGFy
Z2V0KTsKICAgICAgICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBw
bHkoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcmdldCk7CisgICAgICAgIFBhc3NSZWZQdHI8
TGFiZWw+IGVtaXRKdW1wSWZPYmplY3QoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcmdldCk7
CiAgICAgICAgIHZvaWQgZW1pdFBvcFNjb3BlcyhSZWdpc3RlcklEKiBzcmNEc3QsIGludCB0YXJn
ZXRTY29wZURlcHRoKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzSW5kZXhlZFByb3Bl
cnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVy
dHlOYW1lKTsKQEAgLTU0Myw2ICs1NTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
CiAgICAgICAgIHZvaWQgZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKTsKKyAgICAgICAgdm9pZCBlbWl0VGhyb3dUeXBlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKTsKIAogICAgICAgICB2b2lkIGVtaXRQdXNoRnVuY3Rpb25OYW1lU2NvcGUoUmVnaXN0ZXJJ
RCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgICAgICB2b2lkIGVtaXRQdXNoQ2F0Y2hTY29wZShSZWdp
c3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CkBAIC03NTksNiArNzY3LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyIHsgbnVsbHB0ciB9
OwogICAgICAgICBSZWdpc3RlcklEKiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyIHsgbnVsbHB0ciB9
OwogICAgICAgICBSZWdpc3RlcklEKiBtX2xvY2FsQXJndW1lbnRzUmVnaXN0ZXIgeyBudWxscHRy
IH07CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIFJlZ2lzdGVySUQqIG1f
bmV3VGFyZ2V0UmVnaXN0ZXIgeyBudWxscHRyIH07CisjZW5kaWYKIAogICAgICAgICBWZWN0b3I8
SWRlbnRpZmllciwgMTY+IG1fd2F0Y2hhYmxlVmFyaWFibGVzOwogICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29uc3RhbnRQb29sUmVnaXN0ZXJzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4
IDUwZTY4Zjg4ZWY5Y2MxY2E1OWIxZDdmNTBlZGYyZWEwZTA4ZWZiNDAuLjA4YjdhMjc4YTk4MjY5
ZTBjMTRiNTFiYjlkMzU5YmVmOTZlNmE2NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTE1Niw2ICsxNTYsMzQgQEAg
UmVnaXN0ZXJJRCogVGhpc05vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgRU5B
QkxFKEVTNl9DTEFTU19TWU5UQVgpCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBTdXBlck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdp
c3RlcklEKiBTdXBlck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3Jl
ZFJlc3VsdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZ2lzdGVySUQgY2FsbGVlOwor
ICAgIGNhbGxlZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGhvbWVPYmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCAmY2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQ
cml2YXRlTmFtZSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvUGFyZW50ID0gZ2VuZXJh
dG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaG9tZU9iamVjdC5nZXQo
KSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pOworICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwg
cHJvdG9QYXJlbnQuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Ip
OworfQorCitzdGF0aWMgUmVnaXN0ZXJJRCogZW1pdFN1cGVyQmFzZUZvckNhbGxlZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQoreworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNh
bGxlZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGhvbWVPYmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCAmY2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRl
TmFtZSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIGhvbWVPYmplY3QuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5k
ZXJzY29yZVByb3RvKTsKK30KKworI2VuZGlmCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IGJvb2wgUmVzb2x2ZU5vZGU6OmlzUHVyZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKSBj
b25zdApAQCAtMjk0LDYgKzMyMiwxMyBAQCBSZWdpc3RlcklEKiBPYmplY3RMaXRlcmFsTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlMaXN0Tm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCitzdGF0
aWMgaW5saW5lIHZvaWQgZW1pdFB1dEhvbWVPYmplY3QoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZnVuY3Rpb24sIFJlZ2lzdGVySUQqIGhvbWVPYmplY3QpCit7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGZ1bmN0aW9uLCBnZW5lcmF0b3IucHJvcGVydHlOYW1l
cygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSwgaG9tZU9iamVjdCk7Cit9CisjZW5kaWYKKwogUmVn
aXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICAvLyBGYXN0IGNhc2U6IHRoaXMg
bG9vcCBqdXN0IGhhbmRsZXMgcmVndWxhciB2YWx1ZSBwcm9wZXJ0aWVzLgpAQCAtMzMwLDYgKzM2
NSwxMCBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLT5tX2Fzc2ln
bik7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgICAgICBpZiAobm9kZS0+
aXNNZXRob2QoKSkKKyAgICAgICAgICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3Is
IHZhbHVlLCBkc3QpOworI2VuZGlmCiAKICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBnZXQvc2V0
IHByb3BlcnR5LCBmaW5kIGl0cyBlbnRyeSBpbiB0aGUgbWFwLgogICAgICAgICAgICAgQVNTRVJU
KG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRlciB8fCBub2RlLT5tX3R5cGUgPT0g
UHJvcGVydHlOb2RlOjpTZXR0ZXIpOwpAQCAtMzQ0LDEyICszODMsMTggQEAgUmVnaXN0ZXJJRCog
UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBwYWlyZWQgbm9kZSBub3cu
CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZ2V0dGVyUmVnOwogICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHNldHRlclJlZzsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNlY29uZFJlZyA9IG51bGxwdHI7CisjZW5kaWYK
IAogICAgICAgICAgICAgaWYgKG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRlcikg
ewogICAgICAgICAgICAgICAgIGdldHRlclJlZyA9IHZhbHVlOwogICAgICAgICAgICAgICAgIGlm
IChwYWlyLnNlY29uZCkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGFpci5zZWNvbmQt
Pm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OlNldHRlcik7CiAgICAgICAgICAgICAgICAgICAgIHNl
dHRlclJlZyA9IGdlbmVyYXRvci5lbWl0Tm9kZShwYWlyLnNlY29uZC0+bV9hc3NpZ24pOworI2lm
IEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICAgICAgICAgICAgICBzZWNvbmRSZWcg
PSBzZXR0ZXJSZWcuZ2V0KCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICBzZXR0ZXJSZWcgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAg
ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChzZXR0ZXJSZWcuZ2V0KCksIGpz
VW5kZWZpbmVkKCkpOwpAQCAtMzYwLDEyICs0MDUsMjAgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlM
aXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGUKICAgICAgICAgICAgICAgICBpZiAocGFpci5zZWNvbmQpIHsKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKHBhaXIuc2Vjb25kLT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIpOwog
ICAgICAgICAgICAgICAgICAgICBnZXR0ZXJSZWcgPSBnZW5lcmF0b3IuZW1pdE5vZGUocGFpci5z
ZWNvbmQtPm1fYXNzaWduKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAg
ICAgICAgICAgICAgc2Vjb25kUmVnID0gZ2V0dGVyUmVnLmdldCgpOworI2VuZGlmCiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyUmVnID0gZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpOwogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExv
YWQoZ2V0dGVyUmVnLmdldCgpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgICAg
IGlmIChwYWlyLnNlY29uZCAmJiBwYWlyLnNlY29uZC0+aXNNZXRob2QoKSkKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIHNlY29uZFJlZywgZHN0KTsKKyNlbmRp
ZgorCiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEdldHRlclNldHRlcihkc3QsICpub2Rl
LT5uYW1lKCksIGdldHRlclJlZy5nZXQoKSwgc2V0dGVyUmVnLmdldCgpKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTM3NSwxOCArNDI4LDM0IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAKIHZv
aWQgUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFB1dENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogbmV3T2JqLCBQcm9wZXJ0eU5vZGUmIG5vZGUp
CiB7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5v
ZGUubV9hc3NpZ24pOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmIChub2Rl
LmlzTWV0aG9kKCkpCisgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgdmFsdWUu
Z2V0KCksIG5ld09iaik7CisjZW5kaWYKICAgICBpZiAobm9kZS5uYW1lKCkpIHsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKG5ld09iaiwgKm5vZGUubmFtZSgpLCBnZW5lcmF0
b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2lnbikpOworICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVj
dFB1dEJ5SWQobmV3T2JqLCAqbm9kZS5uYW1lKCksIHZhbHVlLmdldCgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG5vZGUubV9leHByZXNzaW9uKTsKLSAgICBnZW5lcmF0b3IuZW1pdERpcmVj
dFB1dEJ5VmFsKG5ld09iaiwgcHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmF0b3IuZW1pdE5vZGUo
bm9kZS5tX2Fzc2lnbikpOworICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlWYWwobmV3T2Jq
LCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHZhbHVlLmdldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
KyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9k
ZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgZ2VuZXJhdGUgdGhlIHByb2ZpbGVy
IGluZm8/CisgICAgICAgIGlmIChtX3N1YnNjcmlwdC0+aXNTdHJpbmcoKSkgeworICAgICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciYgaWQgPSBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJz
Y3JpcHQpLT52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJ
ZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVl
KGdlbmVyYXRvciksIGlkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRHZXRCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBlbWl0U3VwZXJCYXNl
Rm9yQ2FsbGVlKGdlbmVyYXRvciksIGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCkpOwor
ICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpIAogICAgICAg
ICAmJiBnZW5lcmF0b3Iud2lsbFJlc29sdmVUb0FyZ3VtZW50c1JlZ2lzdGVyKHN0YXRpY19jYXN0
PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpKQogICAgICAgICAmJiAhZ2VuZXJh
dG9yLnN5bWJvbFRhYmxlKCkuc2xvd0FyZ3VtZW50cygpKSB7CkBAIC00MzEsNyArNTAwLDExIEBA
IFJlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVyCiAgICAgfQogCiBub25Bcmd1bWVudHNQYXRoOgorI2lm
IEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0g
bV9iYXNlLT5pc1N1cGVyTm9kZSgpID8gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3Ip
IDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisjZWxzZQogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisjZW5kaWYKICAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgUmVnaXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0KTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZmlu
YWxEZXN0LCBiYXNlLmdldCgpLCBtX2lkZW50KTsKQEAgLTUyMSw2ICs1OTQsMTUgQEAgUmVnaXN0
ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmUKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShtX2V4cHIpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9
IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CiAgICAgQ2FsbEFy
Z3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKyNpZiBFTkFCTEUoRVM2
X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobV9leHByLT5pc1N1cGVyTm9kZSgpKSB7CisgICAgICAg
IEFTU0VSVChnZW5lcmF0b3IuY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9y
Lm5ld1RhcmdldCgpKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRD
b25zdHJ1Y3QocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSwgcmV0KTsK
KyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisjZW5kaWYKICAgICBnZW5lcmF0b3IuZW1pdExv
YWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CiAgICAgUmVn
aXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5j
LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmls
ZXIoKSkgewpAQCAtNTc0LDEzICs2NTYsMjUgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogCiBS
ZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyNpZiBFTkFCTEUoRVM2
X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9k
ZSgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gYmFzZUlzU3VwZXIgPyBlbWl0U3Vw
ZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsK
KyNlbHNlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
bV9iYXNlKTsKKyNlbmRpZgogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJl
c3Npb25FbmQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9y
LmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCks
IHByb3BlcnR5LmdldCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworI2lmIEVOQUJMRShF
UzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRvci50aGlzUmVn
aXN0ZXIoKSk7CisgICAgZWxzZQorICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7CisjZWxzZQogICAgIGdlbmVyYXRvci5l
bWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKKyNlbmRp
ZgogICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5n
ZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywg
ZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZt
KCktPnR5cGVQcm9maWxlcigpKSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUo
cmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElE
LCBudWxscHRyKTsKQEAgLTU5Niw5ICs2OTAsMjEgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxs
RG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2kK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0
aW9uKGRzdCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50
cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNT
X1NZTlRBWCkKKyAgICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOwor
ICAgIGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisgICAgZWxz
ZQorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIo
KSwgbV9iYXNlKTsKKyNlbHNlCiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMu
dGhpc1JlZ2lzdGVyKCksIG1fYmFzZSk7CisjZW5kaWYKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3Vi
ZXhwcmVzc2lvbkVuZCgpKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBnZW5l
cmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIGJhc2VJc1N1cGVyID8gZW1pdFN1cGVy
QmFzZUZvckNhbGxlZShnZW5lcmF0b3IpIDogY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwg
bV9pZGVudCk7CisjZWxzZQogICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQo
KSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CisjZW5kaWYKICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1
bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBl
UHJvZmlsZXIoKSkgewogICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZh
bHVlLmdldCgpLCBQcm9maWxlVHlwZUJ5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0
cik7CkBAIC05NDAsNiArMTA0NiwxMCBAQCBSZWdpc3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiByMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAK
ICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgaWYgKG1fYmFz
ZS0+aXNTdXBlck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9y
KGdlbmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIpOworI2VuZGlmCiAg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KSwgcjAuZ2V0KCksIHIxLmdldCgpKTsKIH0KIApAQCAtOTUwLDYgKzEwNjAsMTAg
QEAgUmVnaXN0ZXJJRCogRGVsZXRlRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyNpZiBFTkFCTEUoRVM2
X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKQorICAgICAgICBy
ZXR1cm4gZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAiQ2Fubm90IGRlbGV0ZSBh
IHN1cGVyIHByb3BlcnR5Iik7CisjZW5kaWYKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxl
dGVCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCBtX2lkZW50
KTsKIH0KIApAQCAtMjgwNywxMSArMjkyMSw0OCBAQCB2b2lkIENsYXNzRGVjbE5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAK
IFJlZ2lzdGVySUQqIENsYXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgQVNTRVJUKCFtX3BhcmVudENs
YXNzRXhwcmVzc2lvbik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHN1cGVyY2xhc3M7CisgICAg
aWYgKG1fY2xhc3NIZXJpdGFnZSkgeworICAgICAgICBzdXBlcmNsYXNzID0gZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoc3VwZXJjbGFzcy5nZXQo
KSwgbV9jbGFzc0hlcml0YWdlKTsKKyAgICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gY29u
c3RydWN0b3IgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2NvbnN0cnVjdG9yRXhwcmVzc2lv
bik7CisgICAgLy8gRklYTUU6IE1ha2UgdGhlIHByb3RvdHlwZSBub24tY29uZmlndXJhYmxlICYg
bm9uLXdyaXRhYmxlLgogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90b3R5cGUgPSBnZW5lcmF0
b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBjb25zdHJ1Y3Rvci5nZXQo
KSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwogCisgICAgaWYgKHN1cGVy
Y2xhc3MpIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBSZWdpc3RlciA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBzdXBlcmNsYXNzSXNO
dWxsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElm
VHJ1ZShnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3BfZXFfbnVsbCwgdGVtcFJlZ2lzdGVyLmdldCgp
LCBzdXBlcmNsYXNzLmdldCgpKSwgc3VwZXJjbGFzc0lzTnVsbC5nZXQoKSk7CisKKyAgICAgICAg
Ly8gRklYTUU6IFRocm93IFR5cGVFcnJvciBpZiBpdCdzIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLgor
ICAgICAgICBSZWZQdHI8TGFiZWw+IHN1cGVyY2xhc3NJc09iamVjdCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZk9iamVjdChzdXBlcmNsYXNzLmdl
dCgpLCBzdXBlcmNsYXNzSXNPYmplY3QuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFRo
cm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiVGhlIHN1cGVyY2xhc3MgaXMgbm90IGFuIG9iamVj
dC4iKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc3VwZXJjbGFzc0lzT2JqZWN0Lmdl
dCgpKTsKKworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdG9QYXJlbnQgPSBnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChwcm90b1Bh
cmVudC5nZXQoKSwgc3VwZXJjbGFzcy5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5w
cm90b3R5cGUpOworCisgICAgICAgIFJlZlB0cjxMYWJlbD4gcHJvdG9QYXJlbnRJc09iamVjdE9y
TnVsbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJ
ZlRydWUoZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIHRlbXBSZWdpc3Rlci5nZXQo
KSwgcHJvdG9QYXJlbnQuZ2V0KCkpLCBwcm90b1BhcmVudElzT2JqZWN0T3JOdWxsLmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZPYmplY3QocHJvdG9QYXJlbnQuZ2V0KCksIHBy
b3RvUGFyZW50SXNPYmplY3RPck51bGwuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFRo
cm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiVGhlIHN1cGVyY2xhc3MncyBwcm90b3R5cGUgaXMg
bm90IGFuIG9iamVjdC4iKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwocHJvdG9QYXJl
bnRJc09iamVjdE9yTnVsbC5nZXQoKSk7CisKKyAgICAgICAgZW1pdFB1dEhvbWVPYmplY3QoZ2Vu
ZXJhdG9yLCBjb25zdHJ1Y3Rvci5nZXQoKSwgcHJvdG90eXBlLmdldCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKGNvbnN0cnVjdG9yLmdldCgpLCBnZW5lcmF0b3IucHJv
cGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgc3VwZXJjbGFzcy5nZXQoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJZChwcm90b3R5cGUuZ2V0KCksIGdlbmVyYXRvci5w
cm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b1BhcmVudC5nZXQoKSk7CisKKyAg
ICAgICAgUmVmUHRyPExhYmVsPiBzdXBlcmNsYXNzSXNTZXQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKHN1cGVyY2xhc3NJc1NldC5nZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc3VwZXJjbGFzc0lzTnVsbC5nZXQoKSk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJZChwcm90b3R5cGUuZ2V0KCksIGdlbmVyYXRv
ci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBzdXBlcmNsYXNzLmdldCgpKTsKKwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHN1cGVyY2xhc3NJc1NldC5nZXQoKSk7CisgICAg
fQorCiAgICAgaWYgKG1fc3RhdGljTWV0aG9kcykKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2Rl
KGNvbnN0cnVjdG9yLmdldCgpLCBtX3N0YXRpY01ldGhvZHMpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCmluZGV4IGZhNjQ5NTFhOWRmMmI2YjY0NTA1ZmExZWEz
N2ExMDA0YjlhOGQ5OTYuLjA0YTg5MjA3MDFhYTMzMWNjMGY5MmY3MjA1N2VlZGYzNTNjZGYxYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCkBAIC0xNjksNiAr
MTY5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgdXNlc1RoaXMoKTsKICAgICAgICAgcmV0dXJuIG5l
dyAobV9wYXJzZXJBcmVuYSkgVGhpc05vZGUobG9jYXRpb24pOwogICAgIH0KKyNpZiBFTkFCTEUo
RVM2X0NMQVNTX1NZTlRBWCkKKyAgICBFeHByZXNzaW9uTm9kZSogc3VwZXJFeHByKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCisgICAgeworICAgICAgICAvLyBGSVhNRTogQWRkIGFu
ZCBjYWxsIHVzZXNTdXBlcigpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBT
dXBlck5vZGUobG9jYXRpb24pOworICAgIH0KKyNlbmRpZgogICAgIEV4cHJlc3Npb25Ob2RlKiBj
cmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgewogICAgICAg
ICBpZiAobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVudCkKQEAgLTI5OCw5
ICszMDUsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAg
RnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5z
aWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRl
eHQpCisgICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2Nh
dGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0
cmljdENvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9uQm9keU5vZGUo
bV9wYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBl
bmRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIEZ1bmN0aW9uQm9keU5vZGUobV9wYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5k
TG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCwgY29uc3Ry
dWN0b3JLaW5kKTsKICAgICB9CiAKICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZVN0YXJ0KEZ1bmN0
aW9uQm9keU5vZGUqIGJvZHksIGludCBmdW5jdGlvbk5hbWVTdGFydCkKQEAgLTMwOSwyMyArMzE2
LDI0IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5Tm9k
ZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwKLSAgICAgICAgY29uc3QgSWRl
bnRpZmllciogbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZv
LCB1bnNpZ25lZCBnZXRPclNldFN0YXJ0T2Zmc2V0KQorICAgICAgICBjb25zdCBJZGVudGlmaWVy
KiBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGluZm8sIHVuc2ln
bmVkIGdldE9yU2V0U3RhcnRPZmZzZXQsIGJvb2wgaXNNZXRob2QpCiAgICAgewogICAgICAgICBB
U1NFUlQobmFtZSk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGlu
ZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVT
dGFydE9mZnNldCk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0SW5mZXJyZWROYW1lKCpuYW1lKTsK
ICAgICAgICAgaW5mby5ib2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFydChnZXRPclNldFN0YXJ0
T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2Rl
KCpuYW1lLCBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgbV92bS0+
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsCi0gICAgICAgICAgICBpbmZvLmJvZHksIG1f
c291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9z
ZUJyYWNlT2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwg
aW5mby5wYXJhbWV0ZXJzKSwgdHlwZSk7CisgICAgICAgICAgICBpbmZvLmJvZHksIG1fc291cmNl
Q29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNl
T2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5mby5w
YXJhbWV0ZXJzKSwgdHlwZSwgaXNNZXRob2QpOwogICAgIH0KICAgICAKLSAgICBORVZFUl9JTkxJ
TkUgUHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNKiB2bSwgUGFy
c2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQ
cm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwgZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1
bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbywgdW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNl
dCkKKyAgICBORVZFUl9JTkxJTkUgUHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRlclBy
b3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwKKyAgICAgICAg
ZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbywg
dW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNldCwgYm9vbCBpc01ldGhvZCkKICAgICB7CiAgICAg
ICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5RW5kTGlu
ZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAg
ICAgIGluZm8uYm9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQoZ2V0T3JTZXRTdGFydE9mZnNl
dCk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gcGFyc2VyQXJlbmEuaWRlbnRp
ZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKHZtLCBuYW1lKTsKICAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKGlkZW50LCBuZXcgKG1fcGFyc2Vy
QXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVu
dGlmaWVyLAotICAgICAgICAgICAgaW5mby5ib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Np
b24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5
U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycyksIHR5cGUp
OworICAgICAgICAgICAgaW5mby5ib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5m
by5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRM
aW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycyksIHR5cGUsIGlzTWV0
aG9kKTsKICAgICB9CiAKICAgICBBcmd1bWVudHNOb2RlKiBjcmVhdGVBcmd1bWVudHMoKSB7IHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFyZ3VtZW50c05vZGUoKTsgfQpAQCAtMzMzLDExICsz
NDEsMTEgQEAgcHVibGljOgogICAgIEFyZ3VtZW50TGlzdE5vZGUqIGNyZWF0ZUFyZ3VtZW50c0xp
c3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGFyZykg
eyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0aW9uLCBh
cmcpOyB9CiAgICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBBcmd1bWVudExpc3ROb2RlKiBhcmdzLCBFeHByZXNz
aW9uTm9kZSogYXJnKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEFyZ3VtZW50TGlzdE5v
ZGUobG9jYXRpb24sIGFyZ3MsIGFyZyk7IH0KIAotICAgIFByb3BlcnR5Tm9kZSogY3JlYXRlUHJv
cGVydHkoY29uc3QgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9k
ZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wpCisgICAgUHJvcGVydHlOb2RlKiBjcmVh
dGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2Rl
KiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwgYm9vbCBpc01ldGhvZCA9IGZh
bHNlKQogICAgIHsKICAgICAgICAgaWYgKG5vZGUtPmlzRnVuY0V4cHJOb2RlKCkpCiAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxGdW5jRXhwck5vZGUqPihub2RlKS0+Ym9keSgpLT5zZXRJbmZlcnJl
ZE5hbWUoKnByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IFByb3BlcnR5Tm9kZSgqcHJvcGVydHlOYW1lLCBub2RlLCB0eXBlKTsKKyAgICAgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKCpwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5
cGUsIGlzTWV0aG9kKTsKICAgICB9CiAgICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShW
TSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgZG91YmxlIHByb3BlcnR5TmFtZSwgRXhw
cmVzc2lvbk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sKQogICAgIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9y
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKaW5k
ZXggMTJlM2Q0ZDZiODk1MmEwMDFiNDZhMzE4YjAwNzQ4M2I3NTc2ZTcwNS4uM2I2Nzg5NTA5ODQ2
ZWMyNmVmZjFmZTZiNzEwYjk5M2JmODRmN2NhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKQEAgLTExMiw2ICsxMTIsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgewogICAgIH0KIAorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQor
ICAgIGlubGluZSBTdXBlck5vZGU6OlN1cGVyTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uKQorICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQorICAgIHsKKyAgICB9
CisjZW5kaWYKKwogaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIHN0YXJ0KQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQogICAg
ICAgICAsIG1faWRlbnQoaWRlbnQpCkBAIC0xNTksMTAgKzE2NiwxMSBAQCBpbmxpbmUgUmVzb2x2
ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0
IElkZW50aWZpZQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUHJvcGVydHlOb2RlOjpQcm9w
ZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGFzc2lnbiwg
VHlwZSB0eXBlKQorICAgIGlubGluZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZShjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBFeHByZXNzaW9uTm9kZSogYXNzaWduLCBUeXBlIHR5cGUsIGJvb2wg
aXNNZXRob2QgPSBmYWxzZSkKICAgICAgICAgOiBtX25hbWUoJm5hbWUpCiAgICAgICAgICwgbV9h
c3NpZ24oYXNzaWduKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1faXNNZXRo
b2QoaXNNZXRob2QpCiAgICAgewogICAgIH0KIApAQCAtMTcxLDYgKzE3OSw3IEBAIGlubGluZSBS
ZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgSWRlbnRpZmllCiAgICAgICAgICwgbV9leHByZXNzaW9uKG5hbWUpCiAgICAgICAgICwg
bV9hc3NpZ24oYXNzaWduKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1faXNN
ZXRob2QoZmFsc2UpCiAgICAgewogICAgIH0KIApAQCAtNzg1LDExICs3OTQsMTEgQEAgaW5saW5l
IFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBJZGVudGlmaWUKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIENsYXNzRXhwck5v
ZGU6OkNsYXNzRXhwck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGNvbnN0cnVjdG9yRXhwcmVzc2lvbiwg
RXhwcmVzc2lvbk5vZGUqIHBhcmVudENsYXNzRXhwcmVzc2lvbiwgUHJvcGVydHlMaXN0Tm9kZSog
aW5zdGFuY2VNZXRob2RzLCBQcm9wZXJ0eUxpc3ROb2RlKiBzdGF0aWNNZXRob2RzKQorICAgIGlu
bGluZSBDbGFzc0V4cHJOb2RlOjpDbGFzc0V4cHJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBjb25zdHJ1
Y3RvckV4cHJlc3Npb24sIEV4cHJlc3Npb25Ob2RlKiBjbGFzc0hlcml0YWdlLCBQcm9wZXJ0eUxp
c3ROb2RlKiBpbnN0YW5jZU1ldGhvZHMsIFByb3BlcnR5TGlzdE5vZGUqIHN0YXRpY01ldGhvZHMp
CiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9uYW1lKG5h
bWUpCiAgICAgICAgICwgbV9jb25zdHJ1Y3RvckV4cHJlc3Npb24oY29uc3RydWN0b3JFeHByZXNz
aW9uKQotICAgICAgICAsIG1fcGFyZW50Q2xhc3NFeHByZXNzaW9uKHBhcmVudENsYXNzRXhwcmVz
c2lvbikKKyAgICAgICAgLCBtX2NsYXNzSGVyaXRhZ2UoY2xhc3NIZXJpdGFnZSkKICAgICAgICAg
LCBtX2luc3RhbmNlTWV0aG9kcyhpbnN0YW5jZU1ldGhvZHMpCiAgICAgICAgICwgbV9zdGF0aWNN
ZXRob2RzKHN0YXRpY01ldGhvZHMpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmNwcAppbmRleCAwNGFmNjFkOWFiYThmNDI1MDBhOGRlNmNlZjUwODgzOWMxNzhiMWM0Li4y
MTEzZDkxYTlkOTFiZTJkNTgzOGFjN2JhY2U2MWNjZDZkNGJkZmFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmNwcApAQCAtMTY3LDEzICsxNjcsMTcgQEAgRnVuY3Rpb25QYXJh
bWV0ZXJzOjp+RnVuY3Rpb25QYXJhbWV0ZXJzKCkKICAgICAgICAgcGF0dGVybnMoKVtpXS0+ZGVy
ZWYoKTsKIH0KIAotRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVu
YSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKK0Z1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9u
Qm9keU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRp
b24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29s
dW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaXNJblN0cmljdENvbnRleHQsIEpTUGFyc2Vy
Q29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCkKICAgICA6IFN0YXRlbWVudE5vZGUoZW5k
TG9jYXRpb24pCiAgICAgLCBtX3N0YXJ0Q29sdW1uKHN0YXJ0Q29sdW1uKQogICAgICwgbV9lbmRD
b2x1bW4oZW5kQ29sdW1uKQogICAgICwgbV9zdGFydFN0YXJ0T2Zmc2V0KHN0YXJ0TG9jYXRpb24u
c3RhcnRPZmZzZXQpCiAgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KGlzSW5TdHJpY3RDb250ZXh0
KQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmRJ
c0Rlcml2ZWQoY29uc3RydWN0b3JLaW5kID09IEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpEZXJp
dmVkKQorI2VuZGlmCiB7CisgICAgVU5VU0VEX1BBUkFNKGNvbnN0cnVjdG9yS2luZCk7CiB9CiAK
IHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIFBhcmFtZXRlck5vZGUqIGZpcnN0UGFyYW1ldGVyLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgZW51bSBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCmluZGV4IDMwZWRiMGFlMGMyZGE1M2YzYjQwZjg5NDYwMzM4ZjE5ZTkwOTky
OTcuLjkwMGZmOTU0ZDMyOTk5ZmQ2OTk5ZjlkMWU0Njg0OGQ1ZjFjNzZkNGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTE2NCw2ICsxNjQsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdmlydHVhbCBib29sIGlzU3VidHJhY3QoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCb29sZWFuKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzU3ByZWFkRXhwcmVzc2lvbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1cGVyTm9kZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZUlu
Q29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsKiwgTGFiZWwqLCBGYWxs
VGhyb3VnaE1vZGUpOwogCkBAIC00NDUsNiArNDQ2LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CiAgICAgfTsKIAorI2lmIEVOQUJMRShFUzZfQ0xB
U1NfU1lOVEFYKQorICAgIGNsYXNzIFN1cGVyTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBTdXBlck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdXBlck5vZGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBv
dmVycmlkZTsKKyAgICB9OworI2VuZGlmCisKICAgICBjbGFzcyBSZXNvbHZlTm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBSZXNvbHZlTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIHN0YXJ0KTsKQEAgLTUwMCwyMCArNTEyLDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1
YmxpYzoKICAgICAgICAgZW51bSBUeXBlIHsgQ29uc3RhbnQgPSAxLCBHZXR0ZXIgPSAyLCBTZXR0
ZXIgPSA0IH07CiAKLSAgICAgICAgUHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImLCBFeHBy
ZXNzaW9uTm9kZSosIFR5cGUpOworICAgICAgICBQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmll
ciYsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSwgYm9vbCBpc01ldGhvZCk7CiAgICAgICAgIFByb3Bl
cnR5Tm9kZShFeHByZXNzaW9uTm9kZSogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSosIFR5
cGUpOwogICAgICAgICAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGV4cHJlc3Npb25OYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uOyB9CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIq
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAotICAgICAgICBUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQorICAgICAgICBib29sIGlzTWV0aG9kKCkg
Y29uc3QgeyByZXR1cm4gbV9pc01ldGhvZDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJp
ZW5kIGNsYXNzIFByb3BlcnR5TGlzdE5vZGU7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIG1f
bmFtZTsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcmVzc2lvbjsKICAgICAgICAgRXhw
cmVzc2lvbk5vZGUqIG1fYXNzaWduOwotICAgICAgICBUeXBlIG1fdHlwZTsKKyAgICAgICAgdW5z
aWduZWQgbV90eXBlIDogMzsKKyAgICAgICAgdW5zaWduZWQgbV9pc01ldGhvZCA6IDE7CiAgICAg
fTsKIAogICAgIGNsYXNzIFByb3BlcnR5TGlzdE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUg
ewpAQCAtMTU0NCw3ICsxNTU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAg
ICAgICB1c2luZyBQYXJzZXJBcmVuYURlbGV0YWJsZTo6b3BlcmF0b3IgbmV3OwogCi0gICAgICAg
IEZ1bmN0aW9uQm9keU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVu
c2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCk7CisgICAgICAgIEZ1bmN0
aW9uQm9keU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVk
IGVuZENvbHVtbiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgSlNQYXJzZXJDb25zdHJ1Y3Rvcktp
bmQpOwogCiAgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyYW1ldGVycy5nZXQoKTsgfQogCkBAIC0xNTcyLDYgKzE1ODYsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBpbnQgc3RhcnRTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhcnRTdGFydE9mZnNldDsgfQogICAgICAgICBib29sIGlzSW5TdHJpY3RDb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0Q29udGV4dDsgfQorI2lmIEVOQUJMRShFUzZf
Q0xBU1NfU1lOVEFYKQorICAgICAgICBib29sIGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpIHsg
cmV0dXJuIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkOyB9CisjZW5kaWYKIAogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwpAQCAtMTU4NCw3ICsxNjAxLDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICAgICAg
U291cmNlQ29kZSBtX3NvdXJjZTsKICAgICAgICAgaW50IG1fc3RhcnRTdGFydE9mZnNldDsKLSAg
ICAgICAgYm9vbCBtX2lzSW5TdHJpY3RDb250ZXh0OworICAgICAgICBib29sIG1faXNJblN0cmlj
dENvbnRleHQgOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICBib29s
IG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkIDogMTsKKyNlbmRpZgogICAgIH07CiAKICAgICBj
bGFzcyBGdW5jdGlvbk5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKQEAgLTE2NDEsNyAr
MTY2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1f
bmFtZTsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fY29uc3RydWN0b3JFeHByZXNzaW9uOwot
ICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9wYXJlbnRDbGFzc0V4cHJlc3Npb247CisgICAgICAg
IEV4cHJlc3Npb25Ob2RlKiBtX2NsYXNzSGVyaXRhZ2U7CiAgICAgICAgIFByb3BlcnR5TGlzdE5v
ZGUqIG1faW5zdGFuY2VNZXRob2RzOwogICAgICAgICBQcm9wZXJ0eUxpc3ROb2RlKiBtX3N0YXRp
Y01ldGhvZHM7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcApp
bmRleCA2MzE4ZmQ2MzZiZWIzZTdiOTFkMjhmNjQ5NmFlZDlhZjdiZDg3MThjLi43NWZkZmEzODFj
MmYxNjU0YjE1NTM3M2IyZWEwYTI0NGEzMjJhNjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwCkBAIC0xMjU1LDcgKzEyNTUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUZvcgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1
bmN0aW9uQm9keShUcmVlQnVpbGRlciYgY29udGV4dCkKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJv
ZHkoVHJlZUJ1aWxkZXImIGNvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVj
dG9yS2luZCkKIHsKICAgICBKU1Rva2VuTG9jYXRpb24gc3RhcnRMb2NhdGlvbih0b2tlbkxvY2F0
aW9uKCkpOwogICAgIHVuc2lnbmVkIHN0YXJ0Q29sdW1uID0gdG9rZW5Db2x1bW4oKTsKQEAgLTEy
NjMsMTQgKzEyNjMsMTQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rp
b25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uQm8KIAogICAgIGlmIChtYXRj
aChDTE9TRUJSQUNFKSkgewogICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB0b2tlbkNvbHVt
bigpOwotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2Nh
dGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2Rl
KCkpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2Nh
dGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2Rl
KCksIGNvbnN0cnVjdG9yS2luZCk7CiAgICAgfQogICAgIERlcHRoTWFuYWdlciBzdGF0ZW1lbnRE
ZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CiAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDA7CiAgICAg
dHlwZW5hbWUgVHJlZUJ1aWxkZXI6OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIoY29u
c3RfY2FzdDxWTSo+KG1fdm0pLCBtX2xleGVyLmdldCgpKTsKICAgICBmYWlsSWZGYWxzZShwYXJz
ZVNvdXJjZUVsZW1lbnRzKGJvZHlCdWlsZGVyLCBDaGVja0ZvclN0cmljdE1vZGUpLCAiQ2Fubm90
IHBhcnNlIGJvZHkgb2YgdGhpcyBmdW5jdGlvbiIpOwogICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9
IHRva2VuQ29sdW1uKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0
YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3Ry
aWN0TW9kZSgpKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRM
b2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RN
b2RlKCksIGNvbnN0cnVjdG9yS2luZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdG
b3JGdW5jdGlvbk1vZGUoRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSkKQEAgLTEyOTIsNyArMTI5Miw4
IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdGb3JGdW5jdGlvbk1vZGUoRnVuY3Rpb25QYXJz
ZU1vZGUgbW9kZSkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlv
bkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVt
ZW50cywgRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29w
ZSwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYgaW5mbykKK3RlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8o
VHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cywg
RnVuY3Rpb25QYXJzZU1vZGUgbW9kZSwKKyAgICBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3Bl
LCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQsIFBhcnNlckZ1bmN0aW9u
SW5mbzxUcmVlQnVpbGRlcj4mIGluZm8pCiB7CiAgICAgQXV0b1BvcFNjb3BlUmVmIGZ1bmN0aW9u
U2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOwogICAgIGZ1bmN0aW9uU2NvcGUtPnNldElzRnVuY3Rp
b24oKTsKQEAgLTEzNDUsNyArMTM0Niw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
Ym9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkCiAgICAg
ICAgICAgICBlbmRMb2NhdGlvbi5zdGFydE9mZnNldCAtIGVuZExvY2F0aW9uLmxpbmVTdGFydE9m
ZnNldDsKICAgICAgICAgdW5zaWduZWQgY3VycmVudExpbmVTdGFydE9mZnNldCA9IG1fdG9rZW4u
bV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAKLSAgICAgICAgaW5mby5ib2R5ID0gY29udGV4
dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluZm8uYm9k
eVN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKKyAg
ICAgICAgaW5mby5ib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlv
biwgZW5kTG9jYXRpb24sIGluZm8uYm9keVN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBjYWNo
ZWRJbmZvLT5zdHJpY3RNb2RlLCBjb25zdHJ1Y3RvcktpbmQpOwogICAgICAgICAKICAgICAgICAg
ZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZyb21Tb3VyY2VQcm92aWRlckNhY2hlKGNhY2hlZEluZm8p
OwogICAgICAgICBmYWlsSWZGYWxzZShwb3BTY29wZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRl
cjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKSwgIlBhcnNlciBlcnJvciIpOwpAQCAtMTM2OCwxNSAr
MTM2OSwyNSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZAogICAgIH0KICAgICBtX2xhc3RGdW5j
dGlvbk5hbWUgPSBsYXN0RnVuY3Rpb25OYW1lOwogICAgIFBhcnNlclN0YXRlIG9sZFN0YXRlID0g
c2F2ZVN0YXRlKCk7Ci0gICAgaW5mby5ib2R5ID0gcGFyc2VGdW5jdGlvbkJvZHkoY29udGV4dCk7
CisgICAgaW5mby5ib2R5ID0gcGFyc2VGdW5jdGlvbkJvZHkoY29udGV4dCwgY29uc3RydWN0b3JL
aW5kKTsKICAgICByZXN0b3JlU3RhdGUob2xkU3RhdGUpOwogICAgIGZhaWxJZkZhbHNlKGluZm8u
Ym9keSwgIkNhbm5vdCBwYXJzZSB0aGUgYm9keSBvZiB0aGlzICIsIHN0cmluZ0ZvckZ1bmN0aW9u
TW9kZShtb2RlKSk7CiAgICAgY29udGV4dC5zZXRFbmRPZmZzZXQoaW5mby5ib2R5LCBtX2xleGVy
LT5jdXJyZW50T2Zmc2V0KCkpOwogICAgIGlmIChmdW5jdGlvblNjb3BlLT5zdHJpY3RNb2RlKCkg
JiYgaW5mby5uYW1lKSB7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1vZGUgPT0gRnVuY3Rpb25Nb2RlIHx8IG1vZGUgPT0gTWV0aG9kTW9kZSk7
CisjZWxzZQogICAgICAgICBSRUxFQVNFX0FTU0VSVChtb2RlID09IEZ1bmN0aW9uTW9kZSk7Cisj
ZW5kaWYKICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFy
Z3VtZW50cyA9PSAqaW5mby5uYW1lLCAiJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3Qg
YSB2YWxpZCBmdW5jdGlvbiBuYW1lIGluIHN0cmljdCBtb2RlIik7CiAgICAgICAgIHNlbWFudGlj
RmFpbElmVHJ1ZShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppbmZvLm5hbWUsICInIiwg
aW5mby5uYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4gc3Ry
aWN0IG1vZGUiKTsKICAgICB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgaWYg
KGZ1bmN0aW9uU2NvcGUtPmhhc0RpcmVjdFN1cGVyKCkpIHsKKyAgICAgICAgYm9vbCBuYW1lSXND
b25zdHJ1Y3RvciA9IGluZm8ubmFtZSAmJiAqaW5mby5uYW1lID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmNvbnN0cnVjdG9yOworICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobW9kZSAhPSBNZXRo
b2RNb2RlIHx8ICFuYW1lSXNDb25zdHJ1Y3RvciwgIkNhbm5vdCBjYWxsIHN1cGVyKCkgb3V0c2lk
ZSBvZiBhIGNsYXNzIGNvbnN0cnVjdG9yIik7CisgICAgfQorI2VuZGlmCiAgICAgaW5mby5jbG9z
ZUJyYWNlT2Zmc2V0ID0gbV90b2tlbi5tX2RhdGEub2Zmc2V0OwogICAgIHVuc2lnbmVkIGNsb3Nl
QnJhY2VMaW5lID0gbV90b2tlbi5tX2RhdGEubGluZTsKICAgICB1bnNpZ25lZCBjbG9zZUJyYWNl
TGluZVN0YXJ0T2Zmc2V0ID0gbV90b2tlbi5tX2RhdGEubGluZVN0YXJ0T2Zmc2V0OwpAQCAtMTQx
Nyw3ICsxNDI4LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uRGVjbGEKICAgICB1bnNpZ25lZCBmdW5j
dGlvbktleXdvcmRTdGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBuZXh0KCk7CiAgICAgUGFyc2Vy
RnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwotICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1
bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCB0cnVl
LCBpbmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBmdW5jdGlvbiIpOworICAgIGZhaWxJZkZhbHNl
KChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25N
b2RlLCB0cnVlLCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZDo6QmFzZSwgaW5mbykpLCAiQ2Fubm90
IHBhcnNlIHRoaXMgZnVuY3Rpb24iKTsKICAgICBmYWlsSWZGYWxzZShpbmZvLm5hbWUsICJGdW5j
dGlvbiBzdGF0ZW1lbnRzIG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgICBmYWlsSWZGYWxzZUlmU3Ry
aWN0KGRlY2xhcmVWYXJpYWJsZShpbmZvLm5hbWUpLCAiQ2Fubm90IGRlY2xhcmUgYSBmdW5jdGlv
biBuYW1lZCAnIiwgaW5mby5uYW1lLT5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7CiAgICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY0RlY2xTdGF0ZW1lbnQobG9jYXRpb24sIGluZm8sIGZ1
bmN0aW9uS2V5d29yZFN0YXJ0KTsKQEAgLTE0NjcsOCArMTQ3OCw4IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VDbGFzcyhUCiAgICAgaWYgKGNvbnN1bWUoRVhURU5EUykpIHsKICAgICAgICAgcGFyZW50Q2xh
c3MgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICBmYWlsSWZGYWxz
ZShwYXJlbnRDbGFzcywgIkNhbm5vdCBwYXJzZSB0aGUgcGFyZW50IGNsYXNzIG5hbWUiKTsKLSAg
ICAgICAgZmFpbFdpdGhNZXNzYWdlKCJJbmhlcml0YW5jZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIp
OwogICAgIH0KKyAgICBjb25zdCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3Rvcktp
bmQgPSBwYXJlbnRDbGFzcyA/IEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkIDogSlNQ
YXJzZXJDb25zdHJ1Y3RvcktpbmQ6OkJhc2U7CiAKICAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdz
KE9QRU5CUkFDRSwgVHJlZUJ1aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MsICJFeHBlY3RlZCBvcGVu
aW5nICd7JyBhdCB0aGUgc3RhcnQgb2YgYSBjbGFzcyBib2R5Iik7CiAKQEAgLTE1MDAsMTEgKzE1
MTEsMTIgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeHByZXNzaW9u
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKFQKICAgICAgICAgaWYgKGlzR2V0dGVyIHx8
IGlzU2V0dGVyKSB7CiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNTdGF0aWNNZXRo
b2QsICJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShpc0dl
dHRlciA/IEdldHRlck1vZGUgOiBTZXR0ZXJNb2RlKSk7CiAgICAgICAgICAgICBuZXh0RXhwZWN0
SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3Jkcyk7Ci0gICAgICAgICAgICBw
cm9wZXJ0eSA9IHBhcnNlR2V0dGVyU2V0dGVyKGNvbnRleHQsIGFsd2F5c1N0cmljdEluc2lkZUNs
YXNzLCBpc0dldHRlciA/IFByb3BlcnR5Tm9kZTo6R2V0dGVyIDogUHJvcGVydHlOb2RlOjpTZXR0
ZXIsIG1ldGhvZFN0YXJ0KTsKKyAgICAgICAgICAgIGJvb2wgaXNNZXRob2QgPSB0cnVlOworICAg
ICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUdldHRlclNldHRlcihjb250ZXh0LCBhbHdheXNTdHJp
Y3RJbnNpZGVDbGFzcywgaXNHZXR0ZXIgPyBQcm9wZXJ0eU5vZGU6OkdldHRlciA6IFByb3BlcnR5
Tm9kZTo6U2V0dGVyLCBtZXRob2RTdGFydCwgaXNNZXRob2QpOwogICAgICAgICAgICAgZmFpbElm
RmFsc2UocHJvcGVydHksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gbWV0aG9k
SW5mbzsKLSAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0
LCBGdW5jdGlvbk5lZWRzTmFtZSwgRnVuY3Rpb25Nb2RlLCBmYWxzZSwgbWV0aG9kSW5mbykpLCAi
Q2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CisgICAgICAgICAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIE1ldGhvZE1vZGUsIGZh
bHNlLCBjb25zdHJ1Y3RvcktpbmQsIG1ldGhvZEluZm8pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIG1l
dGhvZCIpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UobWV0aG9kSW5mby5uYW1lLCAibWV0aG9k
IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGRlY2xhcmVWYXJp
YWJsZShtZXRob2RJbmZvLm5hbWUpLCAiQ2Fubm90IGRlY2xhcmUgYSBtZXRob2QgbmFtZWQgJyIs
IG1ldGhvZEluZm8ubmFtZS0+aW1wbCgpLCAiJyIpOwogCkBAIC0xNTIyLDcgKzE1MzQsOCBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4cHJlc3Npb24gUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlQ2xhc3MoVAogICAgICAgICAgICAgLy8gRklYTUU6IFN5bnRheCBlcnJv
ciB3aGVuIHN1cGVyKCkgaXMgY2FsbGVkCiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUo
aXNTdGF0aWNNZXRob2QgJiYgKm1ldGhvZEluZm8ubmFtZSA9PSBwcm9wZXJ0eU5hbWVzLnByb3Rv
dHlwZSwKICAgICAgICAgICAgICAgICAiQ2Fubm90IGRlY2xhcmUgYSBzdGF0aWMgbWV0aG9kIG5h
bWVkICdwcm90b3R5cGUnIik7Ci0gICAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQuY3JlYXRl
UHJvcGVydHkobWV0aG9kSW5mby5uYW1lLCBtZXRob2QsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQs
IGFsd2F5c1N0cmljdEluc2lkZUNsYXNzKTsKKyAgICAgICAgICAgIGJvb2wgaXNNZXRob2QgPSB0
cnVlOworICAgICAgICAgICAgcHJvcGVydHkgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KG1ldGhv
ZEluZm8ubmFtZSwgbWV0aG9kLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCBhbHdheXNTdHJpY3RJ
bnNpZGVDbGFzcywgaXNNZXRob2QpOwogICAgICAgICB9CiAKICAgICAgICAgVHJlZVByb3BlcnR5
TGlzdCYgdGFpbCA9IGlzU3RhdGljTWV0aG9kID8gc3RhdGljTWV0aG9kc1RhaWwgOiBpbnN0YW5j
ZU1ldGhvZHNUYWlsOwpAQCAtMTk3NSw3ICsxOTg4LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlUHJvcGVydHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlUHJvcGVydHkoVHJl
ZUIKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUdldHRlclNl
dHRlcihUcmVlQnVpbGRlciYgY29udGV4dCwgYm9vbCBzdHJpY3QsIFByb3BlcnR5Tm9kZTo6VHlw
ZSB0eXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KQordGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlR2V0
dGVyU2V0dGVyKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBib29sIHN0cmljdCwgUHJvcGVydHlOb2Rl
OjpUeXBlIHR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQsIGJvb2wgaXNN
ZXRob2QpCiB7CiAgICAgY29uc3QgSWRlbnRpZmllciogc3RyaW5nUHJvcGVydHlOYW1lID0gMDsK
ICAgICBkb3VibGUgbnVtZXJpY1Byb3BlcnR5TmFtZSA9IDA7CkBAIC0xOTkwLDE0ICsyMDAzLDE0
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZUdldHRlclNldHRlcihUCiAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVC
dWlsZGVyPiBpbmZvOwogICAgIGlmICh0eXBlID09IFByb3BlcnR5Tm9kZTo6R2V0dGVyKSB7CiAg
ICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoKE9QRU5QQVJFTiksICJFeHBlY3RlZCBhIHBhcmFtZXRl
ciBsaXN0IGZvciBnZXR0ZXIgZGVmaW5pdGlvbiIpOwotICAgICAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgR2V0dGVyTW9k
ZSwgZmFsc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBnZXR0ZXIgZGVmaW5pdGlvbiIpOworICAg
ICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1Jl
cXVpcmVtZW50cywgR2V0dGVyTW9kZSwgZmFsc2UsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpC
YXNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgZ2V0dGVyIGRlZmluaXRpb24iKTsKICAgICB9IGVs
c2UgewogICAgICAgICBmYWlsSWZGYWxzZShtYXRjaChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBw
YXJhbWV0ZXIgbGlzdCBmb3Igc2V0dGVyIGRlZmluaXRpb24iKTsKLSAgICAgICAgZmFpbElmRmFs
c2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNl
dHRlck1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRpb24i
KTsKKyAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0
aW9uTm9SZXF1aXJlbWVudHMsIFNldHRlck1vZGUsIGZhbHNlLCBKU1BhcnNlckNvbnN0cnVjdG9y
S2luZDo6QmFzZSwgaW5mbykpLCAiQ2Fubm90IHBhcnNlIHNldHRlciBkZWZpbml0aW9uIik7CiAg
ICAgfQogICAgIGlmIChzdHJpbmdQcm9wZXJ0eU5hbWUpCi0gICAgICAgIHJldHVybiBjb250ZXh0
LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkobG9jYXRpb24sIHR5cGUsIHN0cmljdCwgc3Ry
aW5nUHJvcGVydHlOYW1lLCBpbmZvLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KTsKLSAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0X2Nhc3Q8Vk0q
PihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgbG9jYXRpb24sIHR5cGUsIHN0cmljdCwgbnVtZXJpY1By
b3BlcnR5TmFtZSwgaW5mbywgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCk7CisgICAgICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkobG9jYXRpb24sIHR5cGUs
IHN0cmljdCwgc3RyaW5nUHJvcGVydHlOYW1lLCBpbmZvLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zm
c2V0LCBpc01ldGhvZCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlR2V0dGVyT3JTZXR0ZXJQ
cm9wZXJ0eShjb25zdF9jYXN0PFZNKj4obV92bSksIG1fcGFyc2VyQXJlbmEsIGxvY2F0aW9uLCB0
eXBlLCBzdHJpY3QsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIGluZm8sIGdldHRlck9yU2V0dGVyU3Rh
cnRPZmZzZXQsIGlzTWV0aG9kKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4K
QEAgLTIxODIsNyArMjE5NSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4
cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlUHJpbWFyeUV4cHJlCiAgICAgICAgIG5l
eHQoKTsKICAgICAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwogICAg
ICAgICBpbmZvLm5hbWUgPSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7Ci0g
ICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5v
UmVxdWlyZW1lbnRzLCBGdW5jdGlvbk1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2Ug
ZnVuY3Rpb24gZXhwcmVzc2lvbiIpOworICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlv
bkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25Nb2RlLCBmYWxz
ZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBm
dW5jdGlvbiBleHByZXNzaW9uIik7CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0
aW9uRXhwcihsb2NhdGlvbiwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwogICAgIH0KICNp
ZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKQEAgLTIzMzIsNyArMjM0NSwxNiBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZU1lbWJlckV4cHJlcwogICAgICAgICBuZXdDb3VudCsrOwogICAgIH0KIAorI2lmIEVOQUJM
RShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtYXRjaChTVVBFUik7
CisgICAgaWYgKGJhc2VJc1N1cGVyKSB7CisgICAgICAgIGJhc2UgPSBjb250ZXh0LnN1cGVyRXhw
cihsb2NhdGlvbik7CisgICAgICAgIG5leHQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYmFzZSA9
IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oY29udGV4dCk7CisjZWxzZQogICAgIGJhc2UgPSBwYXJz
ZVByaW1hcnlFeHByZXNzaW9uKGNvbnRleHQpOworI2VuZGlmCiAgICAgCiAgICAgZmFpbElmRmFs
c2UoYmFzZSwgIkNhbm5vdCBwYXJzZSBiYXNlIGV4cHJlc3Npb24iKTsKICAgICB3aGlsZSAodHJ1
ZSkgewpAQCAtMjM2NCw2ICsyMzg2LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlTWVtYmVyRXhwcmVzCiAgICAg
ICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVzc2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBv
c2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBwYXJz
ZUFyZ3VtZW50cyhjb250ZXh0LCBBbGxvd1NwcmVhZCk7CiAgICAgICAgICAgICAgICAgZmFpbElm
RmFsc2UoYXJndW1lbnRzLCAiQ2Fubm90IHBhcnNlIGNhbGwgYXJndW1lbnRzIik7CisjaWYgRU5B
QkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgICAgICAgICAgaWYgKGJhc2VJc1N1cGVyKQor
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0SGFzRGlyZWN0U3VwZXIoKTsK
KyNlbmRpZgogICAgICAgICAgICAgICAgIGJhc2UgPSBjb250ZXh0Lm1ha2VGdW5jdGlvbkNhbGxO
b2RlKHN0YXJ0TG9jYXRpb24sIGJhc2UsIGFyZ3VtZW50cywgZXhwcmVzc2lvblN0YXJ0LCBleHBy
ZXNzaW9uRW5kLCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIG1fbm9uTEhTQ291bnQgPSBub25MSFNDb3VudDsKQEAgLTIzODEsOCArMjQwNywxNCBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZU1lbWJlckV4cHJlcwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
Z290byBlbmRNZW1iZXJFeHByZXNzaW9uOwogICAgICAgICB9CisjaWYgRU5BQkxFKEVTNl9DTEFT
U19TWU5UQVgpCisgICAgICAgIGJhc2VJc1N1cGVyID0gZmFsc2U7CisjZW5kaWYKICAgICB9CiBl
bmRNZW1iZXJFeHByZXNzaW9uOgorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIHNl
bWFudGljRmFpbElmVHJ1ZShiYXNlSXNTdXBlciAmJiAhbmV3Q291bnQsICJDYW5ub3QgcmVmZXJl
bmNlIHN1cGVyIik7CisjZW5kaWYKICAgICB3aGlsZSAobmV3Q291bnQtLSkKICAgICAgICAgYmFz
ZSA9IGNvbnRleHQuY3JlYXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgZXhwcmVzc2lvblN0YXJ0
LCBsYXN0VG9rZW5FbmRQb3NpdGlvbigpKTsKICAgICByZXR1cm4gYmFzZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDUwMWMwMzY0NGQ1NTk3YjhhMWExYWYzZTlmOWM4
MmUxODRlZDJkOGMuLmRkYTFjYmJiZDNmM2NkNmEzYzNjZTAwZTM0NjcyNjg3MDdmMDczODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAtMTE1LDYgKzExNSw5IEBAIHN0
cnVjdCBTY29wZSB7CiAgICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKGZhbHNlKQogICAgICAg
ICAsIG1fdXNlc0V2YWwoZmFsc2UpCiAgICAgICAgICwgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uKGZh
bHNlKQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICAsIG1faGFzRGlyZWN0
U3VwZXIoZmFsc2UpCisjZW5kaWYKICAgICAgICAgLCBtX2FsbG93c05ld0RlY2xzKHRydWUpCiAg
ICAgICAgICwgbV9zdHJpY3RNb2RlKHN0cmljdE1vZGUpCiAgICAgICAgICwgbV9pc0Z1bmN0aW9u
KGlzRnVuY3Rpb24pCkBAIC0xMzAsNiArMTMzLDkgQEAgc3RydWN0IFNjb3BlIHsKICAgICAgICAg
LCBtX3NoYWRvd3NBcmd1bWVudHMocmhzLm1fc2hhZG93c0FyZ3VtZW50cykKICAgICAgICAgLCBt
X3VzZXNFdmFsKHJocy5tX3VzZXNFdmFsKQogICAgICAgICAsIG1fbmVlZHNGdWxsQWN0aXZhdGlv
bihyaHMubV9uZWVkc0Z1bGxBY3RpdmF0aW9uKQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgICAgICAsIG1faGFzRGlyZWN0U3VwZXIocmhzLm1faGFzRGlyZWN0U3VwZXIpCisjZW5k
aWYKICAgICAgICAgLCBtX2FsbG93c05ld0RlY2xzKHJocy5tX2FsbG93c05ld0RlY2xzKQogICAg
ICAgICAsIG1fc3RyaWN0TW9kZShyaHMubV9zdHJpY3RNb2RlKQogICAgICAgICAsIG1faXNGdW5j
dGlvbihyaHMubV9pc0Z1bmN0aW9uKQpAQCAtMjY1LDYgKzI3MSwxMSBAQCBzdHJ1Y3QgU2NvcGUg
ewogCiAgICAgdm9pZCBzZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCkgeyBtX25lZWRzRnVsbEFjdGl2
YXRpb24gPSB0cnVlOyB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29s
IGhhc0RpcmVjdFN1cGVyKCkgeyByZXR1cm4gbV9oYXNEaXJlY3RTdXBlcjsgfQorICAgIHZvaWQg
c2V0SGFzRGlyZWN0U3VwZXIoKSB7IG1faGFzRGlyZWN0U3VwZXIgPSB0cnVlOyB9CisjZW5kaWYK
KwogICAgIGJvb2wgY29sbGVjdEZyZWVWYXJpYWJsZXMoU2NvcGUqIG5lc3RlZFNjb3BlLCBib29s
IHNob3VsZFRyYWNrQ2xvc2VkVmFyaWFibGVzKQogICAgIHsKICAgICAgICAgaWYgKG5lc3RlZFNj
b3BlLT5tX3VzZXNFdmFsKQpAQCAtMzU4LDYgKzM2OSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3NoYWRvd3NBcmd1bWVudHMgOiAxOwogICAgIGJvb2wgbV91c2VzRXZhbCA6IDE7CiAgICAgYm9v
bCBtX25lZWRzRnVsbEFjdGl2YXRpb24gOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgIGJvb2wgbV9oYXNEaXJlY3RTdXBlciA6IDE7CisjZW5kaWYKICAgICBib29sIG1fYWxs
b3dzTmV3RGVjbHMgOiAxOwogICAgIGJvb2wgbV9zdHJpY3RNb2RlIDogMTsKICAgICBib29sIG1f
aXNGdW5jdGlvbiA6IDE7CkBAIC03MzksOCArNzUzLDggQEAgcHJpdmF0ZToKICAgICBlbnVtIFNw
cmVhZE1vZGUgeyBBbGxvd1NwcmVhZCwgRG9udEFsbG93U3ByZWFkIH07CiAgICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVBcmd1bWVudHMgcGFyc2VBcmd1
bWVudHMoVHJlZUJ1aWxkZXImLCBTcHJlYWRNb2RlKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBwYXJzZVByb3BlcnR5KFRyZWVCdWlsZGVyJiwgYm9vbCBz
dHJpY3QpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IHBh
cnNlR2V0dGVyU2V0dGVyKFRyZWVCdWlsZGVyJiwgYm9vbCBzdHJpY3QsIFByb3BlcnR5Tm9kZTo6
VHlwZSwgdW5zaWduZWQgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCk7Ci0gICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5jdGlvbkJvZHkgcGFyc2VG
dW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVQcm9wZXJ0eSBwYXJzZUdldHRlclNldHRlcihUcmVlQnVpbGRlciYsIGJvb2wgc3Ry
aWN0LCBQcm9wZXJ0eU5vZGU6OlR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZz
ZXQsIGJvb2wgaXNNZXRob2QgPSBmYWxzZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5jdGlvbkJvZHkgcGFyc2VGdW5jdGlvbkJvZHkoVHJl
ZUJ1aWxkZXImLCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCk7CiAgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IHBhcnNl
Rm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYpOwogICAgIGVudW0gVmFyRGVjbGFyYXRpb25M
aXN0Q29udGV4dCB7IEZvckxvb3BDb250ZXh0LCBWYXJEZWNsYXJhdGlvbkNvbnRleHQgfTsKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIHBhcnNlVmFyRGVj
bGFyYXRpb25MaXN0KFRyZWVCdWlsZGVyJiwgaW50JiBkZWNsYXJhdGlvbnMsIFRyZWVEZWNvbnN0
cnVjdGlvblBhdHRlcm4mIGxhc3RQYXR0ZXJuLCBUcmVlRXhwcmVzc2lvbiYgbGFzdEluaXRpYWxp
emVyLCBKU1RleHRQb3NpdGlvbiYgaWRlbnRTdGFydCwgSlNUZXh0UG9zaXRpb24mIGluaXRTdGFy
dCwgSlNUZXh0UG9zaXRpb24mIGluaXRFbmQsIFZhckRlY2xhcmF0aW9uTGlzdENvbnRleHQpOwpA
QCAtNzUwLDcgKzc2NCw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBORVZFUl9JTkxJTkUgVHJlZURlY29uc3RydWN0aW9uUGF0dGVybiBwYXJzZURlY29uc3Ry
dWN0aW9uUGF0dGVybihUcmVlQnVpbGRlciYsIERlY29uc3RydWN0aW9uS2luZCwgaW50IGRlcHRo
ID0gMCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgVHJl
ZURlY29uc3RydWN0aW9uUGF0dGVybiB0cnlQYXJzZURlY29uc3RydWN0aW9uUGF0dGVybkV4cHJl
c3Npb24oVHJlZUJ1aWxkZXImKTsKIAotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
TkVWRVJfSU5MSU5FIGJvb2wgcGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImLCBGdW5jdGlv
blJlcXVpcmVtZW50cywgRnVuY3Rpb25QYXJzZU1vZGUsIGJvb2wgbmFtZUlzSW5Db250YWluaW5n
U2NvcGUsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mKTsKKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRy
ZWVCdWlsZGVyJiwgRnVuY3Rpb25SZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlLCBib29s
IG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCwgUGFyc2Vy
RnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYpOwogI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVDbGFz
c0V4cHJlc3Npb24gcGFyc2VDbGFzcyhUcmVlQnVpbGRlciYsIEZ1bmN0aW9uUmVxdWlyZW1lbnRz
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXJNb2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCmlu
ZGV4IDA2MTFiODhlNzBjZWE2NThjYzgzNTI3OGNiNDY3MGZhMjExYmUxMTcuLmJiYjBmOGNmMmRl
MTUzYWNkZGRkYzM2MTI4MWNiY2QxZjYyMDdiMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlck1vZGVzLmgKQEAgLTMzLDYgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGVudW0gSlNQYXJzZXJTdHJpY3RuZXNzIHsgSlNQYXJzZU5vcm1hbCwgSlNQYXJzZUJ1aWx0aW4s
IEpTUGFyc2VTdHJpY3QgfTsKIGVudW0gSlNQYXJzZXJNb2RlIHsgSlNQYXJzZVByb2dyYW1Db2Rl
LCBKU1BhcnNlRnVuY3Rpb25Db2RlIH07CitlbnVtIGNsYXNzIEpTUGFyc2VyQ29uc3RydWN0b3JL
aW5kIHsgQmFzZSwgRGVyaXZlZCB9OwogCiBlbnVtIFByb2ZpbGVyTW9kZSB7IFByb2ZpbGVyT2Zm
LCBQcm9maWxlck9uIH07CiBlbnVtIERlYnVnZ2VyTW9kZSB7IERlYnVnZ2VyT2ZmLCBEZWJ1Z2dl
ck9uIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENo
ZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCmlu
ZGV4IDU4ODRmYjI4MmU3NTYxYTY1ODZkMGY2ZTFkYTU5MTUxYjhkNTRhNDcuLmI4N2NlY2E2MWY3
MWVhODA0ZjhmYWI2MzU4NTFlZDEyYzIzMjAzMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCkBAIC03Myw3ICs3MywxMCBAQCBwdWJsaWM6CiAgICAg
ZW51bSB7IE5vbmVFeHByID0gMCwKICAgICAgICAgUmVzb2x2ZUV2YWxFeHByLCBSZXNvbHZlRXhw
ciwgSW50ZWdlckV4cHIsIERvdWJsZUV4cHIsIFN0cmluZ0V4cHIsCiAgICAgICAgIFRoaXNFeHBy
LCBOdWxsRXhwciwgQm9vbEV4cHIsIFJlZ0V4cEV4cHIsIE9iamVjdExpdGVyYWxFeHByLAotICAg
ICAgICBGdW5jdGlvbkV4cHIsIENsYXNzRXhwciwgQnJhY2tldEV4cHIsIERvdEV4cHIsIENhbGxF
eHByLAorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICBDbGFzc0V4cHIsIFN1
cGVyRXhwciwgU3VwZXJCcmFja2V0RXhwciwgU3VwZXJEb3RFeHByLAorI2VuZGlmCisgICAgICAg
IEZ1bmN0aW9uRXhwciwgQnJhY2tldEV4cHIsIERvdEV4cHIsIENhbGxFeHByLAogICAgICAgICBO
ZXdFeHByLCBQcmVFeHByLCBQb3N0RXhwciwgVW5hcnlFeHByLCBCaW5hcnlFeHByLAogICAgICAg
ICBDb25kaXRpb25hbEV4cHIsIEFzc2lnbm1lbnRFeHByLCBUeXBlb2ZFeHByLAogICAgICAgICBE
ZWxldGVFeHByLCBBcnJheUxpdGVyYWxFeHByLCBCaW5kaW5nRGVjb25zdHJ1Y3Rpb24sCkBAIC0x
NDYsNiArMTQ5LDkgQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVVuYXJ5UGx1
cyhjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlF
eHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlVm9pZChjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhwcmVzc2lv
blR5cGUgdGhpc0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gVGhpc0V4cHI7
IH0KKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBFeHByZXNzaW9uVHlwZSBzdXBl
ckV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gU3VwZXJFeHByOyB9CisjZW5k
aWYKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGNvbnN0IElkZW50aWZpZXIqLCBpbnQpIHsgcmV0dXJuIFJlc29sdmVFeHByOyB9CiAgICAg
RXhwcmVzc2lvblR5cGUgY3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24m
KSB7IHJldHVybiBPYmplY3RMaXRlcmFsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50KSB7IHJldHVybiBPYmpl
Y3RMaXRlcmFsRXhwcjsgfQpAQCAtMTY4LDE0ICsxNzQsMTQgQEAgcHVibGljOgogICAgIENsYXNz
RXhwcmVzc2lvbiBjcmVhdGVDbGFzc0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9uVHlwZSwgUHJvcGVydHlMaXN0
LCBQcm9wZXJ0eUxpc3QpIHsgcmV0dXJuIENsYXNzRXhwcjsgfQogI2VuZGlmCiAgICAgRXhwcmVz
c2lvblR5cGUgY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0
IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIGludCkgeyByZXR1cm4gRnVuY3Rp
b25FeHByOyB9Ci0gICAgaW50IGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgYm9vbCkgeyByZXR1cm4gRnVu
Y3Rpb25Cb2R5UmVzdWx0OyB9CisgICAgaW50IGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgYm9vbCwgSlNQ
YXJzZXJDb25zdHJ1Y3RvcktpbmQpIHsgcmV0dXJuIEZ1bmN0aW9uQm9keVJlc3VsdDsgfQogICAg
IHZvaWQgc2V0RnVuY3Rpb25OYW1lU3RhcnQoaW50LCBpbnQpIHsgfQogICAgIGludCBjcmVhdGVB
cmd1bWVudHMoKSB7IHJldHVybiBBcmd1bWVudHNSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlQXJn
dW1lbnRzKGludCkgeyByZXR1cm4gQXJndW1lbnRzUmVzdWx0OyB9CiAgICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlU3ByZWFkRXhwcmVzc2lvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uVHlwZSwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gU3ByZWFkRXhwcjsgfQogICAgIGludCBj
cmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4g
QXJndW1lbnRzTGlzdFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50KSB7IHJldHVybiBBcmd1bWVudHNMaXN0UmVzdWx0
OyB9Ci0gICAgUHJvcGVydHkgY3JlYXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciogbmFtZSwg
aW50LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBjb21wbGV0ZSkKKyAgICBQcm9wZXJ0
eSBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBpbnQsIFByb3BlcnR5Tm9k
ZTo6VHlwZSB0eXBlLCBib29sIGNvbXBsZXRlLCBib29sID0gZmFsc2UpCiAgICAgewogICAgICAg
ICBpZiAoIWNvbXBsZXRlKQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwpAQCAt
MjMwLDE0ICsyMzYsMTQgQEAgcHVibGljOgogICAgIGludCBjcmVhdGVEZWJ1Z2dlcihjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAg
ICAgaW50IGNyZWF0ZUNvbnN0U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwg
aW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGludCBhcHBlbmRDb25z
dERlY2woY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBjb25zdCBJZGVudGlmaWVyKiwgaW50
KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KLSAgICBQcm9wZXJ0eSBjcmVhdGVHZXR0ZXJP
clNldHRlclByb3BlcnR5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3BlcnR5Tm9kZTo6VHlw
ZSB0eXBlLCBib29sIHN0cmljdCwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgY29uc3QgUGFyc2Vy
RnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgdW5zaWduZWQpCisgICAgUHJvcGVydHkgY3Jl
YXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0
eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBzdHJpY3QsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGNv
bnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIHVuc2lnbmVkLCBib29sKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG5hbWUpOwogICAgICAgICBpZiAoIXN0cmljdCkKICAgICAg
ICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKICAgICAgICAgcmV0dXJuIFByb3BlcnR5KG5h
bWUsIHR5cGUpOwogICAgIH0KLSAgICBQcm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3Bl
cnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBzdHJpY3QsIGRvdWJsZSBuYW1lLCBj
b25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCB1bnNpZ25lZCkKKyAgICBQ
cm9wZXJ0eSBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEm
IHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUg
dHlwZSwgYm9vbCBzdHJpY3QsIGRvdWJsZSBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88
U3ludGF4Q2hlY2tlcj4mLCB1bnNpZ25lZCwgYm9vbCkKICAgICB7CiAgICAgICAgIGlmICghc3Ry
aWN0KQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKaW5kZXggZjExMTc3M2Yx
MDU1NzQ5ODFlOTY4NzdjNDc5M2U0ZTk1YWRiNTg1OC4uZmJlMzU4MzYwNmI5MDViMGZiODA5ZjQ0
OTcxZWIzNWNmMzYyNjNkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC0yNTMsNyArMjUzLDggQEAKICAgICBtYWNybyhpc0Zp
bml0ZSkgXAogICAgIG1hY3JvKFR5cGVFcnJvcikgXAogICAgIG1hY3JvKHVuZGVmaW5lZCkgXAot
ICAgIG1hY3JvKEJ1aWx0aW5Mb2cpCisgICAgbWFjcm8oQnVpbHRpbkxvZykgXAorICAgIG1hY3Jv
KGhvbWVPYmplY3QpCiAKIG5hbWVzcGFjZSBKU0MgewogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCmluZGV4IDcxNDkxZGE0ZjBkYzg4NzM0NGMzYTY4ODc4
Y2Y5NjE5MmJlM2E4ODguLjcyNDI5NTNjOTRiYWZlMzA4NGM4Mjg5YTEwMzBkM2I0NTU5YWE3MjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTQ2Nyw3
ICs0NjcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyQ29kZSgpOwogCi0gICAgRXhlY3V0
YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhu
ZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxz
ZSk7IH0KKyAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJu
IEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1v
ZGUoKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7IH0KIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxl
cygpIHsgcmV0dXJuIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLT5udW1WYXJpYWJsZXMoKTsgfQog
ICAgIHVuc2lnbmVkIG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fdW5saW5rZWRF
dmFsQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsgfQpAQCAtNTIyLDcgKzUyMiw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXJDb2RlKCk7CiAKLSAgICBFeGVjdXRhYmxlSW5m
byBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0
aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlKTsgfQor
ICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0
YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBm
YWxzZSwgZmFsc2UsIGZhbHNlKTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBTY3Jp
cHRFeGVjdXRhYmxlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGYzNDBmNzU5NDU3NTljYmM1ODI5MDQ1ODA2N2E2NzBiNDg1
OGU2NzcuLjY1ZjNlMWFlNTgyNzliMTVlMTMxNTg4NTRjNDJiNTdmZDE3YmJjMjMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMCBAQAorMjAxNS0wMy0wNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KKworICAgICAgICBTdXBwb3J0IGV4dGVuZHMgYW5kIHN1cGVyIGtleXdvcmRzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIyMDAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0cyBmb3Ig
ImV4dGVuZHMiIGFuZCAic3VwZXIiIGtleXdvcmRzLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0
aW9uczoKKyAgICAgICAgKiBqcy9jbGFzcy1zeW50YXgtZXh0ZW5kcy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGpzL2NsYXNzLXN5bnRheC1leHRlbmRzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGpzL2NsYXNzLXN5bnRheC1zdXBlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGpzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9zY3Jp
cHQtdGVzdHMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3Nj
cmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtc3VwZXIuanM6IEFkZGVkLgorCiAyMDE1LTAzLTA0ICBK
b3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogQXJyYXkvQ29sbGVjdGlvbiBTaXplcyBzaG91bGQgYmUgdmlzaWJsZSBhbmQgZGlzdGlu
Y3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGI4ZWZiZGRhY2RkNDUxOTk4NGM5NmVmZTZlZWQ4MTE0
NjE0MGY1ZjcuLjVhZjEwMjQ1MDZkMTk1OTM3YmQ2MDVlNjk4YzlkNTcwZTBhYzA4YjIgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvVGVz
dEV4cGVjdGF0aW9ucwpAQCAtNjksNiArNjksOCBAQCB3ZWJraXQub3JnL2IvMTI3ODYwIFsgRGVi
dWcgXSBqcy9mdW5jdGlvbi1hcHBseS1hbGlhc2VkLmh0bWwgWyBTa2lwIF0KICMgRVM2IGNsYXNz
IHN5bnRheCBoYXNuJ3QgYmVlbiBlbmFibGVkIHlldC4KIHdlYmtpdC5vcmcvYi8xNDA0OTEganMv
Y2xhc3Mtc3ludGF4LWRlY2xhcmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8x
NDA0OTEganMvY2xhc3Mtc3ludGF4LWV4cHJlc3Npb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzE0MDQ5MSBqcy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMTQwNDkxIGpzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sIFsgRmFpbHVyZSBd
CiAKICMgVGhpcyB0ZXN0IHZlcmlmaWVzIGR5bmFtaWMgbWFuaXB1bGF0aW9uIG9mIHRoZSBtcm9v
dCBhbmQgbXNxcnQgZWxlbWVudHMuCiBtYXRobWwvcm9vdHMtcmVtb3ZlQ2hpbGQuaHRtbCBbIElt
YWdlT25seUZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4
LWV4dGVuZHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LWV4dGVu
ZHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwNTRiZWYyZDgzYWI5ZGExZWM3ZWJlNjc0ODZh
MDAzNmQ2NDc4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50
YXgtZXh0ZW5kcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMSBAQAorVGVzdHMgZm9yIEVTNiBj
bGFzcyBzeW50YXggImV4dGVuZHMiCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIChuZXcgQmFzZSkgaW5zdGFuY2VvZiBCYXNlIGlzIHRydWUKK1BBU1MgKG5ldyBEZXJpdmVk
KSBpbnN0YW5jZW9mIERlcml2ZWQgaXMgdHJ1ZQorUEFTUyAobmV3IERlcml2ZWQpLmJhc2VNZXRo
b2QoKSBpcyAiYmFzZSIKK1BBU1MgKG5ldyBEZXJpdmVkKS5vdmVycmlkZW5NZXRob2QoKSBpcyAi
ZGVyaXZlZCIKK1BBU1MgRGVyaXZlZC5zdGF0aWNCYXNlTWV0aG9kKCkgaXMgImJhc2UiCitQQVNT
IERlcml2ZWQuc3RhdGljT3ZlcnJpZGVuTWV0aG9kKCkgaXMgImRlcml2ZWQiCitQQVNTIHggPSBj
bGFzcyBleHRlbmRzIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQg
b2Ygc2NyaXB0LgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyB0aHJldyBleGNlcHRpb24gU3ludGF4
RXJyb3I6IFVuZXhwZWN0ZWQgZW5kIG9mIHNjcmlwdC4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMg
QmFzZSB7IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQgb2Ygc2Ny
aXB0LgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHt9IHRocmV3IGV4Y2VwdGlvbiBTeW50
YXhFcnJvcjogQ2xhc3MgZGVjbGFyYXRpb24gd2l0aG91dCBhIGNvbnN0cnVjdG9yIGlzIG5vdCBz
dXBwb3J0ZWQgeWV0Li4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9y
KCkgeyB9IH0gZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHguX19wcm90b19fIGlzIEJh
c2UKK1BBU1MgeC5wcm90b3R5cGUuX19wcm90b19fIGlzIEJhc2UucHJvdG90eXBlCitQQVNTIHgg
PSBjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXyBp
cyBGdW5jdGlvbi5wcm90b3R5cGUKK1BBU1MgeC5fX3Byb3RvX18gaXMgRnVuY3Rpb24ucHJvdG90
eXBlCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIDMgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9f
cHJvdG9fXyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcyBpcyBub3Qg
YW4gb2JqZWN0Li4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgImFiYyIgeyBjb25zdHJ1Y3Rvcigp
IHsgfSB9OyB4Ll9fcHJvdG9fXyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJj
bGFzcyBpcyBub3QgYW4gb2JqZWN0Li4KK2Jhc2VXaXRoQmFkUHJvdG90eXBlID0gY2xhc3MgeyBj
b25zdHJ1Y3RvcigpIHsgfSB9OyBiYXNlV2l0aEJhZFByb3RvdHlwZS5wcm90b3R5cGUgPSAzCitQ
QVNTIHggPSBjbGFzcyBleHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3Io
KSB7IH0gfSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcydzIHByb3Rv
dHlwZSBpcyBub3QgYW4gb2JqZWN0Li4KK2Jhc2VXaXRoQmFkUHJvdG90eXBlLnByb3RvdHlwZSA9
ICJhYmMiCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29u
c3RydWN0b3IoKSB7IH0gfSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFz
cydzIHByb3RvdHlwZSBpcyBub3QgYW4gb2JqZWN0Li4KK1BBU1MgYmFzZVdpdGhCYWRQcm90b3R5
cGUucHJvdG90eXBlID0gbnVsbDsgeCA9IGNsYXNzIGV4dGVuZHMgYmFzZVdpdGhCYWRQcm90b3R5
cGUgeyBjb25zdHJ1Y3RvcigpIHsgfSB9IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1leHRlbmRzLmh0bWwgYi9MYXlvdXRUZXN0cy9q
cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5MDA2YzUyNDA3NWZhNDY2
MDBlMWYzM2YxYWRkZDgxMDBkZGViNmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9q
cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5odG1sCkBAIC0wLDAgKzEsOCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NsYXNzLXN5bnRheC1l
eHRlbmRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9j
bGFzcy1zeW50YXgtc3VwZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjNGFhNjExMzBlYjM0
YTNkNjgyZTgxMDliOTRkY2UyZDQ0MzkwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9jbGFzcy1zeW50YXgtc3VwZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDAgQEAKK1Rl
c3RzIGZvciBFUzYgY2xhc3Mgc3ludGF4ICJzdXBlciIKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgKG5ldyBCYXNlKSBpbnN0YW5jZW9mIEJhc2UgaXMgdHJ1ZQorUEFTUyAo
bmV3IERlcml2ZWQpIGluc3RhbmNlb2YgRGVyaXZlZCBpcyB0cnVlCitQQVNTIChuZXcgRGVyaXZl
ZCkuY2FsbEJhc2VNZXRob2QoKSBpcyBiYXNlTWV0aG9kVmFsdWUKK1BBU1MgeCA9IChuZXcgRGVy
aXZlZCkuY2FsbEJhc2VNZXRob2Q7IHgoKSBpcyBiYXNlTWV0aG9kVmFsdWUKK1BBU1MgKG5ldyBE
ZXJpdmVkKS5jYWxsQmFzZU1ldGhvZEluR2V0dGVyIGlzIGJhc2VNZXRob2RWYWx1ZQorUEFTUyAo
bmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kSW5TZXR0ZXIgPSAxOyB2YWx1ZUluU2V0dGVyIGlz
IGJhc2VNZXRob2RWYWx1ZQorUEFTUyAobmV3IERlcml2ZWQpLmJhc2VNZXRob2RJbkdldHRlclNl
dHRlciBpcyAobmV3IEJhc2UpLmJhc2VNZXRob2QKK1BBU1MgKG5ldyBEZXJpdmVkKS5iYXNlTWV0
aG9kSW5HZXR0ZXJTZXR0ZXIgPSAxOyB2YWx1ZUluU2V0dGVyIGlzIChuZXcgQmFzZSkuYmFzZU1l
dGhvZAorUEFTUyBEZXJpdmVkLnN0YXRpY01ldGhvZCgpIGlzICJiYXNlMyIKK1BBU1MgKG5ldyBT
ZWNvbmREZXJpdmVkKS5jaGFpbk1ldGhvZCgpIGlzIFsiYmFzZSIsICJkZXJpdmVkIiwgInNlY29u
ZERlcml2ZWQiXQorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7
IHN1cGVyKCk7IH0gc3VwZXIoKSB7fSB9IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5l
eHBlY3RlZCBrZXl3b3JkICdzdXBlcicuIEV4cGVjdGVkIGFuIGluZGVudGlmaWVyLi4KK1BBU1Mg
eCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IG1ldGhv
ZCgpIHsgc3VwZXIoKSB9IH0gdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBDYW5ub3QgY2Fs
bCBzdXBlcigpIG91dHNpZGUgb2YgYSBjbGFzcyBjb25zdHJ1Y3Rvci4uCitQQVNTIHggPSBjbGFz
cyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBtZXRob2QoKSB7IHN1
cGVyIH0gfSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IENhbm5vdCByZWZlcmVuY2Ugc3Vw
ZXIuLgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVy
KCk7IH0gbWV0aG9kKCkgeyByZXR1cm4gbmV3IHN1cGVyIH0gfSBkaWQgbm90IHRocm93IGV4Y2Vw
dGlvbi4KK1BBU1MgKG5ldyB4KS5tZXRob2QoKSBpbnN0YW5jZW9mIEJhc2UgaXMgdHJ1ZQorUEFT
UyAobmV3IHgpLm1ldGhvZCgpIGluc3RhbmNlb2YgeCBpcyBmYWxzZQorUEFTUyB4ID0gY2xhc3Mg
ZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kMSgpIHsgZGVs
ZXRlIChzdXBlci5mb28pIH0gbWV0aG9kMigpIHsgZGVsZXRlIHN1cGVyWyJmb28iXSB9IH0gZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIChuZXcgeCkubWV0aG9kMSgpIHRocmV3IGV4Y2Vw
dGlvbiBSZWZlcmVuY2VFcnJvcjogQ2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5LgorUEFT
UyAobmV3IHgpLm1ldGhvZDIoKSB0aHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENhbm5v
dCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eS4KK1BBU1MgbmV3IChjbGFzcyB7IGNvbnN0cnVjdG9y
KCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IH0pIGluc3RhbmNlb2YgT2JqZWN0IGlzIHRydWUKK1BB
U1MgbmV3IChjbGFzcyB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gMTsgfSB9KSBpbnN0YW5jZW9m
IE9iamVjdCBpcyB0cnVlCitQQVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0
b3IoKSB7IHJldHVybiB1bmRlZmluZWQgfSB9KSBpcyB1bmRlZmluZWQKK1BBU1MgeCA9IHsgfTsg
bmV3IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9KTsg
aXMgeAorUEFTUyB4IGluc3RhbmNlb2YgQmFzZSBpcyBmYWxzZQorUEFTUyBuZXcgKGNsYXNzIGV4
dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IENhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9m
IGEgZGVyaXZlZCBjbGFzcy4uCitQQVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3Ry
dWN0b3IoKSB7IHJldHVybiAxOyB9IH0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5v
dCByZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZl
ZCBjbGFzcy4uCitQQVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0b3IoKSB7
IHJldHVybiB1bmRlZmluZWQgfSB9KSBpcyB1bmRlZmluZWQKK1BBU1MgeCA9IHsgfTsgbmV3IChj
bGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9KTsgaXMgeAor
UEFTUyB4IGluc3RhbmNlb2YgT2JqZWN0IGlzIHRydWUKK1BBU1MgbmV3IChjbGFzcyBleHRlbmRz
IG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBD
YW5ub3QgcmV0dXJuIGEgbm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRl
cml2ZWQgY2xhc3MuLgorUEFTUyBuZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9y
KCkgeyByZXR1cm4gMTsgfSB9KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW5ub3QgcmV0
dXJuIGEgbm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xh
c3MuLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sIGIvTGF5
b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LXN1cGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWNhMTg4NzNl
MTUzNzdkYmRlN2MxMDBhMDQ1NGY3MWU2MTI0Y2UxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sCkBAIC0wLDAgKzEsOCBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NsYXNzLXN5
bnRheC1zdXBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuanMgYi9MYXlvdXRU
ZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODc3Njk0MDE3MDc2MDk5MTc0NmQ3YjIyMGNmNjBlODFhYjFkZDRiNwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5qcwpA
QCAtMCwwICsxLDQzIEBACisvL0Agc2tpcAorCitkZXNjcmlwdGlvbignVGVzdHMgZm9yIEVTNiBj
bGFzcyBzeW50YXggImV4dGVuZHMiJyk7CisKK2NsYXNzIEJhc2UgeworICAgIGNvbnN0cnVjdG9y
KCkgeyB9CisgICAgYmFzZU1ldGhvZCgpIHsgcmV0dXJuICdiYXNlJzsgfQorICAgIG92ZXJyaWRl
bk1ldGhvZCgpIHsgcmV0dXJuICdiYXNlJzsgfQorICAgIHN0YXRpYyBzdGF0aWNCYXNlTWV0aG9k
KCkgeyByZXR1cm4gJ2Jhc2UnOyB9CisgICAgc3RhdGljIHN0YXRpY092ZXJyaWRlbk1ldGhvZCgp
IHsgcmV0dXJuICdiYXNlJzsgfQorfQorCitjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7Cisg
ICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0KKyAgICBvdmVycmlkZW5NZXRob2QoKSB7IHJl
dHVybiAnZGVyaXZlZCc7IH0KKyAgICBzdGF0aWMgc3RhdGljT3ZlcnJpZGVuTWV0aG9kKCkgeyBy
ZXR1cm4gJ2Rlcml2ZWQnOyB9Cit9CisKK3Nob3VsZEJlVHJ1ZSgnKG5ldyBCYXNlKSBpbnN0YW5j
ZW9mIEJhc2UnKTsKK3Nob3VsZEJlVHJ1ZSgnKG5ldyBEZXJpdmVkKSBpbnN0YW5jZW9mIERlcml2
ZWQnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmJhc2VNZXRob2QoKScsICciYmFzZSInKTsK
K3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLm92ZXJyaWRlbk1ldGhvZCgpJywgJyJkZXJpdmVkIicp
Oworc2hvdWxkQmUoJ0Rlcml2ZWQuc3RhdGljQmFzZU1ldGhvZCgpJywgJyJiYXNlIicpOworc2hv
dWxkQmUoJ0Rlcml2ZWQuc3RhdGljT3ZlcnJpZGVuTWV0aG9kKCknLCAnImRlcml2ZWQiJyk7CisK
K3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcycsICciU3ludGF4RXJyb3I6IFVuZXhwZWN0
ZWQgZW5kIG9mIHNjcmlwdCInKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcycsICci
U3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgZW5kIG9mIHNjcmlwdCInKTsKK3Nob3VsZFRocm93KCd4
ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsnLCAnIlN5bnRheEVycm9yOiBVbmV4cGVjdGVkIGVuZCBv
ZiBzY3JpcHQiJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7fScsICci
U3ludGF4RXJyb3I6IENsYXNzIGRlY2xhcmF0aW9uIHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBpcyBu
b3Qgc3VwcG9ydGVkIHlldC4iJyk7CitzaG91bGROb3RUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMg
QmFzZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0nKTsKK3Nob3VsZEJlKCd4Ll9fcHJvdG9fXycsICdC
YXNlJyk7CitzaG91bGRCZSgneC5wcm90b3R5cGUuX19wcm90b19fJywgJ0Jhc2UucHJvdG90eXBl
Jyk7CitzaG91bGRCZSgneCA9IGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyB9
IH07IHguX19wcm90b19fJywgJ0Z1bmN0aW9uLnByb3RvdHlwZScpOworc2hvdWxkQmUoJ3guX19w
cm90b19fJywgJ0Z1bmN0aW9uLnByb3RvdHlwZScpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBl
eHRlbmRzIDMgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXycsICciVHlwZUVycm9y
OiBUaGUgc3VwZXJjbGFzcyBpcyBub3QgYW4gb2JqZWN0LiInKTsKK3Nob3VsZFRocm93KCd4ID0g
Y2xhc3MgZXh0ZW5kcyAiYWJjIiB7IGNvbnN0cnVjdG9yKCkgeyB9IH07IHguX19wcm90b19fJywg
JyJUeXBlRXJyb3I6IFRoZSBzdXBlcmNsYXNzIGlzIG5vdCBhbiBvYmplY3QuIicpOworZXZhbEFu
ZExvZygnYmFzZVdpdGhCYWRQcm90b3R5cGUgPSBjbGFzcyB7IGNvbnN0cnVjdG9yKCkgeyB9IH07
IGJhc2VXaXRoQmFkUHJvdG90eXBlLnByb3RvdHlwZSA9IDMnKTsKK3Nob3VsZFRocm93KCd4ID0g
Y2xhc3MgZXh0ZW5kcyBiYXNlV2l0aEJhZFByb3RvdHlwZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0n
LCAnIlR5cGVFcnJvcjogVGhlIHN1cGVyY2xhc3NcJ3MgcHJvdG90eXBlIGlzIG5vdCBhbiBvYmpl
Y3QuIicpOworZXZhbEFuZExvZygnYmFzZVdpdGhCYWRQcm90b3R5cGUucHJvdG90eXBlID0gImFi
YyInKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBiYXNlV2l0aEJhZFByb3RvdHlw
ZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0nLCAnIlR5cGVFcnJvcjogVGhlIHN1cGVyY2xhc3NcJ3Mg
cHJvdG90eXBlIGlzIG5vdCBhbiBvYmplY3QuIicpOworc2hvdWxkTm90VGhyb3coJ2Jhc2VXaXRo
QmFkUHJvdG90eXBlLnByb3RvdHlwZSA9IG51bGw7IHggPSBjbGFzcyBleHRlbmRzIGJhc2VXaXRo
QmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3IoKSB7IH0gfScpOworCit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9j
bGFzcy1zeW50YXgtc3VwZXIuanMgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2xhc3Mt
c3ludGF4LXN1cGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjNWUyODBmZTU4YjJiNjk4MTA5ZjU2OTUxMzRm
MzYxYTg4ZjE5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVz
dHMvY2xhc3Mtc3ludGF4LXN1cGVyLmpzCkBAIC0wLDAgKzEsNjQgQEAKKy8vQCBza2lwCisKK2Rl
c2NyaXB0aW9uKCdUZXN0cyBmb3IgRVM2IGNsYXNzIHN5bnRheCAic3VwZXIiJyk7CisKK3ZhciBi
YXNlTWV0aG9kVmFsdWUgPSB7fTsKK3ZhciB2YWx1ZUluU2V0dGVyID0gbnVsbDsKKworY2xhc3Mg
QmFzZSB7CisgICAgY29uc3RydWN0b3IoKSB7IH0KKyAgICBiYXNlTWV0aG9kKCkgeyByZXR1cm4g
YmFzZU1ldGhvZFZhbHVlOyB9CisgICAgY2hhaW5NZXRob2QoKSB7IHJldHVybiAnYmFzZSc7IH0K
KyAgICBzdGF0aWMgc3RhdGljTWV0aG9kKCkgeyByZXR1cm4gJ2Jhc2UzJzsgfQorfQorCitjbGFz
cyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0K
KyAgICBjaGFpbk1ldGhvZCgpIHsgcmV0dXJuIFtzdXBlci5jaGFpbk1ldGhvZCgpLCAnZGVyaXZl
ZCddOyB9CisgICAgY2FsbEJhc2VNZXRob2QoKSB7IHJldHVybiBzdXBlci5iYXNlTWV0aG9kKCk7
IH0KKyAgICBnZXQgY2FsbEJhc2VNZXRob2RJbkdldHRlcigpIHsgcmV0dXJuIHN1cGVyWydiYXNl
TWV0aG9kJ10oKTsgfQorICAgIHNldCBjYWxsQmFzZU1ldGhvZEluU2V0dGVyKCkgeyB3aW5kb3cu
dmFsdWVJblNldHRlciA9IHN1cGVyLmJhc2VNZXRob2QoKTsgfQorICAgIGdldCBiYXNlTWV0aG9k
SW5HZXR0ZXJTZXR0ZXIoKSB7IHJldHVybiBzdXBlci5iYXNlTWV0aG9kOyB9CisgICAgc2V0IGJh
c2VNZXRob2RJbkdldHRlclNldHRlcigpIHsgd2luZG93LnZhbHVlSW5TZXR0ZXIgPSBzdXBlclsn
YmFzZU1ldGhvZCddOyB9CisgICAgc3RhdGljIHN0YXRpY01ldGhvZCgpIHsgcmV0dXJuIHN1cGVy
LnN0YXRpY01ldGhvZCgpOyB9Cit9CisKK2NsYXNzIFNlY29uZERlcml2ZWQgZXh0ZW5kcyBEZXJp
dmVkIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfQorICAgIGNoYWluTWV0aG9kKCkg
eyByZXR1cm4gc3VwZXIuY2hhaW5NZXRob2QoKS5jb25jYXQoWydzZWNvbmREZXJpdmVkJ10pOyB9
Cit9CisKK3Nob3VsZEJlVHJ1ZSgnKG5ldyBCYXNlKSBpbnN0YW5jZW9mIEJhc2UnKTsKK3Nob3Vs
ZEJlVHJ1ZSgnKG5ldyBEZXJpdmVkKSBpbnN0YW5jZW9mIERlcml2ZWQnKTsKK3Nob3VsZEJlKCco
bmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kKCknLCAnYmFzZU1ldGhvZFZhbHVlJyk7CitzaG91
bGRCZSgneCA9IChuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRob2Q7IHgoKScsICdiYXNlTWV0aG9k
VmFsdWUnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kSW5HZXR0ZXIn
LCAnYmFzZU1ldGhvZFZhbHVlJyk7CitzaG91bGRCZSgnKG5ldyBEZXJpdmVkKS5jYWxsQmFzZU1l
dGhvZEluU2V0dGVyID0gMTsgdmFsdWVJblNldHRlcicsICdiYXNlTWV0aG9kVmFsdWUnKTsKK3No
b3VsZEJlKCcobmV3IERlcml2ZWQpLmJhc2VNZXRob2RJbkdldHRlclNldHRlcicsICcobmV3IEJh
c2UpLmJhc2VNZXRob2QnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmJhc2VNZXRob2RJbkdl
dHRlclNldHRlciA9IDE7IHZhbHVlSW5TZXR0ZXInLCAnKG5ldyBCYXNlKS5iYXNlTWV0aG9kJyk7
CitzaG91bGRCZSgnRGVyaXZlZC5zdGF0aWNNZXRob2QoKScsICciYmFzZTMiJyk7CitzaG91bGRC
ZSgnKG5ldyBTZWNvbmREZXJpdmVkKS5jaGFpbk1ldGhvZCgpJywgJ1siYmFzZSIsICJkZXJpdmVk
IiwgInNlY29uZERlcml2ZWQiXScpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJh
c2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBzdXBlcigpIHt9IH0nLCAnIlN5bnRheEVy
cm9yOiBVbmV4cGVjdGVkIGtleXdvcmQgXCdzdXBlclwnLiBFeHBlY3RlZCBhbiBpbmRlbnRpZmll
ci4iJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9y
KCkgeyBzdXBlcigpOyB9IG1ldGhvZCgpIHsgc3VwZXIoKSB9IH0nLAorICAgICciU3ludGF4RXJy
b3I6IENhbm5vdCBjYWxsIHN1cGVyKCkgb3V0c2lkZSBvZiBhIGNsYXNzIGNvbnN0cnVjdG9yLiIn
KTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7
IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyBzdXBlciB9IH0nLCAnIlN5bnRheEVycm9yOiBDYW5ub3Qg
cmVmZXJlbmNlIHN1cGVyLiInKTsKK3Nob3VsZE5vdFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBC
YXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyByZXR1cm4gbmV3IHN1
cGVyIH0gfScpOworc2hvdWxkQmVUcnVlKCcobmV3IHgpLm1ldGhvZCgpIGluc3RhbmNlb2YgQmFz
ZScpOworc2hvdWxkQmVGYWxzZSgnKG5ldyB4KS5tZXRob2QoKSBpbnN0YW5jZW9mIHgnKTsKK3No
b3VsZE5vdFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1
cGVyKCk7IH0gbWV0aG9kMSgpIHsgZGVsZXRlIChzdXBlci5mb28pIH0gbWV0aG9kMigpIHsgZGVs
ZXRlIHN1cGVyWyJmb28iXSB9IH0nKTsKK3Nob3VsZFRocm93KCcobmV3IHgpLm1ldGhvZDEoKScs
ICciUmVmZXJlbmNlRXJyb3I6IENhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSInKTsKK3No
b3VsZFRocm93KCcobmV3IHgpLm1ldGhvZDIoKScsICciUmVmZXJlbmNlRXJyb3I6IENhbm5vdCBk
ZWxldGUgYSBzdXBlciBwcm9wZXJ0eSInKTsKK3Nob3VsZEJlVHJ1ZSgnbmV3IChjbGFzcyB7IGNv
bnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IH0pIGluc3RhbmNlb2YgT2JqZWN0Jyk7
CitzaG91bGRCZVRydWUoJ25ldyAoY2xhc3MgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIDE7IH0g
fSkgaW5zdGFuY2VvZiBPYmplY3QnKTsKK3Nob3VsZEJlKCduZXcgKGNsYXNzIGV4dGVuZHMgQmFz
ZSB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkIH0gfSknLCAndW5kZWZpbmVkJyk7
CitzaG91bGRCZSgneCA9IHsgfTsgbmV3IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3Rv
cigpIHsgcmV0dXJuIHggfSB9KTsnLCAneCcpOworc2hvdWxkQmVGYWxzZSgneCBpbnN0YW5jZW9m
IEJhc2UnKTsKK3Nob3VsZFRocm93KCduZXcgKGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVj
dG9yKCkgeyB9IH0pJywgJyJUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0IHR5
cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4iJyk7CitzaG91bGRUaHJv
dygnbmV3IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIDE7IH0g
fSknLCAnIlR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5vbi1vYmplY3QgdHlwZSBpbiB0aGUg
Y29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLiInKTsKK3Nob3VsZEJlKCduZXcgKGNsYXNz
IGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkIH0gfSknLCAn
dW5kZWZpbmVkJyk7CitzaG91bGRCZSgneCA9IHsgfTsgbmV3IChjbGFzcyBleHRlbmRzIG51bGwg
eyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9KTsnLCAneCcpOworc2hvdWxkQmVUcnVlKCd4
IGluc3RhbmNlb2YgT2JqZWN0Jyk7CitzaG91bGRUaHJvdygnbmV3IChjbGFzcyBleHRlbmRzIG51
bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9KScsICciVHlwZUVycm9yOiBDYW5ub3QgcmV0dXJuIGEg
bm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xhc3MuIicp
Oworc2hvdWxkVGhyb3coJ25ldyAoY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0b3IoKSB7
IHJldHVybiAxOyB9IH0pJywgJyJUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0
IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4iJyk7CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248026</attachid>
            <date>2015-03-05 18:07:06 -0800</date>
            <delta_ts>2015-03-06 16:40:42 -0800</delta_ts>
            <desc>Updated for ToT and removed redundant code</desc>
            <filename>bug-142200-20150305180646.patch</filename>
            <type>text/plain</type>
            <size>79795</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
Zjc0MzQxZjk2ODcyNzhhZWJjNzkzOWNhNWZkNGVhODBlODdkNjkzLi41ZmM1YjA1ZGU3YWYyYjJl
N2VjYTFjZjk4ZWQyY2IyZmFhMDFkNjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMTUtMDMtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgU3VwcG9ydCBleHRlbmRzIGFuZCBzdXBlciBrZXl3b3JkcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMjAwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIHN1cHBvcnQg
Zm9yIEVTNiBjbGFzcyBzeW50YXggaW5oZXJpdGFuY2UuCisKKyAgICAgICAgQWRkZWQgSlNQYXJz
ZXJDb25zdHJ1Y3RvcktpbmQgYXMgd2VsbCBhcyBib29sZWFuIGZsYWdzIGluZGljYXRpbmcgdGhl
IGNvbnN0cnVjdG9yIGtpbmQgdG8KKyAgICAgICAgdmFyaW91cyBjbGFzc2VzIGluIFVubGlua2Vk
Q29kZUJsb2NrIGFzIHdlbGwgYXMgQVNUIG5vZGVzLgorCisgICAgICAgIEVhY2ggbWV0aG9kIHN0
b3JlcyB0aGUgYXNzb2NpYXRlZCBjbGFzcyBhcyBpdHMgaG9tZU9iamVjdFByaXZhdGVOYW1lLiBU
aGlzIHZhbHVlIGlzIHVzZWQgdG8KKyAgICAgICAgbWFrZSBzdXBlciBjYWxscy4KKworICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayk6CisKKyAgICAgICAgKiBieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlSW5mbzo6RXhlY3V0
YWJsZUluZm8pOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29u
c3RydWN0b3JLaW5kSXNEZXJpdmVkKTogQWRkZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjpjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQpOiBBZGRlZC4KKworICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6IERvbid0IGVtaXQgb3BfY3JlYXRlX3RoaXMg
aW4gYSBkZXJpdmVkIGNsYXNzCisgICAgICAgIGFzIHRoZSBvYmplY3QgaXMgYWxsb2NhdGVkIGJ5
IHRoZSBoaWdoZXN0IGJhc2UgY2xhc3MncyBjb25zdHJ1Y3Rvci4gQWxzbyBzZXQgInRoaXMiIHRv
IG51bGwKKyAgICAgICAgYW5kIHN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbiBtX25ld1Rhcmdl
dFJlZ2lzdGVyLiAidGhpcyIgaXMgc3VwcG9zZWQgdG8gYmUgaW4gVERaIGJ1dAorICAgICAgICB0
aGF0IHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gYSBzZXBhcmF0ZSBwYXRjaC4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXR1cm4pOiBBbGxvdyAidW5kZWZpbmVkIiB0byBi
ZSByZXR1cm5lZCBmcm9tIGEgZGVyaXZlZCBjbGFzcy4KKyAgICAgICAgSW4gYSBkZXJpdmVkIGNs
YXNzJ3MgY29uc3RydWN0b3IsIG5vdCByZXR1cm5pbmcgInVuZGVmaW5lZCIgb3IgYW4gb2JqZWN0
IHJlc3VsdHMgaW4gYSB0eXBlCisgICAgICAgIGVycm9yIGluc3RlYWQgb2YgInRoaXMiIGJlaW5n
IHJldHVybmVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93VHlw
ZUVycm9yKTogQWRkZWQuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnN0cnVjdG9yS2luZElz
RGVyaXZlZCk6IEFkZGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6bmV3VGFy
Z2V0KTogQWRkZWQuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoK
KyAgICAgICAgKEpTQzo6U3VwZXJOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZC4gRW1pdHMgdGhl
IGNvZGUgdG8gb2J0YWluIHRoZSBjYWxsZWUncyBwYXJlbnQgY2xhc3MuCisgICAgICAgIChKU0M6
OmVtaXRTdXBlckJhc2VGb3JDYWxsZWUpOiBBZGRlZC4gRW1pdHMgdGhlIGNvZGUgdG8gb2J0YWlu
IHRoZSBwYXJlbnQgY2xhc3MncyBwcm90b3R5cGUuCisgICAgICAgIChKU0M6OmVtaXRQdXRIb21l
T2JqZWN0KTogQWRkZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRl
Y29kZSk6IFN0b3JlcyB0aGUgaG9tZSBvYmplY3Qgd2hlbiBhZGRpbmcgbWV0aG9kcy4KKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFB1dENvbnN0YW50UHJvcGVydHkpOiBEaXR0
by4KKyAgICAgICAgKEpTQzo6QnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKTogQWRk
ZWQgdGhlIHN1cHBvcnQgZm9yIHN1cGVyWydmb28nXS4KKyAgICAgICAgKEpTQzo6RG90QWNjZXNz
b3JOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZCB0aGUgc3VwcG9ydCBmb3Igc3VwZXIuZm9vLgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVk
IHRoZSBzdXBwb3J0IGZvciBzdXBlcigpLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogQWRkZWQgdGhlIHN1cHBvcnQgZm9yIHN1cGVyWydmb28n
XSgpLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOiBB
ZGRlZCB0aGUgc3VwcG9ydCBmb3Igc3VwZXIuZm9vKCkuCisgICAgICAgIChKU0M6OkRlbGV0ZUJy
YWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUpOiBGb3JiaWQgImRlbGV0ZSBzdXBlci5mb28iLgorICAg
ICAgICAoSlNDOjpEZWxldGVEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOiBGb3JiaWQgImRlbGV0ZSBz
dXBlclsnZm9vJ10iLgorICAgICAgICAoSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUp
OiBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgImNsYXNzSGVyaXRhZ2UiLiBUaGlzIGlzIHRoZSBtYWlu
CisgICAgICAgIGxvZ2ljIGZvciBpbmhlcml0YW5jZS4gV2hlbiBhIGNsYXNzIEIgaW5oZXJpdHMg
ZnJvbSBhIGNsYXNzIEEsIHNldCBCLl9fcHJvdG9fXyB0byBBIGFuZCBzZXQKKyAgICAgICAgQi5w
cm90b3R5cGUuX19wcm90b19fIHRvIEEucHJvdG90eXBlLiBUaHJvdyBleGNlcHRpb25zIHdoZW4g
ZWl0aGVyIEEgb3IgQS5fX3Byb3RvX18gaXMgbm90CisgICAgICAgIGFuIG9iamVjdC4KKworICAg
ICAgICAqIHBhcnNlci9BU1RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OnN1
cGVyRXhwcik6IEFkZGVkLgorCisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoK
KyAgICAgICAgKEpTQzo6U3VwZXJOb2RlOjpTdXBlck5vZGUpOiBBZGRlZC4KKworICAgICAgICAq
IHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0
aW9uQm9keU5vZGUpOgorCisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6
OkV4cHJlc3Npb25Ob2RlOjppc1N1cGVyTm9kZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Tm9k
ZTo6dHlwZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Tm9kZTo6aXNNZXRob2QpOgorCisgICAg
ICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUZ1bmN0aW9uSW5mbyk6IFRocm93IGEgcGFyc2VyIGVycm9yIGlmIHN1cGVyKCkgaXMgdXNl
ZCBvdXRzaWRlCisgICAgICAgIG9mIGNsYXNzIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgKEpTQzo6
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAgIChK
U0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKTogQ29uc3RydWN0b3JLaW5kIGlzICJk
ZXJpdmVkIiBpZiBhbmQgb25seSBpZiB0aGUgcGFyZW50CisgICAgICAgIGNsYXNzIGlzIHNwZWNp
ZmllZCBpbiB0aGUgZGVjbGFyYXRpb24gLyBleHByZXNzaW9uLgorICAgICAgICAoSlNDOjpQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOiBBZGRlZCB0aGUgc3VwcG9ydCBm
b3IgInN1cGVyKCkiLCAic3VwZXIuZm9vIiwKKyAgICAgICAgYW5kICJzdXBlclsnZm9vJ10iLiBU
aHJvdyBhIHNlbWFudGljIGVycm9yIGlmICJzdXBlciIgYXBwZWFycyBieSBpdHNlbGYuCisKKyAg
ICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3BlOjpTY29wZSk6IEFk
ZGVkIG1faGFzRGlyZWN0U3VwZXIuIFRoaXMgdmFyaWFibGUga2VlcHMgdHJhY2sgb2YgdGhlIHVz
ZSBvZiAic3VwZXIoKSIKKyAgICAgICAgc28gdGhhdCBwYXJzZUZ1bmN0aW9uSW5mbyBjYW4gc3Bp
dCBhbiBlcnJvciBpZiBpdCdzIHVzZWQgb3V0c2lkZSBvZiBjbGFzcyBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIChKU0M6OlNjb3BlOjpoYXNEaXJlY3RTdXBlcik6IEFkZGVkLgorICAgICAgICAoSlND
OjpTY29wZTo6c2V0SGFzRGlyZWN0U3VwZXIpOiBBZGRlZC4KKworICAgICAgICAqIHBhcnNlci9Q
YXJzZXJNb2Rlcy5oOgorICAgICAgICAoSlNDOjpKU1BhcnNlckNvbnN0cnVjdG9yS2luZCk6IEFk
ZGVkLgorCisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6
U3ludGF4Q2hlY2tlcjo6c3VwZXJFeHByKTogQWRkZWQuCisKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmg6IEFkZGVkIGhvbWVPYmplY3RQcml2YXRlTmFtZS4KKworICAgICAg
ICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6
ZXhlY3V0YWJsZUluZm8pOiAKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmV4ZWN1
dGFibGVJbmZvKToKKwogMjAxNS0wMy0wNSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBbV2luXSBVbnJldmlld2VkIGdhcmRlbmluZy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4
IDY0MGJkZTc3OGZjZWI1YjNlYjVhMDkxMTc5NzA0ZDlmMGQ5ZGVlOTkuLmI5YTE2NTcwNjE4NmMx
NGUwYTAwNzAxMzQ3OTJjM2ViNWQ5ZDA3MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtNjEsNyArNjEsOCBAQCBz
dGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9j
ayhWTSYgdm0sIFVubGlua2VkRnVuYwogICAgIGZ1bmN0aW9uLT5maW5pc2hQYXJzaW5nKGV4ZWN1
dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5mdW5j
dGlvbk1vZGUoKSk7CiAgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2UoZnVuY3Rpb24tPmZlYXR1
cmVzKCksIGZ1bmN0aW9uLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpKTsKICAgICAKLSAgICBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2Nr
OjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUsIEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT5uZWVk
c0FjdGl2YXRpb24oKSwgZnVuY3Rpb24tPnVzZXNFdmFsKCksIGZ1bmN0aW9uLT5pc1N0cmljdE1v
ZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0LCBmdW5jdGlvbktpbmQgPT0gVW5saW5rZWRC
dWlsdGluRnVuY3Rpb24pKTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQg
PSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUsCisg
ICAgICAgIEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT5uZWVkc0FjdGl2YXRpb24oKSwgZnVuY3Rp
b24tPnVzZXNFdmFsKCksIGZ1bmN0aW9uLT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9y
Q29uc3RydWN0LCBmdW5jdGlvbktpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24sIGV4ZWN1
dGFibGUtPmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpKSk7CiAgICAgYXV0byBnZW5lcmF0b3Io
c3RkOjptYWtlX3VuaXF1ZTxCeXRlY29kZUdlbmVyYXRvcj4odm0sIGZ1bmN0aW9uLmdldCgpLCBy
ZXN1bHQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlKSk7CiAgICAgZXJyb3IgPSBnZW5lcmF0
b3ItPmdlbmVyYXRlKCk7CiAgICAgaWYgKGVycm9yLmlzVmFsaWQoKSkKQEAgLTg0LDYgKzg1LDkg
QEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3QKICAgICAsIG1faXNJblN0cmljdENvbnRleHQobm9k
ZS0+aXNJblN0cmljdENvbnRleHQoKSkKICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFs
c2UpCiAgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGtpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVu
Y3Rpb24pCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgLCBtX2NvbnN0cnVjdG9y
S2luZElzRGVyaXZlZChub2RlLT5jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKSkKKyNlbmRpZgog
ICAgICwgbV9uYW1lKG5vZGUtPmlkZW50KCkpCiAgICAgLCBtX2luZmVycmVkTmFtZShub2RlLT5p
bmZlcnJlZE5hbWUoKSkKICAgICAsIG1fcGFyYW1ldGVycyhub2RlLT5wYXJhbWV0ZXJzKCkpCkBA
IC0yMDUsNiArMjA5LDkgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVUeXBlIGNvZGUKICAgICAsIG1faXNDb25z
dHJ1Y3RvcihpbmZvLm1faXNDb25zdHJ1Y3RvcikKICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJs
ZXMoZmFsc2UpCiAgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGluZm8ubV9pc0J1aWx0aW5GdW5j
dGlvbikKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAsIG1fY29uc3RydWN0b3JL
aW5kSXNEZXJpdmVkKGluZm8ubV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQpCisjZW5kaWYKICAg
ICAsIG1fZmlyc3RMaW5lKDApCiAgICAgLCBtX2xpbmVDb3VudCgwKQogICAgICwgbV9lbmRDb2x1
bW4oVUlOVF9NQVgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCmluZGV4IGYxZWY1ZDgxNTNmNTQ0MzVjOTU1NmJkNzZlNGY5NTM0YWUy
NzY2NDMuLmM0ZGZmNThmMDJkNzhmZjZmNDIzMmM5ODM5NTc3NjQzZWZlYTcxYmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBA
IC02NSwxOSArNjUsMjYgQEAgdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwog
CiBzdHJ1Y3QgRXhlY3V0YWJsZUluZm8gewotICAgIEV4ZWN1dGFibGVJbmZvKGJvb2wgbmVlZHNB
Y3RpdmF0aW9uLCBib29sIHVzZXNFdmFsLCBib29sIGlzU3RyaWN0TW9kZSwgYm9vbCBpc0NvbnN0
cnVjdG9yLCBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKQorICAgIEV4ZWN1dGFibGVJbmZvKGJvb2wg
bmVlZHNBY3RpdmF0aW9uLCBib29sIHVzZXNFdmFsLCBib29sIGlzU3RyaWN0TW9kZSwgYm9vbCBp
c0NvbnN0cnVjdG9yLCBib29sIGlzQnVpbHRpbkZ1bmN0aW9uLCBib29sIGNvbnN0cnVjdG9yS2lu
ZElzRGVyaXZlZCkKICAgICAgICAgOiBtX25lZWRzQWN0aXZhdGlvbihuZWVkc0FjdGl2YXRpb24p
CiAgICAgICAgICwgbV91c2VzRXZhbCh1c2VzRXZhbCkKICAgICAgICAgLCBtX2lzU3RyaWN0TW9k
ZShpc1N0cmljdE1vZGUpCiAgICAgICAgICwgbV9pc0NvbnN0cnVjdG9yKGlzQ29uc3RydWN0b3Ip
CiAgICAgICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihpc0J1aWx0aW5GdW5jdGlvbikKKyNpZiBF
TkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgLCBtX2NvbnN0cnVjdG9yS2luZElzRGVy
aXZlZChjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQpCisjZW5kaWYKICAgICB7CisgICAgICAgIFVO
VVNFRF9QQVJBTShjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQpOwogICAgIH0KICAgICBib29sIG1f
bmVlZHNBY3RpdmF0aW9uIDogMTsKICAgICBib29sIG1fdXNlc0V2YWwgOiAxOwogICAgIGJvb2wg
bV9pc1N0cmljdE1vZGUgOiAxOwogICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9yIDogMTsKICAgICBi
b29sIG1faXNCdWlsdGluRnVuY3Rpb24gOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgIGJvb2wgbV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQgOiAxOworI2VuZGlmCiB9Owog
CiBlbnVtIFVubGlua2VkRnVuY3Rpb25LaW5kIHsKQEAgLTExNiw2ICsxMjMsMTEgQEAgcHVibGlj
OgogICAgICAgICAgICAgcmV0dXJuIEpTUGFyc2VTdHJpY3Q7CiAgICAgICAgIHJldHVybiBKU1Bh
cnNlTm9ybWFsOwogICAgIH0KKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29s
IGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0b3JL
aW5kSXNEZXJpdmVkOyB9CisjZWxzZQorICAgIGJvb2wgY29uc3RydWN0b3JLaW5kSXNEZXJpdmVk
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgogCiAgICAgdW5zaWduZWQgZmlyc3RM
aW5lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExpbmVPZmZzZXQ7IH0KICAgICB1bnNp
Z25lZCBsaW5lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDb3VudDsgfQpAQCAtMTY4LDYg
KzE4MCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzSW5TdHJpY3RDb250ZXh0IDogMTsKICAg
ICBib29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAxOwogICAgIGJvb2wgbV9pc0J1aWx0aW5G
dW5jdGlvbiA6IDE7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBtX2Nv
bnN0cnVjdG9yS2luZElzRGVyaXZlZCA6IDE7CisjZW5kaWYKIAogICAgIElkZW50aWZpZXIgbV9u
YW1lOwogICAgIElkZW50aWZpZXIgbV9pbmZlcnJlZE5hbWU7CkBAIC0zNDIsNyArMzU3LDExIEBA
IHB1YmxpYzoKICAgICBib29sIGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uOyB9CiAKICAgICBib29sIGlzQnVpbHRpbkZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1aWx0aW5GdW5jdGlvbjsgfQotICAgIAorCisj
aWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBjb25zdHJ1Y3RvcktpbmRJc0Rl
cml2ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZDsgfQorI2Vu
ZGlmCisKICAgICB2b2lkIHNocmlua1RvRml0KCkKICAgICB7CiAgICAgICAgIG1fanVtcFRhcmdl
dHMuc2hyaW5rVG9GaXQoKTsKQEAgLTUzNCw2ICs1NTMsOSBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9pc0NvbnN0cnVjdG9yIDogMTsKICAgICBib29sIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMgOiAx
OwogICAgIGJvb2wgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisjaWYgRU5BQkxFKEVTNl9DTEFT
U19TWU5UQVgpCisgICAgYm9vbCBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZCA6IDE7CisjZW5k
aWYKICAgICB1bnNpZ25lZCBtX2ZpcnN0TGluZTsKICAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsK
ICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggNWI3ZjkyYTU1
YWZiOGVkNDhmZDU3NDYyMGYwOTJkYWVlOTY5NWNmNC4uMTJiMGU2ZGZlODY0MjdhNTNiZTA1YjAx
NzAyNmQzODgyMWQzM2NlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTQwMSw3ICs0MDEsMTQgQEAg
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25Ob2Rl
KiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAgICBhZGRDYWxsZWUoZnVuY3Rpb25Ob2RlLCBjYWxs
ZWVSZWdpc3Rlcik7CiAKICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpKSB7Ci0gICAgICAgIGVtaXRD
cmVhdGVUaGlzKCZtX3RoaXNSZWdpc3Rlcik7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgp
CisgICAgICAgIGlmIChjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKSkgeworICAgICAgICAgICAg
bV9uZXdUYXJnZXRSZWdpc3RlciA9IGFkZFZhcigpOworICAgICAgICAgICAgZW1pdE1vdmUobV9u
ZXdUYXJnZXRSZWdpc3RlciwgJm1fdGhpc1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIGVtaXRMb2Fk
KCZtX3RoaXNSZWdpc3RlciwganNOdWxsKCkpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAg
ICAgICAgICAgZW1pdENyZWF0ZVRoaXMoJm1fdGhpc1JlZ2lzdGVyKTsKICAgICB9IGVsc2UgaWYg
KGZ1bmN0aW9uTm9kZS0+dXNlc1RoaXMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkpIHsKICAg
ICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKTsKICAgICAgICAgZW1pdE9wY29kZShvcF90b190aGlzKTsKQEAgLTE5MDMs
MTQgKzE5MTAsMjUgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXR1cm4o
UmVnaXN0ZXJJRCogc3JjKQogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2Fs
RW52aXJvbm1lbnRSZWdpc3RlciA/IG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4
KCkgOiBlbWl0TG9hZCgwLCBKU1ZhbHVlKCkpLT5pbmRleCgpKTsKICAgICB9CiAKLSAgICBpZiAo
aXNDb25zdHJ1Y3RvcigpICYmIHNyYy0+aW5kZXgoKSAhPSBtX3RoaXNSZWdpc3Rlci5pbmRleCgp
KSB7Ci0gICAgICAgIFJlZlB0cjxMYWJlbD4gaXNPYmplY3RMYWJlbCA9IG5ld0xhYmVsKCk7Cisj
aWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCB0aGlzTWlnaHRCZVVuaW5pdGlh
bGl6ZWQgPSBjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKTsKKyNlbHNlCisgICAgYm9vbCB0aGlz
TWlnaHRCZVVuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyNlbmRpZgorICAgIGlmIChpc0NvbnN0cnVj
dG9yKCkgJiYgKHNyYy0+aW5kZXgoKSAhPSBtX3RoaXNSZWdpc3Rlci5pbmRleCgpIHx8IHRoaXNN
aWdodEJlVW5pbml0aWFsaXplZCkpIHsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBpc09iamVjdE9y
VW5kZWZpbmVkTGFiZWwgPSBuZXdMYWJlbCgpOwogCi0gICAgICAgIGVtaXRKdW1wSWZUcnVlKGVt
aXRJc09iamVjdChuZXdUZW1wb3JhcnkoKSwgc3JjKSwgaXNPYmplY3RMYWJlbC5nZXQoKSk7Cisg
ICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc09iamVjdChuZXdUZW1wb3JhcnkoKSwgc3JjKSwg
aXNPYmplY3RPclVuZGVmaW5lZExhYmVsLmdldCgpKTsKIAotICAgICAgICBlbWl0VW5hcnlOb0Rz
dE9wKG9wX3JldCwgJm1fdGhpc1JlZ2lzdGVyKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpKSB7CisgICAgICAgICAg
ICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5KCksIHNyYyksIGlz
T2JqZWN0T3JVbmRlZmluZWRMYWJlbC5nZXQoKSk7CisgICAgICAgICAgICBlbWl0VGhyb3dUeXBl
RXJyb3IoIkNhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9y
IG9mIGEgZGVyaXZlZCBjbGFzcy4iKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAg
ICAgIGVtaXRVbmFyeU5vRHN0T3Aob3BfcmV0LCAmbV90aGlzUmVnaXN0ZXIpOwogCi0gICAgICAg
IGVtaXRMYWJlbChpc09iamVjdExhYmVsLmdldCgpKTsKKyAgICAgICAgZW1pdExhYmVsKGlzT2Jq
ZWN0T3JVbmRlZmluZWRMYWJlbC5nZXQoKSk7CiAgICAgfQogICAgIHJldHVybiBlbWl0VW5hcnlO
b0RzdE9wKG9wX3JldCwgc3JjKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCBmYjA4MzYzZjY1YTBhOWFi
NzQ0MWMxMjNmMTA0OTk1M2M0NWRhMmEyLi4xNzUxNzQwMzY5NGU4NzJjZjVmYjBmYzhjOGYzNjBh
MDUzNmFhYTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC0yNjksNyArMjY5LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEoKSBjb25zdCB7IHJldHVybiBt
X3Njb3BlTm9kZS0+cGFyc2VyQXJlbmEoKTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlm
aWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX3ZtLT5wcm9wZXJ0eU5hbWVz
OyB9CiAKLSAgICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgeyByZXR1cm4gbV9jb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKTsgfQorICAgICAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdCB7
IHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpOyB9CisjaWYgRU5BQkxFKEVTNl9D
TEFTU19TWU5UQVgpCisgICAgICAgIGJvb2wgY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpOyB9Cisj
ZW5kaWYKIAogICAgICAgICBQYXJzZXJFcnJvciBnZW5lcmF0ZSgpOwogCkBAIC0yOTAsNyArMjkz
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVy
IHN0b3JpbmcgInRoaXMiCiAgICAgICAgIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0
dXJuICZtX3RoaXNSZWdpc3RlcjsgfQotICAgICAgICAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZ
TlRBWCkKKyAgICAgICAgUmVnaXN0ZXJJRCogbmV3VGFyZ2V0KCkgeyByZXR1cm4gbV9uZXdUYXJn
ZXRSZWdpc3RlcjsgfQorI2VuZGlmCisKICAgICAgICAgUmVnaXN0ZXJJRCogc2NvcGVSZWdpc3Rl
cigpIHsgcmV0dXJuIG1fc2NvcGVSZWdpc3RlcjsgfQogCiAgICAgICAgIC8vIFJldHVybnMgdGhl
IG5leHQgYXZhaWxhYmxlIHRlbXBvcmFyeSByZWdpc3Rlci4gUmVnaXN0ZXJzIHJldHVybmVkIGJ5
CkBAIC03NjMsNiArNzY5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQq
IG1fZW1wdHlWYWx1ZVJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBt
X2dsb2JhbE9iamVjdFJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBt
X2xvY2FsQXJndW1lbnRzUmVnaXN0ZXIgeyBudWxscHRyIH07CisjaWYgRU5BQkxFKEVTNl9DTEFT
U19TWU5UQVgpCisgICAgICAgIFJlZ2lzdGVySUQqIG1fbmV3VGFyZ2V0UmVnaXN0ZXIgeyBudWxs
cHRyIH07CisjZW5kaWYKIAogICAgICAgICBWZWN0b3I8SWRlbnRpZmllciwgMTY+IG1fd2F0Y2hh
YmxlVmFyaWFibGVzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1f
Y29uc3RhbnRQb29sUmVnaXN0ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDUwZTY4Zjg4ZWY5Y2MxY2E1OWIxZDdm
NTBlZGYyZWEwZTA4ZWZiNDAuLjRlNmUxMDI1MjQ0MmNjMTgzODYxMWNlZjk3MmRjZjNmNzM0N2Nj
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAKQEAgLTE1Niw2ICsxNTYsMzQgQEAgUmVnaXN0ZXJJRCogVGhpc05vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisK
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdXBlck5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBTdXBlck5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7
CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNhbGxlZS5zZXRJbmRleChKU1N0
YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhvbWVPYmplY3QgPSBnZW5l
cmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAmY2FsbGVlLCBnZW5l
cmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSk7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHByb3RvUGFyZW50ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgaG9tZU9iamVjdC5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFt
ZXMoKS51bmRlcnNjb3JlUHJvdG8pOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQo
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcHJvdG9QYXJlbnQuZ2V0KCksIGdlbmVy
YXRvci5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOworfQorCitzdGF0aWMgUmVnaXN0ZXJJ
RCogZW1pdFN1cGVyQmFzZUZvckNhbGxlZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQor
eworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNhbGxlZS5zZXRJbmRleChKU1N0YWNrOjpD
YWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhvbWVPYmplY3QgPSBnZW5lcmF0b3Iu
ZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAmY2FsbGVlLCBnZW5lcmF0b3Iu
cHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSk7CisgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGhvbWVPYmplY3QuZ2V0
KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKTsKK30KKworI2Vu
ZGlmCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXNvbHZlTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGJvb2wgUmVzb2x2ZU5vZGU6OmlzUHVy
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKSBjb25zdApAQCAtMjk0LDYgKzMyMiwxMyBA
QCBSZWdpc3RlcklEKiBPYmplY3RMaXRlcmFsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gUHJvcGVydHlMaXN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisj
aWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCitzdGF0aWMgaW5saW5lIHZvaWQgZW1pdFB1dEhv
bWVPYmplY3QoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZnVuY3Rp
b24sIFJlZ2lzdGVySUQqIGhvbWVPYmplY3QpCit7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlk
KGZ1bmN0aW9uLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFt
ZSwgaG9tZU9iamVjdCk7Cit9CisjZW5kaWYKKwogUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKICAgICAvLyBGYXN0IGNhc2U6IHRoaXMgbG9vcCBqdXN0IGhhbmRsZXMgcmVndWxh
ciB2YWx1ZSBwcm9wZXJ0aWVzLgpAQCAtMzMwLDYgKzM2NSwxMCBAQCBSZWdpc3RlcklEKiBQcm9w
ZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9
IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLT5tX2Fzc2lnbik7CisjaWYgRU5BQkxFKEVTNl9DTEFT
U19TWU5UQVgpCisgICAgICAgICAgICBpZiAobm9kZS0+aXNNZXRob2QoKSkKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIHZhbHVlLCBkc3QpOworI2VuZGlmCiAK
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBnZXQvc2V0IHByb3BlcnR5LCBmaW5kIGl0cyBlbnRy
eSBpbiB0aGUgbWFwLgogICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0
eU5vZGU6OkdldHRlciB8fCBub2RlLT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpTZXR0ZXIpOwpA
QCAtMzQ0LDEyICszODMsMTggQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAg
IC8vIEdlbmVyYXRlIHRoZSBwYWlyZWQgbm9kZSBub3cuCiAgICAgICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gZ2V0dGVyUmVnOwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNldHRl
clJlZzsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgICAgIFJlZ2lzdGVy
SUQqIHNlY29uZFJlZyA9IG51bGxwdHI7CisjZW5kaWYKIAogICAgICAgICAgICAgaWYgKG5vZGUt
Pm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRlcikgewogICAgICAgICAgICAgICAgIGdldHRl
clJlZyA9IHZhbHVlOwogICAgICAgICAgICAgICAgIGlmIChwYWlyLnNlY29uZCkgewogICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQocGFpci5zZWNvbmQtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6
OlNldHRlcik7CiAgICAgICAgICAgICAgICAgICAgIHNldHRlclJlZyA9IGdlbmVyYXRvci5lbWl0
Tm9kZShwYWlyLnNlY29uZC0+bV9hc3NpZ24pOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgICAgICAgICAgICAgICAgICBzZWNvbmRSZWcgPSBzZXR0ZXJSZWcuZ2V0KCk7CisjZW5k
aWYKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzZXR0ZXJS
ZWcgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0TG9hZChzZXR0ZXJSZWcuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOwpAQCAtMzYwLDEy
ICs0MDUsMjAgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgICAgICBpZiAo
cGFpci5zZWNvbmQpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHBhaXIuc2Vjb25kLT5t
X3R5cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIpOwogICAgICAgICAgICAgICAgICAgICBnZXR0
ZXJSZWcgPSBnZW5lcmF0b3IuZW1pdE5vZGUocGFpci5zZWNvbmQtPm1fYXNzaWduKTsKKyNpZiBF
TkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kUmVnID0g
Z2V0dGVyUmVnLmdldCgpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgZ2V0dGVyUmVnID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoZ2V0dGVyUmVnLmdldCgpLCBqc1Vu
ZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKKyNpZiBFTkFC
TEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgICAgIGlmIChwYWlyLnNlY29uZCAmJiBwYWly
LnNlY29uZC0+aXNNZXRob2QoKSkKKyAgICAgICAgICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChn
ZW5lcmF0b3IsIHNlY29uZFJlZywgZHN0KTsKKyNlbmRpZgorCiAgICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1dEdldHRlclNldHRlcihkc3QsICpub2RlLT5uYW1lKCksIGdldHRlclJlZy5nZXQo
KSwgc2V0dGVyUmVnLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM3NSwxOCArNDI4LDM0
IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAKIHZvaWQgUHJvcGVydHlMaXN0Tm9kZTo6ZW1p
dFB1dENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogbmV3T2JqLCBQcm9wZXJ0eU5vZGUmIG5vZGUpCiB7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUubV9hc3NpZ24pOworI2lmIEVOQUJM
RShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmIChub2RlLmlzTWV0aG9kKCkpCisgICAgICAgIGVt
aXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgdmFsdWUuZ2V0KCksIG5ld09iaik7CisjZW5kaWYK
ICAgICBpZiAobm9kZS5uYW1lKCkpIHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRC
eUlkKG5ld09iaiwgKm5vZGUubmFtZSgpLCBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2ln
bikpOworICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQobmV3T2JqLCAqbm9kZS5u
YW1lKCksIHZhbHVlLmdldCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUubV9leHBy
ZXNzaW9uKTsKLSAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5VmFsKG5ld09iaiwgcHJvcGVy
dHlOYW1lLmdldCgpLCBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2lnbikpOworICAgIGdl
bmVyYXRvci5lbWl0RGlyZWN0UHV0QnlWYWwobmV3T2JqLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHZh
bHVlLmdldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyYWNr
ZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0
ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZ
TlRBWCkKKyAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKSB7CisgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UgZ2VuZXJhdGUgdGhlIHByb2ZpbGVyIGluZm8/CisgICAgICAgIGlmIChtX3N1
YnNjcmlwdC0+aXNTdHJpbmcoKSkgeworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWQg
PSBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpOworICAgICAg
ICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpLCBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvciksIGlkKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QpLCBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvciksIGdl
bmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCkpOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYg
KG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpIAogICAgICAgICAmJiBnZW5lcmF0b3Iud2lsbFJlc29s
dmVUb0FyZ3VtZW50c1JlZ2lzdGVyKHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+
aWRlbnRpZmllcigpKQogICAgICAgICAmJiAhZ2VuZXJhdG9yLnN5bWJvbFRhYmxlKCkuc2xvd0Fy
Z3VtZW50cygpKSB7CkBAIC00MzEsNyArNTAwLDExIEBAIFJlZ2lzdGVySUQqIERvdEFjY2Vzc29y
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
CiAgICAgfQogCiBub25Bcmd1bWVudHNQYXRoOgorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpID8g
ZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVtaXROb2RlKG1f
YmFzZSk7CisjZWxzZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fYmFzZSk7CisjZW5kaWYKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogZmlu
YWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKICAgICBSZWdpc3RlcklE
KiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZmluYWxEZXN0LCBiYXNlLmdldCgpLCBtX2lk
ZW50KTsKQEAgLTUyMSw2ICs1OTQsMTUgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmUKICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCwgZnVuYy5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdl
bmVyYXRvciwgbV9hcmdzKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAo
bV9leHByLT5pc1N1cGVyTm9kZSgpKSB7CisgICAgICAgIEFTU0VSVChnZW5lcmF0b3IuY29uc3Ry
dWN0b3JLaW5kSXNEZXJpdmVkKCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFy
Z3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLm5ld1RhcmdldCgpKTsKKyAgICAgICAg
UmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDb25zdHJ1Y3QocmV0dXJuVmFsdWUuZ2V0
KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3Zl
KGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSwgcmV0KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAg
ICB9CisjZW5kaWYKICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9y
LmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rp
b24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewpAQCAtNTc0LDEzICs2NTYs
MjUgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxC
cmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKIHsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29s
IGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gYmFzZUlzU3VwZXIgPyBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRv
cikgOiBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyNlbHNlCiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyNlbmRpZgogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlw
dCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3Qo
KSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3Iu
dGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMo
Z2VuZXJhdG9yLCBtX2FyZ3MpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGlm
IChiYXNlSXNTdXBlcikKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMu
dGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisgICAgZWxzZQorICAg
ICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFz
ZS5nZXQoKSk7CisjZWxzZQogICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKKyNlbmRpZgogICAgIFJlZ2lzdGVySUQqIHJldCA9
IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5v
RXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBk
aXZvdEVuZCgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7CiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIFByb2Zp
bGVUeXBlQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElELCBudWxscHRyKTsKQEAgLTU5Niw5ICs2
OTAsMjEgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2kKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuY3Rpb24gPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBm
dW5jdGlvbi5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRv
ciwgbV9hcmdzKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIGJhc2VJ
c1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOworICAgIGlmIChiYXNlSXNTdXBlcikKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdl
bmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisgICAgZWxzZQorICAgICAgICBnZW5lcmF0b3IuZW1p
dE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9iYXNlKTsKKyNlbHNlCiAgICAg
Z2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1fYmFzZSk7
CisjZW5kaWYKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25E
aXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKKyNpZiBF
TkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rp
b24uZ2V0KCksIGJhc2VJc1N1cGVyID8gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3Ip
IDogY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CisjZWxzZQogICAgIGdl
bmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgbV9pZGVudCk7CisjZW5kaWYKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0
b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZUJ5
dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CkBAIC05NDAsNiArMTA0NiwxMCBA
QCBSZWdpc3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisjaWYgRU5BQkxF
KEVTNl9DTEFTU19TWU5UQVgpCisgICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkKKyAgICAg
ICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkNhbm5vdCBkZWxl
dGUgYSBzdXBlciBwcm9wZXJ0eSIpOworI2VuZGlmCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
RGVsZXRlQnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0KCksIHIx
LmdldCgpKTsKIH0KIApAQCAtOTUwLDYgKzEwNjAsMTAgQEAgUmVnaXN0ZXJJRCogRGVsZXRlRG90
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNl
KTsKIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAo
bV9iYXNlLT5pc1N1cGVyTm9kZSgpKQorICAgICAgICByZXR1cm4gZW1pdFRocm93UmVmZXJlbmNl
RXJyb3IoZ2VuZXJhdG9yLCAiQ2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5Iik7CisjZW5k
aWYKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCBtX2lkZW50KTsKIH0KIApAQCAtMjgwNywxMSArMjky
MSw0MiBAQCB2b2lkIENsYXNzRGVjbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAKIFJlZ2lzdGVySUQqIENsYXNzRXhwck5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7Ci0gICAgQVNTRVJUKCFtX3BhcmVudENsYXNzRXhwcmVzc2lvbik7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHN1cGVyY2xhc3M7CisgICAgaWYgKG1fY2xhc3NIZXJpdGFnZSkgewor
ICAgICAgICBzdXBlcmNsYXNzID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUoc3VwZXJjbGFzcy5nZXQoKSwgbV9jbGFzc0hlcml0YWdlKTsKKyAg
ICB9CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gY29uc3RydWN0b3IgPSBnZW5lcmF0b3IuZW1p
dE5vZGUoZHN0LCBtX2NvbnN0cnVjdG9yRXhwcmVzc2lvbik7CisgICAgLy8gRklYTUU6IE1ha2Ug
dGhlIHByb3RvdHlwZSBub24tY29uZmlndXJhYmxlICYgbm9uLXdyaXRhYmxlLgogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBwcm90b3R5cGUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBjb25zdHJ1Y3Rvci5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUpOwogCisgICAgaWYgKHN1cGVyY2xhc3MpIHsKKyAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHRlbXBSZWdpc3RlciA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAg
ICAgICAgUmVmUHRyPExhYmVsPiBzdXBlcmNsYXNzSXNOdWxsTGFiZWwgPSBnZW5lcmF0b3IubmV3
TGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGdlbmVyYXRvci5lbWl0
VW5hcnlPcChvcF9lcV9udWxsLCB0ZW1wUmVnaXN0ZXIuZ2V0KCksIHN1cGVyY2xhc3MuZ2V0KCkp
LCBzdXBlcmNsYXNzSXNOdWxsTGFiZWwuZ2V0KCkpOworCisgICAgICAgIC8vIEZJWE1FOiBUaHJv
dyBUeXBlRXJyb3IgaWYgaXQncyBhIGdlbmVyYXRvciBmdW5jdGlvbi4KKyAgICAgICAgUmVmUHRy
PExhYmVsPiBzdXBlcmNsYXNzSXNPYmplY3RMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc09iamVjdCh0
ZW1wUmVnaXN0ZXIuZ2V0KCksIHN1cGVyY2xhc3MuZ2V0KCkpLCBzdXBlcmNsYXNzSXNPYmplY3RM
YWJlbC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlM
aXRlcmFsKCJUaGUgc3VwZXJjbGFzcyBpcyBub3QgYW4gb2JqZWN0LiIpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbChzdXBlcmNsYXNzSXNPYmplY3RMYWJlbC5nZXQoKSk7CisKKyAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvUGFyZW50ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQocHJvdG9QYXJlbnQuZ2V0KCksIHN1
cGVyY2xhc3MuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKKwor
ICAgICAgICBSZWZQdHI8TGFiZWw+IHByb3RvUGFyZW50SXNPYmplY3RPck51bGxMYWJlbCA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2Vu
ZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2lzX29iamVjdF9vcl9udWxsLCB0ZW1wUmVnaXN0ZXIuZ2V0
KCksIHByb3RvUGFyZW50LmdldCgpKSwgcHJvdG9QYXJlbnRJc09iamVjdE9yTnVsbExhYmVsLmdl
dCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRUaHJvd1R5cGVFcnJvcihBU0NJSUxpdGVyYWwo
IlRoZSBzdXBlcmNsYXNzJ3MgcHJvdG90eXBlIGlzIG5vdCBhbiBvYmplY3QuIikpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKHByb3RvUGFyZW50SXNPYmplY3RPck51bGxMYWJlbC5nZXQo
KSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRCeUlkKGNvbnN0cnVjdG9yLmdl
dCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgc3VwZXJjbGFz
cy5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJZChwcm90b3R5cGUu
Z2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b1Bh
cmVudC5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzdXBlcmNsYXNzSXNO
dWxsTGFiZWwuZ2V0KCkpOworICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIGNv
bnN0cnVjdG9yLmdldCgpLCBwcm90b3R5cGUuZ2V0KCkpOworICAgIH0KKwogICAgIGlmIChtX3N0
YXRpY01ldGhvZHMpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjb25zdHJ1Y3Rvci5nZXQo
KSwgbV9zdGF0aWNNZXRob2RzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1
aWxkZXIuaAppbmRleCBmYTY0OTUxYTlkZjJiNmI2NDUwNWZhMWVhMzdhMTAwNGI5YThkOTk2Li4w
NGE4OTIwNzAxYWEzMzFjYzBmOTJmNzIwNTdlZWRmMzUzY2RmMWE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaApAQCAtMTY5LDYgKzE2OSwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIHVzZXNUaGlzKCk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IFRoaXNOb2RlKGxvY2F0aW9uKTsKICAgICB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgp
CisgICAgRXhwcmVzc2lvbk5vZGUqIHN1cGVyRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhbmQgY2FsbCB1c2VzU3VwZXIo
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgU3VwZXJOb2RlKGxvY2F0aW9u
KTsKKyAgICB9CisjZW5kaWYKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlUmVzb2x2ZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBpZGVudCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQogICAgIHsKICAgICAgICAgaWYgKG1fdm0tPnByb3Bl
cnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqaWRlbnQpCkBAIC0yOTgsOSArMzA1LDkgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIEZ1bmN0aW9uQm9keU5vZGUq
IGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24s
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
LCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQorICAgIEZ1bmN0aW9u
Qm9keU5vZGUqIGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0
TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0
YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBKU1Bh
cnNlckNvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQpCiAgICAgewotICAgICAgICByZXR1
cm4gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jdGlvbkJvZHlOb2RlKG1fcGFyc2VyQXJlbmEsIHN0
YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBpblN0cmlj
dENvbnRleHQpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jdGlvbkJv
ZHlOb2RlKG1fcGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENv
bHVtbiwgZW5kQ29sdW1uLCBpblN0cmljdENvbnRleHQsIGNvbnN0cnVjdG9yS2luZCk7CiAgICAg
fQogCiAgICAgdm9pZCBzZXRGdW5jdGlvbk5hbWVTdGFydChGdW5jdGlvbkJvZHlOb2RlKiBib2R5
LCBpbnQgZnVuY3Rpb25OYW1lU3RhcnQpCkBAIC0zMDksMjMgKzMxNiwyNCBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogICAgIE5FVkVSX0lOTElORSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9y
U2V0dGVyUHJvcGVydHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlO
b2RlOjpUeXBlIHR5cGUsIGJvb2wsCi0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGNv
bnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbywgdW5zaWduZWQgZ2V0T3JT
ZXRTdGFydE9mZnNldCkKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSwgY29uc3QgUGFy
c2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZvLCB1bnNpZ25lZCBnZXRPclNldFN0YXJ0
T2Zmc2V0LCBib29sIGlzTWV0aG9kKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5hbWUpOwogICAg
ICAgICBpbmZvLmJvZHktPnNldExvYyhpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keUVuZExp
bmUsIGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwogICAg
ICAgICBpbmZvLmJvZHktPnNldEluZmVycmVkTmFtZSgqbmFtZSk7CiAgICAgICAgIGluZm8uYm9k
eS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQoZ2V0T3JTZXRTdGFydE9mZnNldCk7CiAgICAgICAg
IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZSgqbmFtZSwgbmV3IChtX3Bh
cnNlckFyZW5hKSBGdW5jRXhwck5vZGUobG9jYXRpb24sIG1fdm0tPnByb3BlcnR5TmFtZXMtPm51
bGxJZGVudGlmaWVyLAotICAgICAgICAgICAgaW5mby5ib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4
cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5m
by5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycyks
IHR5cGUpOworICAgICAgICAgICAgaW5mby5ib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Np
b24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5
U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycyksIHR5cGUs
IGlzTWV0aG9kKTsKICAgICB9CiAgICAgCi0gICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5Tm9kZSog
Y3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJB
cmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBl
IHR5cGUsIGJvb2wsIGRvdWJsZSBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVp
bGRlcj4mIGluZm8sIHVuc2lnbmVkIGdldE9yU2V0U3RhcnRPZmZzZXQpCisgICAgTkVWRVJfSU5M
SU5FIFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShWTSogdm0sIFBh
cnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
UHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wsCisgICAgICAgIGRvdWJsZSBuYW1lLCBjb25z
dCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGluZm8sIHVuc2lnbmVkIGdldE9yU2V0
U3RhcnRPZmZzZXQsIGJvb2wgaXNNZXRob2QpCiAgICAgewogICAgICAgICBpbmZvLmJvZHktPnNl
dExvYyhpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keUVuZExpbmUsIGxvY2F0aW9uLnN0YXJ0
T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICBpbmZvLmJvZHktPnNl
dEZ1bmN0aW9uS2V5d29yZFN0YXJ0KGdldE9yU2V0U3RhcnRPZmZzZXQpOwogICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCA9IHBhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VO
dW1lcmljSWRlbnRpZmllcih2bSwgbmFtZSk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIFByb3BlcnR5Tm9kZShpZGVudCwgbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jRXhwck5v
ZGUobG9jYXRpb24sIHZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwKLSAgICAgICAg
ICAgIGluZm8uYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGluZm8ub3BlbkJyYWNl
T2Zmc2V0LCBpbmZvLmNsb3NlQnJhY2VPZmZzZXQsIGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5i
b2R5U3RhcnRDb2x1bW4pLCBpbmZvLnBhcmFtZXRlcnMpLCB0eXBlKTsKKyAgICAgICAgICAgIGlu
Zm8uYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGluZm8ub3BlbkJyYWNlT2Zmc2V0
LCBpbmZvLmNsb3NlQnJhY2VPZmZzZXQsIGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5U3Rh
cnRDb2x1bW4pLCBpbmZvLnBhcmFtZXRlcnMpLCB0eXBlLCBpc01ldGhvZCk7CiAgICAgfQogCiAg
ICAgQXJndW1lbnRzTm9kZSogY3JlYXRlQXJndW1lbnRzKCkgeyByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBBcmd1bWVudHNOb2RlKCk7IH0KQEAgLTMzMywxMSArMzQxLDExIEBAIHB1YmxpYzoK
ICAgICBBcmd1bWVudExpc3ROb2RlKiBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYSkgQXJndW1lbnRMaXN0Tm9kZShsb2NhdGlvbiwgYXJnKTsgfQogICAgIEFyZ3Vt
ZW50TGlzdE5vZGUqIGNyZWF0ZUFyZ3VtZW50c0xpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgQXJndW1lbnRMaXN0Tm9kZSogYXJncywgRXhwcmVzc2lvbk5vZGUqIGFyZykgeyBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0aW9uLCBhcmdz
LCBhcmcpOyB9CiAKLSAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVByb3BlcnR5KGNvbnN0IElkZW50
aWZpZXIqIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9kZTo6
VHlwZSB0eXBlLCBib29sKQorICAgIFByb3BlcnR5Tm9kZSogY3JlYXRlUHJvcGVydHkoY29uc3Qg
SWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlO
b2RlOjpUeXBlIHR5cGUsIGJvb2wsIGJvb2wgaXNNZXRob2QgPSBmYWxzZSkKICAgICB7CiAgICAg
ICAgIGlmIChub2RlLT5pc0Z1bmNFeHByTm9kZSgpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
RnVuY0V4cHJOb2RlKj4obm9kZSktPmJvZHkoKS0+c2V0SW5mZXJyZWROYW1lKCpwcm9wZXJ0eU5h
bWUpOwotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoKnBy
b3BlcnR5TmFtZSwgbm9kZSwgdHlwZSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJl
bmEpIFByb3BlcnR5Tm9kZSgqcHJvcGVydHlOYW1lLCBub2RlLCB0eXBlLCBpc01ldGhvZCk7CiAg
ICAgfQogICAgIFByb3BlcnR5Tm9kZSogY3JlYXRlUHJvcGVydHkoVk0qIHZtLCBQYXJzZXJBcmVu
YSYgcGFyc2VyQXJlbmEsIGRvdWJsZSBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiBub2Rl
LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCmluZGV4IDEyZTNkNGQ2Yjg5NTJh
MDAxYjQ2YTMxOGIwMDc0ODNiNzU3NmU3MDUuLjNiNjc4OTUwOTg0NmVjMjZlZmYxZmU2YjcxMGI5
OTNiZjg0ZjdjYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNv
bnN0cnVjdG9ycy5oCkBAIC0xMTIsNiArMTEyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsK
ICAgICB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpbmxpbmUgU3VwZXJO
b2RlOjpTdXBlck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKKyAgICAgICAg
OiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKKyAgICB7CisgICAgfQorI2VuZGlmCisKIGlubGlu
ZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCkK
ICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX2lkZW50KGlk
ZW50KQpAQCAtMTU5LDEwICsxNjYsMTEgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWUKICAgICB7
CiAgICAgfQogCi0gICAgaW5saW5lIFByb3BlcnR5Tm9kZTo6UHJvcGVydHlOb2RlKGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24sIFR5cGUgdHlwZSkKKyAgICBp
bmxpbmUgUHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
RXhwcmVzc2lvbk5vZGUqIGFzc2lnbiwgVHlwZSB0eXBlLCBib29sIGlzTWV0aG9kID0gZmFsc2Up
CiAgICAgICAgIDogbV9uYW1lKCZuYW1lKQogICAgICAgICAsIG1fYXNzaWduKGFzc2lnbikKICAg
ICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2lzTWV0aG9kKGlzTWV0aG9kKQogICAg
IHsKICAgICB9CiAKQEAgLTE3MSw2ICsxNzksNyBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29s
dmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZQog
ICAgICAgICAsIG1fZXhwcmVzc2lvbihuYW1lKQogICAgICAgICAsIG1fYXNzaWduKGFzc2lnbikK
ICAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2lzTWV0aG9kKGZhbHNlKQogICAg
IHsKICAgICB9CiAKQEAgLTc4NSwxMSArNzk0LDExIEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVz
b2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmll
CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBDbGFzc0V4cHJOb2RlOjpDbGFzc0V4cHJOb2Rl
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIG5hbWUs
IEV4cHJlc3Npb25Ob2RlKiBjb25zdHJ1Y3RvckV4cHJlc3Npb24sIEV4cHJlc3Npb25Ob2RlKiBw
YXJlbnRDbGFzc0V4cHJlc3Npb24sIFByb3BlcnR5TGlzdE5vZGUqIGluc3RhbmNlTWV0aG9kcywg
UHJvcGVydHlMaXN0Tm9kZSogc3RhdGljTWV0aG9kcykKKyAgICBpbmxpbmUgQ2xhc3NFeHByTm9k
ZTo6Q2xhc3NFeHByTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBFeHByZXNzaW9uTm9kZSogY29uc3RydWN0b3JFeHByZXNzaW9uLCBF
eHByZXNzaW9uTm9kZSogY2xhc3NIZXJpdGFnZSwgUHJvcGVydHlMaXN0Tm9kZSogaW5zdGFuY2VN
ZXRob2RzLCBQcm9wZXJ0eUxpc3ROb2RlKiBzdGF0aWNNZXRob2RzKQogICAgICAgICA6IEV4cHJl
c3Npb25Ob2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1fbmFtZShuYW1lKQogICAgICAgICAsIG1f
Y29uc3RydWN0b3JFeHByZXNzaW9uKGNvbnN0cnVjdG9yRXhwcmVzc2lvbikKLSAgICAgICAgLCBt
X3BhcmVudENsYXNzRXhwcmVzc2lvbihwYXJlbnRDbGFzc0V4cHJlc3Npb24pCisgICAgICAgICwg
bV9jbGFzc0hlcml0YWdlKGNsYXNzSGVyaXRhZ2UpCiAgICAgICAgICwgbV9pbnN0YW5jZU1ldGhv
ZHMoaW5zdGFuY2VNZXRob2RzKQogICAgICAgICAsIG1fc3RhdGljTWV0aG9kcyhzdGF0aWNNZXRo
b2RzKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKaW5kZXggMDRh
ZjYxZDlhYmE4ZjQyNTAwYThkZTZjZWY1MDg4MzljMTc4YjFjNC4uMjExM2Q5MWE5ZDkxYmUyZDU4
MzhhYzdiYWNlNjFjY2Q2ZDRiZGZhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5jcHAKQEAgLTE2NywxMyArMTY3LDE3IEBAIEZ1bmN0aW9uUGFyYW1ldGVyczo6fkZ1bmN0aW9u
UGFyYW1ldGVycygpCiAgICAgICAgIHBhdHRlcm5zKClbaV0tPmRlcmVmKCk7CiB9CiAKLUZ1bmN0
aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRp
b24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaXNJblN0
cmljdENvbnRleHQpCitGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFBhcnNlckFy
ZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5k
Q29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCBj
b25zdHJ1Y3RvcktpbmQpCiAgICAgOiBTdGF0ZW1lbnROb2RlKGVuZExvY2F0aW9uKQogICAgICwg
bV9zdGFydENvbHVtbihzdGFydENvbHVtbikKICAgICAsIG1fZW5kQ29sdW1uKGVuZENvbHVtbikK
ICAgICAsIG1fc3RhcnRTdGFydE9mZnNldChzdGFydExvY2F0aW9uLnN0YXJ0T2Zmc2V0KQogICAg
ICwgbV9pc0luU3RyaWN0Q29udGV4dChpc0luU3RyaWN0Q29udGV4dCkKKyNpZiBFTkFCTEUoRVM2
X0NMQVNTX1NZTlRBWCkKKyAgICAsIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKGNvbnN0cnVj
dG9yS2luZCA9PSBKU1BhcnNlckNvbnN0cnVjdG9yS2luZDo6RGVyaXZlZCkKKyNlbmRpZgogewor
ICAgIFVOVVNFRF9QQVJBTShjb25zdHJ1Y3RvcktpbmQpOwogfQogCiB2b2lkIEZ1bmN0aW9uQm9k
eU5vZGU6OmZpbmlzaFBhcnNpbmcoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJhbWV0ZXJO
b2RlKiBmaXJzdFBhcmFtZXRlciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGVudW0gRnVuY3Rp
b25Nb2RlIGZ1bmN0aW9uTW9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRl
eCAzMGVkYjBhZTBjMmRhNTNmM2I0MGY4OTQ2MDMzOGYxOWU5MDk5Mjk3Li45MDBmZjk1NGQzMjk5
OWZkNjk5OWY5ZDFlNDY4NDhkNWYxYzc2ZDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2Rlcy5oCkBAIC0xNjQsNiArMTY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1N1YnRyYWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmly
dHVhbCBib29sIGlzQm9vbGVhbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1NwcmVhZEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdXBlck5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQo
Qnl0ZWNvZGVHZW5lcmF0b3ImLCBMYWJlbCosIExhYmVsKiwgRmFsbFRocm91Z2hNb2RlKTsKIApA
QCAtNDQ1LDYgKzQ0NiwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
IG92ZXJyaWRlOwogICAgIH07CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBj
bGFzcyBTdXBlck5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgU3VwZXJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGlzU3VwZXJOb2RlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CisgICAgfTsK
KyNlbmRpZgorCiAgICAgY2xhc3MgUmVzb2x2ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUg
ewogICAgIHB1YmxpYzoKICAgICAgICAgUmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCk7CkBAIC01
MDAsMjAgKzUxMiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGVu
dW0gVHlwZSB7IENvbnN0YW50ID0gMSwgR2V0dGVyID0gMiwgU2V0dGVyID0gNCB9OwogCi0gICAg
ICAgIFByb3BlcnR5Tm9kZShjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBUeXBl
KTsKKyAgICAgICAgUHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9k
ZSosIFR5cGUsIGJvb2wgaXNNZXRob2QpOwogICAgICAgICBQcm9wZXJ0eU5vZGUoRXhwcmVzc2lv
bk5vZGUqIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUqLCBUeXBlKTsKICAgICAgICAgCiAg
ICAgICAgIEV4cHJlc3Npb25Ob2RlKiBleHByZXNzaW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwcmVzc2lvbjsgfQogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CiAKLSAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CisgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5
cGU+KG1fdHlwZSk7IH0KKyAgICAgICAgYm9vbCBpc01ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNNZXRob2Q7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0
eUxpc3ROb2RlOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBtX25hbWU7CiAgICAgICAgIEV4
cHJlc3Npb25Ob2RlKiBtX2V4cHJlc3Npb247CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2Fz
c2lnbjsKLSAgICAgICAgVHlwZSBtX3R5cGU7CisgICAgICAgIHVuc2lnbmVkIG1fdHlwZSA6IDM7
CisgICAgICAgIHVuc2lnbmVkIG1faXNNZXRob2QgOiAxOwogICAgIH07CiAKICAgICBjbGFzcyBQ
cm9wZXJ0eUxpc3ROb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKQEAgLTE1NDQsNyArMTU1
OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgdXNpbmcgUGFyc2Vy
QXJlbmFEZWxldGFibGU6Om9wZXJhdG9yIG5ldzsKIAotICAgICAgICBGdW5jdGlvbkJvZHlOb2Rl
KFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4s
IGJvb2wgaXNJblN0cmljdENvbnRleHQpOworICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKFBhcnNl
ckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBlbmQsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wg
aXNJblN0cmljdENvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kKTsKIAogICAgICAgICBG
dW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRl
cnMuZ2V0KCk7IH0KIApAQCAtMTU3Miw2ICsxNTg2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgaW50IHN0YXJ0U3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0U3RhcnRP
ZmZzZXQ7IH0KICAgICAgICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNJblN0cmljdENvbnRleHQ7IH0KKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAg
ICAgICAgYm9vbCBjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKSB7IHJldHVybiBtX2NvbnN0cnVj
dG9yS2luZElzRGVyaXZlZDsgfQorI2VuZGlmCiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIElk
ZW50aWZpZXIgbV9pZGVudDsKQEAgLTE1ODQsNyArMTYwMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3Vy
Y2U7CiAgICAgICAgIGludCBtX3N0YXJ0U3RhcnRPZmZzZXQ7Ci0gICAgICAgIGJvb2wgbV9pc0lu
U3RyaWN0Q29udGV4dDsKKyAgICAgICAgYm9vbCBtX2lzSW5TdHJpY3RDb250ZXh0IDogMTsKKyNp
ZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgYm9vbCBtX2NvbnN0cnVjdG9yS2lu
ZElzRGVyaXZlZCA6IDE7CisjZW5kaWYKICAgICB9OwogCiAgICAgY2xhc3MgRnVuY3Rpb25Ob2Rl
IGZpbmFsIDogcHVibGljIFNjb3BlTm9kZSB7CkBAIC0xNjQxLDcgKzE2NjEsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtX25hbWU7CiAgICAgICAgIEV4
cHJlc3Npb25Ob2RlKiBtX2NvbnN0cnVjdG9yRXhwcmVzc2lvbjsKLSAgICAgICAgRXhwcmVzc2lv
bk5vZGUqIG1fcGFyZW50Q2xhc3NFeHByZXNzaW9uOworICAgICAgICBFeHByZXNzaW9uTm9kZSog
bV9jbGFzc0hlcml0YWdlOwogICAgICAgICBQcm9wZXJ0eUxpc3ROb2RlKiBtX2luc3RhbmNlTWV0
aG9kczsKICAgICAgICAgUHJvcGVydHlMaXN0Tm9kZSogbV9zdGF0aWNNZXRob2RzOwogICAgIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5kZXggNjMxOGZkNjM2YmVi
M2U3YjkxZDI4ZjY0OTZhZWQ5YWY3YmQ4NzE4Yy4uNzVmZGZhMzgxYzJmMTY1NGIxNTUzNzNiMmVh
MGEyNDRhMzIyYTYxOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcApA
QCAtMTI1NSw3ICsxMjU1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRm9y
bWFsUGFyYW1ldGVyTGlzdCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3IKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1
aWxkZXImIGNvbnRleHQpCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlv
bkJvZHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiBj
b250ZXh0LCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQpCiB7CiAgICAg
SlNUb2tlbkxvY2F0aW9uIHN0YXJ0TG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICB1bnNp
Z25lZCBzdGFydENvbHVtbiA9IHRva2VuQ29sdW1uKCk7CkBAIC0xMjYzLDE0ICsxMjYzLDE0IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJvCiAKICAgICBpZiAobWF0Y2goQ0xPU0VCUkFDRSkpIHsK
ICAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdG9rZW5Db2x1bW4oKTsKLSAgICAgICAgcmV0
dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRp
b24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0
dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRp
b24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpLCBjb25zdHJ1Y3Rvcktp
bmQpOwogICAgIH0KICAgICBEZXB0aE1hbmFnZXIgc3RhdGVtZW50RGVwdGgoJm1fc3RhdGVtZW50
RGVwdGgpOwogICAgIG1fc3RhdGVtZW50RGVwdGggPSAwOwogICAgIHR5cGVuYW1lIFRyZWVCdWls
ZGVyOjpGdW5jdGlvbkJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyKGNvbnN0X2Nhc3Q8Vk0qPihtX3Zt
KSwgbV9sZXhlci5nZXQoKSk7CiAgICAgZmFpbElmRmFsc2UocGFyc2VTb3VyY2VFbGVtZW50cyhi
b2R5QnVpbGRlciwgQ2hlY2tGb3JTdHJpY3RNb2RlKSwgIkNhbm5vdCBwYXJzZSBib2R5IG9mIHRo
aXMgZnVuY3Rpb24iKTsKICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOwot
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tl
bkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIHN0cmljdE1vZGUoKSk7CisgICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRva2VuTG9j
YXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpLCBjb25zdHJ1Y3Rv
cktpbmQpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciogc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKEZ1
bmN0aW9uUGFyc2VNb2RlIG1vZGUpCkBAIC0xMjkyLDcgKzEyOTIsOCBAQCBzdGF0aWMgY29uc3Qg
Y2hhciogc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUpCiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVy
JiBjb250ZXh0LCBGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFy
c2VNb2RlIG1vZGUsIGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIFBhcnNlckZ1bmN0aW9u
SW5mbzxUcmVlQnVpbGRlcj4mIGluZm8pCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJv
b2wgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiBjb250
ZXh0LCBGdW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2Rl
IG1vZGUsCisgICAgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgSlNQYXJzZXJDb25zdHJ1
Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+
JiBpbmZvKQogewogICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5jdGlvblNjb3BlKHRoaXMsIHB1c2hT
Y29wZSgpKTsKICAgICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7CkBAIC0xMzQ1LDcg
KzEzNDYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZAogICAgICAgICAgICAgZW5kTG9jYXRp
b24uc3RhcnRPZmZzZXQgLSBlbmRMb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRMaW5lU3RhcnRPZmZzZXQgPSBtX3Rva2VuLm1fbG9jYXRpb24ubGluZVN0
YXJ0T2Zmc2V0OwogCi0gICAgICAgIGluZm8uYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25C
b2R5KHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBpbmZvLmJvZHlTdGFydENvbHVtbiwgYm9k
eUVuZENvbHVtbiwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7CisgICAgICAgIGluZm8uYm9keSA9
IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBp
bmZvLmJvZHlTdGFydENvbHVtbiwgYm9keUVuZENvbHVtbiwgY2FjaGVkSW5mby0+c3RyaWN0TW9k
ZSwgY29uc3RydWN0b3JLaW5kKTsKICAgICAgICAgCiAgICAgICAgIGZ1bmN0aW9uU2NvcGUtPnJl
c3RvcmVGcm9tU291cmNlUHJvdmlkZXJDYWNoZShjYWNoZWRJbmZvKTsKICAgICAgICAgZmFpbElm
RmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlh
YmxlSW5mbyksICJQYXJzZXIgZXJyb3IiKTsKQEAgLTEzNjgsMTUgKzEzNjksMjUgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0
aW9uSW5mbyhUcmVlQnVpbGQKICAgICB9CiAgICAgbV9sYXN0RnVuY3Rpb25OYW1lID0gbGFzdEZ1
bmN0aW9uTmFtZTsKICAgICBQYXJzZXJTdGF0ZSBvbGRTdGF0ZSA9IHNhdmVTdGF0ZSgpOwotICAg
IGluZm8uYm9keSA9IHBhcnNlRnVuY3Rpb25Cb2R5KGNvbnRleHQpOworICAgIGluZm8uYm9keSA9
IHBhcnNlRnVuY3Rpb25Cb2R5KGNvbnRleHQsIGNvbnN0cnVjdG9yS2luZCk7CiAgICAgcmVzdG9y
ZVN0YXRlKG9sZFN0YXRlKTsKICAgICBmYWlsSWZGYWxzZShpbmZvLmJvZHksICJDYW5ub3QgcGFy
c2UgdGhlIGJvZHkgb2YgdGhpcyAiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUobW9kZSkpOwogICAg
IGNvbnRleHQuc2V0RW5kT2Zmc2V0KGluZm8uYm9keSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgp
KTsKICAgICBpZiAoZnVuY3Rpb25TY29wZS0+c3RyaWN0TW9kZSgpICYmIGluZm8ubmFtZSkgewor
I2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICBSRUxFQVNFX0FTU0VSVChtb2Rl
ID09IEZ1bmN0aW9uTW9kZSB8fCBtb2RlID09IE1ldGhvZE1vZGUpOworI2Vsc2UKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobW9kZSA9PSBGdW5jdGlvbk1vZGUpOworI2VuZGlmCiAgICAgICAgIHNl
bWFudGljRmFpbElmVHJ1ZShtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmluZm8u
bmFtZSwgIiciLCBpbmZvLm5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24g
bmFtZSBpbiBzdHJpY3QgbW9kZSIpOwogICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobV92bS0+
cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqaW5mby5uYW1lLCAiJyIsIGluZm8ubmFtZS0+aW1wbCgp
LCAiJyBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBuYW1lIGluIHN0cmljdCBtb2RlIik7CiAgICAg
fQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmIChmdW5jdGlvblNjb3BlLT5o
YXNEaXJlY3RTdXBlcigpKSB7CisgICAgICAgIGJvb2wgbmFtZUlzQ29uc3RydWN0b3IgPSBpbmZv
Lm5hbWUgJiYgKmluZm8ubmFtZSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvcjsK
KyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1vZGUgIT0gTWV0aG9kTW9kZSB8fCAhbmFtZUlz
Q29uc3RydWN0b3IsICJDYW5ub3QgY2FsbCBzdXBlcigpIG91dHNpZGUgb2YgYSBjbGFzcyBjb25z
dHJ1Y3RvciIpOworICAgIH0KKyNlbmRpZgogICAgIGluZm8uY2xvc2VCcmFjZU9mZnNldCA9IG1f
dG9rZW4ubV9kYXRhLm9mZnNldDsKICAgICB1bnNpZ25lZCBjbG9zZUJyYWNlTGluZSA9IG1fdG9r
ZW4ubV9kYXRhLmxpbmU7CiAgICAgdW5zaWduZWQgY2xvc2VCcmFjZUxpbmVTdGFydE9mZnNldCA9
IG1fdG9rZW4ubV9kYXRhLmxpbmVTdGFydE9mZnNldDsKQEAgLTE0MTcsNyArMTQyOCw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VGdW5jdGlvbkRlY2xhCiAgICAgdW5zaWduZWQgZnVuY3Rpb25LZXl3b3JkU3RhcnQg
PSB0b2tlblN0YXJ0KCk7CiAgICAgbmV4dCgpOwogICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVl
QnVpbGRlcj4gaW5mbzsKLSAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4
dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0aW9uTW9kZSwgdHJ1ZSwgaW5mbykpLCAiQ2Fubm90
IHBhcnNlIHRoaXMgZnVuY3Rpb24iKTsKKyAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbklu
Zm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0aW9uTW9kZSwgdHJ1ZSwgSlNQYXJz
ZXJDb25zdHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0
aW9uIik7CiAgICAgZmFpbElmRmFsc2UoaW5mby5uYW1lLCAiRnVuY3Rpb24gc3RhdGVtZW50cyBt
dXN0IGhhdmUgYSBuYW1lIik7CiAgICAgZmFpbElmRmFsc2VJZlN0cmljdChkZWNsYXJlVmFyaWFi
bGUoaW5mby5uYW1lKSwgIkNhbm5vdCBkZWNsYXJlIGEgZnVuY3Rpb24gbmFtZWQgJyIsIGluZm8u
bmFtZS0+aW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIpOwogICAgIHJldHVybiBjb250ZXh0LmNy
ZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KGxvY2F0aW9uLCBpbmZvLCBmdW5jdGlvbktleXdvcmRTdGFy
dCk7CkBAIC0xNDY3LDggKzE0NzgsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVDbGFzc0V4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MoVAogICAgIGlm
IChjb25zdW1lKEVYVEVORFMpKSB7CiAgICAgICAgIHBhcmVudENsYXNzID0gcGFyc2VQcmltYXJ5
RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAgICAgZmFpbElmRmFsc2UocGFyZW50Q2xhc3MsICJD
YW5ub3QgcGFyc2UgdGhlIHBhcmVudCBjbGFzcyBuYW1lIik7Ci0gICAgICAgIGZhaWxXaXRoTWVz
c2FnZSgiSW5oZXJpdGFuY2UgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKICAgICB9CisgICAgY29u
c3QgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kID0gcGFyZW50Q2xhc3Mg
PyBKU1BhcnNlckNvbnN0cnVjdG9yS2luZDo6RGVyaXZlZCA6IEpTUGFyc2VyQ29uc3RydWN0b3JL
aW5kOjpCYXNlOwogCiAgICAgY29uc3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOQlJBQ0UsIFRyZWVC
dWlsZGVyOjpEb250QnVpbGRTdHJpbmdzLCAiRXhwZWN0ZWQgb3BlbmluZyAneycgYXQgdGhlIHN0
YXJ0IG9mIGEgY2xhc3MgYm9keSIpOwogCkBAIC0xNTAwLDExICsxNTExLDEyIEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VDbGFzcyhUCiAgICAgICAgIGlmIChpc0dldHRlciB8fCBpc1NldHRlcikgewogICAg
ICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGlzU3RhdGljTWV0aG9kLCAiQ2Fubm90IGRlY2xh
cmUgYSBzdGF0aWMiLCBzdHJpbmdGb3JGdW5jdGlvbk1vZGUoaXNHZXR0ZXIgPyBHZXR0ZXJNb2Rl
IDogU2V0dGVyTW9kZSkpOwogICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4ZXJG
bGFnc0lnbm9yZVJlc2VydmVkV29yZHMpOwotICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUdl
dHRlclNldHRlcihjb250ZXh0LCBhbHdheXNTdHJpY3RJbnNpZGVDbGFzcywgaXNHZXR0ZXIgPyBQ
cm9wZXJ0eU5vZGU6OkdldHRlciA6IFByb3BlcnR5Tm9kZTo6U2V0dGVyLCBtZXRob2RTdGFydCk7
CisgICAgICAgICAgICBib29sIGlzTWV0aG9kID0gdHJ1ZTsKKyAgICAgICAgICAgIHByb3BlcnR5
ID0gcGFyc2VHZXR0ZXJTZXR0ZXIoY29udGV4dCwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xhc3MsIGlz
R2V0dGVyID8gUHJvcGVydHlOb2RlOjpHZXR0ZXIgOiBQcm9wZXJ0eU5vZGU6OlNldHRlciwgbWV0
aG9kU3RhcnQsIGlzTWV0aG9kKTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAi
Q2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IG1ldGhvZEluZm87Ci0gICAgICAgICAg
ICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05h
bWUsIEZ1bmN0aW9uTW9kZSwgZmFsc2UsIG1ldGhvZEluZm8pKSwgIkNhbm5vdCBwYXJzZSB0aGlz
IG1ldGhvZCIpOworICAgICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNv
bnRleHQsIEZ1bmN0aW9uTmVlZHNOYW1lLCBNZXRob2RNb2RlLCBmYWxzZSwgY29uc3RydWN0b3JL
aW5kLCBtZXRob2RJbmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKICAgICAgICAg
ICAgIGZhaWxJZkZhbHNlKG1ldGhvZEluZm8ubmFtZSwgIm1ldGhvZCBtdXN0IGhhdmUgYSBuYW1l
Iik7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShkZWNsYXJlVmFyaWFibGUobWV0aG9kSW5mby5u
YW1lKSwgIkNhbm5vdCBkZWNsYXJlIGEgbWV0aG9kIG5hbWVkICciLCBtZXRob2RJbmZvLm5hbWUt
PmltcGwoKSwgIiciKTsKIApAQCAtMTUyMiw3ICsxNTM0LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNs
YXNzKFQKICAgICAgICAgICAgIC8vIEZJWE1FOiBTeW50YXggZXJyb3Igd2hlbiBzdXBlcigpIGlz
IGNhbGxlZAogICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGlzU3RhdGljTWV0aG9kICYm
ICptZXRob2RJbmZvLm5hbWUgPT0gcHJvcGVydHlOYW1lcy5wcm90b3R5cGUsCiAgICAgICAgICAg
ICAgICAgIkNhbm5vdCBkZWNsYXJlIGEgc3RhdGljIG1ldGhvZCBuYW1lZCAncHJvdG90eXBlJyIp
OwotICAgICAgICAgICAgcHJvcGVydHkgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KG1ldGhvZElu
Zm8ubmFtZSwgbWV0aG9kLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCBhbHdheXNTdHJpY3RJbnNp
ZGVDbGFzcyk7CisgICAgICAgICAgICBib29sIGlzTWV0aG9kID0gdHJ1ZTsKKyAgICAgICAgICAg
IHByb3BlcnR5ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eShtZXRob2RJbmZvLm5hbWUsIG1ldGhv
ZCwgUHJvcGVydHlOb2RlOjpDb25zdGFudCwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xhc3MsIGlzTWV0
aG9kKTsKICAgICAgICAgfQogCiAgICAgICAgIFRyZWVQcm9wZXJ0eUxpc3QmIHRhaWwgPSBpc1N0
YXRpY01ldGhvZCA/IHN0YXRpY01ldGhvZHNUYWlsIDogaW5zdGFuY2VNZXRob2RzVGFpbDsKQEAg
LTE5NzUsNyArMTk4OCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3Bl
cnR5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVByb3BlcnR5KFRyZWVCCiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQ
cm9wZXJ0eSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VHZXR0ZXJTZXR0ZXIoVHJlZUJ1aWxkZXIm
IGNvbnRleHQsIGJvb2wgc3RyaWN0LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgdW5zaWduZWQg
Z2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCkKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVByb3BlcnR5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUdldHRlclNldHRlcihUcmVlQnVp
bGRlciYgY29udGV4dCwgYm9vbCBzdHJpY3QsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCB1bnNp
Z25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0LCBib29sIGlzTWV0aG9kKQogewogICAgIGNv
bnN0IElkZW50aWZpZXIqIHN0cmluZ1Byb3BlcnR5TmFtZSA9IDA7CiAgICAgZG91YmxlIG51bWVy
aWNQcm9wZXJ0eU5hbWUgPSAwOwpAQCAtMTk5MCwxNCArMjAwMywxNCBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VHZXR0
ZXJTZXR0ZXIoVAogICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKICAg
ICBpZiAodHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRlcikgewogICAgICAgICBmYWlsSWZGYWxz
ZShtYXRjaChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIgbGlzdCBmb3IgZ2V0dGVy
IGRlZmluaXRpb24iKTsKLSAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNv
bnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEdldHRlck1vZGUsIGZhbHNlLCBpbmZvKSks
ICJDYW5ub3QgcGFyc2UgZ2V0dGVyIGRlZmluaXRpb24iKTsKKyAgICAgICAgZmFpbElmRmFsc2Uo
KHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEdldHRl
ck1vZGUsIGZhbHNlLCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZDo6QmFzZSwgaW5mbykpLCAiQ2Fu
bm90IHBhcnNlIGdldHRlciBkZWZpbml0aW9uIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZmFp
bElmRmFsc2UobWF0Y2goT1BFTlBBUkVOKSwgIkV4cGVjdGVkIGEgcGFyYW1ldGVyIGxpc3QgZm9y
IHNldHRlciBkZWZpbml0aW9uIik7Ci0gICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9u
SW5mbyhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBTZXR0ZXJNb2RlLCBmYWxzZSwg
aW5mbykpLCAiQ2Fubm90IHBhcnNlIHNldHRlciBkZWZpbml0aW9uIik7CisgICAgICAgIGZhaWxJ
ZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRz
LCBTZXR0ZXJNb2RlLCBmYWxzZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8p
KSwgIkNhbm5vdCBwYXJzZSBzZXR0ZXIgZGVmaW5pdGlvbiIpOwogICAgIH0KICAgICBpZiAoc3Ry
aW5nUHJvcGVydHlOYW1lKQotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNl
dHRlclByb3BlcnR5KGxvY2F0aW9uLCB0eXBlLCBzdHJpY3QsIHN0cmluZ1Byb3BlcnR5TmFtZSwg
aW5mbywgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3Jl
YXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdF9jYXN0PFZNKj4obV92bSksIG1fcGFyc2Vy
QXJlbmEsIGxvY2F0aW9uLCB0eXBlLCBzdHJpY3QsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIGluZm8s
IGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVh
dGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGxvY2F0aW9uLCB0eXBlLCBzdHJpY3QsIHN0cmluZ1By
b3BlcnR5TmFtZSwgaW5mbywgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgaXNNZXRob2QpOwor
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoY29uc3RfY2Fz
dDxWTSo+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBsb2NhdGlvbiwgdHlwZSwgc3RyaWN0LCBudW1l
cmljUHJvcGVydHlOYW1lLCBpbmZvLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0LCBpc01ldGhv
ZCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CkBAIC0yMTgyLDcgKzIxOTUs
NyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZVByaW1hcnlFeHByZQogICAgICAgICBuZXh0KCk7CiAgICAgICAgIFBh
cnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKICAgICAgICAgaW5mby5uYW1lID0g
Jm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyOwotICAgICAgICBmYWlsSWZGYWxz
ZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVu
Y3Rpb25Nb2RlLCBmYWxzZSwgaW5mbykpLCAiQ2Fubm90IHBhcnNlIGZ1bmN0aW9uIGV4cHJlc3Np
b24iKTsKKyAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1
bmN0aW9uTm9SZXF1aXJlbWVudHMsIEZ1bmN0aW9uTW9kZSwgZmFsc2UsIEpTUGFyc2VyQ29uc3Ry
dWN0b3JLaW5kOjpCYXNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgZnVuY3Rpb24gZXhwcmVzc2lv
biIpOwogICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkV4cHIobG9jYXRpb24s
IGluZm8sIGZ1bmN0aW9uS2V5d29yZFN0YXJ0KTsKICAgICB9CiAjaWYgRU5BQkxFKEVTNl9DTEFT
U19TWU5UQVgpCkBAIC0yMzMyLDcgKzIzNDUsMTYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXMK
ICAgICAgICAgbmV3Q291bnQrKzsKICAgICB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKKyAgICBib29sIGJhc2VJc1N1cGVyID0gbWF0Y2goU1VQRVIpOworICAgIGlmIChiYXNlSXNT
dXBlcikgeworICAgICAgICBiYXNlID0gY29udGV4dC5zdXBlckV4cHIobG9jYXRpb24pOworICAg
ICAgICBuZXh0KCk7CisgICAgfSBlbHNlCisgICAgICAgIGJhc2UgPSBwYXJzZVByaW1hcnlFeHBy
ZXNzaW9uKGNvbnRleHQpOworI2Vsc2UKICAgICBiYXNlID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lv
bihjb250ZXh0KTsKKyNlbmRpZgogICAgIAogICAgIGZhaWxJZkZhbHNlKGJhc2UsICJDYW5ub3Qg
cGFyc2UgYmFzZSBleHByZXNzaW9uIik7CiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTIzNjQsNiAr
MjM4NiwxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlcwogICAgICAgICAgICAgICAgIEpTVGV4
dFBvc2l0aW9uIGV4cHJlc3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAg
ICAgICAgICAgIFRyZWVBcmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4
dCwgQWxsb3dTcHJlYWQpOwogICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywg
IkNhbm5vdCBwYXJzZSBjYWxsIGFyZ3VtZW50cyIpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lO
VEFYKQorICAgICAgICAgICAgICAgIGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNjb3BlKCktPnNldEhhc0RpcmVjdFN1cGVyKCk7CisjZW5kaWYKICAgICAgICAg
ICAgICAgICBiYXNlID0gY29udGV4dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShzdGFydExvY2F0aW9u
LCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRv
a2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX25vbkxIU0Nv
dW50ID0gbm9uTEhTQ291bnQ7CkBAIC0yMzgxLDggKzI0MDcsMTQgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1i
ZXJFeHByZXMKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGdvdG8gZW5kTWVtYmVyRXhw
cmVzc2lvbjsKICAgICAgICAgfQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAg
ICBiYXNlSXNTdXBlciA9IGZhbHNlOworI2VuZGlmCiAgICAgfQogZW5kTWVtYmVyRXhwcmVzc2lv
bjoKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBzZW1hbnRpY0ZhaWxJZlRydWUo
YmFzZUlzU3VwZXIgJiYgIW5ld0NvdW50LCAiQ2Fubm90IHJlZmVyZW5jZSBzdXBlciIpOworI2Vu
ZGlmCiAgICAgd2hpbGUgKG5ld0NvdW50LS0pCiAgICAgICAgIGJhc2UgPSBjb250ZXh0LmNyZWF0
ZU5ld0V4cHIobG9jYXRpb24sIGJhc2UsIGV4cHJlc3Npb25TdGFydCwgbGFzdFRva2VuRW5kUG9z
aXRpb24oKSk7CiAgICAgcmV0dXJuIGJhc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaAppbmRleCA1MDFjMDM2NDRkNTU5N2I4YTFhMWFmM2U5ZjljODJlMTg0ZWQyZDhjLi5kZGEx
Y2JiYmQzZjNjZDZhM2MzY2UwMGUzNDY3MjY4NzA3ZjA3Mzg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTExNSw2ICsxMTUsOSBAQCBzdHJ1Y3QgU2NvcGUgewogICAg
ICAgICAsIG1fc2hhZG93c0FyZ3VtZW50cyhmYWxzZSkKICAgICAgICAgLCBtX3VzZXNFdmFsKGZh
bHNlKQogICAgICAgICAsIG1fbmVlZHNGdWxsQWN0aXZhdGlvbihmYWxzZSkKKyNpZiBFTkFCTEUo
RVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgLCBtX2hhc0RpcmVjdFN1cGVyKGZhbHNlKQorI2Vu
ZGlmCiAgICAgICAgICwgbV9hbGxvd3NOZXdEZWNscyh0cnVlKQogICAgICAgICAsIG1fc3RyaWN0
TW9kZShzdHJpY3RNb2RlKQogICAgICAgICAsIG1faXNGdW5jdGlvbihpc0Z1bmN0aW9uKQpAQCAt
MTMwLDYgKzEzMyw5IEBAIHN0cnVjdCBTY29wZSB7CiAgICAgICAgICwgbV9zaGFkb3dzQXJndW1l
bnRzKHJocy5tX3NoYWRvd3NBcmd1bWVudHMpCiAgICAgICAgICwgbV91c2VzRXZhbChyaHMubV91
c2VzRXZhbCkKICAgICAgICAgLCBtX25lZWRzRnVsbEFjdGl2YXRpb24ocmhzLm1fbmVlZHNGdWxs
QWN0aXZhdGlvbikKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgLCBtX2hh
c0RpcmVjdFN1cGVyKHJocy5tX2hhc0RpcmVjdFN1cGVyKQorI2VuZGlmCiAgICAgICAgICwgbV9h
bGxvd3NOZXdEZWNscyhyaHMubV9hbGxvd3NOZXdEZWNscykKICAgICAgICAgLCBtX3N0cmljdE1v
ZGUocmhzLm1fc3RyaWN0TW9kZSkKICAgICAgICAgLCBtX2lzRnVuY3Rpb24ocmhzLm1faXNGdW5j
dGlvbikKQEAgLTI2NSw2ICsyNzEsMTEgQEAgc3RydWN0IFNjb3BlIHsKIAogICAgIHZvaWQgc2V0
TmVlZHNGdWxsQWN0aXZhdGlvbigpIHsgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uID0gdHJ1ZTsgfQog
CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBoYXNEaXJlY3RTdXBlcigp
IHsgcmV0dXJuIG1faGFzRGlyZWN0U3VwZXI7IH0KKyAgICB2b2lkIHNldEhhc0RpcmVjdFN1cGVy
KCkgeyBtX2hhc0RpcmVjdFN1cGVyID0gdHJ1ZTsgfQorI2VuZGlmCisKICAgICBib29sIGNvbGxl
Y3RGcmVlVmFyaWFibGVzKFNjb3BlKiBuZXN0ZWRTY29wZSwgYm9vbCBzaG91bGRUcmFja0Nsb3Nl
ZFZhcmlhYmxlcykKICAgICB7CiAgICAgICAgIGlmIChuZXN0ZWRTY29wZS0+bV91c2VzRXZhbCkK
QEAgLTM1OCw2ICszNjksOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaGFkb3dzQXJndW1lbnRz
IDogMTsKICAgICBib29sIG1fdXNlc0V2YWwgOiAxOwogICAgIGJvb2wgbV9uZWVkc0Z1bGxBY3Rp
dmF0aW9uIDogMTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIG1faGFz
RGlyZWN0U3VwZXIgOiAxOworI2VuZGlmCiAgICAgYm9vbCBtX2FsbG93c05ld0RlY2xzIDogMTsK
ICAgICBib29sIG1fc3RyaWN0TW9kZSA6IDE7CiAgICAgYm9vbCBtX2lzRnVuY3Rpb24gOiAxOwpA
QCAtNzM5LDggKzc1Myw4IEBAIHByaXZhdGU6CiAgICAgZW51bSBTcHJlYWRNb2RlIHsgQWxsb3dT
cHJlYWQsIERvbnRBbGxvd1NwcmVhZCB9OwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gQUxXQVlTX0lOTElORSBUcmVlQXJndW1lbnRzIHBhcnNlQXJndW1lbnRzKFRyZWVCdWlsZGVy
JiwgU3ByZWFkTW9kZSk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJv
cGVydHkgcGFyc2VQcm9wZXJ0eShUcmVlQnVpbGRlciYsIGJvb2wgc3RyaWN0KTsKLSAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBwYXJzZUdldHRlclNldHRlcihU
cmVlQnVpbGRlciYsIGJvb2wgc3RyaWN0LCBQcm9wZXJ0eU5vZGU6OlR5cGUsIHVuc2lnbmVkIGdl
dHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVC
dWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkg
cGFyc2VHZXR0ZXJTZXR0ZXIoVHJlZUJ1aWxkZXImLCBib29sIHN0cmljdCwgUHJvcGVydHlOb2Rl
OjpUeXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0LCBib29sIGlzTWV0aG9k
ID0gZmFsc2UpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElO
RSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJiwgSlNQYXJz
ZXJDb25zdHJ1Y3RvcktpbmQpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxX
QVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJzZUZvcm1hbFBhcmFtZXRlcnMo
VHJlZUJ1aWxkZXImKTsKICAgICBlbnVtIFZhckRlY2xhcmF0aW9uTGlzdENvbnRleHQgeyBGb3JM
b29wQ29udGV4dCwgVmFyRGVjbGFyYXRpb25Db250ZXh0IH07CiAgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVl
QnVpbGRlciYsIGludCYgZGVjbGFyYXRpb25zLCBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuJiBs
YXN0UGF0dGVybiwgVHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFsaXplciwgSlNUZXh0UG9zaXRp
b24mIGlkZW50U3RhcnQsIEpTVGV4dFBvc2l0aW9uJiBpbml0U3RhcnQsIEpTVGV4dFBvc2l0aW9u
JiBpbml0RW5kLCBWYXJEZWNsYXJhdGlvbkxpc3RDb250ZXh0KTsKQEAgLTc1MCw3ICs3NjQsNyBA
QCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5F
IFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gcGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm4oVHJl
ZUJ1aWxkZXImLCBEZWNvbnN0cnVjdGlvbktpbmQsIGludCBkZXB0aCA9IDApOwogICAgIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBh
dHRlcm4gdHJ5UGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm5FeHByZXNzaW9uKFRyZWVCdWlsZGVy
Jik7CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBib29s
IHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgRnVuY3Rpb25SZXF1aXJlbWVudHMsIEZ1
bmN0aW9uUGFyc2VNb2RlLCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBQYXJzZXJGdW5j
dGlvbkluZm88VHJlZUJ1aWxkZXI+Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYsIEZ1bmN0
aW9uUmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5p
bmdTY29wZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVl
QnVpbGRlcj4mKTsKICNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBUcmVlQ2xhc3NFeHByZXNzaW9uIHBhcnNl
Q2xhc3MoVHJlZUJ1aWxkZXImLCBGdW5jdGlvblJlcXVpcmVtZW50cyk7CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAppbmRleCAwNjExYjg4ZTcwY2Vh
NjU4Y2M4MzUyNzhjYjQ2NzBmYTIxMWJlMTE3Li5iYmIwZjhjZjJkZTE1M2FjZGRkZGMzNjEyODFj
YmNkMWY2MjA3YjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlck1vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rl
cy5oCkBAIC0zMyw2ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIEpTUGFyc2VyU3Ry
aWN0bmVzcyB7IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VCdWlsdGluLCBKU1BhcnNlU3RyaWN0IH07
CiBlbnVtIEpTUGFyc2VyTW9kZSB7IEpTUGFyc2VQcm9ncmFtQ29kZSwgSlNQYXJzZUZ1bmN0aW9u
Q29kZSB9OworZW51bSBjbGFzcyBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCB7IEJhc2UsIERlcml2
ZWQgfTsKIAogZW51bSBQcm9maWxlck1vZGUgeyBQcm9maWxlck9mZiwgUHJvZmlsZXJPbiB9Owog
ZW51bSBEZWJ1Z2dlck1vZGUgeyBEZWJ1Z2dlck9mZiwgRGVidWdnZXJPbiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAppbmRleCA1ODg0ZmIyODJlNzU2
MWE2NTg2ZDBmNmUxZGE1OTE1MWI4ZDU0YTQ3Li5iODdjZWNhNjFmNzFlYTgwNGY4ZmFiNjM1ODUx
ZWQxMmMyMzIwMzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5
bnRheENoZWNrZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENo
ZWNrZXIuaApAQCAtNzMsNyArNzMsMTAgQEAgcHVibGljOgogICAgIGVudW0geyBOb25lRXhwciA9
IDAsCiAgICAgICAgIFJlc29sdmVFdmFsRXhwciwgUmVzb2x2ZUV4cHIsIEludGVnZXJFeHByLCBE
b3VibGVFeHByLCBTdHJpbmdFeHByLAogICAgICAgICBUaGlzRXhwciwgTnVsbEV4cHIsIEJvb2xF
eHByLCBSZWdFeHBFeHByLCBPYmplY3RMaXRlcmFsRXhwciwKLSAgICAgICAgRnVuY3Rpb25FeHBy
LCBDbGFzc0V4cHIsIEJyYWNrZXRFeHByLCBEb3RFeHByLCBDYWxsRXhwciwKKyNpZiBFTkFCTEUo
RVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgQ2xhc3NFeHByLCBTdXBlckV4cHIsIFN1cGVyQnJh
Y2tldEV4cHIsIFN1cGVyRG90RXhwciwKKyNlbmRpZgorICAgICAgICBGdW5jdGlvbkV4cHIsIEJy
YWNrZXRFeHByLCBEb3RFeHByLCBDYWxsRXhwciwKICAgICAgICAgTmV3RXhwciwgUHJlRXhwciwg
UG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5RXhwciwKICAgICAgICAgQ29uZGl0aW9uYWxFeHBy
LCBBc3NpZ25tZW50RXhwciwgVHlwZW9mRXhwciwKICAgICAgICAgRGVsZXRlRXhwciwgQXJyYXlM
aXRlcmFsRXhwciwgQmluZGluZ0RlY29uc3RydWN0aW9uLApAQCAtMTQ2LDYgKzE0OSw5IEBAIHB1
YmxpYzoKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVVbmFyeVBsdXMoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4cHJl
c3Npb25UeXBlIGNyZWF0ZVZvaWQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5
cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIHRoaXNFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIFRoaXNFeHByOyB9CisjaWYgRU5BQkxFKEVT
Nl9DTEFTU19TWU5UQVgpCisgICAgRXhwcmVzc2lvblR5cGUgc3VwZXJFeHByKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIFN1cGVyRXhwcjsgfQorI2VuZGlmCiAgICAgRXhwcmVzc2lv
blR5cGUgY3JlYXRlUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlm
aWVyKiwgaW50KSB7IHJldHVybiBSZXNvbHZlRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNy
ZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gT2JqZWN0
TGl0ZXJhbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVPYmplY3RMaXRlcmFsKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4gT2JqZWN0TGl0ZXJhbEV4cHI7IH0K
QEAgLTE2OCwxNCArMTc0LDE0IEBAIHB1YmxpYzoKICAgICBDbGFzc0V4cHJlc3Npb24gY3JlYXRl
Q2xhc3NFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHBy
ZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIFByb3BlcnR5TGlzdCwgUHJvcGVydHlMaXN0KSB7
IHJldHVybiBDbGFzc0V4cHI7IH0KICNlbmRpZgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1
bmN0aW9uRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBQYXJzZXJGdW5jdGlvbklu
Zm88U3ludGF4Q2hlY2tlcj4mLCBpbnQpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQotICAgIGlu
dCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiwgaW50LCBpbnQsIGJvb2wpIHsgcmV0dXJuIEZ1bmN0aW9uQm9keVJlc3VsdDsg
fQorICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGJvb2wsIEpTUGFyc2VyQ29uc3RydWN0b3JL
aW5kKSB7IHJldHVybiBGdW5jdGlvbkJvZHlSZXN1bHQ7IH0KICAgICB2b2lkIHNldEZ1bmN0aW9u
TmFtZVN0YXJ0KGludCwgaW50KSB7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzKCkgeyByZXR1
cm4gQXJndW1lbnRzUmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50cyhpbnQpIHsgcmV0
dXJuIEFyZ3VtZW50c1Jlc3VsdDsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVNwcmVhZEV4
cHJlc3Npb24oY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50
LCBpbnQpIHsgcmV0dXJuIFNwcmVhZEV4cHI7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzTGlz
dChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQpIHsgcmV0dXJuIEFyZ3VtZW50c0xpc3RSZXN1
bHQ7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBpbnQsIGludCkgeyByZXR1cm4gQXJndW1lbnRzTGlzdFJlc3VsdDsgfQotICAgIFByb3BlcnR5
IGNyZWF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGludCwgUHJvcGVydHlOb2Rl
OjpUeXBlIHR5cGUsIGJvb2wgY29tcGxldGUpCisgICAgUHJvcGVydHkgY3JlYXRlUHJvcGVydHko
Y29uc3QgSWRlbnRpZmllciogbmFtZSwgaW50LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9v
bCBjb21wbGV0ZSwgYm9vbCA9IGZhbHNlKQogICAgIHsKICAgICAgICAgaWYgKCFjb21wbGV0ZSkK
ICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKQEAgLTIzMCwxNCArMjM2LDE0IEBA
IHB1YmxpYzoKICAgICBpbnQgY3JlYXRlRGVidWdnZXIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
aW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVDb25z
dFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCwgaW50KSB7IHJldHVy
biBTdGF0ZW1lbnRSZXN1bHQ7IH0KICAgICBpbnQgYXBwZW5kQ29uc3REZWNsKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGludCwgY29uc3QgSWRlbnRpZmllciosIGludCkgeyByZXR1cm4gU3RhdGVt
ZW50UmVzdWx0OyB9Ci0gICAgUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBzdHJp
Y3QsIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50
YXhDaGVja2VyPiYsIHVuc2lnbmVkKQorICAgIFByb3BlcnR5IGNyZWF0ZUdldHRlck9yU2V0dGVy
UHJvcGVydHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUs
IGJvb2wgc3RyaWN0LCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlv
bkluZm88U3ludGF4Q2hlY2tlcj4mLCB1bnNpZ25lZCwgYm9vbCkKICAgICB7CiAgICAgICAgIEFT
U0VSVChuYW1lKTsKICAgICAgICAgaWYgKCFzdHJpY3QpCiAgICAgICAgICAgICByZXR1cm4gUHJv
cGVydHkodHlwZSk7CiAgICAgICAgIHJldHVybiBQcm9wZXJ0eShuYW1lLCB0eXBlKTsKICAgICB9
Ci0gICAgUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShWTSogdm0sIFBhcnNl
ckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2Rl
OjpUeXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBkb3VibGUgbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rp
b25JbmZvPFN5bnRheENoZWNrZXI+JiwgdW5zaWduZWQpCisgICAgUHJvcGVydHkgY3JlYXRlR2V0
dGVyT3JTZXR0ZXJQcm9wZXJ0eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wgc3RyaWN0
LCBkb3VibGUgbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+Jiwg
dW5zaWduZWQsIGJvb2wpCiAgICAgewogICAgICAgICBpZiAoIXN0cmljdCkKICAgICAgICAgICAg
IHJldHVybiBQcm9wZXJ0eSh0eXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25JZGVudGlmaWVycy5oCmluZGV4IGU5NWM5NzYzNjE3MTJlMmQyM2UxMTVhMmQ5
ZjJkMDEwM2M4NjJlOTMuLjZmMzRmYTkzMGQzYjE2Mjg3NTgwYmE0NWRkNWI1N2Q0MDdlZDNlNDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmll
cnMuaApAQCAtMjYxLDcgKzI2MSw4IEBACiAgICAgbWFjcm8oaXNGaW5pdGUpIFwKICAgICBtYWNy
byhUeXBlRXJyb3IpIFwKICAgICBtYWNybyh1bmRlZmluZWQpIFwKLSAgICBtYWNybyhCdWlsdGlu
TG9nKQorICAgIG1hY3JvKEJ1aWx0aW5Mb2cpIFwKKyAgICBtYWNybyhob21lT2JqZWN0KQogCiBu
YW1lc3BhY2UgSlNDIHsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAppbmRleCA3MTQ5MWRhNGYwZGM4ODczNDRjM2E2ODg3OGNmOTYxOTJiZTNhODg4Li43
MjQyOTUzYzk0YmFmZTMwODRjODI4OWExMDMwZDNiNDU1OWFhNzI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCkBAIC00NjcsNyArNDY3LDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBjbGVhckNvZGUoKTsKIAotICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFi
bGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCks
IHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UpOyB9CisgICAgRXhlY3V0
YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhu
ZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxz
ZSwgZmFsc2UpOyB9CiAKICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiBtX3Vu
bGlua2VkRXZhbENvZGVCbG9jay0+bnVtVmFyaWFibGVzKCk7IH0KICAgICB1bnNpZ25lZCBudW1i
ZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX3VubGlua2VkRXZhbENvZGVCbG9jay0+bnVt
YmVyT2ZGdW5jdGlvbkRlY2xzKCk7IH0KQEAgLTUyMiw3ICs1MjIsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGNsZWFyQ29kZSgpOwogCi0gICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8o
KSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2
YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSk7IH0KKyAgICBFeGVjdXRhYmxlSW5m
byBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0
aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSk7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA1N2M1ODg3NjA0ODQ3YjU4ZGNhOWIyZjRhZWMzY2JhMzEwYWZmNDc0Li41Zjk2NGYwMjgz
NjZiMjhkZDA5MDQzZjU4Yjk0NGQ4NmY2Y2UzYmM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTUtMDMtMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3Vw
cG9ydCBleHRlbmRzIGFuZCBzdXBlciBrZXl3b3JkcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgZm9yICJleHRlbmRzIiBhbmQgInN1
cGVyIiBrZXl3b3Jkcy4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICog
anMvY2xhc3Mtc3ludGF4LWV4dGVuZHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBq
cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9jbGFzcy1z
eW50YXgtc3VwZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9jbGFzcy1zeW50
YXgtc3VwZXIuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL2NsYXNzLXN5
bnRheC1leHRlbmRzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvY2xhc3Mt
c3ludGF4LXN1cGVyLmpzOiBBZGRlZC4KKwogMjAxNS0wMy0wNSAgVGltb3RoeSBIb3J0b24gIDx0
aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgPGF0dGFjaG1lbnQ+IHNob3VsZCBz
dXBwb3J0IGluZGljYXRpb24gb2YgZG93bmxvYWQgcHJvZ3Jlc3MKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCmlu
ZGV4IGI4ZWZiZGRhY2RkNDUxOTk4NGM5NmVmZTZlZWQ4MTE0NjE0MGY1ZjcuLjVhZjEwMjQ1MDZk
MTk1OTM3YmQ2MDVlNjk4YzlkNTcwZTBhYzA4YjIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNjks
NiArNjksOCBAQCB3ZWJraXQub3JnL2IvMTI3ODYwIFsgRGVidWcgXSBqcy9mdW5jdGlvbi1hcHBs
eS1hbGlhc2VkLmh0bWwgWyBTa2lwIF0KICMgRVM2IGNsYXNzIHN5bnRheCBoYXNuJ3QgYmVlbiBl
bmFibGVkIHlldC4KIHdlYmtpdC5vcmcvYi8xNDA0OTEganMvY2xhc3Mtc3ludGF4LWRlY2xhcmF0
aW9uLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNDA0OTEganMvY2xhc3Mtc3ludGF4
LWV4cHJlc3Npb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzE0MDQ5MSBqcy9jbGFz
cy1zeW50YXgtZXh0ZW5kcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTQwNDkxIGpz
L2NsYXNzLXN5bnRheC1zdXBlci5odG1sIFsgRmFpbHVyZSBdCiAKICMgVGhpcyB0ZXN0IHZlcmlm
aWVzIGR5bmFtaWMgbWFuaXB1bGF0aW9uIG9mIHRoZSBtcm9vdCBhbmQgbXNxcnQgZWxlbWVudHMu
CiBtYXRobWwvcm9vdHMtcmVtb3ZlQ2hpbGQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LWV4dGVuZHMtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LWV4dGVuZHMtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmMwNTRiZWYyZDgzYWI5ZGExZWM3ZWJlNjc0ODZhMDAzNmQ2NDc4YjAKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtZXh0ZW5kcy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzMSBAQAorVGVzdHMgZm9yIEVTNiBjbGFzcyBzeW50YXggImV4dGVuZHMi
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIChuZXcgQmFzZSkgaW5zdGFu
Y2VvZiBCYXNlIGlzIHRydWUKK1BBU1MgKG5ldyBEZXJpdmVkKSBpbnN0YW5jZW9mIERlcml2ZWQg
aXMgdHJ1ZQorUEFTUyAobmV3IERlcml2ZWQpLmJhc2VNZXRob2QoKSBpcyAiYmFzZSIKK1BBU1Mg
KG5ldyBEZXJpdmVkKS5vdmVycmlkZW5NZXRob2QoKSBpcyAiZGVyaXZlZCIKK1BBU1MgRGVyaXZl
ZC5zdGF0aWNCYXNlTWV0aG9kKCkgaXMgImJhc2UiCitQQVNTIERlcml2ZWQuc3RhdGljT3ZlcnJp
ZGVuTWV0aG9kKCkgaXMgImRlcml2ZWQiCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIHRocmV3IGV4
Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQgb2Ygc2NyaXB0LgorUEFTUyB4ID0g
Y2xhc3MgZXh0ZW5kcyB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgZW5k
IG9mIHNjcmlwdC4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IHRocmV3IGV4Y2VwdGlv
biBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQgb2Ygc2NyaXB0LgorUEFTUyB4ID0gY2xhc3Mg
ZXh0ZW5kcyBCYXNlIHt9IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogQ2xhc3MgZGVjbGFy
YXRpb24gd2l0aG91dCBhIGNvbnN0cnVjdG9yIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Li4KK1BBU1Mg
eCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0gZGlkIG5vdCB0aHJv
dyBleGNlcHRpb24uCitQQVNTIHguX19wcm90b19fIGlzIEJhc2UKK1BBU1MgeC5wcm90b3R5cGUu
X19wcm90b19fIGlzIEJhc2UucHJvdG90eXBlCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIG51bGwg
eyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXyBpcyBGdW5jdGlvbi5wcm90b3R5cGUK
K1BBU1MgeC5fX3Byb3RvX18gaXMgRnVuY3Rpb24ucHJvdG90eXBlCitQQVNTIHggPSBjbGFzcyBl
eHRlbmRzIDMgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXyB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcyBpcyBub3QgYW4gb2JqZWN0Li4KK1BBU1MgeCA9
IGNsYXNzIGV4dGVuZHMgImFiYyIgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXyB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcyBpcyBub3QgYW4gb2JqZWN0
Li4KK2Jhc2VXaXRoQmFkUHJvdG90eXBlID0gY2xhc3MgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyBi
YXNlV2l0aEJhZFByb3RvdHlwZS5wcm90b3R5cGUgPSAzCitQQVNTIHggPSBjbGFzcyBleHRlbmRz
IGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3IoKSB7IH0gfSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcydzIHByb3RvdHlwZSBpcyBub3QgYW4gb2JqZWN0
Li4KK2Jhc2VXaXRoQmFkUHJvdG90eXBlLnByb3RvdHlwZSA9ICJhYmMiCitQQVNTIHggPSBjbGFz
cyBleHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3IoKSB7IH0gfSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcydzIHByb3RvdHlwZSBpcyBub3Qg
YW4gb2JqZWN0Li4KK1BBU1MgYmFzZVdpdGhCYWRQcm90b3R5cGUucHJvdG90eXBlID0gbnVsbDsg
eCA9IGNsYXNzIGV4dGVuZHMgYmFzZVdpdGhCYWRQcm90b3R5cGUgeyBjb25zdHJ1Y3RvcigpIHsg
fSB9IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2NsYXNz
LXN5bnRheC1leHRlbmRzLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtZXh0ZW5k
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjA5MDA2YzUyNDA3NWZhNDY2MDBlMWYzM2YxYWRkZDgxMDBkZGVi
NmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtZXh0ZW5k
cy5odG1sCkBAIC0wLDAgKzEsOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NsYXNzLXN5bnRheC1leHRlbmRzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1z
dXBlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtc3VwZXItZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzZTU4NjExMGNlYzgxMWQ4MzRkYmNmYmRkZWMzYWZhZWEw
Yjg4YWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtc3Vw
ZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDEgQEAKK1Rlc3RzIGZvciBFUzYgY2xhc3Mgc3lu
dGF4ICJzdXBlciIKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgKG5ldyBC
YXNlKSBpbnN0YW5jZW9mIEJhc2UgaXMgdHJ1ZQorUEFTUyAobmV3IERlcml2ZWQpIGluc3RhbmNl
b2YgRGVyaXZlZCBpcyB0cnVlCitQQVNTIChuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRob2QoKSBp
cyBiYXNlTWV0aG9kVmFsdWUKK1BBU1MgeCA9IChuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRob2Q7
IHgoKSBpcyBiYXNlTWV0aG9kVmFsdWUKK1BBU1MgKG5ldyBEZXJpdmVkKS5jYWxsQmFzZU1ldGhv
ZEluR2V0dGVyIGlzIGJhc2VNZXRob2RWYWx1ZQorUEFTUyAobmV3IERlcml2ZWQpLmNhbGxCYXNl
TWV0aG9kSW5TZXR0ZXIgPSAxOyB2YWx1ZUluU2V0dGVyIGlzIGJhc2VNZXRob2RWYWx1ZQorUEFT
UyAobmV3IERlcml2ZWQpLmJhc2VNZXRob2RJbkdldHRlclNldHRlciBpcyAobmV3IEJhc2UpLmJh
c2VNZXRob2QKK1BBU1MgKG5ldyBEZXJpdmVkKS5iYXNlTWV0aG9kSW5HZXR0ZXJTZXR0ZXIgPSAx
OyB2YWx1ZUluU2V0dGVyIGlzIChuZXcgQmFzZSkuYmFzZU1ldGhvZAorUEFTUyBEZXJpdmVkLnN0
YXRpY01ldGhvZCgpIGlzICJiYXNlMyIKK1BBU1MgKG5ldyBTZWNvbmREZXJpdmVkKS5jaGFpbk1l
dGhvZCgpIGlzIFsiYmFzZSIsICJkZXJpdmVkIiwgInNlY29uZERlcml2ZWQiXQorUEFTUyB4ID0g
Y2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gc3VwZXIoKSB7
fSB9IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBrZXl3b3JkICdzdXBl
cicuIEV4cGVjdGVkIGFuIGluZGVudGlmaWVyLi4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgQmFz
ZSB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IG1ldGhvZCgpIHsgc3VwZXIoKSB9IH0gdGhy
ZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBDYW5ub3QgY2FsbCBzdXBlcigpIG91dHNpZGUgb2Yg
YSBjbGFzcyBjb25zdHJ1Y3Rvci4uCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25z
dHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBtZXRob2QoKSB7IHN1cGVyIH0gfSB0aHJldyBleGNlcHRp
b24gU3ludGF4RXJyb3I6IENhbm5vdCByZWZlcmVuY2Ugc3VwZXIuLgorUEFTUyB4ID0gY2xhc3Mg
ZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyByZXR1
cm4gbmV3IHN1cGVyIH0gfSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgKG5ldyB4KS5t
ZXRob2QoKSBpbnN0YW5jZW9mIEJhc2UgaXMgdHJ1ZQorUEFTUyAobmV3IHgpLm1ldGhvZCgpIGlu
c3RhbmNlb2YgeCBpcyBmYWxzZQorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3Ry
dWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kMSgpIHsgZGVsZXRlIChzdXBlci5mb28pIH0gbWV0
aG9kMigpIHsgZGVsZXRlIHN1cGVyWyJmb28iXSB9IH0gZGlkIG5vdCB0aHJvdyBleGNlcHRpb24u
CitQQVNTIChuZXcgeCkubWV0aG9kMSgpIHRocmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjog
Q2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5LgorUEFTUyAobmV3IHgpLm1ldGhvZDIoKSB0
aHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9w
ZXJ0eS4KK1BBU1MgbmV3IChjbGFzcyB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVk
OyB9IH0pIGluc3RhbmNlb2YgT2JqZWN0IGlzIHRydWUKK1BBU1MgbmV3IChjbGFzcyB7IGNvbnN0
cnVjdG9yKCkgeyByZXR1cm4gMTsgfSB9KSBpbnN0YW5jZW9mIE9iamVjdCBpcyB0cnVlCitQQVNT
IG5ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiB1bmRlZmlu
ZWQgfSB9KSBpcyB1bmRlZmluZWQKK1BBU1MgeCA9IHsgfTsgbmV3IChjbGFzcyBleHRlbmRzIEJh
c2UgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9KTsgaXMgeAorUEFTUyB4IGluc3RhbmNl
b2YgQmFzZSBpcyBmYWxzZQorUEFTUyBuZXcgKGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVj
dG9yKCkgeyB9IH0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4gYSBu
b24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4uCitQ
QVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiAxOyB9
IH0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0
IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4uCitQQVNTIG5ldyAo
Y2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiB1bmRlZmluZWQgfSB9
KSBpcyB1bmRlZmluZWQKK1BBU1MgeCA9IHsgfTsgbmV3IChjbGFzcyBleHRlbmRzIG51bGwgeyBj
b25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9KTsgaXMgeAorUEFTUyB4IGluc3RhbmNlb2YgT2Jq
ZWN0IGlzIHRydWUKK1BBU1MgbmV3IChjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3Rvcigp
IHsgfSB9KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW5ub3QgcmV0dXJuIGEgbm9uLW9i
amVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xhc3MuLgorUEFTUyBu
ZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gMTsgfSB9KSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW5ub3QgcmV0dXJuIGEgbm9uLW9iamVjdCB0eXBl
IGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xhc3MuLgorUEFTUyBuZXcgKGNsYXNz
IGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpIH0gfSkgZGlkIG5vdCB0aHJv
dyBleGNlcHRpb24uCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LXN1cGVyLmh0
bWwgYi9MYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtc3VwZXIuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
Y2ExODg3M2UxNTM3N2RiZGU3YzEwMGEwNDU0ZjcxZTYxMjRjZTFmCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LXN1cGVyLmh0bWwKQEAgLTAsMCArMSw4IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMv
Y2xhc3Mtc3ludGF4LXN1cGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5qcyBi
L0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44Nzc2OTQwMTcwNzYwOTkxNzQ2ZDdiMjIwY2Y2MGU4MWFiMWRkNGI3Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2NsYXNzLXN5bnRheC1leHRl
bmRzLmpzCkBAIC0wLDAgKzEsNDMgQEAKKy8vQCBza2lwCisKK2Rlc2NyaXB0aW9uKCdUZXN0cyBm
b3IgRVM2IGNsYXNzIHN5bnRheCAiZXh0ZW5kcyInKTsKKworY2xhc3MgQmFzZSB7CisgICAgY29u
c3RydWN0b3IoKSB7IH0KKyAgICBiYXNlTWV0aG9kKCkgeyByZXR1cm4gJ2Jhc2UnOyB9CisgICAg
b3ZlcnJpZGVuTWV0aG9kKCkgeyByZXR1cm4gJ2Jhc2UnOyB9CisgICAgc3RhdGljIHN0YXRpY0Jh
c2VNZXRob2QoKSB7IHJldHVybiAnYmFzZSc7IH0KKyAgICBzdGF0aWMgc3RhdGljT3ZlcnJpZGVu
TWV0aG9kKCkgeyByZXR1cm4gJ2Jhc2UnOyB9Cit9CisKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBC
YXNlIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfQorICAgIG92ZXJyaWRlbk1ldGhv
ZCgpIHsgcmV0dXJuICdkZXJpdmVkJzsgfQorICAgIHN0YXRpYyBzdGF0aWNPdmVycmlkZW5NZXRo
b2QoKSB7IHJldHVybiAnZGVyaXZlZCc7IH0KK30KKworc2hvdWxkQmVUcnVlKCcobmV3IEJhc2Up
IGluc3RhbmNlb2YgQmFzZScpOworc2hvdWxkQmVUcnVlKCcobmV3IERlcml2ZWQpIGluc3RhbmNl
b2YgRGVyaXZlZCcpOworc2hvdWxkQmUoJyhuZXcgRGVyaXZlZCkuYmFzZU1ldGhvZCgpJywgJyJi
YXNlIicpOworc2hvdWxkQmUoJyhuZXcgRGVyaXZlZCkub3ZlcnJpZGVuTWV0aG9kKCknLCAnImRl
cml2ZWQiJyk7CitzaG91bGRCZSgnRGVyaXZlZC5zdGF0aWNCYXNlTWV0aG9kKCknLCAnImJhc2Ui
Jyk7CitzaG91bGRCZSgnRGVyaXZlZC5zdGF0aWNPdmVycmlkZW5NZXRob2QoKScsICciZGVyaXZl
ZCInKTsKKworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzJywgJyJTeW50YXhFcnJvcjog
VW5leHBlY3RlZCBlbmQgb2Ygc2NyaXB0IicpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBleHRl
bmRzJywgJyJTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQgb2Ygc2NyaXB0IicpOworc2hvdWxk
VGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJhc2UgeycsICciU3ludGF4RXJyb3I6IFVuZXhwZWN0
ZWQgZW5kIG9mIHNjcmlwdCInKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNl
IHt9JywgJyJTeW50YXhFcnJvcjogQ2xhc3MgZGVjbGFyYXRpb24gd2l0aG91dCBhIGNvbnN0cnVj
dG9yIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiInKTsKK3Nob3VsZE5vdFRocm93KCd4ID0gY2xhc3Mg
ZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IH0gfScpOworc2hvdWxkQmUoJ3guX19wcm90
b19fJywgJ0Jhc2UnKTsKK3Nob3VsZEJlKCd4LnByb3RvdHlwZS5fX3Byb3RvX18nLCAnQmFzZS5w
cm90b3R5cGUnKTsKK3Nob3VsZEJlKCd4ID0gY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0
b3IoKSB7IH0gfTsgeC5fX3Byb3RvX18nLCAnRnVuY3Rpb24ucHJvdG90eXBlJyk7CitzaG91bGRC
ZSgneC5fX3Byb3RvX18nLCAnRnVuY3Rpb24ucHJvdG90eXBlJyk7CitzaG91bGRUaHJvdygneCA9
IGNsYXNzIGV4dGVuZHMgMyB7IGNvbnN0cnVjdG9yKCkgeyB9IH07IHguX19wcm90b19fJywgJyJU
eXBlRXJyb3I6IFRoZSBzdXBlcmNsYXNzIGlzIG5vdCBhbiBvYmplY3QuIicpOworc2hvdWxkVGhy
b3coJ3ggPSBjbGFzcyBleHRlbmRzICJhYmMiIHsgY29uc3RydWN0b3IoKSB7IH0gfTsgeC5fX3By
b3RvX18nLCAnIlR5cGVFcnJvcjogVGhlIHN1cGVyY2xhc3MgaXMgbm90IGFuIG9iamVjdC4iJyk7
CitldmFsQW5kTG9nKCdiYXNlV2l0aEJhZFByb3RvdHlwZSA9IGNsYXNzIHsgY29uc3RydWN0b3Io
KSB7IH0gfTsgYmFzZVdpdGhCYWRQcm90b3R5cGUucHJvdG90eXBlID0gMycpOworc2hvdWxkVGhy
b3coJ3ggPSBjbGFzcyBleHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3Io
KSB7IH0gfScsICciVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzc1wncyBwcm90b3R5cGUgaXMgbm90
IGFuIG9iamVjdC4iJyk7CitldmFsQW5kTG9nKCdiYXNlV2l0aEJhZFByb3RvdHlwZS5wcm90b3R5
cGUgPSAiYWJjIicpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIGJhc2VXaXRoQmFk
UHJvdG90eXBlIHsgY29uc3RydWN0b3IoKSB7IH0gfScsICciVHlwZUVycm9yOiBUaGUgc3VwZXJj
bGFzc1wncyBwcm90b3R5cGUgaXMgbm90IGFuIG9iamVjdC4iJyk7CitzaG91bGROb3RUaHJvdygn
YmFzZVdpdGhCYWRQcm90b3R5cGUucHJvdG90eXBlID0gbnVsbDsgeCA9IGNsYXNzIGV4dGVuZHMg
YmFzZVdpdGhCYWRQcm90b3R5cGUgeyBjb25zdHJ1Y3RvcigpIHsgfSB9Jyk7CisKK3ZhciBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0
LXRlc3RzL2NsYXNzLXN5bnRheC1zdXBlci5qcyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0
cy9jbGFzcy1zeW50YXgtc3VwZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ExNjRhZWFhNTQzZmRkM2UyNDM5
N2I0MzA5MGUyMzMyZTc1ZjRiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3Nj
cmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtc3VwZXIuanMKQEAgLTAsMCArMSw2NSBAQAorLy9AIHNr
aXAKKworZGVzY3JpcHRpb24oJ1Rlc3RzIGZvciBFUzYgY2xhc3Mgc3ludGF4ICJzdXBlciInKTsK
KwordmFyIGJhc2VNZXRob2RWYWx1ZSA9IHt9OwordmFyIHZhbHVlSW5TZXR0ZXIgPSBudWxsOwor
CitjbGFzcyBCYXNlIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsgfQorICAgIGJhc2VNZXRob2QoKSB7
IHJldHVybiBiYXNlTWV0aG9kVmFsdWU7IH0KKyAgICBjaGFpbk1ldGhvZCgpIHsgcmV0dXJuICdi
YXNlJzsgfQorICAgIHN0YXRpYyBzdGF0aWNNZXRob2QoKSB7IHJldHVybiAnYmFzZTMnOyB9Cit9
CisKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsgc3Vw
ZXIoKTsgfQorICAgIGNoYWluTWV0aG9kKCkgeyByZXR1cm4gW3N1cGVyLmNoYWluTWV0aG9kKCks
ICdkZXJpdmVkJ107IH0KKyAgICBjYWxsQmFzZU1ldGhvZCgpIHsgcmV0dXJuIHN1cGVyLmJhc2VN
ZXRob2QoKTsgfQorICAgIGdldCBjYWxsQmFzZU1ldGhvZEluR2V0dGVyKCkgeyByZXR1cm4gc3Vw
ZXJbJ2Jhc2VNZXRob2QnXSgpOyB9CisgICAgc2V0IGNhbGxCYXNlTWV0aG9kSW5TZXR0ZXIoKSB7
IHdpbmRvdy52YWx1ZUluU2V0dGVyID0gc3VwZXIuYmFzZU1ldGhvZCgpOyB9CisgICAgZ2V0IGJh
c2VNZXRob2RJbkdldHRlclNldHRlcigpIHsgcmV0dXJuIHN1cGVyLmJhc2VNZXRob2Q7IH0KKyAg
ICBzZXQgYmFzZU1ldGhvZEluR2V0dGVyU2V0dGVyKCkgeyB3aW5kb3cudmFsdWVJblNldHRlciA9
IHN1cGVyWydiYXNlTWV0aG9kJ107IH0KKyAgICBzdGF0aWMgc3RhdGljTWV0aG9kKCkgeyByZXR1
cm4gc3VwZXIuc3RhdGljTWV0aG9kKCk7IH0KK30KKworY2xhc3MgU2Vjb25kRGVyaXZlZCBleHRl
bmRzIERlcml2ZWQgeworICAgIGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9CisgICAgY2hhaW5N
ZXRob2QoKSB7IHJldHVybiBzdXBlci5jaGFpbk1ldGhvZCgpLmNvbmNhdChbJ3NlY29uZERlcml2
ZWQnXSk7IH0KK30KKworc2hvdWxkQmVUcnVlKCcobmV3IEJhc2UpIGluc3RhbmNlb2YgQmFzZScp
Oworc2hvdWxkQmVUcnVlKCcobmV3IERlcml2ZWQpIGluc3RhbmNlb2YgRGVyaXZlZCcpOworc2hv
dWxkQmUoJyhuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRob2QoKScsICdiYXNlTWV0aG9kVmFsdWUn
KTsKK3Nob3VsZEJlKCd4ID0gKG5ldyBEZXJpdmVkKS5jYWxsQmFzZU1ldGhvZDsgeCgpJywgJ2Jh
c2VNZXRob2RWYWx1ZScpOworc2hvdWxkQmUoJyhuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRob2RJ
bkdldHRlcicsICdiYXNlTWV0aG9kVmFsdWUnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmNh
bGxCYXNlTWV0aG9kSW5TZXR0ZXIgPSAxOyB2YWx1ZUluU2V0dGVyJywgJ2Jhc2VNZXRob2RWYWx1
ZScpOworc2hvdWxkQmUoJyhuZXcgRGVyaXZlZCkuYmFzZU1ldGhvZEluR2V0dGVyU2V0dGVyJywg
JyhuZXcgQmFzZSkuYmFzZU1ldGhvZCcpOworc2hvdWxkQmUoJyhuZXcgRGVyaXZlZCkuYmFzZU1l
dGhvZEluR2V0dGVyU2V0dGVyID0gMTsgdmFsdWVJblNldHRlcicsICcobmV3IEJhc2UpLmJhc2VN
ZXRob2QnKTsKK3Nob3VsZEJlKCdEZXJpdmVkLnN0YXRpY01ldGhvZCgpJywgJyJiYXNlMyInKTsK
K3Nob3VsZEJlKCcobmV3IFNlY29uZERlcml2ZWQpLmNoYWluTWV0aG9kKCknLCAnWyJiYXNlIiwg
ImRlcml2ZWQiLCAic2Vjb25kRGVyaXZlZCJdJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4
dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IHN1cGVyKCkge30gfScsICci
U3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQga2V5d29yZCBcJ3N1cGVyXCcuIEV4cGVjdGVkIGFuIGlu
ZGVudGlmaWVyLiInKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29u
c3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyBzdXBlcigpIH0gfScsCisgICAgJyJT
eW50YXhFcnJvcjogQ2Fubm90IGNhbGwgc3VwZXIoKSBvdXRzaWRlIG9mIGEgY2xhc3MgY29uc3Ry
dWN0b3IuIicpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1
Y3RvcigpIHsgc3VwZXIoKTsgfSBtZXRob2QoKSB7IHN1cGVyIH0gfScsICciU3ludGF4RXJyb3I6
IENhbm5vdCByZWZlcmVuY2Ugc3VwZXIuIicpOworc2hvdWxkTm90VGhyb3coJ3ggPSBjbGFzcyBl
eHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBtZXRob2QoKSB7IHJldHVy
biBuZXcgc3VwZXIgfSB9Jyk7CitzaG91bGRCZVRydWUoJyhuZXcgeCkubWV0aG9kKCkgaW5zdGFu
Y2VvZiBCYXNlJyk7CitzaG91bGRCZUZhbHNlKCcobmV3IHgpLm1ldGhvZCgpIGluc3RhbmNlb2Yg
eCcpOworc2hvdWxkTm90VGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3Rv
cigpIHsgc3VwZXIoKTsgfSBtZXRob2QxKCkgeyBkZWxldGUgKHN1cGVyLmZvbykgfSBtZXRob2Qy
KCkgeyBkZWxldGUgc3VwZXJbImZvbyJdIH0gfScpOworc2hvdWxkVGhyb3coJyhuZXcgeCkubWV0
aG9kMSgpJywgJyJSZWZlcmVuY2VFcnJvcjogQ2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5
IicpOworc2hvdWxkVGhyb3coJyhuZXcgeCkubWV0aG9kMigpJywgJyJSZWZlcmVuY2VFcnJvcjog
Q2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5IicpOworc2hvdWxkQmVUcnVlKCduZXcgKGNs
YXNzIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gfSkgaW5zdGFuY2VvZiBP
YmplY3QnKTsKK3Nob3VsZEJlVHJ1ZSgnbmV3IChjbGFzcyB7IGNvbnN0cnVjdG9yKCkgeyByZXR1
cm4gMTsgfSB9KSBpbnN0YW5jZW9mIE9iamVjdCcpOworc2hvdWxkQmUoJ25ldyAoY2xhc3MgZXh0
ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiB1bmRlZmluZWQgfSB9KScsICd1bmRl
ZmluZWQnKTsKK3Nob3VsZEJlKCd4ID0geyB9OyBuZXcgKGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNv
bnN0cnVjdG9yKCkgeyByZXR1cm4geCB9IH0pOycsICd4Jyk7CitzaG91bGRCZUZhbHNlKCd4IGlu
c3RhbmNlb2YgQmFzZScpOworc2hvdWxkVGhyb3coJ25ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsg
Y29uc3RydWN0b3IoKSB7IH0gfSknLCAnIlR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5vbi1v
YmplY3QgdHlwZSBpbiB0aGUgY29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLiInKTsKK3No
b3VsZFRocm93KCduZXcgKGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyByZXR1
cm4gMTsgfSB9KScsICciVHlwZUVycm9yOiBDYW5ub3QgcmV0dXJuIGEgbm9uLW9iamVjdCB0eXBl
IGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xhc3MuIicpOworc2hvdWxkQmUoJ25l
dyAoY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiB1bmRlZmluZWQg
fSB9KScsICd1bmRlZmluZWQnKTsKK3Nob3VsZEJlKCd4ID0geyB9OyBuZXcgKGNsYXNzIGV4dGVu
ZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4geCB9IH0pOycsICd4Jyk7CitzaG91bGRC
ZVRydWUoJ3ggaW5zdGFuY2VvZiBPYmplY3QnKTsKK3Nob3VsZFRocm93KCduZXcgKGNsYXNzIGV4
dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyB9IH0pJywgJyJUeXBlRXJyb3I6IENhbm5vdCBy
ZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBj
bGFzcy4iJyk7CitzaG91bGRUaHJvdygnbmV3IChjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1
Y3RvcigpIHsgcmV0dXJuIDE7IH0gfSknLCAnIlR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5v
bi1vYmplY3QgdHlwZSBpbiB0aGUgY29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLiInKTsK
K3Nob3VsZE5vdFRocm93KCduZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkg
eyBzdXBlcigpIH0gfSknKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248113</attachid>
            <date>2015-03-06 16:40:47 -0800</date>
            <delta_ts>2015-03-06 19:42:52 -0800</delta_ts>
            <desc>Updated for ToT</desc>
            <filename>bug-142200-20150306164027.patch</filename>
            <type>text/plain</type>
            <size>78725</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMTg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxNS0wMy0wNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBTdXBwb3J0IGV4dGVuZHMgYW5kIHN1cGVyIGtleXdvcmRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIyMDAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgRVM2IGNs
YXNzIHN5bnRheCBpbmhlcml0YW5jZS4KKworICAgICAgICBBZGRlZCBKU1BhcnNlckNvbnN0cnVj
dG9yS2luZCBhcyB3ZWxsIGFzIGJvb2xlYW4gZmxhZ3MgaW5kaWNhdGluZyB0aGUgY29uc3RydWN0
b3Iga2luZCB0bworICAgICAgICB2YXJpb3VzIGNsYXNzZXMgaW4gVW5saW5rZWRDb2RlQmxvY2sg
YXMgd2VsbCBhcyBBU1Qgbm9kZXMuCisKKyAgICAgICAgRWFjaCBtZXRob2Qgc3RvcmVzIHRoZSBh
c3NvY2lhdGVkIGNsYXNzIGFzIGl0cyBob21lT2JqZWN0UHJpdmF0ZU5hbWUuIFRoaXMgdmFsdWUg
aXMgdXNlZCB0bworICAgICAgICBtYWtlIHN1cGVyIGNhbGxzLgorCisgICAgICAgICogYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZUZ1bmN0aW9u
Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OlVubGlua2VkQ29kZUJsb2NrKToKKworICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVJbmZvOjpFeGVjdXRhYmxlSW5mbyk6
CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjb25zdHJ1Y3Rvcktp
bmRJc0Rlcml2ZWQpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNv
bnN0cnVjdG9yS2luZElzRGVyaXZlZCk6IEFkZGVkLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKTogRG9uJ3QgZW1pdCBvcF9jcmVhdGVfdGhpcyBpbiBhIGRlcml2
ZWQgY2xhc3MKKyAgICAgICAgYXMgdGhlIG9iamVjdCBpcyBhbGxvY2F0ZWQgYnkgdGhlIGhpZ2hl
c3QgYmFzZSBjbGFzcydzIGNvbnN0cnVjdG9yLiBBbHNvIHNldCAidGhpcyIgdG8gbnVsbAorICAg
ICAgICBhbmQgc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlIGluIG1fbmV3VGFyZ2V0UmVnaXN0ZXIu
ICJ0aGlzIiBpcyBzdXBwb3NlZCB0byBiZSBpbiBURFogYnV0CisgICAgICAgIHRoYXQgd2lsbCBi
ZSBpbXBsZW1lbnRlZCBpbiBhIHNlcGFyYXRlIHBhdGNoLgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFJldHVybik6IEFsbG93ICJ1bmRlZmluZWQiIHRvIGJlIHJldHVybmVk
IGZyb20gYSBkZXJpdmVkIGNsYXNzLgorICAgICAgICBJbiBhIGRlcml2ZWQgY2xhc3MncyBjb25z
dHJ1Y3Rvciwgbm90IHJldHVybmluZyAidW5kZWZpbmVkIiBvciBhbiBvYmplY3QgcmVzdWx0cyBp
biBhIHR5cGUKKyAgICAgICAgZXJyb3IgaW5zdGVhZCBvZiAidGhpcyIgYmVpbmcgcmV0dXJuZWQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dUeXBlRXJyb3IpOiBB
ZGRlZC4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Y29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKTog
QWRkZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpuZXdUYXJnZXQpOiBBZGRl
ZC4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAo
SlNDOjpTdXBlck5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkLiBFbWl0cyB0aGUgY29kZSB0byBv
YnRhaW4gdGhlIGNhbGxlZSdzIHBhcmVudCBjbGFzcy4KKyAgICAgICAgKEpTQzo6ZW1pdFN1cGVy
QmFzZUZvckNhbGxlZSk6IEFkZGVkLiBFbWl0cyB0aGUgY29kZSB0byBvYnRhaW4gdGhlIHBhcmVu
dCBjbGFzcydzIHByb3RvdHlwZS4KKyAgICAgICAgKEpTQzo6ZW1pdFB1dEhvbWVPYmplY3QpOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogU3Rv
cmVzIHRoZSBob21lIG9iamVjdCB3aGVuIGFkZGluZyBtZXRob2RzLgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eUxpc3ROb2RlOjplbWl0UHV0Q29uc3RhbnRQcm9wZXJ0eSk6IERpdHRvLgorICAgICAg
ICAoSlNDOjpCcmFja2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZCB0aGUgc3Vw
cG9ydCBmb3Igc3VwZXJbJ2ZvbyddLgorICAgICAgICAoSlNDOjpEb3RBY2Nlc3Nvck5vZGU6OmVt
aXRCeXRlY29kZSk6IEFkZGVkIHRoZSBzdXBwb3J0IGZvciBzdXBlci5mb28uCisgICAgICAgIChK
U0M6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKTogQWRkZWQgdGhlIHN1cHBv
cnQgZm9yIHN1cGVyKCkuCisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjpl
bWl0Qnl0ZWNvZGUpOiBBZGRlZCB0aGUgc3VwcG9ydCBmb3Igc3VwZXJbJ2ZvbyddKCkuCisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkIHRoZSBz
dXBwb3J0IGZvciBzdXBlci5mb28oKS4KKyAgICAgICAgKEpTQzo6RGVsZXRlQnJhY2tldE5vZGU6
OmVtaXRCeXRlY29kZSk6IEZvcmJpZCAiZGVsZXRlIHN1cGVyLmZvbyIuCisgICAgICAgIChKU0M6
OkRlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSk6IEZvcmJpZCAiZGVsZXRlIHN1cGVyWydmb28n
XSIuCisgICAgICAgIChKU0M6OkNsYXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkIHRo
ZSBzdXBwb3J0IGZvciAiY2xhc3NIZXJpdGFnZSIuIFRoaXMgaXMgdGhlIG1haW4KKyAgICAgICAg
bG9naWMgZm9yIGluaGVyaXRhbmNlLiBXaGVuIGEgY2xhc3MgQiBpbmhlcml0cyBmcm9tIGEgY2xh
c3MgQSwgc2V0IEIuX19wcm90b19fIHRvIEEgYW5kIHNldAorICAgICAgICBCLnByb3RvdHlwZS5f
X3Byb3RvX18gdG8gQS5wcm90b3R5cGUuIFRocm93IGV4Y2VwdGlvbnMgd2hlbiBlaXRoZXIgQSBv
ciBBLl9fcHJvdG9fXyBpcyBub3QKKyAgICAgICAgYW4gb2JqZWN0LgorCisgICAgICAgICogcGFy
c2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6c3VwZXJFeHByKTog
QWRkZWQuCisKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAo
SlNDOjpTdXBlck5vZGU6OlN1cGVyTm9kZSk6IEFkZGVkLgorCisgICAgICAgICogcGFyc2VyL05v
ZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9k
ZSk6CisKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6RXhwcmVzc2lv
bk5vZGU6OmlzU3VwZXJOb2RlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOb2RlOjp0eXBlKToK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlOb2RlOjppc01ldGhvZCk6CisKKyAgICAgICAgKiBwYXJz
ZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVu
Y3Rpb25Cb2R5KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rp
b25JbmZvKTogVGhyb3cgYSBwYXJzZXIgZXJyb3IgaWYgc3VwZXIoKSBpcyB1c2VkIG91dHNpZGUK
KyAgICAgICAgb2YgY2xhc3MgY29uc3RydWN0b3JzLgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlQ2xhc3MpOiBDb25zdHJ1Y3RvcktpbmQgaXMgImRlcml2ZWQiIGlm
IGFuZCBvbmx5IGlmIHRoZSBwYXJlbnQKKyAgICAgICAgY2xhc3MgaXMgc3BlY2lmaWVkIGluIHRo
ZSBkZWNsYXJhdGlvbiAvIGV4cHJlc3Npb24uCisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUdldHRlclNldHRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZVByaW1hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlTWVtYmVyRXhwcmVzc2lvbik6IEFkZGVkIHRoZSBzdXBwb3J0IGZvciAic3VwZXIo
KSIsICJzdXBlci5mb28iLAorICAgICAgICBhbmQgInN1cGVyWydmb28nXSIuIFRocm93IGEgc2Vt
YW50aWMgZXJyb3IgaWYgInN1cGVyIiBhcHBlYXJzIGJ5IGl0c2VsZi4KKworICAgICAgICAqIHBh
cnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6U2NvcGU6OlNjb3BlKTogQWRkZWQgbV9oYXNE
aXJlY3RTdXBlci4gVGhpcyB2YXJpYWJsZSBrZWVwcyB0cmFjayBvZiB0aGUgdXNlIG9mICJzdXBl
cigpIgorICAgICAgICBzbyB0aGF0IHBhcnNlRnVuY3Rpb25JbmZvIGNhbiBzcGl0IGFuIGVycm9y
IGlmIGl0J3MgdXNlZCBvdXRzaWRlIG9mIGNsYXNzIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgKEpT
Qzo6U2NvcGU6Omhhc0RpcmVjdFN1cGVyKTogQWRkZWQuCisgICAgICAgIChKU0M6OlNjb3BlOjpz
ZXRIYXNEaXJlY3RTdXBlcik6IEFkZGVkLgorCisgICAgICAgICogcGFyc2VyL1BhcnNlck1vZGVz
Lmg6CisgICAgICAgIChKU0M6OkpTUGFyc2VyQ29uc3RydWN0b3JLaW5kKTogQWRkZWQuCisKKyAg
ICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVj
a2VyOjpzdXBlckV4cHIpOiBBZGRlZC4KKworICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRp
ZmllcnMuaDogQWRkZWQgaG9tZU9iamVjdFByaXZhdGVOYW1lLgorCisgICAgICAgICogcnVudGlt
ZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpleGVjdXRhYmxl
SW5mbyk6IAorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6ZXhlY3V0YWJsZUluZm8p
OgorCiAyMDE1LTAzLTA2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogQWRvcHQgT2JqZWN0IExpdGVyYWwgU2hvcnRoYW5kIFBy
b3BlcnR5IENvbnN0cnVjdGlvbiBTeW50YXgKQEAgLTEyMCw2ICsyMjEsNyBAQAogICAgICAgICBw
cm9wZXJ0eSBuYW1lIGFzIHRoZSBpZGVudGlmaWVyIG5hbWUgYW5kIHZhbHVlIG9mIGEgdmFyaWFi
bGUgd2l0aCB0aGF0CiAgICAgICAgIGlkZW50aWZpZXIuIE90aGVyd2lzZSwgZmFsbCB0aHJvdWdo
IHRvIGdldHRlci9zZXR0ZXIgcGFyc2luZy4KIAorPj4+Pj4+PiAucjE4MTE4OAogMjAxNS0wMy0w
NSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBV
bnJldmlld2VkIGdhcmRlbmluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgxMTg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjEsNyArNjEsOCBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogZ2VuZXJhCiAgICAgZnVuY3Rpb24tPmZpbmlzaFBhcnNpbmcoZXhlY3V0YWJsZS0+cGFy
YW1ldGVycygpLCBleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUtPmZ1bmN0aW9uTW9kZSgp
KTsKICAgICBleGVjdXRhYmxlLT5yZWNvcmRQYXJzZShmdW5jdGlvbi0+ZmVhdHVyZXMoKSwgZnVu
Y3Rpb24tPmhhc0NhcHR1cmVkVmFyaWFibGVzKCkpOwogICAgIAotICAgIFVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2sqIHJlc3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSgm
dm0sIEZ1bmN0aW9uQ29kZSwgRXhlY3V0YWJsZUluZm8oZnVuY3Rpb24tPm5lZWRzQWN0aXZhdGlv
bigpLCBmdW5jdGlvbi0+dXNlc0V2YWwoKSwgZnVuY3Rpb24tPmlzU3RyaWN0TW9kZSgpLCBraW5k
ID09IENvZGVGb3JDb25zdHJ1Y3QsIGZ1bmN0aW9uS2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5GdW5j
dGlvbikpOworICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSgmdm0sIEZ1bmN0aW9uQ29kZSwKKyAgICAgICAgRXhl
Y3V0YWJsZUluZm8oZnVuY3Rpb24tPm5lZWRzQWN0aXZhdGlvbigpLCBmdW5jdGlvbi0+dXNlc0V2
YWwoKSwgZnVuY3Rpb24tPmlzU3RyaWN0TW9kZSgpLCBraW5kID09IENvZGVGb3JDb25zdHJ1Y3Qs
IGZ1bmN0aW9uS2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbiwgZXhlY3V0YWJsZS0+Y29u
c3RydWN0b3JLaW5kSXNEZXJpdmVkKCkpKTsKICAgICBhdXRvIGdlbmVyYXRvcihzdGQ6Om1ha2Vf
dW5pcXVlPEJ5dGVjb2RlR2VuZXJhdG9yPih2bSwgZnVuY3Rpb24uZ2V0KCksIHJlc3VsdCwgZGVi
dWdnZXJNb2RlLCBwcm9maWxlck1vZGUpKTsKICAgICBlcnJvciA9IGdlbmVyYXRvci0+Z2VuZXJh
dGUoKTsKICAgICBpZiAoZXJyb3IuaXNWYWxpZCgpKQpAQCAtODQsNiArODUsOSBAQCBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jCiAgICAgLCBtX2lzSW5TdHJpY3RDb250
ZXh0KG5vZGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCiAgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFi
bGVzKGZhbHNlKQogICAgICwgbV9pc0J1aWx0aW5GdW5jdGlvbihraW5kID09IFVubGlua2VkQnVp
bHRpbkZ1bmN0aW9uKQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICwgbV9jb25z
dHJ1Y3RvcktpbmRJc0Rlcml2ZWQobm9kZS0+Y29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkpCisj
ZW5kaWYKICAgICAsIG1fbmFtZShub2RlLT5pZGVudCgpKQogICAgICwgbV9pbmZlcnJlZE5hbWUo
bm9kZS0+aW5mZXJyZWROYW1lKCkpCiAgICAgLCBtX3BhcmFtZXRlcnMobm9kZS0+cGFyYW1ldGVy
cygpKQpAQCAtMjA1LDYgKzIwOSw5IEBAIFVubGlua2VkQ29kZUJsb2NrOjpVbmxpbmtlZENvZGVC
bG9jayhWTSoKICAgICAsIG1faXNDb25zdHJ1Y3RvcihpbmZvLm1faXNDb25zdHJ1Y3RvcikKICAg
ICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCiAgICAgLCBtX2lzQnVpbHRpbkZ1bmN0
aW9uKGluZm8ubV9pc0J1aWx0aW5GdW5jdGlvbikKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKKyAgICAsIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKGluZm8ubV9jb25zdHJ1Y3Rvcktp
bmRJc0Rlcml2ZWQpCisjZW5kaWYKICAgICAsIG1fZmlyc3RMaW5lKDApCiAgICAgLCBtX2xpbmVD
b3VudCgwKQogICAgICwgbV9lbmRDb2x1bW4oVUlOVF9NQVgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24g
MTgxMTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDE5ICs2NSwyNiBAQCB0eXBlZGVmIHVuc2lnbmVk
IFVubGlua2VkT2JqZWN0QWxsb2NhdGlvCiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkTExJbnRD
YWxsTGlua0luZm87CiAKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbyB7Ci0gICAgRXhlY3V0YWJsZUlu
Zm8oYm9vbCBuZWVkc0FjdGl2YXRpb24sIGJvb2wgdXNlc0V2YWwsIGJvb2wgaXNTdHJpY3RNb2Rl
LCBib29sIGlzQ29uc3RydWN0b3IsIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24pCisgICAgRXhlY3V0
YWJsZUluZm8oYm9vbCBuZWVkc0FjdGl2YXRpb24sIGJvb2wgdXNlc0V2YWwsIGJvb2wgaXNTdHJp
Y3RNb2RlLCBib29sIGlzQ29uc3RydWN0b3IsIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24sIGJvb2wg
Y29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKQogICAgICAgICA6IG1fbmVlZHNBY3RpdmF0aW9uKG5l
ZWRzQWN0aXZhdGlvbikKICAgICAgICAgLCBtX3VzZXNFdmFsKHVzZXNFdmFsKQogICAgICAgICAs
IG1faXNTdHJpY3RNb2RlKGlzU3RyaWN0TW9kZSkKICAgICAgICAgLCBtX2lzQ29uc3RydWN0b3Io
aXNDb25zdHJ1Y3RvcikKICAgICAgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGlzQnVpbHRpbkZ1
bmN0aW9uKQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICAsIG1fY29uc3Ry
dWN0b3JLaW5kSXNEZXJpdmVkKGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCkKKyNlbmRpZgogICAg
IHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCk7CiAgICAg
fQogICAgIGJvb2wgbV9uZWVkc0FjdGl2YXRpb24gOiAxOwogICAgIGJvb2wgbV91c2VzRXZhbCA6
IDE7CiAgICAgYm9vbCBtX2lzU3RyaWN0TW9kZSA6IDE7CiAgICAgYm9vbCBtX2lzQ29uc3RydWN0
b3IgOiAxOwogICAgIGJvb2wgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisjaWYgRU5BQkxFKEVT
Nl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZCA6IDE7
CisjZW5kaWYKIH07CiAKIGVudW0gVW5saW5rZWRGdW5jdGlvbktpbmQgewpAQCAtMTE2LDYgKzEy
MywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gSlNQYXJzZVN0cmljdDsKICAgICAg
ICAgcmV0dXJuIEpTUGFyc2VOb3JtYWw7CiAgICAgfQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lO
VEFYKQorICAgIGJvb2wgY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkgY29uc3QgeyByZXR1cm4g
bV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQ7IH0KKyNlbHNlCisgICAgYm9vbCBjb25zdHJ1Y3Rv
cktpbmRJc0Rlcml2ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCiAKICAgICB1
bnNpZ25lZCBmaXJzdExpbmVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGluZU9mZnNl
dDsgfQogICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNvdW50
OyB9CkBAIC0xNjgsNiArMTgwLDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNJblN0cmljdENv
bnRleHQgOiAxOwogICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyA6IDE7CiAgICAgYm9v
bCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkK
KyAgICBib29sIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkIDogMTsKKyNlbmRpZgogCiAgICAg
SWRlbnRpZmllciBtX25hbWU7CiAgICAgSWRlbnRpZmllciBtX2luZmVycmVkTmFtZTsKQEAgLTM0
Miw3ICszNTcsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb247IH0KIAogICAgIGJv
b2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1bmN0aW9u
OyB9Ci0gICAgCisKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIGNvbnN0
cnVjdG9yS2luZElzRGVyaXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0b3JLaW5kSXNE
ZXJpdmVkOyB9CisjZW5kaWYKKwogICAgIHZvaWQgc2hyaW5rVG9GaXQoKQogICAgIHsKICAgICAg
ICAgbV9qdW1wVGFyZ2V0cy5zaHJpbmtUb0ZpdCgpOwpAQCAtNTM0LDYgKzU1Myw5IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2lzQ29uc3RydWN0b3IgOiAxOwogICAgIGJvb2wgbV9oYXNDYXB0dXJl
ZFZhcmlhYmxlcyA6IDE7CiAgICAgYm9vbCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyNpZiBF
TkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIG1fY29uc3RydWN0b3JLaW5kSXNEZXJp
dmVkIDogMTsKKyNlbmRpZgogICAgIHVuc2lnbmVkIG1fZmlyc3RMaW5lOwogICAgIHVuc2lnbmVk
IG1fbGluZUNvdW50OwogICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDE4MTE4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNyArNDAx
LDE0IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICBhZGRD
YWxsZWUoZnVuY3Rpb25Ob2RlLCBjYWxsZWVSZWdpc3Rlcik7CiAKICAgICBpZiAoaXNDb25zdHJ1
Y3RvcigpKSB7Ci0gICAgICAgIGVtaXRDcmVhdGVUaGlzKCZtX3RoaXNSZWdpc3Rlcik7CisjaWYg
RU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIGlmIChjb25zdHJ1Y3RvcktpbmRJc0Rl
cml2ZWQoKSkgeworICAgICAgICAgICAgbV9uZXdUYXJnZXRSZWdpc3RlciA9IGFkZFZhcigpOwor
ICAgICAgICAgICAgZW1pdE1vdmUobV9uZXdUYXJnZXRSZWdpc3RlciwgJm1fdGhpc1JlZ2lzdGVy
KTsKKyAgICAgICAgICAgIGVtaXRMb2FkKCZtX3RoaXNSZWdpc3RlciwganNOdWxsKCkpOworICAg
ICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgZW1pdENyZWF0ZVRoaXMoJm1fdGhpc1Jl
Z2lzdGVyKTsKICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uTm9kZS0+dXNlc1RoaXMoKSB8fCBjb2Rl
QmxvY2stPnVzZXNFdmFsKCkpIHsKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICAgICAgZW1pdE9wY29k
ZShvcF90b190aGlzKTsKQEAgLTE5MDEsMTQgKzE5MDgsMjUgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRSZXR1cgogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9s
ZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlciA/IG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIt
PmluZGV4KCkgOiBlbWl0TG9hZCgwLCBKU1ZhbHVlKCkpLT5pbmRleCgpKTsKICAgICB9CiAKLSAg
ICBpZiAoaXNDb25zdHJ1Y3RvcigpICYmIHNyYy0+aW5kZXgoKSAhPSBtX3RoaXNSZWdpc3Rlci5p
bmRleCgpKSB7Ci0gICAgICAgIFJlZlB0cjxMYWJlbD4gaXNPYmplY3RMYWJlbCA9IG5ld0xhYmVs
KCk7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCB0aGlzTWlnaHRCZVVu
aW5pdGlhbGl6ZWQgPSBjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKTsKKyNlbHNlCisgICAgYm9v
bCB0aGlzTWlnaHRCZVVuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyNlbmRpZgorICAgIGlmIChpc0Nv
bnN0cnVjdG9yKCkgJiYgKHNyYy0+aW5kZXgoKSAhPSBtX3RoaXNSZWdpc3Rlci5pbmRleCgpIHx8
IHRoaXNNaWdodEJlVW5pbml0aWFsaXplZCkpIHsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBpc09i
amVjdE9yVW5kZWZpbmVkTGFiZWwgPSBuZXdMYWJlbCgpOwogCi0gICAgICAgIGVtaXRKdW1wSWZU
cnVlKGVtaXRJc09iamVjdChuZXdUZW1wb3JhcnkoKSwgc3JjKSwgaXNPYmplY3RMYWJlbC5nZXQo
KSk7CisgICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc09iamVjdChuZXdUZW1wb3JhcnkoKSwg
c3JjKSwgaXNPYmplY3RPclVuZGVmaW5lZExhYmVsLmdldCgpKTsKIAotICAgICAgICBlbWl0VW5h
cnlOb0RzdE9wKG9wX3JldCwgJm1fdGhpc1JlZ2lzdGVyKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNT
X1NZTlRBWCkKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpKSB7CisgICAg
ICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5KCksIHNy
YyksIGlzT2JqZWN0T3JVbmRlZmluZWRMYWJlbC5nZXQoKSk7CisgICAgICAgICAgICBlbWl0VGhy
b3dUeXBlRXJyb3IoIkNhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0
cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4iKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAg
ICAgICAgICAgIGVtaXRVbmFyeU5vRHN0T3Aob3BfcmV0LCAmbV90aGlzUmVnaXN0ZXIpOwogCi0g
ICAgICAgIGVtaXRMYWJlbChpc09iamVjdExhYmVsLmdldCgpKTsKKyAgICAgICAgZW1pdExhYmVs
KGlzT2JqZWN0T3JVbmRlZmluZWRMYWJlbC5nZXQoKSk7CiAgICAgfQogICAgIHJldHVybiBlbWl0
VW5hcnlOb0RzdE9wKG9wX3JldCwgc3JjKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDE4MTE4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDcgKzI2OSwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hKCkgY29uc3QgeyByZXR1cm4g
bV9zY29wZU5vZGUtPnBhcnNlckFyZW5hKCk7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRp
ZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV92bS0+cHJvcGVydHlOYW1l
czsgfQogCi0gICAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvcigpIHsgcmV0dXJuIG1fY29kZUJsb2Nr
LT5pc0NvbnN0cnVjdG9yKCk7IH0KKyAgICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsgfQorI2lmIEVOQUJMRShFUzZf
Q0xBU1NfU1lOVEFYKQorICAgICAgICBib29sIGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKTsgfQor
I2VuZGlmCiAKICAgICAgICAgUGFyc2VyRXJyb3IgZ2VuZXJhdGUoKTsKIApAQCAtMjkwLDcgKzI5
MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBSZXR1cm5zIHRoZSByZWdpc3Rl
ciBzdG9yaW5nICJ0aGlzIgogICAgICAgICBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIoKSB7IHJl
dHVybiAmbV90aGlzUmVnaXN0ZXI7IH0KLSAgICAgICAgCisjaWYgRU5BQkxFKEVTNl9DTEFTU19T
WU5UQVgpCisgICAgICAgIFJlZ2lzdGVySUQqIG5ld1RhcmdldCgpIHsgcmV0dXJuIG1fbmV3VGFy
Z2V0UmVnaXN0ZXI7IH0KKyNlbmRpZgorCiAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlUmVnaXN0
ZXIoKSB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIHRo
ZSBuZXh0IGF2YWlsYWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXIuIFJlZ2lzdGVycyByZXR1cm5lZCBi
eQpAQCAtNzYzLDYgKzc2OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklE
KiBtX2VtcHR5VmFsdWVSZWdpc3RlciB7IG51bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCog
bV9nbG9iYWxPYmplY3RSZWdpc3RlciB7IG51bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCog
bV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyIHsgbnVsbHB0ciB9OworI2lmIEVOQUJMRShFUzZfQ0xB
U1NfU1lOVEFYKQorICAgICAgICBSZWdpc3RlcklEKiBtX25ld1RhcmdldFJlZ2lzdGVyIHsgbnVs
bHB0ciB9OworI2VuZGlmCiAKICAgICAgICAgVmVjdG9yPElkZW50aWZpZXIsIDE2PiBtX3dhdGNo
YWJsZVZhcmlhYmxlczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBt
X2NvbnN0YW50UG9vbFJlZ2lzdGVyczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE4MTE4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1NiwzNCBAQCBSZWdpc3RlcklEKiBUaGlzTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmIEVOQUJMRShFUzZf
Q0xBU1NfU1lOVEFYKQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3VwZXJO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVnaXN0ZXJJRCog
U3VwZXJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQoreworICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWdpc3RlcklEIGNhbGxlZTsKKyAgICBjYWxs
ZWUuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBo
b21lT2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgJmNhbGxlZSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ob21lT2JqZWN0UHJpdmF0ZU5h
bWUpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90b1BhcmVudCA9IGdlbmVyYXRvci5lbWl0
R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGhvbWVPYmplY3QuZ2V0KCksIGdlbmVy
YXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHByb3RvUGFy
ZW50LmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yKTsKK30KKwor
c3RhdGljIFJlZ2lzdGVySUQqIGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvcikKK3sKKyAgICBSZWdpc3RlcklEIGNhbGxlZTsKKyAgICBjYWxsZWUuc2V0
SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBob21lT2Jq
ZWN0ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgJmNh
bGxlZSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ob21lT2JqZWN0UHJpdmF0ZU5hbWUpOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBob21lT2JqZWN0LmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQ
cm90byk7Cit9CisKKyNlbmRpZgorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
UmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBib29sIFJl
c29sdmVOb2RlOjppc1B1cmUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikgY29uc3QKQEAg
LTI5NCw2ICszMjIsMTMgQEAgUmVnaXN0ZXJJRCogT2JqZWN0TGl0ZXJhbE5vZGU6OmVtaXRCeXRl
YwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlMaXN0Tm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5U
QVgpCitzdGF0aWMgaW5saW5lIHZvaWQgZW1pdFB1dEhvbWVPYmplY3QoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZnVuY3Rpb24sIFJlZ2lzdGVySUQqIGhvbWVPYmpl
Y3QpCit7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGZ1bmN0aW9uLCBnZW5lcmF0b3IucHJv
cGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSwgaG9tZU9iamVjdCk7Cit9CisjZW5k
aWYKKwogUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICAvLyBGYXN0IGNh
c2U6IHRoaXMgbG9vcCBqdXN0IGhhbmRsZXMgcmVndWxhciB2YWx1ZSBwcm9wZXJ0aWVzLgpAQCAt
MzMwLDYgKzM2NSwxMCBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNv
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIHZhbHVlID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG5vZGUtPm1fYXNzaWduKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKKyAgICAgICAgICAgIGlmIChub2RlLT5pc01ldGhvZCgpKQorICAgICAgICAgICAgICAgIGVt
aXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgdmFsdWUsIGRzdCk7CisjZW5kaWYKIAogICAgICAg
ICAgICAgLy8gVGhpcyBpcyBhIGdldC9zZXQgcHJvcGVydHksIGZpbmQgaXRzIGVudHJ5IGluIHRo
ZSBtYXAuCiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9kZTo6
R2V0dGVyIHx8IG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OlNldHRlcik7CkBAIC0zNDQs
MTIgKzM4MywxOCBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvCiAg
ICAgICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgcGFpcmVkIG5vZGUgbm93LgogICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGdldHRlclJlZzsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzZXR0ZXJSZWc7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgICAg
ICBSZWdpc3RlcklEKiBzZWNvbmRSZWcgPSBudWxscHRyOworI2VuZGlmCiAKICAgICAgICAgICAg
IGlmIChub2RlLT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIpIHsKICAgICAgICAgICAg
ICAgICBnZXR0ZXJSZWcgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAocGFpci5zZWNvbmQp
IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHBhaXIuc2Vjb25kLT5tX3R5cGUgPT0gUHJv
cGVydHlOb2RlOjpTZXR0ZXIpOwogICAgICAgICAgICAgICAgICAgICBzZXR0ZXJSZWcgPSBnZW5l
cmF0b3IuZW1pdE5vZGUocGFpci5zZWNvbmQtPm1fYXNzaWduKTsKKyNpZiBFTkFCTEUoRVM2X0NM
QVNTX1NZTlRBWCkKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kUmVnID0gc2V0dGVyUmVnLmdl
dCgpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgc2V0dGVyUmVnID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgICAgICAgICAgICAg
ICAgICBnZW5lcmF0b3IuZW1pdExvYWQoc2V0dGVyUmVnLmdldCgpLCBqc1VuZGVmaW5lZCgpKTsK
QEAgLTM2MCwxMiArNDA1LDIwIEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRC
eXRlY28KICAgICAgICAgICAgICAgICBpZiAocGFpci5zZWNvbmQpIHsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHBhaXIuc2Vjb25kLT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIp
OwogICAgICAgICAgICAgICAgICAgICBnZXR0ZXJSZWcgPSBnZW5lcmF0b3IuZW1pdE5vZGUocGFp
ci5zZWNvbmQtPm1fYXNzaWduKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAg
ICAgICAgICAgICAgICAgc2Vjb25kUmVnID0gZ2V0dGVyUmVnLmdldCgpOworI2VuZGlmCiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyUmVnID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dExvYWQoZ2V0dGVyUmVnLmdldCgpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAg
ICAgIGlmIChwYWlyLnNlY29uZCAmJiBwYWlyLnNlY29uZC0+aXNNZXRob2QoKSkKKyAgICAgICAg
ICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIHNlY29uZFJlZywgZHN0KTsKKyNl
bmRpZgorCiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEdldHRlclNldHRlcihkc3QsICpu
b2RlLT5uYW1lKCksIGdldHRlclJlZy5nZXQoKSwgc2V0dGVyUmVnLmdldCgpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTM3NSwxOCArNDI4LDM0IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5v
ZGU6OmVtaXRCeXRlY28KIAogdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0UHV0Q29uc3RhbnRQ
cm9wZXJ0eShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBuZXdPYmos
IFByb3BlcnR5Tm9kZSYgbm9kZSkKIHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2lnbik7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19T
WU5UQVgpCisgICAgaWYgKG5vZGUuaXNNZXRob2QoKSkKKyAgICAgICAgZW1pdFB1dEhvbWVPYmpl
Y3QoZ2VuZXJhdG9yLCB2YWx1ZS5nZXQoKSwgbmV3T2JqKTsKKyNlbmRpZgogICAgIGlmIChub2Rl
Lm5hbWUoKSkgewotICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQobmV3T2JqLCAq
bm9kZS5uYW1lKCksIGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLm1fYXNzaWduKSwgbm9kZS5wdXRU
eXBlKCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQobmV3T2JqLCAqbm9k
ZS5uYW1lKCksIHZhbHVlLmdldCgpLCBub2RlLnB1dFR5cGUoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShub2RlLm1fZXhwcmVzc2lvbik7Ci0gICAgZ2VuZXJhdG9yLmVtaXREaXJlY3RQdXRC
eVZhbChuZXdPYmosIHByb3BlcnR5TmFtZS5nZXQoKSwgZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUu
bV9hc3NpZ24pKTsKKyAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5VmFsKG5ld09iaiwgcHJv
cGVydHlOYW1lLmdldCgpLCB2YWx1ZS5nZXQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBCcmFja2V0QWNjZXNzb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisjaWYg
RU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkg
eworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGdlbmVyYXRlIHRoZSBwcm9maWxlciBpbmZv
PworICAgICAgICBpZiAobV9zdWJzY3JpcHQtPmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkID0gc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+KG1fc3Vic2NyaXB0
KS0+dmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5l
cmF0b3IpLCBpZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0
QnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZW1pdFN1cGVyQmFzZUZvckNh
bGxlZShnZW5lcmF0b3IpLCBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpKTsKKyAgICB9
CisjZW5kaWYKKwogICAgIGlmIChtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSAKICAgICAgICAgJiYg
Z2VuZXJhdG9yLndpbGxSZXNvbHZlVG9Bcmd1bWVudHNSZWdpc3RlcihzdGF0aWNfY2FzdDxSZXNv
bHZlTm9kZSo+KG1fYmFzZSktPmlkZW50aWZpZXIoKSkKICAgICAgICAgJiYgIWdlbmVyYXRvci5z
eW1ib2xUYWJsZSgpLnNsb3dBcmd1bWVudHMoKSkgewpAQCAtNDMxLDcgKzUwMCwxMSBAQCBSZWdp
c3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRCeXRlY29kCiAgICAgfQogCiBub25Bcmd1bWVu
dHNQYXRoOgorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpID8gZW1pdFN1cGVyQmFzZUZvckNhbGxl
ZShnZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisjZWxzZQogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisjZW5k
aWYKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0KTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZmluYWxEZXN0LCBiYXNlLmdldCgpLCBtX2lkZW50KTsKQEAgLTUyMSw2ICs1OTQs
MTUgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0QgogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0LCBmdW5jLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJh
dG9yLCBtX2FyZ3MpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGlmIChtX2V4
cHItPmlzU3VwZXJOb2RlKCkpIHsKKyAgICAgICAgQVNTRVJUKGdlbmVyYXRvci5jb25zdHJ1Y3Rv
cktpbmRJc0Rlcml2ZWQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1l
bnRzLnRoaXNSZWdpc3RlcigpLCBnZW5lcmF0b3IubmV3VGFyZ2V0KCkpOworICAgICAgICBSZWdp
c3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENvbnN0cnVjdChyZXR1cm5WYWx1ZS5nZXQoKSwg
ZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoZ2Vu
ZXJhdG9yLnRoaXNSZWdpc3RlcigpLCByZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0K
KyNlbmRpZgogICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1p
dENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwg
Y2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBp
ZiAoZ2VuZXJhdG9yLnZtKCktPnR5cGVQcm9maWxlcigpKSB7CkBAIC01NzQsMTMgKzY1NiwyNSBA
QCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pCiAKIFJlZ2lzdGVySUQq
IEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lO
VEFYKQorICAgIGJvb2wgYmFzZUlzU3VwZXIgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCk7CisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBiYXNlSXNTdXBlciA/IGVtaXRTdXBlckJhc2VGb3JD
YWxsZWUoZ2VuZXJhdG9yKSA6IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworI2Vsc2UKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwor
I2VuZGlmCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fc3Vic2NyaXB0KTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4
cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgp
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5
VmFsKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgcHJvcGVydHku
Z2V0KCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMg
Y2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19T
WU5UQVgpCisgICAgaWYgKGJhc2VJc1N1cGVyKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUo
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpKTsK
KyAgICBlbHNlCisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKKyNlbHNlCiAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOworI2VuZGlmCiAgICAgUmVn
aXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5j
dGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVBy
b2ZpbGVyKCkpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1
ZS5nZXQoKSwgUHJvZmlsZVR5cGVCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQsIG51bGxwdHIp
OwpAQCAtNTk2LDkgKzY5MCwyMSBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjpl
bWl0Qnl0CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIENhbGxB
cmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisjaWYgRU5BQkxFKEVT
Nl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+aXNTdXBlck5v
ZGUoKTsKKyAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShj
YWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1Jl
Z2lzdGVyKCksIG1fYmFzZSk7CisjZWxzZQogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2Jhc2UpOworI2VuZGlmCiAgICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0
KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisg
ICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBiYXNlSXNTdXBlciA/IGVt
aXRTdXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJhdG9yKSA6IGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIG1faWRlbnQpOworI2Vsc2UKICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rp
b24uZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOworI2VuZGlm
CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdl
dCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3Iudm0o
KS0+dHlwZVByb2ZpbGVyKCkpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShy
ZXR1cm5WYWx1ZS5nZXQoKSwgUHJvZmlsZVR5cGVCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQs
IG51bGxwdHIpOwpAQCAtOTQwLDYgKzEwNDYsMTAgQEAgUmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tl
dE5vZGU6OmVtaXRCeXRlYwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisjaWYgRU5BQkxFKEVTNl9DTEFT
U19TWU5UQVgpCisgICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkKKyAgICAgICAgcmV0dXJu
IGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkNhbm5vdCBkZWxldGUgYSBzdXBl
ciBwcm9wZXJ0eSIpOworI2VuZGlmCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlW
YWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0KCksIHIxLmdldCgpKTsK
IH0KIApAQCAtOTUwLDYgKzEwNjAsMTAgQEAgUmVnaXN0ZXJJRCogRGVsZXRlRG90Tm9kZTo6ZW1p
dEJ5dGVjb2RlKAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX2Jhc2UpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQor
ICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpCisgICAgICAgIHJldHVybiBlbWl0VGhyb3dS
ZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVydHki
KTsKKyNlbmRpZgogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0KCksIG1faWRlbnQpOwogfQogCkBAIC0yODA3
LDExICsyOTIxLDQyIEBAIHZvaWQgQ2xhc3NEZWNsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2QK
IAogUmVnaXN0ZXJJRCogQ2xhc3NFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBBU1NFUlQoIW1fcGFyZW50
Q2xhc3NFeHByZXNzaW9uKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3VwZXJjbGFzczsKKyAg
ICBpZiAobV9jbGFzc0hlcml0YWdlKSB7CisgICAgICAgIHN1cGVyY2xhc3MgPSBnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShzdXBlcmNsYXNzLmdl
dCgpLCBtX2NsYXNzSGVyaXRhZ2UpOworICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBj
b25zdHJ1Y3RvciA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fY29uc3RydWN0b3JFeHByZXNz
aW9uKTsKKyAgICAvLyBGSVhNRTogTWFrZSB0aGUgcHJvdG90eXBlIG5vbi1jb25maWd1cmFibGUg
JiBub24td3JpdGFibGUuCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvdHlwZSA9IGdlbmVy
YXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGNvbnN0cnVjdG9yLmdl
dCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CiAKKyAgICBpZiAoc3Vw
ZXJjbGFzcykgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcFJlZ2lzdGVyID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBSZWZQdHI8TGFiZWw+IHN1cGVyY2xhc3NJ
c051bGxMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIHRlbXBSZWdpc3Rl
ci5nZXQoKSwgc3VwZXJjbGFzcy5nZXQoKSksIHN1cGVyY2xhc3NJc051bGxMYWJlbC5nZXQoKSk7
CisKKyAgICAgICAgLy8gRklYTUU6IFRocm93IFR5cGVFcnJvciBpZiBpdCdzIGEgZ2VuZXJhdG9y
IGZ1bmN0aW9uLgorICAgICAgICBSZWZQdHI8TGFiZWw+IHN1cGVyY2xhc3NJc09iamVjdExhYmVs
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1
ZShnZW5lcmF0b3IuZW1pdElzT2JqZWN0KHRlbXBSZWdpc3Rlci5nZXQoKSwgc3VwZXJjbGFzcy5n
ZXQoKSksIHN1cGVyY2xhc3NJc09iamVjdExhYmVsLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRUaHJvd1R5cGVFcnJvcihBU0NJSUxpdGVyYWwoIlRoZSBzdXBlcmNsYXNzIGlzIG5vdCBh
biBvYmplY3QuIikpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHN1cGVyY2xhc3NJc09i
amVjdExhYmVsLmdldCgpKTsKKworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdG9QYXJl
bnQgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0
QnlJZChwcm90b1BhcmVudC5nZXQoKSwgc3VwZXJjbGFzcy5nZXQoKSwgZ2VuZXJhdG9yLnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUpOworCisgICAgICAgIFJlZlB0cjxMYWJlbD4gcHJvdG9QYXJl
bnRJc09iamVjdE9yTnVsbExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmVHJ1ZShnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3BfaXNfb2JqZWN0
X29yX251bGwsIHRlbXBSZWdpc3Rlci5nZXQoKSwgcHJvdG9QYXJlbnQuZ2V0KCkpLCBwcm90b1Bh
cmVudElzT2JqZWN0T3JOdWxsTGFiZWwuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFRo
cm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiVGhlIHN1cGVyY2xhc3MncyBwcm90b3R5cGUgaXMg
bm90IGFuIG9iamVjdC4iKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwocHJvdG9QYXJl
bnRJc09iamVjdE9yTnVsbExhYmVsLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdERp
cmVjdFB1dEJ5SWQoY29uc3RydWN0b3IuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCku
dW5kZXJzY29yZVByb3RvLCBzdXBlcmNsYXNzLmdldCgpLCBQcm9wZXJ0eU5vZGU6OlVua25vd24p
OworICAgICAgICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5SWQocHJvdG90eXBlLmdldCgpLCBn
ZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgcHJvdG9QYXJlbnQuZ2V0
KCksIFByb3BlcnR5Tm9kZTo6VW5rbm93bik7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJl
bChzdXBlcmNsYXNzSXNOdWxsTGFiZWwuZ2V0KCkpOworICAgICAgICBlbWl0UHV0SG9tZU9iamVj
dChnZW5lcmF0b3IsIGNvbnN0cnVjdG9yLmdldCgpLCBwcm90b3R5cGUuZ2V0KCkpOworICAgIH0K
KwogICAgIGlmIChtX3N0YXRpY01ldGhvZHMpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShj
b25zdHJ1Y3Rvci5nZXQoKSwgbV9zdGF0aWNNZXRob2RzKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE4MTE4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjksNiArMTY5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgdXNlc1RoaXMoKTsKICAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgVGhpc05vZGUobG9jYXRpb24pOwogICAgIH0KKyNpZiBF
TkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBFeHByZXNzaW9uTm9kZSogc3VwZXJFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCisgICAgeworICAgICAgICAvLyBGSVhNRTog
QWRkIGFuZCBjYWxsIHVzZXNTdXBlcigpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFy
ZW5hKSBTdXBlck5vZGUobG9jYXRpb24pOworICAgIH0KKyNlbmRpZgogICAgIEV4cHJlc3Npb25O
b2RlKiBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgewog
ICAgICAgICBpZiAobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppZGVudCkKQEAg
LTI5OCw5ICszMDUsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
Ci0gICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlv
biwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmlj
dENvbnRleHQpCisgICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9v
bCBpblN0cmljdENvbnRleHQsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2lu
ZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9uQm9k
eU5vZGUobV9wYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29s
dW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCk7CisgICAgICAgIHJldHVybiBuZXcgKG1f
cGFyc2VyQXJlbmEpIEZ1bmN0aW9uQm9keU5vZGUobV9wYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlv
biwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCwg
Y29uc3RydWN0b3JLaW5kKTsKICAgICB9CiAKICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZVN0YXJ0
KEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGludCBmdW5jdGlvbk5hbWVTdGFydCkKQEAgLTMwOSwy
MyArMzE2LDI0IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgTkVWRVJfSU5MSU5FIFByb3Bl
cnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwKLSAgICAgICAgY29u
c3QgSWRlbnRpZmllciogbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+
JiBpbmZvLCB1bnNpZ25lZCBnZXRPclNldFN0YXJ0T2Zmc2V0KQorICAgICAgICBjb25zdCBJZGVu
dGlmaWVyKiBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGluZm8s
IHVuc2lnbmVkIGdldE9yU2V0U3RhcnRPZmZzZXQsIGJvb2wgaXNNZXRob2QpCiAgICAgewogICAg
ICAgICBBU1NFUlQobmFtZSk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0
YXJ0TGluZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9u
LmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0SW5mZXJyZWROYW1lKCpu
YW1lKTsKICAgICAgICAgaW5mby5ib2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFydChnZXRPclNl
dFN0YXJ0T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVy
dHlOb2RlKCpuYW1lLCBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwg
bV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsCi0gICAgICAgICAgICBpbmZvLmJv
ZHksIG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5m
by5jbG9zZUJyYWNlT2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29s
dW1uKSwgaW5mby5wYXJhbWV0ZXJzKSwgdHlwZSwgUHJvcGVydHlOb2RlOjpVbmtub3duKTsKKyAg
ICAgICAgICAgIGluZm8uYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGluZm8ub3Bl
bkJyYWNlT2Zmc2V0LCBpbmZvLmNsb3NlQnJhY2VPZmZzZXQsIGluZm8uYm9keVN0YXJ0TGluZSwg
aW5mby5ib2R5U3RhcnRDb2x1bW4pLCBpbmZvLnBhcmFtZXRlcnMpLCB0eXBlLCBQcm9wZXJ0eU5v
ZGU6OlVua25vd24sIGlzTWV0aG9kKTsKICAgICB9CiAgICAgCi0gICAgTkVWRVJfSU5MSU5FIFBy
b3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShWTSogdm0sIFBhcnNlckFy
ZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVy
dHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wsIGRvdWJsZSBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlv
bkluZm88QVNUQnVpbGRlcj4mIGluZm8sIHVuc2lnbmVkIGdldE9yU2V0U3RhcnRPZmZzZXQpCisg
ICAgTkVWRVJfSU5MSU5FIFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0
eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wsCisgICAgICAgIGRvdWJs
ZSBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGluZm8sIHVuc2ln
bmVkIGdldE9yU2V0U3RhcnRPZmZzZXQsIGJvb2wgaXNNZXRob2QpCiAgICAgewogICAgICAgICBp
bmZvLmJvZHktPnNldExvYyhpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keUVuZExpbmUsIGxv
Y2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICBp
bmZvLmJvZHktPnNldEZ1bmN0aW9uS2V5d29yZFN0YXJ0KGdldE9yU2V0U3RhcnRPZmZzZXQpOwog
ICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHBhcnNlckFyZW5hLmlkZW50aWZpZXJB
cmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcih2bSwgbmFtZSk7CiAgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZShpZGVudCwgbmV3IChtX3BhcnNlckFyZW5h
KSBGdW5jRXhwck5vZGUobG9jYXRpb24sIHZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmll
ciwKLSAgICAgICAgICAgIGluZm8uYm9keSwgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGlu
Zm8ub3BlbkJyYWNlT2Zmc2V0LCBpbmZvLmNsb3NlQnJhY2VPZmZzZXQsIGluZm8uYm9keVN0YXJ0
TGluZSwgaW5mby5ib2R5U3RhcnRDb2x1bW4pLCBpbmZvLnBhcmFtZXRlcnMpLCB0eXBlLCBQcm9w
ZXJ0eU5vZGU6OlVua25vd24pOworICAgICAgICAgICAgaW5mby5ib2R5LCBtX3NvdXJjZUNvZGUt
PnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNl
dCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1l
dGVycyksIHR5cGUsIFByb3BlcnR5Tm9kZTo6VW5rbm93biwgaXNNZXRob2QpOwogICAgIH0KIAog
ICAgIEFyZ3VtZW50c05vZGUqIGNyZWF0ZUFyZ3VtZW50cygpIHsgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYSkgQXJndW1lbnRzTm9kZSgpOyB9CkBAIC0zMzMsMTEgKzM0MSwxMSBAQCBwdWJsaWM6
CiAgICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYXJnKSB7IHJldHVybiBuZXcgKG1f
cGFyc2VyQXJlbmEpIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRpb24sIGFyZyk7IH0KICAgICBBcmd1
bWVudExpc3ROb2RlKiBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MsIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQXJndW1lbnRMaXN0Tm9kZShsb2NhdGlvbiwgYXJn
cywgYXJnKTsgfQogCi0gICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVu
dGlmaWVyKiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6
OlR5cGUgdHlwZSwgUHJvcGVydHlOb2RlOjpQdXRUeXBlIHB1dFR5cGUsIGJvb2wpCisgICAgUHJv
cGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUs
IEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgUHJvcGVydHlO
b2RlOjpQdXRUeXBlIHB1dFR5cGUsIGJvb2wsIGJvb2wgaXNNZXRob2QgPSBmYWxzZSkKICAgICB7
CiAgICAgICAgIGlmIChub2RlLT5pc0Z1bmNFeHByTm9kZSgpKQogICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8RnVuY0V4cHJOb2RlKj4obm9kZSktPmJvZHkoKS0+c2V0SW5mZXJyZWROYW1lKCpwcm9w
ZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5v
ZGUoKnByb3BlcnR5TmFtZSwgbm9kZSwgdHlwZSwgcHV0VHlwZSk7CisgICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZSgqcHJvcGVydHlOYW1lLCBub2RlLCB0eXBl
LCBwdXRUeXBlLCBpc01ldGhvZCk7CiAgICAgfQogICAgIFByb3BlcnR5Tm9kZSogY3JlYXRlUHJv
cGVydHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGRvdWJsZSBwcm9wZXJ0eU5h
bWUsIEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgUHJvcGVy
dHlOb2RlOjpQdXRUeXBlIHB1dFR5cGUsIGJvb2wpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDE4MTE4
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsK
ICAgICB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpbmxpbmUgU3VwZXJO
b2RlOjpTdXBlck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKKyAgICAgICAg
OiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKKyAgICB7CisgICAgfQorI2VuZGlmCisKIGlubGlu
ZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCkK
ICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX2lkZW50KGlk
ZW50KQpAQCAtMTU5LDEwICsxNjYsMTEgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9k
ZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUHJvcGVydHlOb2RlOjpQcm9w
ZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGFzc2lnbiwg
VHlwZSB0eXBlLCBQdXRUeXBlIHB1dFR5cGUpCisgICAgaW5saW5lIFByb3BlcnR5Tm9kZTo6UHJv
cGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24s
IFR5cGUgdHlwZSwgUHV0VHlwZSBwdXRUeXBlLCBib29sIGlzTWV0aG9kID0gZmFsc2UpCiAgICAg
ICAgIDogbV9uYW1lKCZuYW1lKQogICAgICAgICAsIG1fYXNzaWduKGFzc2lnbikKICAgICAgICAg
LCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX2lzTWV0aG9kKGlzTWV0aG9kKQogICAgICAgICAs
IG1fcHV0VHlwZShwdXRUeXBlKQogICAgIHsKICAgICB9CkBAIC0xNzIsNiArMTgwLDcgQEAgaW5s
aW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgICAgICAsIG1fZXhwcmVz
c2lvbihuYW1lKQogICAgICAgICAsIG1fYXNzaWduKGFzc2lnbikKICAgICAgICAgLCBtX3R5cGUo
dHlwZSkKKyAgICAgICAgLCBtX2lzTWV0aG9kKGZhbHNlKQogICAgICAgICAsIG1fcHV0VHlwZShw
dXRUeXBlKQogICAgIHsKICAgICB9CkBAIC03ODcsMTEgKzc5NiwxMSBAQCBpbmxpbmUgUmVzb2x2
ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBD
bGFzc0V4cHJOb2RlOjpDbGFzc0V4cHJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBjb25zdHJ1Y3RvckV4
cHJlc3Npb24sIEV4cHJlc3Npb25Ob2RlKiBwYXJlbnRDbGFzc0V4cHJlc3Npb24sIFByb3BlcnR5
TGlzdE5vZGUqIGluc3RhbmNlTWV0aG9kcywgUHJvcGVydHlMaXN0Tm9kZSogc3RhdGljTWV0aG9k
cykKKyAgICBpbmxpbmUgQ2xhc3NFeHByTm9kZTo6Q2xhc3NFeHByTm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeHByZXNzaW9uTm9k
ZSogY29uc3RydWN0b3JFeHByZXNzaW9uLCBFeHByZXNzaW9uTm9kZSogY2xhc3NIZXJpdGFnZSwg
UHJvcGVydHlMaXN0Tm9kZSogaW5zdGFuY2VNZXRob2RzLCBQcm9wZXJ0eUxpc3ROb2RlKiBzdGF0
aWNNZXRob2RzKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQogICAgICAgICAs
IG1fbmFtZShuYW1lKQogICAgICAgICAsIG1fY29uc3RydWN0b3JFeHByZXNzaW9uKGNvbnN0cnVj
dG9yRXhwcmVzc2lvbikKLSAgICAgICAgLCBtX3BhcmVudENsYXNzRXhwcmVzc2lvbihwYXJlbnRD
bGFzc0V4cHJlc3Npb24pCisgICAgICAgICwgbV9jbGFzc0hlcml0YWdlKGNsYXNzSGVyaXRhZ2Up
CiAgICAgICAgICwgbV9pbnN0YW5jZU1ldGhvZHMoaW5zdGFuY2VNZXRob2RzKQogICAgICAgICAs
IG1fc3RhdGljTWV0aG9kcyhzdGF0aWNNZXRob2RzKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiAxODExODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDEzICsx
NjcsMTcgQEAgRnVuY3Rpb25QYXJhbWV0ZXJzOjp+RnVuY3Rpb25QYXJhbWV0ZXJzKAogICAgICAg
ICBwYXR0ZXJucygpW2ldLT5kZXJlZigpOwogfQogCi1GdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlv
bkJvZHlOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0
aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENv
bHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0KQorRnVuY3Rp
b25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlv
biwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpc0luU3Ry
aWN0Q29udGV4dCwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKQogICAg
IDogU3RhdGVtZW50Tm9kZShlbmRMb2NhdGlvbikKICAgICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRD
b2x1bW4pCiAgICAgLCBtX2VuZENvbHVtbihlbmRDb2x1bW4pCiAgICAgLCBtX3N0YXJ0U3RhcnRP
ZmZzZXQoc3RhcnRMb2NhdGlvbi5zdGFydE9mZnNldCkKICAgICAsIG1faXNJblN0cmljdENvbnRl
eHQoaXNJblN0cmljdENvbnRleHQpCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAg
LCBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZChjb25zdHJ1Y3RvcktpbmQgPT0gSlNQYXJzZXJD
b25zdHJ1Y3RvcktpbmQ6OkRlcml2ZWQpCisjZW5kaWYKIHsKKyAgICBVTlVTRURfUEFSQU0oY29u
c3RydWN0b3JLaW5kKTsKIH0KIAogdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpmaW5pc2hQYXJzaW5n
KGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgUGFyYW1ldGVyTm9kZSogZmlyc3RQYXJhbWV0ZXIs
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBlbnVtIEZ1bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxODExODgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2NCw2ICsxNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29s
IGlzU3VidHJhY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNCb29sZWFuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBi
b29sIGlzU3ByZWFkRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1N1cGVyTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAg
ICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29k
ZUdlbmVyYXRvciYsIExhYmVsKiwgTGFiZWwqLCBGYWxsVGhyb3VnaE1vZGUpOwogCkBAIC00NDUs
NiArNDQ2LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJp
ZGU7CiAgICAgfTsKIAorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGNsYXNzIFN1
cGVyTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CisgICAgcHVibGljOgorICAg
ICAgICBTdXBlck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJik7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdXBlck5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKKyAgICB9OworI2VuZGlm
CisKICAgICBjbGFzcyBSZXNvbHZlTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAg
cHVibGljOgogICAgICAgICBSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KTsKQEAgLTUwMSwxMyAr
NTEzLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBlbnVtIFR5cGUgeyBDb25zdGFudCA9
IDEsIEdldHRlciA9IDIsIFNldHRlciA9IDQgfTsKICAgICAgICAgZW51bSBQdXRUeXBlIHsgVW5r
bm93biwgS25vd25EaXJlY3QgfTsKIAotICAgICAgICBQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRp
ZmllciYsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSwgUHV0VHlwZSk7CisgICAgICAgIFByb3BlcnR5
Tm9kZShjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBUeXBlLCBQdXRUeXBlLCBi
b29sIGlzTWV0aG9kKTsKICAgICAgICAgUHJvcGVydHlOb2RlKEV4cHJlc3Npb25Ob2RlKiBwcm9w
ZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSwgUHV0VHlwZSk7Ci0gICAgICAgIAorCiAg
ICAgICAgIEV4cHJlc3Npb25Ob2RlKiBleHByZXNzaW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwcmVzc2lvbjsgfQogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CiAKLSAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CisgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5
cGU+KG1fdHlwZSk7IH0KKyAgICAgICAgYm9vbCBpc01ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNNZXRob2Q7IH0KICAgICAgICAgUHV0VHlwZSBwdXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9w
dXRUeXBlOyB9CiAKICAgICBwcml2YXRlOgpAQCAtNTE1LDcgKzUyOCw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBtX25hbWU7CiAgICAgICAgIEV4cHJlc3Np
b25Ob2RlKiBtX2V4cHJlc3Npb247CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2Fzc2lnbjsK
LSAgICAgICAgVHlwZSBtX3R5cGU7CisgICAgICAgIHVuc2lnbmVkIG1fdHlwZSA6IDM7CisgICAg
ICAgIHVuc2lnbmVkIG1faXNNZXRob2QgOiAxOwogICAgICAgICBQdXRUeXBlIG1fcHV0VHlwZTsK
ICAgICB9OwogCkBAIC0xNTQ3LDcgKzE1NjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIHVzaW5nIFBhcnNlckFyZW5hRGVsZXRhYmxlOjpvcGVyYXRvciBuZXc7CiAK
LSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENv
bHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0KTsKKyAgICAg
ICAgRnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwg
dW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBKU1BhcnNlckNvbnN0
cnVjdG9yS2luZCk7CiAKICAgICAgICAgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmdldCgpOyB9CiAKQEAgLTE1NzUsNiArMTU4OSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGludCBzdGFydFN0YXJ0T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydFN0YXJ0T2Zmc2V0OyB9CiAgICAgICAgIGJvb2wgaXNJblN0cmlj
dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lzSW5TdHJpY3RDb250ZXh0OyB9CisjaWYgRU5B
QkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIGJvb2wgY29uc3RydWN0b3JLaW5kSXNEZXJp
dmVkKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQ7IH0KKyNlbmRpZgogCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CkBAIC0xNTg3LDcgKzE2
MDQsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOwog
ICAgICAgICBTb3VyY2VDb2RlIG1fc291cmNlOwogICAgICAgICBpbnQgbV9zdGFydFN0YXJ0T2Zm
c2V0OwotICAgICAgICBib29sIG1faXNJblN0cmljdENvbnRleHQ7CisgICAgICAgIGJvb2wgbV9p
c0luU3RyaWN0Q29udGV4dCA6IDE7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAg
ICAgIGJvb2wgbV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQgOiAxOworI2VuZGlmCiAgICAgfTsK
IAogICAgIGNsYXNzIEZ1bmN0aW9uTm9kZSBmaW5hbCA6IHB1YmxpYyBTY29wZU5vZGUgewpAQCAt
MTY0NCw3ICsxNjY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgbV9uYW1lOwogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9jb25zdHJ1Y3RvckV4cHJl
c3Npb247Ci0gICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX3BhcmVudENsYXNzRXhwcmVzc2lvbjsK
KyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fY2xhc3NIZXJpdGFnZTsKICAgICAgICAgUHJvcGVy
dHlMaXN0Tm9kZSogbV9pbnN0YW5jZU1ldGhvZHM7CiAgICAgICAgIFByb3BlcnR5TGlzdE5vZGUq
IG1fc3RhdGljTWV0aG9kczsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTgxMTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU1LDcgKzEyNTUsNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGb3JtYWxQCiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5j
dGlvbkJvZHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVy
JiBjb250ZXh0KQordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRlciYgY29udGV4
dCwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKQogewogICAgIEpTVG9r
ZW5Mb2NhdGlvbiBzdGFydExvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAgICAgdW5zaWduZWQg
c3RhcnRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOwpAQCAtMTI2MywxNCArMTI2MywxNCBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGdW5jdGlvCiAKICAgICBpZiAobWF0Y2goQ0xP
U0VCUkFDRSkpIHsKICAgICAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdG9rZW5Db2x1bW4oKTsK
LSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24s
IHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpKTsK
KyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24s
IHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpLCBj
b25zdHJ1Y3RvcktpbmQpOwogICAgIH0KICAgICBEZXB0aE1hbmFnZXIgc3RhdGVtZW50RGVwdGgo
Jm1fc3RhdGVtZW50RGVwdGgpOwogICAgIG1fc3RhdGVtZW50RGVwdGggPSAwOwogICAgIHR5cGVu
YW1lIFRyZWVCdWlsZGVyOjpGdW5jdGlvbkJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyKGNvbnN0X2Nh
c3Q8Vk0qPihtX3ZtKSwgbV9sZXhlci5nZXQoKSk7CiAgICAgZmFpbElmRmFsc2UocGFyc2VTb3Vy
Y2VFbGVtZW50cyhib2R5QnVpbGRlciwgQ2hlY2tGb3JTdHJpY3RNb2RlKSwgIkNhbm5vdCBwYXJz
ZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24iKTsKICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB0b2tl
bkNvbHVtbigpOwotICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExv
Y2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIHN0cmljdE1v
ZGUoKSk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRp
b24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgp
LCBjb25zdHJ1Y3RvcktpbmQpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciogc3RyaW5nRm9yRnVu
Y3Rpb25Nb2RlKEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUpCkBAIC0xMjkwLDcgKzEyOTAsOCBAQCBz
dGF0aWMgY29uc3QgY2hhciogc3RyaW5nRm9yRnVuY3Rpb25Nb2RlCiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFy
c2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBG
dW5jdGlvblJlcXVpcmVtZW50cyByZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUs
IGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVp
bGRlcj4mIGluZm8pCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBGdW5jdGlv
blJlcXVpcmVtZW50cyByZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlIG1vZGUsCisgICAg
Ym9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQgY29u
c3RydWN0b3JLaW5kLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+JiBpbmZvKQogewog
ICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5jdGlvblNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsKICAg
ICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1bmN0aW9uKCk7CkBAIC0xMzQzLDcgKzEzNDQsNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgICAgICAgICBlbmRM
b2NhdGlvbi5zdGFydE9mZnNldCAtIGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNldDsKICAgICAg
ICAgdW5zaWduZWQgY3VycmVudExpbmVTdGFydE9mZnNldCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5s
aW5lU3RhcnRPZmZzZXQ7CiAKLSAgICAgICAgaW5mby5ib2R5ID0gY29udGV4dC5jcmVhdGVGdW5j
dGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluZm8uYm9keVN0YXJ0Q29sdW1u
LCBib2R5RW5kQ29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKKyAgICAgICAgaW5mby5i
b2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRp
b24sIGluZm8uYm9keVN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBjYWNoZWRJbmZvLT5zdHJp
Y3RNb2RlLCBjb25zdHJ1Y3RvcktpbmQpOwogICAgICAgICAKICAgICAgICAgZnVuY3Rpb25TY29w
ZS0+cmVzdG9yZUZyb21Tb3VyY2VQcm92aWRlckNhY2hlKGNhY2hlZEluZm8pOwogICAgICAgICBm
YWlsSWZGYWxzZShwb3BTY29wZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVl
VmFyaWFibGVJbmZvKSwgIlBhcnNlciBlcnJvciIpOwpAQCAtMTM2NiwxNSArMTM2NywyNSBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgfQogICAgIG1fbGFz
dEZ1bmN0aW9uTmFtZSA9IGxhc3RGdW5jdGlvbk5hbWU7CiAgICAgUGFyc2VyU3RhdGUgb2xkU3Rh
dGUgPSBzYXZlU3RhdGUoKTsKLSAgICBpbmZvLmJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250
ZXh0KTsKKyAgICBpbmZvLmJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0LCBjb25zdHJ1
Y3RvcktpbmQpOwogICAgIHJlc3RvcmVTdGF0ZShvbGRTdGF0ZSk7CiAgICAgZmFpbElmRmFsc2Uo
aW5mby5ib2R5LCAiQ2Fubm90IHBhcnNlIHRoZSBib2R5IG9mIHRoaXMgIiwgc3RyaW5nRm9yRnVu
Y3Rpb25Nb2RlKG1vZGUpKTsKICAgICBjb250ZXh0LnNldEVuZE9mZnNldChpbmZvLmJvZHksIG1f
bGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7CiAgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1v
ZGUoKSAmJiBpbmZvLm5hbWUpIHsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobW9kZSA9PSBGdW5jdGlvbk1vZGUgfHwgbW9kZSA9PSBNZXRob2RN
b2RlKTsKKyNlbHNlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1vZGUgPT0gRnVuY3Rpb25Nb2Rl
KTsKKyNlbmRpZgogICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobV92bS0+cHJvcGVydHlOYW1l
cy0+YXJndW1lbnRzID09ICppbmZvLm5hbWUsICInIiwgaW5mby5uYW1lLT5pbXBsKCksICInIGlz
IG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgc2Vt
YW50aWNGYWlsSWZUcnVlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKmluZm8ubmFtZSwg
IiciLCBpbmZvLm5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZSBp
biBzdHJpY3QgbW9kZSIpOwogICAgIH0KKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAg
ICBpZiAoZnVuY3Rpb25TY29wZS0+aGFzRGlyZWN0U3VwZXIoKSkgeworICAgICAgICBib29sIG5h
bWVJc0NvbnN0cnVjdG9yID0gaW5mby5uYW1lICYmICppbmZvLm5hbWUgPT0gbV92bS0+cHJvcGVy
dHlOYW1lcy0+Y29uc3RydWN0b3I7CisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShtb2RlICE9
IE1ldGhvZE1vZGUgfHwgIW5hbWVJc0NvbnN0cnVjdG9yLCAiQ2Fubm90IGNhbGwgc3VwZXIoKSBv
dXRzaWRlIG9mIGEgY2xhc3MgY29uc3RydWN0b3IiKTsKKyAgICB9CisjZW5kaWYKICAgICBpbmZv
LmNsb3NlQnJhY2VPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5vZmZzZXQ7CiAgICAgdW5zaWduZWQg
Y2xvc2VCcmFjZUxpbmUgPSBtX3Rva2VuLm1fZGF0YS5saW5lOwogICAgIHVuc2lnbmVkIGNsb3Nl
QnJhY2VMaW5lU3RhcnRPZmZzZXQgPSBtX3Rva2VuLm1fZGF0YS5saW5lU3RhcnRPZmZzZXQ7CkBA
IC0xNDE1LDcgKzE0MjYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0
ZW1lCiAgICAgdW5zaWduZWQgZnVuY3Rpb25LZXl3b3JkU3RhcnQgPSB0b2tlblN0YXJ0KCk7CiAg
ICAgbmV4dCgpOwogICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKLSAg
ICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05h
bWUsIEZ1bmN0aW9uTW9kZSwgdHJ1ZSwgaW5mbykpLCAiQ2Fubm90IHBhcnNlIHRoaXMgZnVuY3Rp
b24iKTsKKyAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rp
b25OZWVkc05hbWUsIEZ1bmN0aW9uTW9kZSwgdHJ1ZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQ6
OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIGZ1bmN0aW9uIik7CiAgICAgZmFpbElm
RmFsc2UoaW5mby5uYW1lLCAiRnVuY3Rpb24gc3RhdGVtZW50cyBtdXN0IGhhdmUgYSBuYW1lIik7
CiAgICAgZmFpbElmRmFsc2VJZlN0cmljdChkZWNsYXJlVmFyaWFibGUoaW5mby5uYW1lKSwgIkNh
bm5vdCBkZWNsYXJlIGEgZnVuY3Rpb24gbmFtZWQgJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBp
biBzdHJpY3QgbW9kZSIpOwogICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmNEZWNsU3RhdGVt
ZW50KGxvY2F0aW9uLCBpbmZvLCBmdW5jdGlvbktleXdvcmRTdGFydCk7CkBAIC0xNDY1LDggKzE0
NzYsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4CiAgICAgaWYg
KGNvbnN1bWUoRVhURU5EUykpIHsKICAgICAgICAgcGFyZW50Q2xhc3MgPSBwYXJzZVByaW1hcnlF
eHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICBmYWlsSWZGYWxzZShwYXJlbnRDbGFzcywgIkNh
bm5vdCBwYXJzZSB0aGUgcGFyZW50IGNsYXNzIG5hbWUiKTsKLSAgICAgICAgZmFpbFdpdGhNZXNz
YWdlKCJJbmhlcml0YW5jZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpOwogICAgIH0KKyAgICBjb25z
dCBKU1BhcnNlckNvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQgPSBwYXJlbnRDbGFzcyA/
IEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkIDogSlNQYXJzZXJDb25zdHJ1Y3Rvcktp
bmQ6OkJhc2U7CiAKICAgICBjb25zdW1lT3JGYWlsV2l0aEZsYWdzKE9QRU5CUkFDRSwgVHJlZUJ1
aWxkZXI6OkRvbnRCdWlsZFN0cmluZ3MsICJFeHBlY3RlZCBvcGVuaW5nICd7JyBhdCB0aGUgc3Rh
cnQgb2YgYSBjbGFzcyBib2R5Iik7CiAKQEAgLTE0OTgsMTEgKzE1MDksMTIgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeAogICAgICAgICBpZiAoaXNHZXR0ZXIgfHwg
aXNTZXR0ZXIpIHsKICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShpc1N0YXRpY01ldGhv
ZCwgIkNhbm5vdCBkZWNsYXJlIGEgc3RhdGljIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKGlzR2V0
dGVyID8gR2V0dGVyTW9kZSA6IFNldHRlck1vZGUpKTsKICAgICAgICAgICAgIG5leHRFeHBlY3RJ
ZGVudGlmaWVyKExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzKTsKLSAgICAgICAgICAgIHBy
b3BlcnR5ID0gcGFyc2VHZXR0ZXJTZXR0ZXIoY29udGV4dCwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xh
c3MsIGlzR2V0dGVyID8gUHJvcGVydHlOb2RlOjpHZXR0ZXIgOiBQcm9wZXJ0eU5vZGU6OlNldHRl
ciwgbWV0aG9kU3RhcnQpOworICAgICAgICAgICAgYm9vbCBpc01ldGhvZCA9IHRydWU7CisgICAg
ICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlR2V0dGVyU2V0dGVyKGNvbnRleHQsIGFsd2F5c1N0cmlj
dEluc2lkZUNsYXNzLCBpc0dldHRlciA/IFByb3BlcnR5Tm9kZTo6R2V0dGVyIDogUHJvcGVydHlO
b2RlOjpTZXR0ZXIsIG1ldGhvZFN0YXJ0LCBpc01ldGhvZCk7CiAgICAgICAgICAgICBmYWlsSWZG
YWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJzZSB0aGlzIG1ldGhvZCIpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBtZXRob2RJ
bmZvOwotICAgICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQs
IEZ1bmN0aW9uTmVlZHNOYW1lLCBGdW5jdGlvbk1vZGUsIGZhbHNlLCBtZXRob2RJbmZvKSksICJD
YW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKChwYXJz
ZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5lZWRzTmFtZSwgTWV0aG9kTW9kZSwgZmFs
c2UsIGNvbnN0cnVjdG9yS2luZCwgbWV0aG9kSW5mbykpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0
aG9kIik7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShtZXRob2RJbmZvLm5hbWUsICJtZXRob2Qg
bXVzdCBoYXZlIGEgbmFtZSIpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UoZGVjbGFyZVZhcmlh
YmxlKG1ldGhvZEluZm8ubmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIG1ldGhvZCBuYW1lZCAnIiwg
bWV0aG9kSW5mby5uYW1lLT5pbXBsKCksICInIik7CiAKQEAgLTE1MjAsNyArMTUzMiw4IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXgKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBTeW50YXggZXJyb3Igd2hlbiBzdXBlcigpIGlzIGNhbGxlZAogICAgICAgICAgICAgc2Vt
YW50aWNGYWlsSWZUcnVlKGlzU3RhdGljTWV0aG9kICYmICptZXRob2RJbmZvLm5hbWUgPT0gcHJv
cGVydHlOYW1lcy5wcm90b3R5cGUsCiAgICAgICAgICAgICAgICAgIkNhbm5vdCBkZWNsYXJlIGEg
c3RhdGljIG1ldGhvZCBuYW1lZCAncHJvdG90eXBlJyIpOwotICAgICAgICAgICAgcHJvcGVydHkg
PSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KG1ldGhvZEluZm8ubmFtZSwgbWV0aG9kLCBQcm9wZXJ0
eU5vZGU6OkNvbnN0YW50LCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIGFsd2F5c1N0cmljdEluc2lk
ZUNsYXNzKTsKKyAgICAgICAgICAgIGJvb2wgaXNNZXRob2QgPSB0cnVlOworICAgICAgICAgICAg
cHJvcGVydHkgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KG1ldGhvZEluZm8ubmFtZSwgbWV0aG9k
LCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIGFsd2F5c1N0
cmljdEluc2lkZUNsYXNzLCBpc01ldGhvZCk7CiAgICAgICAgIH0KIAogICAgICAgICBUcmVlUHJv
cGVydHlMaXN0JiB0YWlsID0gaXNTdGF0aWNNZXRob2QgPyBzdGF0aWNNZXRob2RzVGFpbCA6IGlu
c3RhbmNlTWV0aG9kc1RhaWw7CkBAIC0yMDA3LDEzICsyMDIwLDEzIEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICBKU1Rva2VuTG9jYXRpb24gbWV0aG9kTG9j
YXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICB1bnNpZ25lZCBtZXRob2RTdGFydCA9IHRva2Vu
U3RhcnQoKTsKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IG1ldGhvZEluZm87
Ci0gICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9S
ZXF1aXJlbWVudHMsIE1ldGhvZE1vZGUsIGZhbHNlLCBtZXRob2RJbmZvKSksICJDYW5ub3QgcGFy
c2UgdGhpcyBtZXRob2QiKTsKKyAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29u
dGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgTWV0aG9kTW9kZSwgZmFsc2UsIEpTUGFyc2Vy
Q29uc3RydWN0b3JLaW5kOjpCYXNlLCBtZXRob2RJbmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBt
ZXRob2QiKTsKICAgICBtZXRob2RJbmZvLm5hbWUgPSBtZXRob2ROYW1lOwogICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihtZXRob2RMb2NhdGlvbiwgbWV0aG9kSW5mbywgbWV0
aG9kU3RhcnQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
R2V0dGVyU2V0dGVyKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBib29sIHN0cmljdCwgUHJvcGVydHlO
b2RlOjpUeXBlIHR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpCit0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VHZXR0ZXJTZXR0ZXIoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGJvb2wgc3RyaWN0LCBQcm9w
ZXJ0eU5vZGU6OlR5cGUgdHlwZSwgdW5zaWduZWQgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwg
Ym9vbCBpc01ldGhvZCkKIHsKICAgICBjb25zdCBJZGVudGlmaWVyKiBzdHJpbmdQcm9wZXJ0eU5h
bWUgPSAwOwogICAgIGRvdWJsZSBudW1lcmljUHJvcGVydHlOYW1lID0gMDsKQEAgLTIwMjgsMTQg
KzIwNDEsMTQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydAogICAg
IFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKICAgICBpZiAodHlwZSA9PSBQ
cm9wZXJ0eU5vZGU6OkdldHRlcikgewogICAgICAgICBmYWlsSWZGYWxzZShtYXRjaChPUEVOUEFS
RU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIgbGlzdCBmb3IgZ2V0dGVyIGRlZmluaXRpb24iKTsK
LSAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9u
Tm9SZXF1aXJlbWVudHMsIEdldHRlck1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2Ug
Z2V0dGVyIGRlZmluaXRpb24iKTsKKyAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25J
bmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEdldHRlck1vZGUsIGZhbHNlLCBK
U1BhcnNlckNvbnN0cnVjdG9yS2luZDo6QmFzZSwgaW5mbykpLCAiQ2Fubm90IHBhcnNlIGdldHRl
ciBkZWZpbml0aW9uIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2go
T1BFTlBBUkVOKSwgIkV4cGVjdGVkIGEgcGFyYW1ldGVyIGxpc3QgZm9yIHNldHRlciBkZWZpbml0
aW9uIik7Ci0gICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBG
dW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBTZXR0ZXJNb2RlLCBmYWxzZSwgaW5mbykpLCAiQ2Fubm90
IHBhcnNlIHNldHRlciBkZWZpbml0aW9uIik7CisgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1
bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBTZXR0ZXJNb2RlLCBm
YWxzZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJz
ZSBzZXR0ZXIgZGVmaW5pdGlvbiIpOwogICAgIH0KICAgICBpZiAoc3RyaW5nUHJvcGVydHlOYW1l
KQotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGxv
Y2F0aW9uLCB0eXBlLCBzdHJpY3QsIHN0cmluZ1Byb3BlcnR5TmFtZSwgaW5mbywgZ2V0dGVyT3JT
ZXR0ZXJTdGFydE9mZnNldCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlR2V0dGVyT3JTZXR0
ZXJQcm9wZXJ0eShjb25zdF9jYXN0PFZNKj4obV92bSksIG1fcGFyc2VyQXJlbmEsIGxvY2F0aW9u
LCB0eXBlLCBzdHJpY3QsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIGluZm8sIGdldHRlck9yU2V0dGVy
U3RhcnRPZmZzZXQpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRl
clByb3BlcnR5KGxvY2F0aW9uLCB0eXBlLCBzdHJpY3QsIHN0cmluZ1Byb3BlcnR5TmFtZSwgaW5m
bywgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgaXNNZXRob2QpOworICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBt
X3BhcnNlckFyZW5hLCBsb2NhdGlvbiwgdHlwZSwgc3RyaWN0LCBudW1lcmljUHJvcGVydHlOYW1l
LCBpbmZvLCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0LCBpc01ldGhvZCk7CiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CkBAIC0yMjIwLDcgKzIyMzMsNyBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIG5leHQoKTsKICAgICAgICAg
UGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBpbmZvOwogICAgICAgICBpbmZvLm5hbWUg
PSAmbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7Ci0gICAgICAgIGZhaWxJZkZh
bHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBG
dW5jdGlvbk1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgZnVuY3Rpb24gZXhwcmVz
c2lvbiIpOworICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwg
RnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgRnVuY3Rpb25Nb2RlLCBmYWxzZSwgSlNQYXJzZXJDb25z
dHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBleHByZXNz
aW9uIik7CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihsb2NhdGlv
biwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwogICAgIH0KICNpZiBFTkFCTEUoRVM2X0NM
QVNTX1NZTlRBWCkKQEAgLTIzNzAsNyArMjM4MywxNiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIG5ld0NvdW50Kys7CiAgICAgfQogCisjaWYgRU5B
QkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1hdGNoKFNVUEVS
KTsKKyAgICBpZiAoYmFzZUlzU3VwZXIpIHsKKyAgICAgICAgYmFzZSA9IGNvbnRleHQuc3VwZXJF
eHByKGxvY2F0aW9uKTsKKyAgICAgICAgbmV4dCgpOworICAgIH0gZWxzZQorICAgICAgICBiYXNl
ID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKKyNlbHNlCiAgICAgYmFzZSA9IHBh
cnNlUHJpbWFyeUV4cHJlc3Npb24oY29udGV4dCk7CisjZW5kaWYKICAgICAKICAgICBmYWlsSWZG
YWxzZShiYXNlLCAiQ2Fubm90IHBhcnNlIGJhc2UgZXhwcmVzc2lvbiIpOwogICAgIHdoaWxlICh0
cnVlKSB7CkBAIC0yNDAyLDYgKzI0MjQsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzcwogICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25F
bmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVu
dHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCwgQWxsb3dTcHJlYWQpOwogICAg
ICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFy
Z3VtZW50cyIpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICAgICAgICAg
IGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnNl
dEhhc0RpcmVjdFN1cGVyKCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4
dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShzdGFydExvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4
cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CkBA
IC0yNDE5LDggKzI0NDUsMTQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhw
cmVzcwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgZ290byBlbmRNZW1iZXJFeHByZXNz
aW9uOwogICAgICAgICB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIGJh
c2VJc1N1cGVyID0gZmFsc2U7CisjZW5kaWYKICAgICB9CiBlbmRNZW1iZXJFeHByZXNzaW9uOgor
I2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNl
SXNTdXBlciAmJiAhbmV3Q291bnQsICJDYW5ub3QgcmVmZXJlbmNlIHN1cGVyIik7CisjZW5kaWYK
ICAgICB3aGlsZSAobmV3Q291bnQtLSkKICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlTmV3
RXhwcihsb2NhdGlvbiwgYmFzZSwgZXhwcmVzc2lvblN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpKTsKICAgICByZXR1cm4gYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuaAkocmV2aXNpb24gMTgxMTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMyw5IEBAIHN0cnVjdCBTY29w
ZSB7CiAgICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKGZhbHNlKQogICAgICAgICAsIG1fdXNl
c0V2YWwoZmFsc2UpCiAgICAgICAgICwgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uKGZhbHNlKQorI2lm
IEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICAsIG1faGFzRGlyZWN0U3VwZXIoZmFs
c2UpCisjZW5kaWYKICAgICAgICAgLCBtX2FsbG93c05ld0RlY2xzKHRydWUpCiAgICAgICAgICwg
bV9zdHJpY3RNb2RlKHN0cmljdE1vZGUpCiAgICAgICAgICwgbV9pc0Z1bmN0aW9uKGlzRnVuY3Rp
b24pCkBAIC0xMjgsNiArMTMxLDkgQEAgc3RydWN0IFNjb3BlIHsKICAgICAgICAgLCBtX3NoYWRv
d3NBcmd1bWVudHMocmhzLm1fc2hhZG93c0FyZ3VtZW50cykKICAgICAgICAgLCBtX3VzZXNFdmFs
KHJocy5tX3VzZXNFdmFsKQogICAgICAgICAsIG1fbmVlZHNGdWxsQWN0aXZhdGlvbihyaHMubV9u
ZWVkc0Z1bGxBY3RpdmF0aW9uKQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAg
ICAsIG1faGFzRGlyZWN0U3VwZXIocmhzLm1faGFzRGlyZWN0U3VwZXIpCisjZW5kaWYKICAgICAg
ICAgLCBtX2FsbG93c05ld0RlY2xzKHJocy5tX2FsbG93c05ld0RlY2xzKQogICAgICAgICAsIG1f
c3RyaWN0TW9kZShyaHMubV9zdHJpY3RNb2RlKQogICAgICAgICAsIG1faXNGdW5jdGlvbihyaHMu
bV9pc0Z1bmN0aW9uKQpAQCAtMjYzLDYgKzI2OSwxMSBAQCBzdHJ1Y3QgU2NvcGUgewogCiAgICAg
dm9pZCBzZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCkgeyBtX25lZWRzRnVsbEFjdGl2YXRpb24gPSB0
cnVlOyB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIGhhc0RpcmVj
dFN1cGVyKCkgeyByZXR1cm4gbV9oYXNEaXJlY3RTdXBlcjsgfQorICAgIHZvaWQgc2V0SGFzRGly
ZWN0U3VwZXIoKSB7IG1faGFzRGlyZWN0U3VwZXIgPSB0cnVlOyB9CisjZW5kaWYKKwogICAgIGJv
b2wgY29sbGVjdEZyZWVWYXJpYWJsZXMoU2NvcGUqIG5lc3RlZFNjb3BlLCBib29sIHNob3VsZFRy
YWNrQ2xvc2VkVmFyaWFibGVzKQogICAgIHsKICAgICAgICAgaWYgKG5lc3RlZFNjb3BlLT5tX3Vz
ZXNFdmFsKQpAQCAtMzU2LDYgKzM2Nyw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3NoYWRvd3NB
cmd1bWVudHMgOiAxOwogICAgIGJvb2wgbV91c2VzRXZhbCA6IDE7CiAgICAgYm9vbCBtX25lZWRz
RnVsbEFjdGl2YXRpb24gOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGJv
b2wgbV9oYXNEaXJlY3RTdXBlciA6IDE7CisjZW5kaWYKICAgICBib29sIG1fYWxsb3dzTmV3RGVj
bHMgOiAxOwogICAgIGJvb2wgbV9zdHJpY3RNb2RlIDogMTsKICAgICBib29sIG1faXNGdW5jdGlv
biA6IDE7CkBAIC03MzgsOCArNzUyLDggQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUFyZ3VtZW50cyBwYXJzZUFyZ3VtZW50cyhU
cmVlQnVpbGRlciYsIFNwcmVhZE1vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVByb3BlcnR5IHBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXImLCBib29sIHN0cmljdCk7
CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBwYXJzZVBy
b3BlcnR5TWV0aG9kKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiBtZXRo
b2ROYW1lKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBw
YXJzZUdldHRlclNldHRlcihUcmVlQnVpbGRlciYsIGJvb2wgc3RyaWN0LCBQcm9wZXJ0eU5vZGU6
OlR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOwotICAgIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNl
RnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlUHJvcGVydHkgcGFyc2VHZXR0ZXJTZXR0ZXIoVHJlZUJ1aWxkZXImLCBib29sIHN0
cmljdCwgUHJvcGVydHlOb2RlOjpUeXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zm
c2V0LCBib29sIGlzTWV0aG9kID0gZmFsc2UpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNlRnVuY3Rpb25Cb2R5KFRy
ZWVCdWlsZGVyJiwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQpOwogICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBwYXJz
ZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXImKTsKICAgICBlbnVtIFZhckRlY2xhcmF0aW9u
TGlzdENvbnRleHQgeyBGb3JMb29wQ29udGV4dCwgVmFyRGVjbGFyYXRpb25Db250ZXh0IH07CiAg
ICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBwYXJzZVZhckRl
Y2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFyYXRpb25zLCBUcmVlRGVjb25z
dHJ1Y3Rpb25QYXR0ZXJuJiBsYXN0UGF0dGVybiwgVHJlZUV4cHJlc3Npb24mIGxhc3RJbml0aWFs
aXplciwgSlNUZXh0UG9zaXRpb24mIGlkZW50U3RhcnQsIEpTVGV4dFBvc2l0aW9uJiBpbml0U3Rh
cnQsIEpTVGV4dFBvc2l0aW9uJiBpbml0RW5kLCBWYXJEZWNsYXJhdGlvbkxpc3RDb250ZXh0KTsK
QEAgLTc0OSw3ICs3NjMsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gcGFyc2VEZWNvbnN0
cnVjdGlvblBhdHRlcm4oVHJlZUJ1aWxkZXImLCBEZWNvbnN0cnVjdGlvbktpbmQsIGludCBkZXB0
aCA9IDApOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRy
ZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gdHJ5UGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm5FeHBy
ZXNzaW9uKFRyZWVCdWlsZGVyJik7CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IE5FVkVSX0lOTElORSBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVyJiwgRnVuY3Rp
b25SZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlLCBib29sIG5hbWVJc0luQ29udGFpbmlu
Z1Njb3BlLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+Jik7CisgICAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1bmN0aW9uSW5mbyhU
cmVlQnVpbGRlciYsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9kZSwgYm9v
bCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgSlNQYXJzZXJDb25zdHJ1Y3RvcktpbmQsIFBhcnNl
ckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mKTsKICNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBUcmVlQ2xh
c3NFeHByZXNzaW9uIHBhcnNlQ2xhc3MoVHJlZUJ1aWxkZXImLCBGdW5jdGlvblJlcXVpcmVtZW50
cyk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9k
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1v
ZGVzLmgJKHJldmlzaW9uIDE4MTE4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyTW9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogZW51bSBKU1BhcnNlclN0cmljdG5lc3MgeyBKU1BhcnNlTm9ybWFsLCBKU1BhcnNl
QnVpbHRpbiwgSlNQYXJzZVN0cmljdCB9OwogZW51bSBKU1BhcnNlck1vZGUgeyBKU1BhcnNlUHJv
Z3JhbUNvZGUsIEpTUGFyc2VGdW5jdGlvbkNvZGUgfTsKK2VudW0gY2xhc3MgSlNQYXJzZXJDb25z
dHJ1Y3RvcktpbmQgeyBCYXNlLCBEZXJpdmVkIH07CiAKIGVudW0gUHJvZmlsZXJNb2RlIHsgUHJv
ZmlsZXJPZmYsIFByb2ZpbGVyT24gfTsKIGVudW0gRGVidWdnZXJNb2RlIHsgRGVidWdnZXJPZmYs
IERlYnVnZ2VyT24gfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4
Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3lu
dGF4Q2hlY2tlci5oCShyZXZpc2lvbiAxODExODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsMTAgQEAg
cHVibGljOgogICAgIGVudW0geyBOb25lRXhwciA9IDAsCiAgICAgICAgIFJlc29sdmVFdmFsRXhw
ciwgUmVzb2x2ZUV4cHIsIEludGVnZXJFeHByLCBEb3VibGVFeHByLCBTdHJpbmdFeHByLAogICAg
ICAgICBUaGlzRXhwciwgTnVsbEV4cHIsIEJvb2xFeHByLCBSZWdFeHBFeHByLCBPYmplY3RMaXRl
cmFsRXhwciwKLSAgICAgICAgRnVuY3Rpb25FeHByLCBDbGFzc0V4cHIsIEJyYWNrZXRFeHByLCBE
b3RFeHByLCBDYWxsRXhwciwKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAg
Q2xhc3NFeHByLCBTdXBlckV4cHIsIFN1cGVyQnJhY2tldEV4cHIsIFN1cGVyRG90RXhwciwKKyNl
bmRpZgorICAgICAgICBGdW5jdGlvbkV4cHIsIEJyYWNrZXRFeHByLCBEb3RFeHByLCBDYWxsRXhw
ciwKICAgICAgICAgTmV3RXhwciwgUHJlRXhwciwgUG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5
RXhwciwKICAgICAgICAgQ29uZGl0aW9uYWxFeHByLCBBc3NpZ25tZW50RXhwciwgVHlwZW9mRXhw
ciwKICAgICAgICAgRGVsZXRlRXhwciwgQXJyYXlMaXRlcmFsRXhwciwgQmluZGluZ0RlY29uc3Ry
dWN0aW9uLApAQCAtMTQ2LDYgKzE0OSw5IEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9uVHlwZSBj
cmVhdGVVbmFyeVBsdXMoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsg
cmV0dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVZvaWQoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQog
ICAgIEV4cHJlc3Npb25UeXBlIHRoaXNFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0
dXJuIFRoaXNFeHByOyB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgRXhwcmVz
c2lvblR5cGUgc3VwZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIFN1cGVy
RXhwcjsgfQorI2VuZGlmCiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlUmVzb2x2ZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyKiwgaW50KSB7IHJldHVybiBSZXNvbHZl
RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJikgeyByZXR1cm4gT2JqZWN0TGl0ZXJhbEV4cHI7IH0KICAgICBFeHByZXNz
aW9uVHlwZSBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkg
eyByZXR1cm4gT2JqZWN0TGl0ZXJhbEV4cHI7IH0KQEAgLTE2OCwxNCArMTc0LDE0IEBAIHB1Ymxp
YzoKICAgICBDbGFzc0V4cHJlc3Npb24gY3JlYXRlQ2xhc3NFeHByKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUs
IFByb3BlcnR5TGlzdCwgUHJvcGVydHlMaXN0KSB7IHJldHVybiBDbGFzc0V4cHI7IH0KICNlbmRp
ZgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCBpbnQpIHsg
cmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQotICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGJvb2wp
IHsgcmV0dXJuIEZ1bmN0aW9uQm9keVJlc3VsdDsgfQorICAgIGludCBjcmVhdGVGdW5jdGlvbkJv
ZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBp
bnQsIGJvb2wsIEpTUGFyc2VyQ29uc3RydWN0b3JLaW5kKSB7IHJldHVybiBGdW5jdGlvbkJvZHlS
ZXN1bHQ7IH0KICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZVN0YXJ0KGludCwgaW50KSB7IH0KICAg
ICBpbnQgY3JlYXRlQXJndW1lbnRzKCkgeyByZXR1cm4gQXJndW1lbnRzUmVzdWx0OyB9CiAgICAg
aW50IGNyZWF0ZUFyZ3VtZW50cyhpbnQpIHsgcmV0dXJuIEFyZ3VtZW50c1Jlc3VsdDsgfQogICAg
IEV4cHJlc3Npb25UeXBlIGNyZWF0ZVNwcmVhZEV4cHJlc3Npb24oY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFNwcmVhZEV4cHI7
IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBp
bnQpIHsgcmV0dXJuIEFyZ3VtZW50c0xpc3RSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlQXJndW1l
bnRzTGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gQXJndW1l
bnRzTGlzdFJlc3VsdDsgfQotICAgIFByb3BlcnR5IGNyZWF0ZVByb3BlcnR5KGNvbnN0IElkZW50
aWZpZXIqIG5hbWUsIGludCwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFByb3BlcnR5Tm9kZTo6
UHV0VHlwZSwgYm9vbCBjb21wbGV0ZSkKKyAgICBQcm9wZXJ0eSBjcmVhdGVQcm9wZXJ0eShjb25z
dCBJZGVudGlmaWVyKiBuYW1lLCBpbnQsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBQcm9wZXJ0
eU5vZGU6OlB1dFR5cGUsIGJvb2wgY29tcGxldGUsIGJvb2wgPSBmYWxzZSkKICAgICB7CiAgICAg
ICAgIGlmICghY29tcGxldGUpCiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkodHlwZSk7CkBA
IC0yMzAsMTQgKzIzNiwxNCBAQCBwdWJsaWM6CiAgICAgaW50IGNyZWF0ZURlYnVnZ2VyKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0K
ICAgICBpbnQgY3JlYXRlQ29uc3RTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50
LCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50IGFwcGVuZENv
bnN0RGVjbChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGNvbnN0IElkZW50aWZpZXIqLCBp
bnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQotICAgIFByb3BlcnR5IGNyZWF0ZUdldHRl
ck9yU2V0dGVyUHJvcGVydHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2RlOjpU
eXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBjb25zdCBQYXJz
ZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCB1bnNpZ25lZCkKKyAgICBQcm9wZXJ0eSBj
cmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3Bl
cnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sIHN0cmljdCwgY29uc3QgSWRlbnRpZmllciogbmFtZSwg
Y29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgdW5zaWduZWQsIGJvb2wp
CiAgICAgewogICAgICAgICBBU1NFUlQobmFtZSk7CiAgICAgICAgIGlmICghc3RyaWN0KQogICAg
ICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwogICAgICAgICByZXR1cm4gUHJvcGVydHko
bmFtZSwgdHlwZSk7CiAgICAgfQotICAgIFByb3BlcnR5IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJv
cGVydHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sIHN0cmljdCwgZG91YmxlIG5hbWUs
IGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIHVuc2lnbmVkKQorICAg
IFByb3BlcnR5IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoVk0qIHZtLCBQYXJzZXJBcmVu
YSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3BlcnR5Tm9kZTo6VHlw
ZSB0eXBlLCBib29sIHN0cmljdCwgZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5m
bzxTeW50YXhDaGVja2VyPiYsIHVuc2lnbmVkLCBib29sKQogICAgIHsKICAgICAgICAgaWYgKCFz
dHJpY3QpCiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkodHlwZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHJldmlz
aW9uIDE4MTE4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50
aWZpZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw3ICsyNjEsOCBAQAogICAgIG1hY3JvKGlz
RmluaXRlKSBcCiAgICAgbWFjcm8oVHlwZUVycm9yKSBcCiAgICAgbWFjcm8odW5kZWZpbmVkKSBc
Ci0gICAgbWFjcm8oQnVpbHRpbkxvZykKKyAgICBtYWNybyhCdWlsdGluTG9nKSBcCisgICAgbWFj
cm8oaG9tZU9iamVjdCkKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxODExODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2Nyw3ICs0NjcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyQ29kZSgpOwogCi0g
ICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRh
YmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZh
bHNlLCBmYWxzZSk7IH0KKyAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0
IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBp
c1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7IH0KIAogICAgIHVuc2lnbmVkIG51
bVZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLT5udW1WYXJpYWJs
ZXMoKTsgfQogICAgIHVuc2lnbmVkIG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1f
dW5saW5rZWRFdmFsQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsgfQpAQCAtNTIy
LDcgKzUyMiw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXJDb2RlKCk7CiAKLSAgICBFeGVj
dXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZv
KG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZh
bHNlKTsgfQorICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1
cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0
TW9kZSgpLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBTY3JpcHRFeGVjdXRhYmxlOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMTE3KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTUt
MDMtMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3VwcG9y
dCBleHRlbmRzIGFuZCBzdXBlciBrZXl3b3JkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgZm9yICJleHRlbmRzIiBhbmQgInN1cGVy
IiBrZXl3b3Jkcy4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICoganMv
Y2xhc3Mtc3ludGF4LWV4dGVuZHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9j
bGFzcy1zeW50YXgtZXh0ZW5kcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9jbGFzcy1zeW50
YXgtc3VwZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9jbGFzcy1zeW50YXgt
c3VwZXIuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL2NsYXNzLXN5bnRh
eC1leHRlbmRzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvY2xhc3Mtc3lu
dGF4LXN1cGVyLmpzOiBBZGRlZC4KKwogMjAxNS0wMy0wNSAgVGltb3RoeSBIb3J0b24gIDx0aW1v
dGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgPGF0dGFjaG1lbnQ+IHNob3VsZCBzdXBw
b3J0IGluZGljYXRpb24gb2YgZG93bmxvYWQgcHJvZ3Jlc3MKSW5kZXg6IExheW91dFRlc3RzL1Rl
c3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9u
cwkocmV2aXNpb24gMTgxMTE3KQorKysgTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwkod29y
a2luZyBjb3B5KQpAQCAtNjksNiArNjksOCBAQCB3ZWJraXQub3JnL2IvMTI3ODYwIFsgRGVidWcg
XSBqcy9mdW5jdGlvCiAjIEVTNiBjbGFzcyBzeW50YXggaGFzbid0IGJlZW4gZW5hYmxlZCB5ZXQu
CiB3ZWJraXQub3JnL2IvMTQwNDkxIGpzL2NsYXNzLXN5bnRheC1kZWNsYXJhdGlvbi5odG1sIFsg
RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTQwNDkxIGpzL2NsYXNzLXN5bnRheC1leHByZXNzaW9u
Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xNDA0OTEganMvY2xhc3Mtc3ludGF4LWV4
dGVuZHMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzE0MDQ5MSBqcy9jbGFzcy1zeW50
YXgtc3VwZXIuaHRtbCBbIEZhaWx1cmUgXQogCiAjIFRoaXMgdGVzdCB2ZXJpZmllcyBkeW5hbWlj
IG1hbmlwdWxhdGlvbiBvZiB0aGUgbXJvb3QgYW5kIG1zcXJ0IGVsZW1lbnRzLgogbWF0aG1sL3Jv
b3RzLXJlbW92ZUNoaWxkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KSW5kZXg6IExheW91dFRl
c3RzL2pzL2NsYXNzLXN5bnRheC1leHRlbmRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtZXh0ZW5kcy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtZXh0ZW5kcy1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBAQAorVGVzdHMgZm9yIEVTNiBjbGFzcyBzeW50
YXggImV4dGVuZHMiCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIChuZXcg
QmFzZSkgaW5zdGFuY2VvZiBCYXNlIGlzIHRydWUKK1BBU1MgKG5ldyBEZXJpdmVkKSBpbnN0YW5j
ZW9mIERlcml2ZWQgaXMgdHJ1ZQorUEFTUyAobmV3IERlcml2ZWQpLmJhc2VNZXRob2QoKSBpcyAi
YmFzZSIKK1BBU1MgKG5ldyBEZXJpdmVkKS5vdmVycmlkZW5NZXRob2QoKSBpcyAiZGVyaXZlZCIK
K1BBU1MgRGVyaXZlZC5zdGF0aWNCYXNlTWV0aG9kKCkgaXMgImJhc2UiCitQQVNTIERlcml2ZWQu
c3RhdGljT3ZlcnJpZGVuTWV0aG9kKCkgaXMgImRlcml2ZWQiCitQQVNTIHggPSBjbGFzcyBleHRl
bmRzIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQgb2Ygc2NyaXB0
LgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVu
ZXhwZWN0ZWQgZW5kIG9mIHNjcmlwdC4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IHRo
cmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQgb2Ygc2NyaXB0LgorUEFT
UyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHt9IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjog
Q2xhc3MgZGVjbGFyYXRpb24gd2l0aG91dCBhIGNvbnN0cnVjdG9yIGlzIG5vdCBzdXBwb3J0ZWQg
eWV0Li4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0g
ZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHguX19wcm90b19fIGlzIEJhc2UKK1BBU1Mg
eC5wcm90b3R5cGUuX19wcm90b19fIGlzIEJhc2UucHJvdG90eXBlCitQQVNTIHggPSBjbGFzcyBl
eHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXyBpcyBGdW5jdGlv
bi5wcm90b3R5cGUKK1BBU1MgeC5fX3Byb3RvX18gaXMgRnVuY3Rpb24ucHJvdG90eXBlCitQQVNT
IHggPSBjbGFzcyBleHRlbmRzIDMgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXyB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcyBpcyBub3QgYW4gb2JqZWN0
Li4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgImFiYyIgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4
Ll9fcHJvdG9fXyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcyBpcyBu
b3QgYW4gb2JqZWN0Li4KK2Jhc2VXaXRoQmFkUHJvdG90eXBlID0gY2xhc3MgeyBjb25zdHJ1Y3Rv
cigpIHsgfSB9OyBiYXNlV2l0aEJhZFByb3RvdHlwZS5wcm90b3R5cGUgPSAzCitQQVNTIHggPSBj
bGFzcyBleHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3IoKSB7IH0gfSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcydzIHByb3RvdHlwZSBpcyBu
b3QgYW4gb2JqZWN0Li4KK2Jhc2VXaXRoQmFkUHJvdG90eXBlLnByb3RvdHlwZSA9ICJhYmMiCitQ
QVNTIHggPSBjbGFzcyBleHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3Io
KSB7IH0gfSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcydzIHByb3Rv
dHlwZSBpcyBub3QgYW4gb2JqZWN0Li4KK1BBU1MgYmFzZVdpdGhCYWRQcm90b3R5cGUucHJvdG90
eXBlID0gbnVsbDsgeCA9IGNsYXNzIGV4dGVuZHMgYmFzZVdpdGhCYWRQcm90b3R5cGUgeyBjb25z
dHJ1Y3RvcigpIHsgfSB9IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pz
L2NsYXNzLXN5bnRheC1leHRlbmRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
Y2xhc3Mtc3ludGF4LWV4dGVuZHMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L2NsYXNzLXN5bnRheC1leHRlbmRzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMv
Y2xhc3Mtc3ludGF4LWV4dGVuZHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LXN1cGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtc3VwZXItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LXN1cGVyLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACitUZXN0cyBmb3IgRVM2IGNsYXNzIHN5
bnRheCAic3VwZXIiCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIChuZXcg
QmFzZSkgaW5zdGFuY2VvZiBCYXNlIGlzIHRydWUKK1BBU1MgKG5ldyBEZXJpdmVkKSBpbnN0YW5j
ZW9mIERlcml2ZWQgaXMgdHJ1ZQorUEFTUyAobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kKCkg
aXMgYmFzZU1ldGhvZFZhbHVlCitQQVNTIHggPSAobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9k
OyB4KCkgaXMgYmFzZU1ldGhvZFZhbHVlCitQQVNTIChuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRo
b2RJbkdldHRlciBpcyBiYXNlTWV0aG9kVmFsdWUKK1BBU1MgKG5ldyBEZXJpdmVkKS5jYWxsQmFz
ZU1ldGhvZEluU2V0dGVyID0gMTsgdmFsdWVJblNldHRlciBpcyBiYXNlTWV0aG9kVmFsdWUKK1BB
U1MgKG5ldyBEZXJpdmVkKS5iYXNlTWV0aG9kSW5HZXR0ZXJTZXR0ZXIgaXMgKG5ldyBCYXNlKS5i
YXNlTWV0aG9kCitQQVNTIChuZXcgRGVyaXZlZCkuYmFzZU1ldGhvZEluR2V0dGVyU2V0dGVyID0g
MTsgdmFsdWVJblNldHRlciBpcyAobmV3IEJhc2UpLmJhc2VNZXRob2QKK1BBU1MgRGVyaXZlZC5z
dGF0aWNNZXRob2QoKSBpcyAiYmFzZTMiCitQQVNTIChuZXcgU2Vjb25kRGVyaXZlZCkuY2hhaW5N
ZXRob2QoKSBpcyBbImJhc2UiLCAiZGVyaXZlZCIsICJzZWNvbmREZXJpdmVkIl0KK1BBU1MgeCA9
IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IHN1cGVyKCkg
e30gfSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQga2V5d29yZCAnc3Vw
ZXInLiBFeHBlY3RlZCBhbiBpbmRlbnRpZmllci4uCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIEJh
c2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBtZXRob2QoKSB7IHN1cGVyKCkgfSB9IHRo
cmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogQ2Fubm90IGNhbGwgc3VwZXIoKSBvdXRzaWRlIG9m
IGEgY2xhc3MgY29uc3RydWN0b3IuLgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29u
c3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyBzdXBlciB9IH0gdGhyZXcgZXhjZXB0
aW9uIFN5bnRheEVycm9yOiBDYW5ub3QgcmVmZXJlbmNlIHN1cGVyLi4KK1BBU1MgeCA9IGNsYXNz
IGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IG1ldGhvZCgpIHsgcmV0
dXJuIG5ldyBzdXBlciB9IH0gZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIChuZXcgeCku
bWV0aG9kKCkgaW5zdGFuY2VvZiBCYXNlIGlzIHRydWUKK1BBU1MgKG5ldyB4KS5tZXRob2QoKSBp
bnN0YW5jZW9mIHggaXMgZmFsc2UKK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0
cnVjdG9yKCkgeyBzdXBlcigpOyB9IG1ldGhvZDEoKSB7IGRlbGV0ZSAoc3VwZXIuZm9vKSB9IG1l
dGhvZDIoKSB7IGRlbGV0ZSBzdXBlclsiZm9vIl0gfSB9IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9u
LgorUEFTUyAobmV3IHgpLm1ldGhvZDEoKSB0aHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6
IENhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eS4KK1BBU1MgKG5ldyB4KS5tZXRob2QyKCkg
dGhyZXcgZXhjZXB0aW9uIFJlZmVyZW5jZUVycm9yOiBDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJv
cGVydHkuCitQQVNTIG5ldyAoY2xhc3MgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHVuZGVmaW5l
ZDsgfSB9KSBpbnN0YW5jZW9mIE9iamVjdCBpcyB0cnVlCitQQVNTIG5ldyAoY2xhc3MgeyBjb25z
dHJ1Y3RvcigpIHsgcmV0dXJuIDE7IH0gfSkgaW5zdGFuY2VvZiBPYmplY3QgaXMgdHJ1ZQorUEFT
UyBuZXcgKGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZp
bmVkIH0gfSkgaXMgdW5kZWZpbmVkCitQQVNTIHggPSB7IH07IG5ldyAoY2xhc3MgZXh0ZW5kcyBC
YXNlIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiB4IH0gfSk7IGlzIHgKK1BBU1MgeCBpbnN0YW5j
ZW9mIEJhc2UgaXMgZmFsc2UKK1BBU1MgbmV3IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1
Y3RvcigpIHsgfSB9KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW5ub3QgcmV0dXJuIGEg
bm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xhc3MuLgor
UEFTUyBuZXcgKGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gMTsg
fSB9KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW5ub3QgcmV0dXJuIGEgbm9uLW9iamVj
dCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xhc3MuLgorUEFTUyBuZXcg
KGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkIH0g
fSkgaXMgdW5kZWZpbmVkCitQQVNTIHggPSB7IH07IG5ldyAoY2xhc3MgZXh0ZW5kcyBudWxsIHsg
Y29uc3RydWN0b3IoKSB7IHJldHVybiB4IH0gfSk7IGlzIHgKK1BBU1MgeCBpbnN0YW5jZW9mIE9i
amVjdCBpcyB0cnVlCitQQVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0b3Io
KSB7IH0gfSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5vbi1v
YmplY3QgdHlwZSBpbiB0aGUgY29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLi4KK1BBU1Mg
bmV3IChjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIDE7IH0gfSkg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5vbi1vYmplY3QgdHlw
ZSBpbiB0aGUgY29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLi4KK1BBU1MgbmV3IChjbGFz
cyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKSB9IH0pIGRpZCBub3QgdGhy
b3cgZXhjZXB0aW9uLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LXN1cGVyLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvY2xhc3Mtc3ludGF4LXN1cGVyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jbGFzcy1z
eW50YXgtZXh0ZW5kcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVz
dHMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9zY3JpcHQtdGVzdHMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MyBAQAorLy9AIHNraXAKKworZGVzY3JpcHRpb24oJ1Rlc3RzIGZvciBFUzYgY2xh
c3Mgc3ludGF4ICJleHRlbmRzIicpOworCitjbGFzcyBCYXNlIHsKKyAgICBjb25zdHJ1Y3Rvcigp
IHsgfQorICAgIGJhc2VNZXRob2QoKSB7IHJldHVybiAnYmFzZSc7IH0KKyAgICBvdmVycmlkZW5N
ZXRob2QoKSB7IHJldHVybiAnYmFzZSc7IH0KKyAgICBzdGF0aWMgc3RhdGljQmFzZU1ldGhvZCgp
IHsgcmV0dXJuICdiYXNlJzsgfQorICAgIHN0YXRpYyBzdGF0aWNPdmVycmlkZW5NZXRob2QoKSB7
IHJldHVybiAnYmFzZSc7IH0KK30KKworY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2UgeworICAg
IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9CisgICAgb3ZlcnJpZGVuTWV0aG9kKCkgeyByZXR1
cm4gJ2Rlcml2ZWQnOyB9CisgICAgc3RhdGljIHN0YXRpY092ZXJyaWRlbk1ldGhvZCgpIHsgcmV0
dXJuICdkZXJpdmVkJzsgfQorfQorCitzaG91bGRCZVRydWUoJyhuZXcgQmFzZSkgaW5zdGFuY2Vv
ZiBCYXNlJyk7CitzaG91bGRCZVRydWUoJyhuZXcgRGVyaXZlZCkgaW5zdGFuY2VvZiBEZXJpdmVk
Jyk7CitzaG91bGRCZSgnKG5ldyBEZXJpdmVkKS5iYXNlTWV0aG9kKCknLCAnImJhc2UiJyk7Citz
aG91bGRCZSgnKG5ldyBEZXJpdmVkKS5vdmVycmlkZW5NZXRob2QoKScsICciZGVyaXZlZCInKTsK
K3Nob3VsZEJlKCdEZXJpdmVkLnN0YXRpY0Jhc2VNZXRob2QoKScsICciYmFzZSInKTsKK3Nob3Vs
ZEJlKCdEZXJpdmVkLnN0YXRpY092ZXJyaWRlbk1ldGhvZCgpJywgJyJkZXJpdmVkIicpOworCitz
aG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMnLCAnIlN5bnRheEVycm9yOiBVbmV4cGVjdGVk
IGVuZCBvZiBzY3JpcHQiJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMnLCAnIlN5
bnRheEVycm9yOiBVbmV4cGVjdGVkIGVuZCBvZiBzY3JpcHQiJyk7CitzaG91bGRUaHJvdygneCA9
IGNsYXNzIGV4dGVuZHMgQmFzZSB7JywgJyJTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQgb2Yg
c2NyaXB0IicpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJhc2Uge30nLCAnIlN5
bnRheEVycm9yOiBDbGFzcyBkZWNsYXJhdGlvbiB3aXRob3V0IGEgY29uc3RydWN0b3IgaXMgbm90
IHN1cHBvcnRlZCB5ZXQuIicpOworc2hvdWxkTm90VGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJh
c2UgeyBjb25zdHJ1Y3RvcigpIHsgfSB9Jyk7CitzaG91bGRCZSgneC5fX3Byb3RvX18nLCAnQmFz
ZScpOworc2hvdWxkQmUoJ3gucHJvdG90eXBlLl9fcHJvdG9fXycsICdCYXNlLnByb3RvdHlwZScp
Oworc2hvdWxkQmUoJ3ggPSBjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9
OyB4Ll9fcHJvdG9fXycsICdGdW5jdGlvbi5wcm90b3R5cGUnKTsKK3Nob3VsZEJlKCd4Ll9fcHJv
dG9fXycsICdGdW5jdGlvbi5wcm90b3R5cGUnKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0
ZW5kcyAzIHsgY29uc3RydWN0b3IoKSB7IH0gfTsgeC5fX3Byb3RvX18nLCAnIlR5cGVFcnJvcjog
VGhlIHN1cGVyY2xhc3MgaXMgbm90IGFuIG9iamVjdC4iJyk7CitzaG91bGRUaHJvdygneCA9IGNs
YXNzIGV4dGVuZHMgImFiYyIgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXycsICci
VHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcyBpcyBub3QgYW4gb2JqZWN0LiInKTsKK2V2YWxBbmRM
b2coJ2Jhc2VXaXRoQmFkUHJvdG90eXBlID0gY2xhc3MgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyBi
YXNlV2l0aEJhZFByb3RvdHlwZS5wcm90b3R5cGUgPSAzJyk7CitzaG91bGRUaHJvdygneCA9IGNs
YXNzIGV4dGVuZHMgYmFzZVdpdGhCYWRQcm90b3R5cGUgeyBjb25zdHJ1Y3RvcigpIHsgfSB9Jywg
JyJUeXBlRXJyb3I6IFRoZSBzdXBlcmNsYXNzXCdzIHByb3RvdHlwZSBpcyBub3QgYW4gb2JqZWN0
LiInKTsKK2V2YWxBbmRMb2coJ2Jhc2VXaXRoQmFkUHJvdG90eXBlLnByb3RvdHlwZSA9ICJhYmMi
Jyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMgYmFzZVdpdGhCYWRQcm90b3R5cGUg
eyBjb25zdHJ1Y3RvcigpIHsgfSB9JywgJyJUeXBlRXJyb3I6IFRoZSBzdXBlcmNsYXNzXCdzIHBy
b3RvdHlwZSBpcyBub3QgYW4gb2JqZWN0LiInKTsKK3Nob3VsZE5vdFRocm93KCdiYXNlV2l0aEJh
ZFByb3RvdHlwZS5wcm90b3R5cGUgPSBudWxsOyB4ID0gY2xhc3MgZXh0ZW5kcyBiYXNlV2l0aEJh
ZFByb3RvdHlwZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0nKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2xhc3Mtc3lu
dGF4LXN1cGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9j
bGFzcy1zeW50YXgtc3VwZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9zY3Jp
cHQtdGVzdHMvY2xhc3Mtc3ludGF4LXN1cGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjUgQEAKKy8vQCBza2lwCisKK2Rlc2NyaXB0aW9uKCdUZXN0cyBmb3IgRVM2IGNsYXNzIHN5bnRh
eCAic3VwZXIiJyk7CisKK3ZhciBiYXNlTWV0aG9kVmFsdWUgPSB7fTsKK3ZhciB2YWx1ZUluU2V0
dGVyID0gbnVsbDsKKworY2xhc3MgQmFzZSB7CisgICAgY29uc3RydWN0b3IoKSB7IH0KKyAgICBi
YXNlTWV0aG9kKCkgeyByZXR1cm4gYmFzZU1ldGhvZFZhbHVlOyB9CisgICAgY2hhaW5NZXRob2Qo
KSB7IHJldHVybiAnYmFzZSc7IH0KKyAgICBzdGF0aWMgc3RhdGljTWV0aG9kKCkgeyByZXR1cm4g
J2Jhc2UzJzsgfQorfQorCitjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgICAgY29uc3Ry
dWN0b3IoKSB7IHN1cGVyKCk7IH0KKyAgICBjaGFpbk1ldGhvZCgpIHsgcmV0dXJuIFtzdXBlci5j
aGFpbk1ldGhvZCgpLCAnZGVyaXZlZCddOyB9CisgICAgY2FsbEJhc2VNZXRob2QoKSB7IHJldHVy
biBzdXBlci5iYXNlTWV0aG9kKCk7IH0KKyAgICBnZXQgY2FsbEJhc2VNZXRob2RJbkdldHRlcigp
IHsgcmV0dXJuIHN1cGVyWydiYXNlTWV0aG9kJ10oKTsgfQorICAgIHNldCBjYWxsQmFzZU1ldGhv
ZEluU2V0dGVyKCkgeyB3aW5kb3cudmFsdWVJblNldHRlciA9IHN1cGVyLmJhc2VNZXRob2QoKTsg
fQorICAgIGdldCBiYXNlTWV0aG9kSW5HZXR0ZXJTZXR0ZXIoKSB7IHJldHVybiBzdXBlci5iYXNl
TWV0aG9kOyB9CisgICAgc2V0IGJhc2VNZXRob2RJbkdldHRlclNldHRlcigpIHsgd2luZG93LnZh
bHVlSW5TZXR0ZXIgPSBzdXBlclsnYmFzZU1ldGhvZCddOyB9CisgICAgc3RhdGljIHN0YXRpY01l
dGhvZCgpIHsgcmV0dXJuIHN1cGVyLnN0YXRpY01ldGhvZCgpOyB9Cit9CisKK2NsYXNzIFNlY29u
ZERlcml2ZWQgZXh0ZW5kcyBEZXJpdmVkIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsg
fQorICAgIGNoYWluTWV0aG9kKCkgeyByZXR1cm4gc3VwZXIuY2hhaW5NZXRob2QoKS5jb25jYXQo
WydzZWNvbmREZXJpdmVkJ10pOyB9Cit9CisKK3Nob3VsZEJlVHJ1ZSgnKG5ldyBCYXNlKSBpbnN0
YW5jZW9mIEJhc2UnKTsKK3Nob3VsZEJlVHJ1ZSgnKG5ldyBEZXJpdmVkKSBpbnN0YW5jZW9mIERl
cml2ZWQnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kKCknLCAnYmFz
ZU1ldGhvZFZhbHVlJyk7CitzaG91bGRCZSgneCA9IChuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRo
b2Q7IHgoKScsICdiYXNlTWV0aG9kVmFsdWUnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmNh
bGxCYXNlTWV0aG9kSW5HZXR0ZXInLCAnYmFzZU1ldGhvZFZhbHVlJyk7CitzaG91bGRCZSgnKG5l
dyBEZXJpdmVkKS5jYWxsQmFzZU1ldGhvZEluU2V0dGVyID0gMTsgdmFsdWVJblNldHRlcicsICdi
YXNlTWV0aG9kVmFsdWUnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmJhc2VNZXRob2RJbkdl
dHRlclNldHRlcicsICcobmV3IEJhc2UpLmJhc2VNZXRob2QnKTsKK3Nob3VsZEJlKCcobmV3IERl
cml2ZWQpLmJhc2VNZXRob2RJbkdldHRlclNldHRlciA9IDE7IHZhbHVlSW5TZXR0ZXInLCAnKG5l
dyBCYXNlKS5iYXNlTWV0aG9kJyk7CitzaG91bGRCZSgnRGVyaXZlZC5zdGF0aWNNZXRob2QoKScs
ICciYmFzZTMiJyk7CitzaG91bGRCZSgnKG5ldyBTZWNvbmREZXJpdmVkKS5jaGFpbk1ldGhvZCgp
JywgJ1siYmFzZSIsICJkZXJpdmVkIiwgInNlY29uZERlcml2ZWQiXScpOworc2hvdWxkVGhyb3co
J3ggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBzdXBl
cigpIHt9IH0nLCAnIlN5bnRheEVycm9yOiBVbmV4cGVjdGVkIGtleXdvcmQgXCdzdXBlclwnLiBF
eHBlY3RlZCBhbiBpbmRlbnRpZmllci4iJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVu
ZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IG1ldGhvZCgpIHsgc3VwZXIoKSB9
IH0nLAorICAgICciU3ludGF4RXJyb3I6IENhbm5vdCBjYWxsIHN1cGVyKCkgb3V0c2lkZSBvZiBh
IGNsYXNzIGNvbnN0cnVjdG9yLiInKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBC
YXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyBzdXBlciB9IH0nLCAn
IlN5bnRheEVycm9yOiBDYW5ub3QgcmVmZXJlbmNlIHN1cGVyLiInKTsKK3Nob3VsZE5vdFRocm93
KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0
aG9kKCkgeyByZXR1cm4gbmV3IHN1cGVyIH0gfScpOworc2hvdWxkQmVUcnVlKCcobmV3IHgpLm1l
dGhvZCgpIGluc3RhbmNlb2YgQmFzZScpOworc2hvdWxkQmVGYWxzZSgnKG5ldyB4KS5tZXRob2Qo
KSBpbnN0YW5jZW9mIHgnKTsKK3Nob3VsZE5vdFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNl
IHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kMSgpIHsgZGVsZXRlIChzdXBlci5m
b28pIH0gbWV0aG9kMigpIHsgZGVsZXRlIHN1cGVyWyJmb28iXSB9IH0nKTsKK3Nob3VsZFRocm93
KCcobmV3IHgpLm1ldGhvZDEoKScsICciUmVmZXJlbmNlRXJyb3I6IENhbm5vdCBkZWxldGUgYSBz
dXBlciBwcm9wZXJ0eSInKTsKK3Nob3VsZFRocm93KCcobmV3IHgpLm1ldGhvZDIoKScsICciUmVm
ZXJlbmNlRXJyb3I6IENhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSInKTsKK3Nob3VsZEJl
VHJ1ZSgnbmV3IChjbGFzcyB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IH0p
IGluc3RhbmNlb2YgT2JqZWN0Jyk7CitzaG91bGRCZVRydWUoJ25ldyAoY2xhc3MgeyBjb25zdHJ1
Y3RvcigpIHsgcmV0dXJuIDE7IH0gfSkgaW5zdGFuY2VvZiBPYmplY3QnKTsKK3Nob3VsZEJlKCdu
ZXcgKGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVk
IH0gfSknLCAndW5kZWZpbmVkJyk7CitzaG91bGRCZSgneCA9IHsgfTsgbmV3IChjbGFzcyBleHRl
bmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9KTsnLCAneCcpOworc2hvdWxk
QmVGYWxzZSgneCBpbnN0YW5jZW9mIEJhc2UnKTsKK3Nob3VsZFRocm93KCduZXcgKGNsYXNzIGV4
dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0pJywgJyJUeXBlRXJyb3I6IENhbm5vdCBy
ZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBj
bGFzcy4iJyk7CitzaG91bGRUaHJvdygnbmV3IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1
Y3RvcigpIHsgcmV0dXJuIDE7IH0gfSknLCAnIlR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5v
bi1vYmplY3QgdHlwZSBpbiB0aGUgY29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLiInKTsK
K3Nob3VsZEJlKCduZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyByZXR1
cm4gdW5kZWZpbmVkIH0gfSknLCAndW5kZWZpbmVkJyk7CitzaG91bGRCZSgneCA9IHsgfTsgbmV3
IChjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9KTsnLCAn
eCcpOworc2hvdWxkQmVUcnVlKCd4IGluc3RhbmNlb2YgT2JqZWN0Jyk7CitzaG91bGRUaHJvdygn
bmV3IChjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9KScsICciVHlwZUVy
cm9yOiBDYW5ub3QgcmV0dXJuIGEgbm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBv
ZiBhIGRlcml2ZWQgY2xhc3MuIicpOworc2hvdWxkVGhyb3coJ25ldyAoY2xhc3MgZXh0ZW5kcyBu
dWxsIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiAxOyB9IH0pJywgJyJUeXBlRXJyb3I6IENhbm5v
dCByZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZl
ZCBjbGFzcy4iJyk7CitzaG91bGROb3RUaHJvdygnbmV3IChjbGFzcyBleHRlbmRzIG51bGwgeyBj
b25zdHJ1Y3RvcigpIHsgc3VwZXIoKSB9IH0pJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248132</attachid>
            <date>2015-03-06 19:42:56 -0800</date>
            <delta_ts>2015-03-06 19:45:35 -0800</delta_ts>
            <desc>Addresses Oliver&apos;s comment</desc>
            <filename>bug-142200-20150306194235.patch</filename>
            <type>text/plain</type>
            <size>144019</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxNS0wMy0wNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBTdXBwb3J0IGV4dGVuZHMgYW5kIHN1cGVyIGtleXdvcmRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIyMDAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgRVM2IGNs
YXNzIHN5bnRheCBpbmhlcml0YW5jZS4KKworICAgICAgICBBZGRlZCBDb25zdHJ1Y3RvcktpbmQg
YXMgd2VsbCBhcyBib29sZWFuIGZsYWdzIGluZGljYXRpbmcgdGhlIGNvbnN0cnVjdG9yIGtpbmQg
dG8KKyAgICAgICAgdmFyaW91cyBjbGFzc2VzIGluIFVubGlua2VkQ29kZUJsb2NrIGFzIHdlbGwg
YXMgQVNUIG5vZGVzLgorCisgICAgICAgIEVhY2ggbWV0aG9kIHN0b3JlcyB0aGUgYXNzb2NpYXRl
ZCBjbGFzcyBhcyBpdHMgaG9tZU9iamVjdFByaXZhdGVOYW1lLiBUaGlzIHZhbHVlIGlzIHVzZWQg
dG8KKyAgICAgICAgbWFrZSBzdXBlciBjYWxscy4KKworICAgICAgICAqIGJ5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxp
bmtlZENvZGVCbG9jayk6CisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
OgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlSW5mbzo6RXhlY3V0YWJsZUluZm8pOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29uc3RydWN0b3JLaW5kSXNEZXJp
dmVkKTogQWRkZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdHJ1Y3Rv
cktpbmRJc0Rlcml2ZWQpOiBBZGRlZC4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcik6IERvbid0IGVtaXQgb3BfY3JlYXRlX3RoaXMgaW4gYSBkZXJpdmVkIGNsYXNz
CisgICAgICAgIGFzIHRoZSBvYmplY3QgaXMgYWxsb2NhdGVkIGJ5IHRoZSBoaWdoZXN0IGJhc2Ug
Y2xhc3MncyBjb25zdHJ1Y3Rvci4gQWxzbyBzZXQgInRoaXMiIHRvIG51bGwKKyAgICAgICAgYW5k
IHN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbiBtX25ld1RhcmdldFJlZ2lzdGVyLiAidGhpcyIg
aXMgc3VwcG9zZWQgdG8gYmUgaW4gVERaIGJ1dAorICAgICAgICB0aGF0IHdpbGwgYmUgaW1wbGVt
ZW50ZWQgaW4gYSBzZXBhcmF0ZSBwYXRjaC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRSZXR1cm4pOiBBbGxvdyAidW5kZWZpbmVkIiB0byBiZSByZXR1cm5lZCBmcm9tIGEg
ZGVyaXZlZCBjbGFzcy4KKyAgICAgICAgSW4gYSBkZXJpdmVkIGNsYXNzJ3MgY29uc3RydWN0b3Is
IG5vdCByZXR1cm5pbmcgInVuZGVmaW5lZCIgb3IgYW4gb2JqZWN0IHJlc3VsdHMgaW4gYSB0eXBl
CisgICAgICAgIGVycm9yIGluc3RlYWQgb2YgInRoaXMiIGJlaW5nIHJldHVybmVkLgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93VHlwZUVycm9yKTogQWRkZWQuCisK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCk6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6bmV3VGFyZ2V0KTogQWRkZWQuCisKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vw
ZXJOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZC4gRW1pdHMgdGhlIGNvZGUgdG8gb2J0YWluIHRo
ZSBjYWxsZWUncyBwYXJlbnQgY2xhc3MuCisgICAgICAgIChKU0M6OmVtaXRTdXBlckJhc2VGb3JD
YWxsZWUpOiBBZGRlZC4gRW1pdHMgdGhlIGNvZGUgdG8gb2J0YWluIHRoZSBwYXJlbnQgY2xhc3Mn
cyBwcm90b3R5cGUuCisgICAgICAgIChKU0M6OmVtaXRQdXRIb21lT2JqZWN0KTogQWRkZWQuCisg
ICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZSk6IFN0b3JlcyB0aGUg
aG9tZSBvYmplY3Qgd2hlbiBhZGRpbmcgbWV0aG9kcy4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlM
aXN0Tm9kZTo6ZW1pdFB1dENvbnN0YW50UHJvcGVydHkpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6
QnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKTogQWRkZWQgdGhlIHN1cHBvcnQgZm9y
IHN1cGVyWydmb28nXS4KKyAgICAgICAgKEpTQzo6RG90QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNv
ZGUpOiBBZGRlZCB0aGUgc3VwcG9ydCBmb3Igc3VwZXIuZm9vLgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkIHRoZSBzdXBwb3J0IGZvciBz
dXBlcigpLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVj
b2RlKTogQWRkZWQgdGhlIHN1cHBvcnQgZm9yIHN1cGVyWydmb28nXSgpLgorICAgICAgICAoSlND
OjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZCB0aGUgc3VwcG9ydCBm
b3Igc3VwZXIuZm9vKCkuCisgICAgICAgIChKU0M6OkRlbGV0ZUJyYWNrZXROb2RlOjplbWl0Qnl0
ZWNvZGUpOiBGb3JiaWQgImRlbGV0ZSBzdXBlci5mb28iLgorICAgICAgICAoSlNDOjpEZWxldGVE
b3ROb2RlOjplbWl0Qnl0ZWNvZGUpOiBGb3JiaWQgImRlbGV0ZSBzdXBlclsnZm9vJ10iLgorICAg
ICAgICAoSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZCB0aGUgc3VwcG9y
dCBmb3IgImNsYXNzSGVyaXRhZ2UiLiBUaGlzIGlzIHRoZSBtYWluCisgICAgICAgIGxvZ2ljIGZv
ciBpbmhlcml0YW5jZS4gV2hlbiBhIGNsYXNzIEIgaW5oZXJpdHMgZnJvbSBhIGNsYXNzIEEsIHNl
dCBCLl9fcHJvdG9fXyB0byBBIGFuZCBzZXQKKyAgICAgICAgQi5wcm90b3R5cGUuX19wcm90b19f
IHRvIEEucHJvdG90eXBlLiBUaHJvdyBleGNlcHRpb25zIHdoZW4gZWl0aGVyIEEgb3IgQS5fX3By
b3RvX18gaXMgbm90CisgICAgICAgIGFuIG9iamVjdC4KKworICAgICAgICAqIHBhcnNlci9BU1RC
dWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OnN1cGVyRXhwcik6IEFkZGVkLgor
CisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6U3Vw
ZXJOb2RlOjpTdXBlck5vZGUpOiBBZGRlZC4KKworICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUpOgorCisg
ICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjpp
c1N1cGVyTm9kZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Tm9kZTo6dHlwZSk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Tm9kZTo6bmVlZHNTdXBlckJpbmRpbmcpOgorCisgICAgICAgICogcGFy
c2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1
bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0
aW9uSW5mbyk6IFRocm93IGEgcGFyc2VyIGVycm9yIGlmIHN1cGVyKCkgaXMgdXNlZCBvdXRzaWRl
CisgICAgICAgIG9mIGNsYXNzIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgKEpTQzo6UGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKTogQ29uc3RydWN0b3JLaW5kIGlzICJkZXJpdmVkIiBp
ZiBhbmQgb25seSBpZiB0aGUgcGFyZW50CisgICAgICAgIGNsYXNzIGlzIHNwZWNpZmllZCBpbiB0
aGUgZGVjbGFyYXRpb24gLyBleHByZXNzaW9uLgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOiBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgInN1cGVy
KCkiLCAic3VwZXIuZm9vIiwKKyAgICAgICAgYW5kICJzdXBlclsnZm9vJ10iLiBUaHJvdyBhIHNl
bWFudGljIGVycm9yIGlmICJzdXBlciIgYXBwZWFycyBieSBpdHNlbGYuCisKKyAgICAgICAgKiBw
YXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3BlOjpTY29wZSk6IEFkZGVkIG1faGFz
RGlyZWN0U3VwZXIuIFRoaXMgdmFyaWFibGUga2VlcHMgdHJhY2sgb2YgdGhlIHVzZSBvZiAic3Vw
ZXIoKSIKKyAgICAgICAgc28gdGhhdCBwYXJzZUZ1bmN0aW9uSW5mbyBjYW4gc3BpdCBhbiBlcnJv
ciBpZiBpdCdzIHVzZWQgb3V0c2lkZSBvZiBjbGFzcyBjb25zdHJ1Y3RvcnMuCisgICAgICAgIChK
U0M6OlNjb3BlOjpoYXNEaXJlY3RTdXBlcik6IEFkZGVkLgorICAgICAgICAoSlNDOjpTY29wZTo6
c2V0SGFzRGlyZWN0U3VwZXIpOiBBZGRlZC4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXJNb2Rl
cy5oOgorICAgICAgICAoSlNDOjpDb25zdHJ1Y3RvcktpbmQpOiBBZGRlZC4KKworICAgICAgICAq
IHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OnN1
cGVyRXhwcik6IEFkZGVkLgorCisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
OiBBZGRlZCBob21lT2JqZWN0UHJpdmF0ZU5hbWUuCisKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1
dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmV4ZWN1dGFibGVJbmZvKTog
CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpleGVjdXRhYmxlSW5mbyk6CisKIDIw
MTUtMDMtMDYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBBZG9wdCBPYmplY3QgTGl0ZXJhbCBTaG9ydGhhbmQgUHJvcGVydHkg
Q29uc3RydWN0aW9uIFN5bnRheApAQCAtMTIwLDYgKzIyMSw3IEBACiAgICAgICAgIHByb3BlcnR5
IG5hbWUgYXMgdGhlIGlkZW50aWZpZXIgbmFtZSBhbmQgdmFsdWUgb2YgYSB2YXJpYWJsZSB3aXRo
IHRoYXQKICAgICAgICAgaWRlbnRpZmllci4gT3RoZXJ3aXNlLCBmYWxsIHRocm91Z2ggdG8gZ2V0
dGVyL3NldHRlciBwYXJzaW5nLgogCis+Pj4+Pj4+IC5yMTgxMTg4CiAyMDE1LTAzLTA1ICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIFVucmV2aWV3
ZWQgZ2FyZGVuaW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAxODExOTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw3ICs2MSw4IEBAIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBn
ZW5lcmEKICAgICBmdW5jdGlvbi0+ZmluaXNoUGFyc2luZyhleGVjdXRhYmxlLT5wYXJhbWV0ZXJz
KCksIGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+ZnVuY3Rpb25Nb2RlKCkpOwogICAg
IGV4ZWN1dGFibGUtPnJlY29yZFBhcnNlKGZ1bmN0aW9uLT5mZWF0dXJlcygpLCBmdW5jdGlvbi0+
aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSk7CiAgICAgCi0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVC
bG9jayogcmVzdWx0ID0gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwgRnVu
Y3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhmdW5jdGlvbi0+bmVlZHNBY3RpdmF0aW9uKCksIGZ1
bmN0aW9uLT51c2VzRXZhbCgpLCBmdW5jdGlvbi0+aXNTdHJpY3RNb2RlKCksIGtpbmQgPT0gQ29k
ZUZvckNvbnN0cnVjdCwgZnVuY3Rpb25LaW5kID09IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uKSk7
CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwgRnVuY3Rpb25Db2RlLAorICAgICAgICBFeGVjdXRhYmxl
SW5mbyhmdW5jdGlvbi0+bmVlZHNBY3RpdmF0aW9uKCksIGZ1bmN0aW9uLT51c2VzRXZhbCgpLCBm
dW5jdGlvbi0+aXNTdHJpY3RNb2RlKCksIGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCwgZnVuY3Rp
b25LaW5kID09IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uLCBleGVjdXRhYmxlLT5jb25zdHJ1Y3Rv
cktpbmRJc0Rlcml2ZWQoKSkpOwogICAgIGF1dG8gZ2VuZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8
Qnl0ZWNvZGVHZW5lcmF0b3I+KHZtLCBmdW5jdGlvbi5nZXQoKSwgcmVzdWx0LCBkZWJ1Z2dlck1v
ZGUsIHByb2ZpbGVyTW9kZSkpOwogICAgIGVycm9yID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpOwog
ICAgIGlmIChlcnJvci5pc1ZhbGlkKCkpCkBAIC04NCw2ICs4NSw5IEBAIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmMKICAgICAsIG1faXNJblN0cmljdENvbnRleHQobm9k
ZS0+aXNJblN0cmljdENvbnRleHQoKSkKICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJsZXMoZmFs
c2UpCiAgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGtpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVu
Y3Rpb24pCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgLCBtX2NvbnN0cnVjdG9y
S2luZElzRGVyaXZlZChub2RlLT5jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKSkKKyNlbmRpZgog
ICAgICwgbV9uYW1lKG5vZGUtPmlkZW50KCkpCiAgICAgLCBtX2luZmVycmVkTmFtZShub2RlLT5p
bmZlcnJlZE5hbWUoKSkKICAgICAsIG1fcGFyYW1ldGVycyhub2RlLT5wYXJhbWV0ZXJzKCkpCkBA
IC0yMDUsNiArMjA5LDkgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKFZN
KgogICAgICwgbV9pc0NvbnN0cnVjdG9yKGluZm8ubV9pc0NvbnN0cnVjdG9yKQogICAgICwgbV9o
YXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKICAgICAsIG1faXNCdWlsdGluRnVuY3Rpb24oaW5m
by5tX2lzQnVpbHRpbkZ1bmN0aW9uKQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAg
ICwgbV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoaW5mby5tX2NvbnN0cnVjdG9yS2luZElzRGVy
aXZlZCkKKyNlbmRpZgogICAgICwgbV9maXJzdExpbmUoMCkKICAgICAsIG1fbGluZUNvdW50KDAp
CiAgICAgLCBtX2VuZENvbHVtbihVSU5UX01BWCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAxODExOTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtNjUsMTkgKzY1LDI2IEBAIHR5cGVkZWYgdW5zaWduZWQgVW5saW5r
ZWRPYmplY3RBbGxvY2F0aW8KIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENhbGxMaW5r
SW5mbzsKIAogc3RydWN0IEV4ZWN1dGFibGVJbmZvIHsKLSAgICBFeGVjdXRhYmxlSW5mbyhib29s
IG5lZWRzQWN0aXZhdGlvbiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBpc1N0cmljdE1vZGUsIGJvb2wg
aXNDb25zdHJ1Y3RvciwgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbikKKyAgICBFeGVjdXRhYmxlSW5m
byhib29sIG5lZWRzQWN0aXZhdGlvbiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBpc1N0cmljdE1vZGUs
IGJvb2wgaXNDb25zdHJ1Y3RvciwgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbiwgYm9vbCBjb25zdHJ1
Y3RvcktpbmRJc0Rlcml2ZWQpCiAgICAgICAgIDogbV9uZWVkc0FjdGl2YXRpb24obmVlZHNBY3Rp
dmF0aW9uKQogICAgICAgICAsIG1fdXNlc0V2YWwodXNlc0V2YWwpCiAgICAgICAgICwgbV9pc1N0
cmljdE1vZGUoaXNTdHJpY3RNb2RlKQogICAgICAgICAsIG1faXNDb25zdHJ1Y3Rvcihpc0NvbnN0
cnVjdG9yKQogICAgICAgICAsIG1faXNCdWlsdGluRnVuY3Rpb24oaXNCdWlsdGluRnVuY3Rpb24p
CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgICwgbV9jb25zdHJ1Y3Rvcktp
bmRJc0Rlcml2ZWQoY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKQorI2VuZGlmCiAgICAgeworICAg
ICAgICBVTlVTRURfUEFSQU0oY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKTsKICAgICB9CiAgICAg
Ym9vbCBtX25lZWRzQWN0aXZhdGlvbiA6IDE7CiAgICAgYm9vbCBtX3VzZXNFdmFsIDogMTsKICAg
ICBib29sIG1faXNTdHJpY3RNb2RlIDogMTsKICAgICBib29sIG1faXNDb25zdHJ1Y3RvciA6IDE7
CiAgICAgYm9vbCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNT
X1NZTlRBWCkKKyAgICBib29sIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkIDogMTsKKyNlbmRp
ZgogfTsKIAogZW51bSBVbmxpbmtlZEZ1bmN0aW9uS2luZCB7CkBAIC0xMTYsNiArMTIzLDExIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBKU1BhcnNlU3RyaWN0OwogICAgICAgICByZXR1
cm4gSlNQYXJzZU5vcm1hbDsKICAgICB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisg
ICAgYm9vbCBjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0
cnVjdG9yS2luZElzRGVyaXZlZDsgfQorI2Vsc2UKKyAgICBib29sIGNvbnN0cnVjdG9yS2luZElz
RGVyaXZlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKIAogICAgIHVuc2lnbmVk
IGZpcnN0TGluZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lT2Zmc2V0OyB9CiAg
ICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7IH0KQEAg
LTE2OCw2ICsxODAsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0luU3RyaWN0Q29udGV4dCA6
IDE7CiAgICAgYm9vbCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKICAgICBib29sIG1faXNC
dWlsdGluRnVuY3Rpb24gOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGJv
b2wgbV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQgOiAxOworI2VuZGlmCiAKICAgICBJZGVudGlm
aWVyIG1fbmFtZTsKICAgICBJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOwpAQCAtMzQyLDcgKzM1
NywxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbjsgfQogCiAgICAgYm9vbCBpc0J1
aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNCdWlsdGluRnVuY3Rpb247IH0KLSAg
ICAKKworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGJvb2wgY29uc3RydWN0b3JL
aW5kSXNEZXJpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQ7
IH0KKyNlbmRpZgorCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpCiAgICAgewogICAgICAgICBtX2p1
bXBUYXJnZXRzLnNocmlua1RvRml0KCk7CkBAIC01MzQsNiArNTUzLDkgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1faXNDb25zdHJ1Y3RvciA6IDE7CiAgICAgYm9vbCBtX2hhc0NhcHR1cmVkVmFyaWFi
bGVzIDogMTsKICAgICBib29sIG1faXNCdWlsdGluRnVuY3Rpb24gOiAxOworI2lmIEVOQUJMRShF
UzZfQ0xBU1NfU1lOVEFYKQorICAgIGJvb2wgbV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQgOiAx
OworI2VuZGlmCiAgICAgdW5zaWduZWQgbV9maXJzdExpbmU7CiAgICAgdW5zaWduZWQgbV9saW5l
Q291bnQ7CiAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMTgxMTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMSw3ICs0MDEsMTQgQEAg
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGFkZENhbGxlZShm
dW5jdGlvbk5vZGUsIGNhbGxlZVJlZ2lzdGVyKTsKIAogICAgIGlmIChpc0NvbnN0cnVjdG9yKCkp
IHsKLSAgICAgICAgZW1pdENyZWF0ZVRoaXMoJm1fdGhpc1JlZ2lzdGVyKTsKKyNpZiBFTkFCTEUo
RVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgp
KSB7CisgICAgICAgICAgICBtX25ld1RhcmdldFJlZ2lzdGVyID0gYWRkVmFyKCk7CisgICAgICAg
ICAgICBlbWl0TW92ZShtX25ld1RhcmdldFJlZ2lzdGVyLCAmbV90aGlzUmVnaXN0ZXIpOworICAg
ICAgICAgICAgZW1pdExvYWQoJm1fdGhpc1JlZ2lzdGVyLCBqc051bGwoKSk7CisgICAgICAgIH0g
ZWxzZQorI2VuZGlmCisgICAgICAgICAgICBlbWl0Q3JlYXRlVGhpcygmbV90aGlzUmVnaXN0ZXIp
OwogICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25Ob2RlLT51c2VzVGhpcygpIHx8IGNvZGVCbG9jay0+
dXNlc0V2YWwoKSkgewogICAgICAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogICAgICAgICBlbWl0T3Bjb2RlKG9wX3Rv
X3RoaXMpOwpAQCAtMTkwMSwxNCArMTkwOCwyNSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFJldHVyCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xleGljYWxF
bnZpcm9ubWVudFJlZ2lzdGVyID8gbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+aW5kZXgo
KSA6IGVtaXRMb2FkKDAsIEpTVmFsdWUoKSktPmluZGV4KCkpOwogICAgIH0KIAotICAgIGlmIChp
c0NvbnN0cnVjdG9yKCkgJiYgc3JjLT5pbmRleCgpICE9IG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkp
IHsKLSAgICAgICAgUmVmUHRyPExhYmVsPiBpc09iamVjdExhYmVsID0gbmV3TGFiZWwoKTsKKyNp
ZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIHRoaXNNaWdodEJlVW5pbml0aWFs
aXplZCA9IGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpOworI2Vsc2UKKyAgICBib29sIHRoaXNN
aWdodEJlVW5pbml0aWFsaXplZCA9IGZhbHNlOworI2VuZGlmCisgICAgaWYgKGlzQ29uc3RydWN0
b3IoKSAmJiAoc3JjLT5pbmRleCgpICE9IG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkgfHwgdGhpc01p
Z2h0QmVVbmluaXRpYWxpemVkKSkgeworICAgICAgICBSZWZQdHI8TGFiZWw+IGlzT2JqZWN0T3JV
bmRlZmluZWRMYWJlbCA9IG5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1p
dElzT2JqZWN0KG5ld1RlbXBvcmFyeSgpLCBzcmMpLCBpc09iamVjdExhYmVsLmdldCgpKTsKKyAg
ICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzT2JqZWN0KG5ld1RlbXBvcmFyeSgpLCBzcmMpLCBp
c09iamVjdE9yVW5kZWZpbmVkTGFiZWwuZ2V0KCkpOwogCi0gICAgICAgIGVtaXRVbmFyeU5vRHN0
T3Aob3BfcmV0LCAmbV90aGlzUmVnaXN0ZXIpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgICAgICBpZiAoY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkpIHsKKyAgICAgICAgICAg
IGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZChuZXdUZW1wb3JhcnkoKSwgc3JjKSwgaXNP
YmplY3RPclVuZGVmaW5lZExhYmVsLmdldCgpKTsKKyAgICAgICAgICAgIGVtaXRUaHJvd1R5cGVF
cnJvcigiQ2Fubm90IHJldHVybiBhIG5vbi1vYmplY3QgdHlwZSBpbiB0aGUgY29uc3RydWN0b3Ig
b2YgYSBkZXJpdmVkIGNsYXNzLiIpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICAg
ICAgZW1pdFVuYXJ5Tm9Ec3RPcChvcF9yZXQsICZtX3RoaXNSZWdpc3Rlcik7CiAKLSAgICAgICAg
ZW1pdExhYmVsKGlzT2JqZWN0TGFiZWwuZ2V0KCkpOworICAgICAgICBlbWl0TGFiZWwoaXNPYmpl
Y3RPclVuZGVmaW5lZExhYmVsLmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGVtaXRVbmFyeU5v
RHN0T3Aob3BfcmV0LCBzcmMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTgxMTkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNyArMjY5LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEoKSBjb25zdCB7IHJldHVybiBtX3Njb3Bl
Tm9kZS0+cGFyc2VyQXJlbmEoKTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYg
cHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX3ZtLT5wcm9wZXJ0eU5hbWVzOyB9CiAK
LSAgICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29u
c3RydWN0b3IoKTsgfQorICAgICAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVy
biBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpOyB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19T
WU5UQVgpCisgICAgICAgIGJvb2wgY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlQmxvY2stPmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpOyB9CisjZW5kaWYK
IAogICAgICAgICBQYXJzZXJFcnJvciBnZW5lcmF0ZSgpOwogCkBAIC0yOTAsNyArMjkzLDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3Jp
bmcgInRoaXMiCiAgICAgICAgIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZt
X3RoaXNSZWdpc3RlcjsgfQotICAgICAgICAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkK
KyAgICAgICAgUmVnaXN0ZXJJRCogbmV3VGFyZ2V0KCkgeyByZXR1cm4gbV9uZXdUYXJnZXRSZWdp
c3RlcjsgfQorI2VuZGlmCisKICAgICAgICAgUmVnaXN0ZXJJRCogc2NvcGVSZWdpc3RlcigpIHsg
cmV0dXJuIG1fc2NvcGVSZWdpc3RlcjsgfQogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIG5leHQg
YXZhaWxhYmxlIHRlbXBvcmFyeSByZWdpc3Rlci4gUmVnaXN0ZXJzIHJldHVybmVkIGJ5CkBAIC03
NjMsNiArNzY5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fZW1w
dHlWYWx1ZVJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX2dsb2Jh
bE9iamVjdFJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX2xvY2Fs
QXJndW1lbnRzUmVnaXN0ZXIgeyBudWxscHRyIH07CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5U
QVgpCisgICAgICAgIFJlZ2lzdGVySUQqIG1fbmV3VGFyZ2V0UmVnaXN0ZXIgeyBudWxscHRyIH07
CisjZW5kaWYKIAogICAgICAgICBWZWN0b3I8SWRlbnRpZmllciwgMTY+IG1fd2F0Y2hhYmxlVmFy
aWFibGVzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29uc3Rh
bnRQb29sUmVnaXN0ZXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTgxMTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTYsNiArMTU2LDM0IEBAIFJlZ2lzdGVySUQqIFRoaXNOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgRU5BQkxFKEVTNl9DTEFTU19T
WU5UQVgpCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdXBlck5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBTdXBlck5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCit7CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNhbGxlZS5zZXRJ
bmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhvbWVPYmpl
Y3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAmY2Fs
bGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSk7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvUGFyZW50ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlk
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaG9tZU9iamVjdC5nZXQoKSwgZ2VuZXJhdG9yLnBy
b3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcHJvdG9QYXJlbnQuZ2V0
KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOworfQorCitzdGF0aWMg
UmVnaXN0ZXJJRCogZW1pdFN1cGVyQmFzZUZvckNhbGxlZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yKQoreworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNhbGxlZS5zZXRJbmRleChK
U1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhvbWVPYmplY3QgPSBn
ZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAmY2FsbGVlLCBn
ZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSk7CisgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGhvbWVP
YmplY3QuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKTsK
K30KKworI2VuZGlmCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXNvbHZl
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGJvb2wgUmVzb2x2ZU5v
ZGU6OmlzUHVyZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKSBjb25zdApAQCAtMjk0LDYg
KzMyMiwxMyBAQCBSZWdpc3RlcklEKiBPYmplY3RMaXRlcmFsTm9kZTo6ZW1pdEJ5dGVjCiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eUxpc3ROb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKK3N0
YXRpYyBpbmxpbmUgdm9pZCBlbWl0UHV0SG9tZU9iamVjdChCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBmdW5jdGlvbiwgUmVnaXN0ZXJJRCogaG9tZU9iamVjdCkKK3sK
KyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoZnVuY3Rpb24sIGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuaG9tZU9iamVjdFByaXZhdGVOYW1lLCBob21lT2JqZWN0KTsKK30KKyNlbmRpZgorCiBS
ZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIC8vIEZhc3QgY2FzZTogdGhp
cyBsb29wIGp1c3QgaGFuZGxlcyByZWd1bGFyIHZhbHVlIHByb3BlcnRpZXMuCkBAIC0zMzAsNiAr
MzY1LDEwIEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY28KICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobm9kZS0+bV9hc3NpZ24pOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAg
ICAgICAgICAgaWYgKG5vZGUtPm5lZWRzU3VwZXJCaW5kaW5nKCkpCisgICAgICAgICAgICAgICAg
ZW1pdFB1dEhvbWVPYmplY3QoZ2VuZXJhdG9yLCB2YWx1ZSwgZHN0KTsKKyNlbmRpZgogCiAgICAg
ICAgICAgICAvLyBUaGlzIGlzIGEgZ2V0L3NldCBwcm9wZXJ0eSwgZmluZCBpdHMgZW50cnkgaW4g
dGhlIG1hcC4KICAgICAgICAgICAgIEFTU0VSVChub2RlLT5tX3R5cGUgPT0gUHJvcGVydHlOb2Rl
OjpHZXR0ZXIgfHwgbm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9kZTo6U2V0dGVyKTsKQEAgLTM0
NCwxMiArMzgzLDE4IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY28K
ICAgICAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBwYWlyZWQgbm9kZSBub3cuCiAgICAgICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gZ2V0dGVyUmVnOwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHNldHRlclJlZzsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAg
ICAgIFJlZ2lzdGVySUQqIHNlY29uZFJlZyA9IG51bGxwdHI7CisjZW5kaWYKIAogICAgICAgICAg
ICAgaWYgKG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRlcikgewogICAgICAgICAg
ICAgICAgIGdldHRlclJlZyA9IHZhbHVlOwogICAgICAgICAgICAgICAgIGlmIChwYWlyLnNlY29u
ZCkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGFpci5zZWNvbmQtPm1fdHlwZSA9PSBQ
cm9wZXJ0eU5vZGU6OlNldHRlcik7CiAgICAgICAgICAgICAgICAgICAgIHNldHRlclJlZyA9IGdl
bmVyYXRvci5lbWl0Tm9kZShwYWlyLnNlY29uZC0+bV9hc3NpZ24pOworI2lmIEVOQUJMRShFUzZf
Q0xBU1NfU1lOVEFYKQorICAgICAgICAgICAgICAgICAgICBzZWNvbmRSZWcgPSBzZXR0ZXJSZWcu
Z2V0KCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBzZXR0ZXJSZWcgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChzZXR0ZXJSZWcuZ2V0KCksIGpzVW5kZWZpbmVkKCkp
OwpAQCAtMzYwLDEyICs0MDUsMjAgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1p
dEJ5dGVjbwogICAgICAgICAgICAgICAgIGlmIChwYWlyLnNlY29uZCkgewogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQocGFpci5zZWNvbmQtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRl
cik7CiAgICAgICAgICAgICAgICAgICAgIGdldHRlclJlZyA9IGdlbmVyYXRvci5lbWl0Tm9kZShw
YWlyLnNlY29uZC0+bV9hc3NpZ24pOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAg
ICAgICAgICAgICAgICAgICBzZWNvbmRSZWcgPSBnZXR0ZXJSZWcuZ2V0KCk7CisjZW5kaWYKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBnZXR0ZXJSZWcgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0TG9hZChnZXR0ZXJSZWcuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KIAorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAg
ICAgICAgaWYgKHBhaXIuc2Vjb25kICYmIHBhaXIuc2Vjb25kLT5uZWVkc1N1cGVyQmluZGluZygp
KQorICAgICAgICAgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgc2Vjb25kUmVn
LCBkc3QpOworI2VuZGlmCisKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0R2V0dGVyU2V0
dGVyKGRzdCwgKm5vZGUtPm5hbWUoKSwgZ2V0dGVyUmVnLmdldCgpLCBzZXR0ZXJSZWcuZ2V0KCkp
OwogICAgICAgICB9CiAgICAgfQpAQCAtMzc1LDE4ICs0MjgsMzQgQEAgUmVnaXN0ZXJJRCogUHJv
cGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjbwogCiB2b2lkIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRQ
dXRDb25zdGFudFByb3BlcnR5KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIG5ld09iaiwgUHJvcGVydHlOb2RlJiBub2RlKQogeworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLm1fYXNzaWduKTsKKyNpZiBFTkFCTEUo
RVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobm9kZS5uZWVkc1N1cGVyQmluZGluZygpKQorICAg
ICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIHZhbHVlLmdldCgpLCBuZXdPYmopOwor
I2VuZGlmCiAgICAgaWYgKG5vZGUubmFtZSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGly
ZWN0UHV0QnlJZChuZXdPYmosICpub2RlLm5hbWUoKSwgZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUu
bV9hc3NpZ24pLCBub2RlLnB1dFR5cGUoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0
UHV0QnlJZChuZXdPYmosICpub2RlLm5hbWUoKSwgdmFsdWUuZ2V0KCksIG5vZGUucHV0VHlwZSgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVy
dHlOYW1lID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUubV9leHByZXNzaW9uKTsKLSAgICBnZW5l
cmF0b3IuZW1pdERpcmVjdFB1dEJ5VmFsKG5ld09iaiwgcHJvcGVydHlOYW1lLmdldCgpLCBnZW5l
cmF0b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2lnbikpOworICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0
UHV0QnlWYWwobmV3T2JqLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHZhbHVlLmdldCgpKTsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vz
c29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKIHsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobV9i
YXNlLT5pc1N1cGVyTm9kZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgZ2VuZXJh
dGUgdGhlIHByb2ZpbGVyIGluZm8/CisgICAgICAgIGlmIChtX3N1YnNjcmlwdC0+aXNTdHJpbmco
KSkgeworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWQgPSBzdGF0aWNfY2FzdDxTdHJp
bmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBlbWl0U3Vw
ZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvciksIGlkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
LCBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvciksIGdlbmVyYXRvci5lbWl0Tm9kZSht
X3N1YnNjcmlwdCkpOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZl
Tm9kZSgpIAogICAgICAgICAmJiBnZW5lcmF0b3Iud2lsbFJlc29sdmVUb0FyZ3VtZW50c1JlZ2lz
dGVyKHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpKQogICAg
ICAgICAmJiAhZ2VuZXJhdG9yLnN5bWJvbFRhYmxlKCkuc2xvd0FyZ3VtZW50cygpKSB7CkBAIC00
MzEsNyArNTAwLDExIEBAIFJlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2QK
ICAgICB9CiAKIG5vbkFyZ3VtZW50c1BhdGg6CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgp
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBtX2Jhc2UtPmlzU3VwZXJOb2RlKCkgPyBl
bWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBnZW5lcmF0b3IuZW1pdE5vZGUobV9i
YXNlKTsKKyNlbHNlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9iYXNlKTsKKyNlbmRpZgogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWdpc3RlcklEKiBmaW5h
bERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZ2lzdGVySUQq
IHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2UuZ2V0KCksIG1faWRl
bnQpOwpAQCAtNTIxLDYgKzU5NCwxNSBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5v
ZGU6OmVtaXRCCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9leHByKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMg
Y2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisjaWYgRU5BQkxFKEVTNl9DTEFTU19T
WU5UQVgpCisgICAgaWYgKG1fZXhwci0+aXNTdXBlck5vZGUoKSkgeworICAgICAgICBBU1NFUlQo
Z2VuZXJhdG9yLmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRvci5uZXdUYXJn
ZXQoKSk7CisgICAgICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q29uc3RydWN0
KHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxB
cmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCksIHJldCk7CisgICAgICAg
IHJldHVybiByZXQ7CisgICAgfQorI2VuZGlmCiAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxB
cmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ2lzdGVySUQq
IHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwg
Tm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsK
QEAgLTU3NCwxMyArNjU2LDI1IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjplbWkKIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisjaWYg
RU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1fYmFzZS0+
aXNTdXBlck5vZGUoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGJhc2VJc1N1cGVy
ID8gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fYmFzZSk7CisjZWxzZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG1fYmFzZSk7CisjZW5kaWYKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVy
dHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwogICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgp
LCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9
IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBi
YXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVy
blZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5nZXQoKSk7
CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKyNp
ZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAoYmFzZUlzU3VwZXIpCisgICAgICAg
IGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBnZW5lcmF0
b3IudGhpc1JlZ2lzdGVyKCkpOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3Zl
KGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOworI2Vsc2UKICAgICBn
ZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQo
KSk7CisjZW5kaWYKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0
dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxB
cmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdl
bmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICBnZW5lcmF0b3IuZW1pdFBy
b2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZUJ5dGVjb2RlRG9lc05vdEhh
dmVHbG9iYWxJRCwgbnVsbHB0cik7CkBAIC01OTYsOSArNjkwLDIxIEBAIFJlZ2lzdGVySUQqIEZ1
bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXQKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rp
b24gPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlv
bi5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9h
cmdzKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIGJhc2VJc1N1cGVy
ID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOworICAgIGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRv
ci50aGlzUmVnaXN0ZXIoKSk7CisgICAgZWxzZQorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUo
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9iYXNlKTsKKyNlbHNlCiAgICAgZ2VuZXJh
dG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1fYmFzZSk7CisjZW5k
aWYKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgp
LCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKKyNpZiBFTkFCTEUo
RVM2X0NMQVNTX1NZTlRBWCkKKyAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0
KCksIGJhc2VJc1N1cGVyID8gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3IpIDogY2Fs
bEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CisjZWxzZQogICAgIGdlbmVyYXRv
ci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIo
KSwgbV9pZGVudCk7CisjZW5kaWYKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1p
dENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rp
b24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAg
ICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZUJ5dGVjb2Rl
RG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CkBAIC05NDAsNiArMTA0NiwxMCBAQCBSZWdp
c3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjCiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKIAogICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
KyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobV9iYXNlLT5pc1N1cGVyTm9k
ZSgpKQorICAgICAgICByZXR1cm4gZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAi
Q2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5Iik7CisjZW5kaWYKICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXREZWxldGVCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBy
MC5nZXQoKSwgcjEuZ2V0KCkpOwogfQogCkBAIC05NTAsNiArMTA2MCwxMCBAQCBSZWdpc3RlcklE
KiBEZWxldGVEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIw
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisjaWYgRU5BQkxF
KEVTNl9DTEFTU19TWU5UQVgpCisgICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkKKyAgICAg
ICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkNhbm5vdCBkZWxl
dGUgYSBzdXBlciBwcm9wZXJ0eSIpOworI2VuZGlmCiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
RGVsZXRlQnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMC5nZXQoKSwgbV9p
ZGVudCk7CiB9CiAKQEAgLTI4MDcsMTEgKzI5MjEsNDIgQEAgdm9pZCBDbGFzc0RlY2xOb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZAogCiBSZWdpc3RlcklEKiBDbGFzc0V4cHJOb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewot
ICAgIEFTU0VSVCghbV9wYXJlbnRDbGFzc0V4cHJlc3Npb24pOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzdXBlcmNsYXNzOworICAgIGlmIChtX2NsYXNzSGVyaXRhZ2UpIHsKKyAgICAgICAgc3Vw
ZXJjbGFzcyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKHN1cGVyY2xhc3MuZ2V0KCksIG1fY2xhc3NIZXJpdGFnZSk7CisgICAgfQogCiAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGNvbnN0cnVjdG9yID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9jb25zdHJ1Y3RvckV4cHJlc3Npb24pOworICAgIC8vIEZJWE1FOiBNYWtlIHRoZSBwcm90b3R5
cGUgbm9uLWNvbmZpZ3VyYWJsZSAmIG5vbi13cml0YWJsZS4KICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcHJvdG90eXBlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgY29uc3RydWN0b3IuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlKTsKIAorICAgIGlmIChzdXBlcmNsYXNzKSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiB0ZW1wUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0
cjxMYWJlbD4gc3VwZXJjbGFzc0lzTnVsbExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3Bf
ZXFfbnVsbCwgdGVtcFJlZ2lzdGVyLmdldCgpLCBzdXBlcmNsYXNzLmdldCgpKSwgc3VwZXJjbGFz
c0lzTnVsbExhYmVsLmdldCgpKTsKKworICAgICAgICAvLyBGSVhNRTogVGhyb3cgVHlwZUVycm9y
IGlmIGl0J3MgYSBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICAgICAgIFJlZlB0cjxMYWJlbD4gc3Vw
ZXJjbGFzc0lzT2JqZWN0TGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGdlbmVyYXRvci5lbWl0SXNPYmplY3QodGVtcFJlZ2lzdGVy
LmdldCgpLCBzdXBlcmNsYXNzLmdldCgpKSwgc3VwZXJjbGFzc0lzT2JqZWN0TGFiZWwuZ2V0KCkp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiVGhl
IHN1cGVyY2xhc3MgaXMgbm90IGFuIG9iamVjdC4iKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
TGFiZWwoc3VwZXJjbGFzc0lzT2JqZWN0TGFiZWwuZ2V0KCkpOworCisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBwcm90b1BhcmVudCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHByb3RvUGFyZW50LmdldCgpLCBzdXBlcmNsYXNzLmdl
dCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CisKKyAgICAgICAgUmVm
UHRyPExhYmVsPiBwcm90b1BhcmVudElzT2JqZWN0T3JOdWxsTGFiZWwgPSBnZW5lcmF0b3IubmV3
TGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGdlbmVyYXRvci5lbWl0
VW5hcnlPcChvcF9pc19vYmplY3Rfb3JfbnVsbCwgdGVtcFJlZ2lzdGVyLmdldCgpLCBwcm90b1Bh
cmVudC5nZXQoKSksIHByb3RvUGFyZW50SXNPYmplY3RPck51bGxMYWJlbC5nZXQoKSk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJUaGUgc3VwZXJj
bGFzcydzIHByb3RvdHlwZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRMYWJlbChwcm90b1BhcmVudElzT2JqZWN0T3JOdWxsTGFiZWwuZ2V0KCkpOworCisgICAg
ICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJZChjb25zdHJ1Y3Rvci5nZXQoKSwgZ2VuZXJh
dG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8sIHN1cGVyY2xhc3MuZ2V0KCksIFBy
b3BlcnR5Tm9kZTo6VW5rbm93bik7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJ
ZChwcm90b3R5cGUuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVBy
b3RvLCBwcm90b1BhcmVudC5nZXQoKSwgUHJvcGVydHlOb2RlOjpVbmtub3duKTsKKworICAgICAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKHN1cGVyY2xhc3NJc051bGxMYWJlbC5nZXQoKSk7CisgICAg
ICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgY29uc3RydWN0b3IuZ2V0KCksIHByb3Rv
dHlwZS5nZXQoKSk7CisgICAgfQorCiAgICAgaWYgKG1fc3RhdGljTWV0aG9kcykKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXROb2RlKGNvbnN0cnVjdG9yLmdldCgpLCBtX3N0YXRpY01ldGhvZHMpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkocmV2aXNp
b24gMTgxMTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjksMTMgQEAgcHVibGljOgogICAgICAgICB1c2Vz
VGhpcygpOwogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBUaGlzTm9kZShsb2Nh
dGlvbik7CiAgICAgfQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIEV4cHJlc3Np
b25Ob2RlKiBzdXBlckV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKKyAgICB7
CisgICAgICAgIC8vIEZJWE1FOiBBZGQgYW5kIGNhbGwgdXNlc1N1cGVyKCk7CisgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFN1cGVyTm9kZShsb2NhdGlvbik7CisgICAgfQorI2Vu
ZGlmCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBzdGFydCkKICAgICB7CiAgICAgICAgIGlmIChtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5hcmd1
bWVudHMgPT0gKmlkZW50KQpAQCAtMjk4LDkgKzMwNSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGVGdW5jdGlv
bkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5k
Q29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCkKKyAgICBGdW5jdGlvbkJvZHlOb2RlKiBjcmVh
dGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5z
aWduZWQgZW5kQ29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCwgQ29uc3RydWN0b3JLaW5kIGNv
bnN0cnVjdG9yS2luZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IEZ1bmN0aW9uQm9keU5vZGUobV9wYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRp
b24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCk7CisgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9uQm9keU5vZGUobV9wYXJzZXJBcmVuYSwg
c3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGluU3Ry
aWN0Q29udGV4dCwgY29uc3RydWN0b3JLaW5kKTsKICAgICB9CiAKICAgICB2b2lkIHNldEZ1bmN0
aW9uTmFtZVN0YXJ0KEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGludCBmdW5jdGlvbk5hbWVTdGFy
dCkKQEAgLTMwOSwyMyArMzE2LDI2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgTkVWRVJf
SU5MSU5FIFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwK
LSAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZv
PEFTVEJ1aWxkZXI+JiBpbmZvLCB1bnNpZ25lZCBnZXRPclNldFN0YXJ0T2Zmc2V0KQorICAgICAg
ICBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVp
bGRlcj4mIGluZm8sIHVuc2lnbmVkIGdldE9yU2V0U3RhcnRPZmZzZXQsIFN1cGVyQmluZGluZyBz
dXBlckJpbmRpbmcpCiAgICAgewogICAgICAgICBBU1NFUlQobmFtZSk7CiAgICAgICAgIGluZm8u
Ym9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5RW5kTGluZSwgbG9jYXRp
b24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIGluZm8u
Ym9keS0+c2V0SW5mZXJyZWROYW1lKCpuYW1lKTsKICAgICAgICAgaW5mby5ib2R5LT5zZXRGdW5j
dGlvbktleXdvcmRTdGFydChnZXRPclNldFN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIG5l
dyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKCpuYW1lLCBuZXcgKG1fcGFyc2VyQXJlbmEp
IEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZp
ZXIsCi0gICAgICAgICAgICBpbmZvLmJvZHksIG1fc291cmNlQ29kZS0+c3ViRXhwcmVzc2lvbihp
bmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNlT2Zmc2V0LCBpbmZvLmJvZHlTdGFy
dExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5mby5wYXJhbWV0ZXJzKSwgdHlwZSwgUHJv
cGVydHlOb2RlOjpVbmtub3duKTsKKyAgICAgICAgU291cmNlQ29kZSBzb3VyY2UgPSBtX3NvdXJj
ZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFj
ZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbik7CisgICAg
ICAgIEZ1bmNFeHByTm9kZSogZnVuY0V4cHIgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHBy
Tm9kZShsb2NhdGlvbiwgbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIGluZm8u
Ym9keSwgc291cmNlLCBpbmZvLnBhcmFtZXRlcnMpOworICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoKm5hbWUsIGZ1bmNFeHByLCB0eXBlLCBQcm9wZXJ0eU5v
ZGU6OlVua25vd24sIHN1cGVyQmluZGluZyk7CiAgICAgfQogICAgIAotICAgIE5FVkVSX0lOTElO
RSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoVk0qIHZtLCBQYXJz
ZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFBy
b3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sLCBkb3VibGUgbmFtZSwgY29uc3QgUGFyc2VyRnVu
Y3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZvLCB1bnNpZ25lZCBnZXRPclNldFN0YXJ0T2Zmc2V0
KQorICAgIE5FVkVSX0lOTElORSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJv
cGVydHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sLAorICAgICAgICBk
b3VibGUgbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZvLCB1
bnNpZ25lZCBnZXRPclNldFN0YXJ0T2Zmc2V0LCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nKQog
ICAgIHsKICAgICAgICAgaW5mby5ib2R5LT5zZXRMb2MoaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZv
LmJvZHlFbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0YXJ0T2Zm
c2V0KTsKICAgICAgICAgaW5mby5ib2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFydChnZXRPclNl
dFN0YXJ0T2Zmc2V0KTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBwYXJzZXJB
cmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIodm0sIG5hbWUpOwot
ICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoaWRlbnQsIG5l
dyAobV9wYXJzZXJBcmVuYSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCB2bS0+cHJvcGVydHlOYW1l
cy0+bnVsbElkZW50aWZpZXIsCi0gICAgICAgICAgICBpbmZvLmJvZHksIG1fc291cmNlQ29kZS0+
c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNlT2Zmc2V0
LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5mby5wYXJhbWV0
ZXJzKSwgdHlwZSwgUHJvcGVydHlOb2RlOjpVbmtub3duKTsKKyAgICAgICAgU291cmNlQ29kZSBz
b3VyY2UgPSBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQs
IGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFy
dENvbHVtbik7CisgICAgICAgIEZ1bmNFeHByTm9kZSogZnVuY0V4cHIgPSBuZXcgKG1fcGFyc2Vy
QXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVu
dGlmaWVyLCBpbmZvLmJvZHksIHNvdXJjZSwgaW5mby5wYXJhbWV0ZXJzKTsKKyAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKGlkZW50LCBmdW5jRXhwciwgdHlw
ZSwgUHJvcGVydHlOb2RlOjpVbmtub3duLCBzdXBlckJpbmRpbmcpOwogICAgIH0KIAogICAgIEFy
Z3VtZW50c05vZGUqIGNyZWF0ZUFyZ3VtZW50cygpIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVu
YSkgQXJndW1lbnRzTm9kZSgpOyB9CkBAIC0zMzMsMTEgKzM0MywxMSBAQCBwdWJsaWM6CiAgICAg
QXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYXJnKSB7IHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRpb24sIGFyZyk7IH0KICAgICBBcmd1bWVudExp
c3ROb2RlKiBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MsIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgQXJndW1lbnRMaXN0Tm9kZShsb2NhdGlvbiwgYXJncywgYXJn
KTsgfQogCi0gICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVy
KiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUg
dHlwZSwgUHJvcGVydHlOb2RlOjpQdXRUeXBlIHB1dFR5cGUsIGJvb2wpCisgICAgUHJvcGVydHlO
b2RlKiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUsIEV4cHJl
c3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgUHJvcGVydHlOb2RlOjpQ
dXRUeXBlIHB1dFR5cGUsIGJvb2wsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcgPSBTdXBlckJp
bmRpbmc6Ok5vdE5lZWRlZCkKICAgICB7CiAgICAgICAgIGlmIChub2RlLT5pc0Z1bmNFeHByTm9k
ZSgpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4obm9kZSktPmJvZHko
KS0+c2V0SW5mZXJyZWROYW1lKCpwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoKnByb3BlcnR5TmFtZSwgbm9kZSwgdHlwZSwgcHV0
VHlwZSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZSgq
cHJvcGVydHlOYW1lLCBub2RlLCB0eXBlLCBwdXRUeXBlLCBzdXBlckJpbmRpbmcpOwogICAgIH0K
ICAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVByb3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBh
cnNlckFyZW5hLCBkb3VibGUgcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJv
cGVydHlOb2RlOjpUeXBlIHR5cGUsIFByb3BlcnR5Tm9kZTo6UHV0VHlwZSBwdXRUeXBlLCBib29s
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVj
dG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNv
bnN0cnVjdG9ycy5oCShyZXZpc2lvbiAxODExOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiwx
MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCisjaWYgRU5BQkxFKEVTNl9DTEFT
U19TWU5UQVgpCisgICAgaW5saW5lIFN1cGVyTm9kZTo6U3VwZXJOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24pCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCisg
ICAgeworICAgIH0KKyNlbmRpZgorCiBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9j
YXRpb24pCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKQEAgLTE1OSwxMCArMTY2LDExIEBAIGlu
bGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMKICAgICB7CiAgICAgfQogCi0g
ICAgaW5saW5lIFByb3BlcnR5Tm9kZTo6UHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImIG5h
bWUsIEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24sIFR5cGUgdHlwZSwgUHV0VHlwZSBwdXRUeXBlKQor
ICAgIGlubGluZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZShjb25zdCBJZGVudGlmaWVyJiBu
YW1lLCBFeHByZXNzaW9uTm9kZSogYXNzaWduLCBUeXBlIHR5cGUsIFB1dFR5cGUgcHV0VHlwZSwg
U3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZyA9IFN1cGVyQmluZGluZzo6Tm90TmVlZGVkKQogICAg
ICAgICA6IG1fbmFtZSgmbmFtZSkKICAgICAgICAgLCBtX2Fzc2lnbihhc3NpZ24pCiAgICAgICAg
ICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9uZWVkc1N1cGVyQmluZGluZyhzdXBlckJpbmRp
bmcgPT0gU3VwZXJCaW5kaW5nOjpOZWVkZWQpCiAgICAgICAgICwgbV9wdXRUeXBlKHB1dFR5cGUp
CiAgICAgewogICAgIH0KQEAgLTE3Miw2ICsxODAsNyBAQCBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJl
c29sdmVOb2RlKGNvbnN0IEpTCiAgICAgICAgICwgbV9leHByZXNzaW9uKG5hbWUpCiAgICAgICAg
ICwgbV9hc3NpZ24oYXNzaWduKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1f
bmVlZHNTdXBlckJpbmRpbmcoZmFsc2UpCiAgICAgICAgICwgbV9wdXRUeXBlKHB1dFR5cGUpCiAg
ICAgewogICAgIH0KQEAgLTc4NywxMSArNzk2LDExIEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVz
b2x2ZU5vZGUoY29uc3QgSlMKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIENsYXNzRXhwck5v
ZGU6OkNsYXNzRXhwck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGNvbnN0cnVjdG9yRXhwcmVzc2lvbiwg
RXhwcmVzc2lvbk5vZGUqIHBhcmVudENsYXNzRXhwcmVzc2lvbiwgUHJvcGVydHlMaXN0Tm9kZSog
aW5zdGFuY2VNZXRob2RzLCBQcm9wZXJ0eUxpc3ROb2RlKiBzdGF0aWNNZXRob2RzKQorICAgIGlu
bGluZSBDbGFzc0V4cHJOb2RlOjpDbGFzc0V4cHJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBjb25zdHJ1
Y3RvckV4cHJlc3Npb24sIEV4cHJlc3Npb25Ob2RlKiBjbGFzc0hlcml0YWdlLCBQcm9wZXJ0eUxp
c3ROb2RlKiBpbnN0YW5jZU1ldGhvZHMsIFByb3BlcnR5TGlzdE5vZGUqIHN0YXRpY01ldGhvZHMp
CiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9uYW1lKG5h
bWUpCiAgICAgICAgICwgbV9jb25zdHJ1Y3RvckV4cHJlc3Npb24oY29uc3RydWN0b3JFeHByZXNz
aW9uKQotICAgICAgICAsIG1fcGFyZW50Q2xhc3NFeHByZXNzaW9uKHBhcmVudENsYXNzRXhwcmVz
c2lvbikKKyAgICAgICAgLCBtX2NsYXNzSGVyaXRhZ2UoY2xhc3NIZXJpdGFnZSkKICAgICAgICAg
LCBtX2luc3RhbmNlTWV0aG9kcyhpbnN0YW5jZU1ldGhvZHMpCiAgICAgICAgICwgbV9zdGF0aWNN
ZXRob2RzKHN0YXRpY01ldGhvZHMpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9uIDE4MTE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsMTMgKzE2NywxNyBAQCBG
dW5jdGlvblBhcmFtZXRlcnM6On5GdW5jdGlvblBhcmFtZXRlcnMoCiAgICAgICAgIHBhdHRlcm5z
KClbaV0tPmRlcmVmKCk7CiB9CiAKLUZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUo
UGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNp
Z25lZCBlbmRDb2x1bW4sIGJvb2wgaXNJblN0cmljdENvbnRleHQpCitGdW5jdGlvbkJvZHlOb2Rl
OjpGdW5jdGlvbkJvZHlOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBz
dGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25l
ZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0
LCBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKQogICAgIDogU3RhdGVtZW50Tm9kZShl
bmRMb2NhdGlvbikKICAgICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCiAgICAgLCBtX2Vu
ZENvbHVtbihlbmRDb2x1bW4pCiAgICAgLCBtX3N0YXJ0U3RhcnRPZmZzZXQoc3RhcnRMb2NhdGlv
bi5zdGFydE9mZnNldCkKICAgICAsIG1faXNJblN0cmljdENvbnRleHQoaXNJblN0cmljdENvbnRl
eHQpCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgLCBtX2NvbnN0cnVjdG9yS2lu
ZElzRGVyaXZlZChjb25zdHJ1Y3RvcktpbmQgPT0gQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkKQor
I2VuZGlmCiB7CisgICAgVU5VU0VEX1BBUkFNKGNvbnN0cnVjdG9yS2luZCk7CiB9CiAKIHZvaWQg
RnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IFBhcmFtZXRlck5vZGUqIGZpcnN0UGFyYW1ldGVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
ZW51bSBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTgxMTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNiArMTY0LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1YnRyYWN0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzQm9vbGVhbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NwcmVhZEV4cHJlc3Npb24oKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdXBlck5vZGUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0
ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImLCBMYWJlbCosIExhYmVs
KiwgRmFsbFRocm91Z2hNb2RlKTsKIApAQCAtNDQ1LDYgKzQ0NiwxNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwogICAgIH07CiAKKyNpZiBFTkFCTEUo
RVM2X0NMQVNTX1NZTlRBWCkKKyAgICBjbGFzcyBTdXBlck5vZGUgZmluYWwgOiBwdWJsaWMgRXhw
cmVzc2lvbk5vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3VwZXJOb2RlKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGlzU3Vw
ZXJOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCkgb3ZlcnJpZGU7CisgICAgfTsKKyNlbmRpZgorCiAgICAgY2xhc3MgUmVzb2x2ZU5vZGUg
OiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVzb2x2ZU5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBzdGFydCk7CkBAIC01MDEsMTMgKzUxMywxNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgZW51bSBUeXBlIHsgQ29uc3RhbnQgPSAxLCBHZXR0ZXIgPSAyLCBTZXR0ZXIgPSA0
IH07CiAgICAgICAgIGVudW0gUHV0VHlwZSB7IFVua25vd24sIEtub3duRGlyZWN0IH07CiAKLSAg
ICAgICAgUHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIFR5
cGUsIFB1dFR5cGUpOworICAgICAgICBQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYsIEV4
cHJlc3Npb25Ob2RlKiwgVHlwZSwgUHV0VHlwZSwgU3VwZXJCaW5kaW5nKTsKICAgICAgICAgUHJv
cGVydHlOb2RlKEV4cHJlc3Npb25Ob2RlKiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiwg
VHlwZSwgUHV0VHlwZSk7Ci0gICAgICAgIAorCiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBleHBy
ZXNzaW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbjsgfQogICAgICAgICBjb25z
dCBJZGVudGlmaWVyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKLSAgICAgICAg
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgICAgIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KKyAgICAgICAgYm9v
bCBuZWVkc1N1cGVyQmluZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNTdXBlckJpbmRpbmc7
IH0KICAgICAgICAgUHV0VHlwZSBwdXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wdXRUeXBlOyB9
CiAKICAgICBwcml2YXRlOgpAQCAtNTE1LDcgKzUyOCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBjb25zdCBJZGVudGlmaWVyKiBtX25hbWU7CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBt
X2V4cHJlc3Npb247CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2Fzc2lnbjsKLSAgICAgICAg
VHlwZSBtX3R5cGU7CisgICAgICAgIHVuc2lnbmVkIG1fdHlwZSA6IDM7CisgICAgICAgIHVuc2ln
bmVkIG1fbmVlZHNTdXBlckJpbmRpbmcgOiAxOwogICAgICAgICBQdXRUeXBlIG1fcHV0VHlwZTsK
ICAgICB9OwogCkBAIC0xNTQ3LDcgKzE1NjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIHVzaW5nIFBhcnNlckFyZW5hRGVsZXRhYmxlOjpvcGVyYXRvciBuZXc7CiAK
LSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENv
bHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0KTsKKyAgICAg
ICAgRnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
c3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENvbHVtbiwg
dW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBDb25zdHJ1Y3Rvcktp
bmQpOwogCiAgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyYW1ldGVycy5nZXQoKTsgfQogCkBAIC0xNTc1LDYgKzE1ODksOSBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBpbnQgc3RhcnRTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhcnRTdGFydE9mZnNldDsgfQogICAgICAgICBib29sIGlzSW5TdHJpY3RDb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0Q29udGV4dDsgfQorI2lmIEVOQUJMRShFUzZf
Q0xBU1NfU1lOVEFYKQorICAgICAgICBib29sIGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpIHsg
cmV0dXJuIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkOyB9CisjZW5kaWYKIAogICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwpAQCAtMTU4Nyw3ICsxNjA0LDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAgICAgICAg
U291cmNlQ29kZSBtX3NvdXJjZTsKICAgICAgICAgaW50IG1fc3RhcnRTdGFydE9mZnNldDsKLSAg
ICAgICAgYm9vbCBtX2lzSW5TdHJpY3RDb250ZXh0OworICAgICAgICBib29sIG1faXNJblN0cmlj
dENvbnRleHQgOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICBib29s
IG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkIDogMTsKKyNlbmRpZgogICAgIH07CiAKICAgICBj
bGFzcyBGdW5jdGlvbk5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKQEAgLTE2NDQsNyAr
MTY2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1f
bmFtZTsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fY29uc3RydWN0b3JFeHByZXNzaW9uOwot
ICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9wYXJlbnRDbGFzc0V4cHJlc3Npb247CisgICAgICAg
IEV4cHJlc3Npb25Ob2RlKiBtX2NsYXNzSGVyaXRhZ2U7CiAgICAgICAgIFByb3BlcnR5TGlzdE5v
ZGUqIG1faW5zdGFuY2VNZXRob2RzOwogICAgICAgICBQcm9wZXJ0eUxpc3ROb2RlKiBtX3N0YXRp
Y01ldGhvZHM7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5jcHAJKHJldmlzaW9uIDE4MTE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1NSw3ICsxMjU1LDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRm9ybWFsUAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TGV4ZXJUeXBlPgotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRlciYgY29udGV4
dCkKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImIGNvbnRleHQsIENvbnN0
cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQpCiB7CiAgICAgSlNUb2tlbkxvY2F0aW9uIHN0YXJ0
TG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IHRv
a2VuQ29sdW1uKCk7CkBAIC0xMjYzLDE0ICsxMjYzLDE0IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZUZ1bmN0aW8KIAogICAgIGlmIChtYXRjaChDTE9TRUJSQUNFKSkgewogICAg
ICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOwotICAgICAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigp
LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigp
LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCksIGNvbnN0cnVjdG9yS2luZCk7
CiAgICAgfQogICAgIERlcHRoTWFuYWdlciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0
aCk7CiAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDA7CiAgICAgdHlwZW5hbWUgVHJlZUJ1aWxkZXI6
OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIoY29uc3RfY2FzdDxWTSo+KG1fdm0pLCBt
X2xleGVyLmdldCgpKTsKICAgICBmYWlsSWZGYWxzZShwYXJzZVNvdXJjZUVsZW1lbnRzKGJvZHlC
dWlsZGVyLCBDaGVja0ZvclN0cmljdE1vZGUpLCAiQ2Fubm90IHBhcnNlIGJvZHkgb2YgdGhpcyBm
dW5jdGlvbiIpOwogICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29sdW1uKCk7Ci0gICAg
cmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRva2VuTG9j
YXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpKTsKKyAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2NhdGlv
bigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCksIGNvbnN0cnVjdG9yS2lu
ZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdGb3JGdW5jdGlvbk1vZGUoRnVuY3Rp
b25QYXJzZU1vZGUgbW9kZSkKQEAgLTEyOTAsNyArMTI5MCw4IEBAIHN0YXRpYyBjb25zdCBjaGFy
KiBzdHJpbmdGb3JGdW5jdGlvbk1vZGUKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlw
ZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVxdWlyZW1l
bnRzIHJlcXVpcmVtZW50cywgRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSwgYm9vbCBuYW1lSXNJbkNv
bnRhaW5pbmdTY29wZSwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYgaW5mbykKK3Rl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VG
dW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzIHJl
cXVpcmVtZW50cywgRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSwKKyAgICBib29sIG5hbWVJc0luQ29u
dGFpbmluZ1Njb3BlLCBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBQYXJzZXJGdW5j
dGlvbkluZm88VHJlZUJ1aWxkZXI+JiBpbmZvKQogewogICAgIEF1dG9Qb3BTY29wZVJlZiBmdW5j
dGlvblNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsKICAgICBmdW5jdGlvblNjb3BlLT5zZXRJc0Z1
bmN0aW9uKCk7CkBAIC0xMzQzLDcgKzEzNDQsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IGJvb2wgUGFyc2VyCiAgICAgICAgICAgICBlbmRMb2NhdGlvbi5zdGFydE9mZnNldCAtIGVu
ZExvY2F0aW9uLmxpbmVTdGFydE9mZnNldDsKICAgICAgICAgdW5zaWduZWQgY3VycmVudExpbmVT
dGFydE9mZnNldCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAKLSAgICAg
ICAgaW5mby5ib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwg
ZW5kTG9jYXRpb24sIGluZm8uYm9keVN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBjYWNoZWRJ
bmZvLT5zdHJpY3RNb2RlKTsKKyAgICAgICAgaW5mby5ib2R5ID0gY29udGV4dC5jcmVhdGVGdW5j
dGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluZm8uYm9keVN0YXJ0Q29sdW1u
LCBib2R5RW5kQ29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlLCBjb25zdHJ1Y3RvcktpbmQp
OwogICAgICAgICAKICAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZyb21Tb3VyY2VQcm92
aWRlckNhY2hlKGNhY2hlZEluZm8pOwogICAgICAgICBmYWlsSWZGYWxzZShwb3BTY29wZShmdW5j
dGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKSwgIlBhcnNlciBl
cnJvciIpOwpAQCAtMTM2NiwxNSArMTM2NywyNSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IGJvb2wgUGFyc2VyCiAgICAgfQogICAgIG1fbGFzdEZ1bmN0aW9uTmFtZSA9IGxhc3RGdW5j
dGlvbk5hbWU7CiAgICAgUGFyc2VyU3RhdGUgb2xkU3RhdGUgPSBzYXZlU3RhdGUoKTsKLSAgICBp
bmZvLmJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0KTsKKyAgICBpbmZvLmJvZHkgPSBw
YXJzZUZ1bmN0aW9uQm9keShjb250ZXh0LCBjb25zdHJ1Y3RvcktpbmQpOwogICAgIHJlc3RvcmVT
dGF0ZShvbGRTdGF0ZSk7CiAgICAgZmFpbElmRmFsc2UoaW5mby5ib2R5LCAiQ2Fubm90IHBhcnNl
IHRoZSBib2R5IG9mIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpKTsKICAgICBj
b250ZXh0LnNldEVuZE9mZnNldChpbmZvLmJvZHksIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7
CiAgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1vZGUoKSAmJiBpbmZvLm5hbWUpIHsKKyNp
ZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobW9kZSA9
PSBGdW5jdGlvbk1vZGUgfHwgbW9kZSA9PSBNZXRob2RNb2RlKTsKKyNlbHNlCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1vZGUgPT0gRnVuY3Rpb25Nb2RlKTsKKyNlbmRpZgogICAgICAgICBzZW1h
bnRpY0ZhaWxJZlRydWUobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICppbmZvLm5h
bWUsICInIiwgaW5mby5uYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5h
bWUgaW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1fdm0tPnBy
b3BlcnR5TmFtZXMtPmV2YWwgPT0gKmluZm8ubmFtZSwgIiciLCBpbmZvLm5hbWUtPmltcGwoKSwg
IicgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwogICAgIH0K
KyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAoZnVuY3Rpb25TY29wZS0+aGFz
RGlyZWN0U3VwZXIoKSkgeworICAgICAgICBib29sIG5hbWVJc0NvbnN0cnVjdG9yID0gaW5mby5u
YW1lICYmICppbmZvLm5hbWUgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3I7Cisg
ICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShtb2RlICE9IE1ldGhvZE1vZGUgfHwgIW5hbWVJc0Nv
bnN0cnVjdG9yLCAiQ2Fubm90IGNhbGwgc3VwZXIoKSBvdXRzaWRlIG9mIGEgY2xhc3MgY29uc3Ry
dWN0b3IiKTsKKyAgICB9CisjZW5kaWYKICAgICBpbmZvLmNsb3NlQnJhY2VPZmZzZXQgPSBtX3Rv
a2VuLm1fZGF0YS5vZmZzZXQ7CiAgICAgdW5zaWduZWQgY2xvc2VCcmFjZUxpbmUgPSBtX3Rva2Vu
Lm1fZGF0YS5saW5lOwogICAgIHVuc2lnbmVkIGNsb3NlQnJhY2VMaW5lU3RhcnRPZmZzZXQgPSBt
X3Rva2VuLm1fZGF0YS5saW5lU3RhcnRPZmZzZXQ7CkBAIC0xNDE1LDcgKzE0MjYsNyBAQCB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgdW5zaWduZWQgZnVuY3Rp
b25LZXl3b3JkU3RhcnQgPSB0b2tlblN0YXJ0KCk7CiAgICAgbmV4dCgpOwogICAgIFBhcnNlckZ1
bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKLSAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5j
dGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0aW9uTW9kZSwgdHJ1ZSwg
aW5mbykpLCAiQ2Fubm90IHBhcnNlIHRoaXMgZnVuY3Rpb24iKTsKKyAgICBmYWlsSWZGYWxzZSgo
cGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0aW9uTW9k
ZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpCYXNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgdGhp
cyBmdW5jdGlvbiIpOwogICAgIGZhaWxJZkZhbHNlKGluZm8ubmFtZSwgIkZ1bmN0aW9uIHN0YXRl
bWVudHMgbXVzdCBoYXZlIGEgbmFtZSIpOwogICAgIGZhaWxJZkZhbHNlSWZTdHJpY3QoZGVjbGFy
ZVZhcmlhYmxlKGluZm8ubmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIGZ1bmN0aW9uIG5hbWVkICci
LCBpbmZvLm5hbWUtPmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKICAgICByZXR1cm4gY29u
dGV4dC5jcmVhdGVGdW5jRGVjbFN0YXRlbWVudChsb2NhdGlvbiwgaW5mbywgZnVuY3Rpb25LZXl3
b3JkU3RhcnQpOwpAQCAtMTQ2NSw4ICsxNDc2LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlQ2xhc3NFeAogICAgIGlmIChjb25zdW1lKEVYVEVORFMpKSB7CiAgICAgICAgIHBh
cmVudENsYXNzID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAgICAgZmFp
bElmRmFsc2UocGFyZW50Q2xhc3MsICJDYW5ub3QgcGFyc2UgdGhlIHBhcmVudCBjbGFzcyBuYW1l
Iik7Ci0gICAgICAgIGZhaWxXaXRoTWVzc2FnZSgiSW5oZXJpdGFuY2UgaXMgbm90IHN1cHBvcnRl
ZCB5ZXQiKTsKICAgICB9CisgICAgY29uc3QgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2lu
ZCA9IHBhcmVudENsYXNzID8gQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkIDogQ29uc3RydWN0b3JL
aW5kOjpCYXNlOwogCiAgICAgY29uc3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOQlJBQ0UsIFRyZWVC
dWlsZGVyOjpEb250QnVpbGRTdHJpbmdzLCAiRXhwZWN0ZWQgb3BlbmluZyAneycgYXQgdGhlIHN0
YXJ0IG9mIGEgY2xhc3MgYm9keSIpOwogCkBAIC0xNDk4LDExICsxNTA5LDExIEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXgKICAgICAgICAgaWYgKGlzR2V0dGVyIHx8
IGlzU2V0dGVyKSB7CiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNTdGF0aWNNZXRo
b2QsICJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShpc0dl
dHRlciA/IEdldHRlck1vZGUgOiBTZXR0ZXJNb2RlKSk7CiAgICAgICAgICAgICBuZXh0RXhwZWN0
SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3Jkcyk7Ci0gICAgICAgICAgICBw
cm9wZXJ0eSA9IHBhcnNlR2V0dGVyU2V0dGVyKGNvbnRleHQsIGFsd2F5c1N0cmljdEluc2lkZUNs
YXNzLCBpc0dldHRlciA/IFByb3BlcnR5Tm9kZTo6R2V0dGVyIDogUHJvcGVydHlOb2RlOjpTZXR0
ZXIsIG1ldGhvZFN0YXJ0KTsKKyAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VHZXR0ZXJTZXR0
ZXIoY29udGV4dCwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xhc3MsIGlzR2V0dGVyID8gUHJvcGVydHlO
b2RlOjpHZXR0ZXIgOiBQcm9wZXJ0eU5vZGU6OlNldHRlciwgbWV0aG9kU3RhcnQsIFN1cGVyQmlu
ZGluZzo6TmVlZGVkKTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90
IHBhcnNlIHRoaXMgbWV0aG9kIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQYXJz
ZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IG1ldGhvZEluZm87Ci0gICAgICAgICAgICBmYWls
SWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1
bmN0aW9uTW9kZSwgZmFsc2UsIG1ldGhvZEluZm8pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIG1ldGhv
ZCIpOworICAgICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQs
IEZ1bmN0aW9uTmVlZHNOYW1lLCBNZXRob2RNb2RlLCBmYWxzZSwgY29uc3RydWN0b3JLaW5kLCBt
ZXRob2RJbmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKICAgICAgICAgICAgIGZh
aWxJZkZhbHNlKG1ldGhvZEluZm8ubmFtZSwgIm1ldGhvZCBtdXN0IGhhdmUgYSBuYW1lIik7CiAg
ICAgICAgICAgICBmYWlsSWZGYWxzZShkZWNsYXJlVmFyaWFibGUobWV0aG9kSW5mby5uYW1lKSwg
IkNhbm5vdCBkZWNsYXJlIGEgbWV0aG9kIG5hbWVkICciLCBtZXRob2RJbmZvLm5hbWUtPmltcGwo
KSwgIiciKTsKIApAQCAtMTUyMCw3ICsxNTMxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlQ2xhc3NFeAogICAgICAgICAgICAgLy8gRklYTUU6IFN5bnRheCBlcnJvciB3aGVu
IHN1cGVyKCkgaXMgY2FsbGVkCiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNTdGF0
aWNNZXRob2QgJiYgKm1ldGhvZEluZm8ubmFtZSA9PSBwcm9wZXJ0eU5hbWVzLnByb3RvdHlwZSwK
ICAgICAgICAgICAgICAgICAiQ2Fubm90IGRlY2xhcmUgYSBzdGF0aWMgbWV0aG9kIG5hbWVkICdw
cm90b3R5cGUnIik7Ci0gICAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQuY3JlYXRlUHJvcGVy
dHkobWV0aG9kSW5mby5uYW1lLCBtZXRob2QsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQsIFByb3Bl
cnR5Tm9kZTo6VW5rbm93biwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xhc3MpOworICAgICAgICAgICAg
cHJvcGVydHkgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KG1ldGhvZEluZm8ubmFtZSwgbWV0aG9k
LCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIGFsd2F5c1N0
cmljdEluc2lkZUNsYXNzLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBUcmVlUHJvcGVydHlMaXN0JiB0YWlsID0gaXNTdGF0aWNNZXRob2QgPyBzdGF0aWNNZXRo
b2RzVGFpbCA6IGluc3RhbmNlTWV0aG9kc1RhaWw7CkBAIC0yMDA3LDEzICsyMDE4LDEzIEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICBKU1Rva2VuTG9jYXRp
b24gbWV0aG9kTG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICB1bnNpZ25lZCBtZXRob2RT
dGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+
IG1ldGhvZEluZm87Ci0gICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQs
IEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIE1ldGhvZE1vZGUsIGZhbHNlLCBtZXRob2RJbmZvKSks
ICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKKyAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5j
dGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgTWV0aG9kTW9kZSwgZmFs
c2UsIENvbnN0cnVjdG9yS2luZDo6QmFzZSwgbWV0aG9kSW5mbykpLCAiQ2Fubm90IHBhcnNlIHRo
aXMgbWV0aG9kIik7CiAgICAgbWV0aG9kSW5mby5uYW1lID0gbWV0aG9kTmFtZTsKICAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkV4cHIobWV0aG9kTG9jYXRpb24sIG1ldGhvZEluZm8s
IG1ldGhvZFN0YXJ0KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUdldHRlclNldHRlcihUcmVlQnVpbGRlciYgY29udGV4dCwgYm9vbCBzdHJpY3QsIFByb3Bl
cnR5Tm9kZTo6VHlwZSB0eXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KQor
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgUGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlR2V0dGVyU2V0dGVyKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBib29sIHN0cmljdCwg
UHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZz
ZXQsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcpCiB7CiAgICAgY29uc3QgSWRlbnRpZmllciog
c3RyaW5nUHJvcGVydHlOYW1lID0gMDsKICAgICBkb3VibGUgbnVtZXJpY1Byb3BlcnR5TmFtZSA9
IDA7CkBAIC0yMDI4LDE0ICsyMDM5LDE0IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZVByb3BlcnQKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87CiAg
ICAgaWYgKHR5cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIpIHsKICAgICAgICAgZmFpbElmRmFs
c2UobWF0Y2goT1BFTlBBUkVOKSwgIkV4cGVjdGVkIGEgcGFyYW1ldGVyIGxpc3QgZm9yIGdldHRl
ciBkZWZpbml0aW9uIik7Ci0gICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhj
b250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBHZXR0ZXJNb2RlLCBmYWxzZSwgaW5mbykp
LCAiQ2Fubm90IHBhcnNlIGdldHRlciBkZWZpbml0aW9uIik7CisgICAgICAgIGZhaWxJZkZhbHNl
KChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBHZXR0
ZXJNb2RlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpCYXNlLCBpbmZvKSksICJDYW5ub3QgcGFy
c2UgZ2V0dGVyIGRlZmluaXRpb24iKTsKICAgICB9IGVsc2UgewogICAgICAgICBmYWlsSWZGYWxz
ZShtYXRjaChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIgbGlzdCBmb3Igc2V0dGVy
IGRlZmluaXRpb24iKTsKLSAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNv
bnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNldHRlck1vZGUsIGZhbHNlLCBpbmZvKSks
ICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRpb24iKTsKKyAgICAgICAgZmFpbElmRmFsc2Uo
KHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNldHRl
ck1vZGUsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJz
ZSBzZXR0ZXIgZGVmaW5pdGlvbiIpOwogICAgIH0KICAgICBpZiAoc3RyaW5nUHJvcGVydHlOYW1l
KQotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGxv
Y2F0aW9uLCB0eXBlLCBzdHJpY3QsIHN0cmluZ1Byb3BlcnR5TmFtZSwgaW5mbywgZ2V0dGVyT3JT
ZXR0ZXJTdGFydE9mZnNldCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlR2V0dGVyT3JTZXR0
ZXJQcm9wZXJ0eShjb25zdF9jYXN0PFZNKj4obV92bSksIG1fcGFyc2VyQXJlbmEsIGxvY2F0aW9u
LCB0eXBlLCBzdHJpY3QsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIGluZm8sIGdldHRlck9yU2V0dGVy
U3RhcnRPZmZzZXQpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRl
clByb3BlcnR5KGxvY2F0aW9uLCB0eXBlLCBzdHJpY3QsIHN0cmluZ1Byb3BlcnR5TmFtZSwgaW5m
bywgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgc3VwZXJCaW5kaW5nKTsKKyAgICByZXR1cm4g
Y29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0X2Nhc3Q8Vk0qPihtX3Zt
KSwgbV9wYXJzZXJBcmVuYSwgbG9jYXRpb24sIHR5cGUsIHN0cmljdCwgbnVtZXJpY1Byb3BlcnR5
TmFtZSwgaW5mbywgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgc3VwZXJCaW5kaW5nKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTIyMjAsNyArMjIzMSw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgbmV4dCgpOwog
ICAgICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87CiAgICAgICAgIGlu
Zm8ubmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKLSAgICAgICAg
ZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJl
bWVudHMsIEZ1bmN0aW9uTW9kZSwgZmFsc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlv
biBleHByZXNzaW9uIik7CisgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhj
b250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBGdW5jdGlvbk1vZGUsIGZhbHNlLCBDb25z
dHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBleHByZXNz
aW9uIik7CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihsb2NhdGlv
biwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwogICAgIH0KICNpZiBFTkFCTEUoRVM2X0NM
QVNTX1NZTlRBWCkKQEAgLTIzNzAsNyArMjM4MSwxNiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIG5ld0NvdW50Kys7CiAgICAgfQogCisjaWYgRU5B
QkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1hdGNoKFNVUEVS
KTsKKyAgICBpZiAoYmFzZUlzU3VwZXIpIHsKKyAgICAgICAgYmFzZSA9IGNvbnRleHQuc3VwZXJF
eHByKGxvY2F0aW9uKTsKKyAgICAgICAgbmV4dCgpOworICAgIH0gZWxzZQorICAgICAgICBiYXNl
ID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKKyNlbHNlCiAgICAgYmFzZSA9IHBh
cnNlUHJpbWFyeUV4cHJlc3Npb24oY29udGV4dCk7CisjZW5kaWYKICAgICAKICAgICBmYWlsSWZG
YWxzZShiYXNlLCAiQ2Fubm90IHBhcnNlIGJhc2UgZXhwcmVzc2lvbiIpOwogICAgIHdoaWxlICh0
cnVlKSB7CkBAIC0yNDAyLDYgKzI0MjIsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzcwogICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJlc3Npb25F
bmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgIFRyZWVBcmd1bWVu
dHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCwgQWxsb3dTcHJlYWQpOwogICAg
ICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBjYWxsIGFy
Z3VtZW50cyIpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICAgICAgICAg
IGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnNl
dEhhc0RpcmVjdFN1cGVyKCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBiYXNlID0gY29udGV4
dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShzdGFydExvY2F0aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4
cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291bnQ7CkBA
IC0yNDE5LDggKzI0NDMsMTQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhw
cmVzcwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgZ290byBlbmRNZW1iZXJFeHByZXNz
aW9uOwogICAgICAgICB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIGJh
c2VJc1N1cGVyID0gZmFsc2U7CisjZW5kaWYKICAgICB9CiBlbmRNZW1iZXJFeHByZXNzaW9uOgor
I2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIHNlbWFudGljRmFpbElmVHJ1ZShiYXNl
SXNTdXBlciAmJiAhbmV3Q291bnQsICJDYW5ub3QgcmVmZXJlbmNlIHN1cGVyIik7CisjZW5kaWYK
ICAgICB3aGlsZSAobmV3Q291bnQtLSkKICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlTmV3
RXhwcihsb2NhdGlvbiwgYmFzZSwgZXhwcmVzc2lvblN0YXJ0LCBsYXN0VG9rZW5FbmRQb3NpdGlv
bigpKTsKICAgICByZXR1cm4gYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuaAkocmV2aXNpb24gMTgxMTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMyw5IEBAIHN0cnVjdCBTY29w
ZSB7CiAgICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKGZhbHNlKQogICAgICAgICAsIG1fdXNl
c0V2YWwoZmFsc2UpCiAgICAgICAgICwgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uKGZhbHNlKQorI2lm
IEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICAsIG1faGFzRGlyZWN0U3VwZXIoZmFs
c2UpCisjZW5kaWYKICAgICAgICAgLCBtX2FsbG93c05ld0RlY2xzKHRydWUpCiAgICAgICAgICwg
bV9zdHJpY3RNb2RlKHN0cmljdE1vZGUpCiAgICAgICAgICwgbV9pc0Z1bmN0aW9uKGlzRnVuY3Rp
b24pCkBAIC0xMjgsNiArMTMxLDkgQEAgc3RydWN0IFNjb3BlIHsKICAgICAgICAgLCBtX3NoYWRv
d3NBcmd1bWVudHMocmhzLm1fc2hhZG93c0FyZ3VtZW50cykKICAgICAgICAgLCBtX3VzZXNFdmFs
KHJocy5tX3VzZXNFdmFsKQogICAgICAgICAsIG1fbmVlZHNGdWxsQWN0aXZhdGlvbihyaHMubV9u
ZWVkc0Z1bGxBY3RpdmF0aW9uKQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAg
ICAsIG1faGFzRGlyZWN0U3VwZXIocmhzLm1faGFzRGlyZWN0U3VwZXIpCisjZW5kaWYKICAgICAg
ICAgLCBtX2FsbG93c05ld0RlY2xzKHJocy5tX2FsbG93c05ld0RlY2xzKQogICAgICAgICAsIG1f
c3RyaWN0TW9kZShyaHMubV9zdHJpY3RNb2RlKQogICAgICAgICAsIG1faXNGdW5jdGlvbihyaHMu
bV9pc0Z1bmN0aW9uKQpAQCAtMjYzLDYgKzI2OSwxMSBAQCBzdHJ1Y3QgU2NvcGUgewogCiAgICAg
dm9pZCBzZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCkgeyBtX25lZWRzRnVsbEFjdGl2YXRpb24gPSB0
cnVlOyB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIGhhc0RpcmVj
dFN1cGVyKCkgeyByZXR1cm4gbV9oYXNEaXJlY3RTdXBlcjsgfQorICAgIHZvaWQgc2V0SGFzRGly
ZWN0U3VwZXIoKSB7IG1faGFzRGlyZWN0U3VwZXIgPSB0cnVlOyB9CisjZW5kaWYKKwogICAgIGJv
b2wgY29sbGVjdEZyZWVWYXJpYWJsZXMoU2NvcGUqIG5lc3RlZFNjb3BlLCBib29sIHNob3VsZFRy
YWNrQ2xvc2VkVmFyaWFibGVzKQogICAgIHsKICAgICAgICAgaWYgKG5lc3RlZFNjb3BlLT5tX3Vz
ZXNFdmFsKQpAQCAtMzU2LDYgKzM2Nyw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3NoYWRvd3NB
cmd1bWVudHMgOiAxOwogICAgIGJvb2wgbV91c2VzRXZhbCA6IDE7CiAgICAgYm9vbCBtX25lZWRz
RnVsbEFjdGl2YXRpb24gOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGJv
b2wgbV9oYXNEaXJlY3RTdXBlciA6IDE7CisjZW5kaWYKICAgICBib29sIG1fYWxsb3dzTmV3RGVj
bHMgOiAxOwogICAgIGJvb2wgbV9zdHJpY3RNb2RlIDogMTsKICAgICBib29sIG1faXNGdW5jdGlv
biA6IDE7CkBAIC03MzgsOCArNzUyLDggQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUFyZ3VtZW50cyBwYXJzZUFyZ3VtZW50cyhU
cmVlQnVpbGRlciYsIFNwcmVhZE1vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVByb3BlcnR5IHBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXImLCBib29sIHN0cmljdCk7
CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBwYXJzZVBy
b3BlcnR5TWV0aG9kKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiBtZXRo
b2ROYW1lKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBw
YXJzZUdldHRlclNldHRlcihUcmVlQnVpbGRlciYsIGJvb2wgc3RyaWN0LCBQcm9wZXJ0eU5vZGU6
OlR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOwotICAgIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNl
RnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlUHJvcGVydHkgcGFyc2VHZXR0ZXJTZXR0ZXIoVHJlZUJ1aWxkZXImLCBib29sIHN0
cmljdCwgUHJvcGVydHlOb2RlOjpUeXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zm
c2V0LCBTdXBlckJpbmRpbmcgPSBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCk7CisgICAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5jdGlvbkJvZHkgcGFy
c2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImLCBDb25zdHJ1Y3RvcktpbmQpOwogICAgIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1ldGVy
TGlzdCBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXImKTsKICAgICBlbnVtIFZhckRl
Y2xhcmF0aW9uTGlzdENvbnRleHQgeyBGb3JMb29wQ29udGV4dCwgVmFyRGVjbGFyYXRpb25Db250
ZXh0IH07CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBw
YXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFyYXRpb25zLCBU
cmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuJiBsYXN0UGF0dGVybiwgVHJlZUV4cHJlc3Npb24mIGxh
c3RJbml0aWFsaXplciwgSlNUZXh0UG9zaXRpb24mIGlkZW50U3RhcnQsIEpTVGV4dFBvc2l0aW9u
JiBpbml0U3RhcnQsIEpTVGV4dFBvc2l0aW9uJiBpbml0RW5kLCBWYXJEZWNsYXJhdGlvbkxpc3RD
b250ZXh0KTsKQEAgLTc0OSw3ICs3NjMsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gcGFy
c2VEZWNvbnN0cnVjdGlvblBhdHRlcm4oVHJlZUJ1aWxkZXImLCBEZWNvbnN0cnVjdGlvbktpbmQs
IGludCBkZXB0aCA9IDApOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJf
SU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gdHJ5UGFyc2VEZWNvbnN0cnVjdGlvblBh
dHRlcm5FeHByZXNzaW9uKFRyZWVCdWlsZGVyJik7CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVy
JiwgRnVuY3Rpb25SZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlLCBib29sIG5hbWVJc0lu
Q29udGFpbmluZ1Njb3BlLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+Jik7CisgICAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1bmN0
aW9uSW5mbyhUcmVlQnVpbGRlciYsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNl
TW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgQ29uc3RydWN0b3JLaW5kLCBQYXJz
ZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+Jik7CiAjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5U
QVgpCiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgVHJlZUNs
YXNzRXhwcmVzc2lvbiBwYXJzZUNsYXNzKFRyZWVCdWlsZGVyJiwgRnVuY3Rpb25SZXF1aXJlbWVu
dHMpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1v
ZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJN
b2Rlcy5oCShyZXZpc2lvbiAxODExOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlck1vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiBlbnVtIEpTUGFyc2VyU3RyaWN0bmVzcyB7IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VC
dWlsdGluLCBKU1BhcnNlU3RyaWN0IH07CiBlbnVtIEpTUGFyc2VyTW9kZSB7IEpTUGFyc2VQcm9n
cmFtQ29kZSwgSlNQYXJzZUZ1bmN0aW9uQ29kZSB9OwogCitlbnVtIGNsYXNzIENvbnN0cnVjdG9y
S2luZCB7IEJhc2UsIERlcml2ZWQgfTsKK2VudW0gY2xhc3MgU3VwZXJCaW5kaW5nIHsgTmVlZGVk
LCBOb3ROZWVkZWQgfTsKKwogZW51bSBQcm9maWxlck1vZGUgeyBQcm9maWxlck9mZiwgUHJvZmls
ZXJPbiB9OwogZW51bSBEZWJ1Z2dlck1vZGUgeyBEZWJ1Z2dlck9mZiwgRGVidWdnZXJPbiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAko
cmV2aXNpb24gMTgxMTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhD
aGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDEwIEBAIHB1YmxpYzoKICAgICBl
bnVtIHsgTm9uZUV4cHIgPSAwLAogICAgICAgICBSZXNvbHZlRXZhbEV4cHIsIFJlc29sdmVFeHBy
LCBJbnRlZ2VyRXhwciwgRG91YmxlRXhwciwgU3RyaW5nRXhwciwKICAgICAgICAgVGhpc0V4cHIs
IE51bGxFeHByLCBCb29sRXhwciwgUmVnRXhwRXhwciwgT2JqZWN0TGl0ZXJhbEV4cHIsCi0gICAg
ICAgIEZ1bmN0aW9uRXhwciwgQ2xhc3NFeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwgQ2FsbEV4
cHIsCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIENsYXNzRXhwciwgU3Vw
ZXJFeHByLCBTdXBlckJyYWNrZXRFeHByLCBTdXBlckRvdEV4cHIsCisjZW5kaWYKKyAgICAgICAg
RnVuY3Rpb25FeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwgQ2FsbEV4cHIsCiAgICAgICAgIE5l
d0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4cHIsCiAgICAgICAg
IENvbmRpdGlvbmFsRXhwciwgQXNzaWdubWVudEV4cHIsIFR5cGVvZkV4cHIsCiAgICAgICAgIERl
bGV0ZUV4cHIsIEFycmF5TGl0ZXJhbEV4cHIsIEJpbmRpbmdEZWNvbnN0cnVjdGlvbiwKQEAgLTE0
Niw2ICsxNDksOSBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlVW5hcnlQbHVz
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4
cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVWb2lkKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0KICAgICBFeHByZXNzaW9u
VHlwZSB0aGlzRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBUaGlzRXhwcjsg
fQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIEV4cHJlc3Npb25UeXBlIHN1cGVy
RXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBTdXBlckV4cHI7IH0KKyNlbmRp
ZgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgY29uc3QgSWRlbnRpZmllciosIGludCkgeyByZXR1cm4gUmVzb2x2ZUV4cHI7IH0KICAgICBF
eHByZXNzaW9uVHlwZSBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYp
IHsgcmV0dXJuIE9iamVjdExpdGVyYWxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRl
T2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQpIHsgcmV0dXJuIE9iamVj
dExpdGVyYWxFeHByOyB9CkBAIC0xNjgsMTQgKzE3NCwxNCBAQCBwdWJsaWM6CiAgICAgQ2xhc3NF
eHByZXNzaW9uIGNyZWF0ZUNsYXNzRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJ
ZGVudGlmaWVyJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBQcm9wZXJ0eUxpc3Qs
IFByb3BlcnR5TGlzdCkgeyByZXR1cm4gQ2xhc3NFeHByOyB9CiAjZW5kaWYKICAgICBFeHByZXNz
aW9uVHlwZSBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
UGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgaW50KSB7IHJldHVybiBGdW5jdGlv
bkV4cHI7IH0KLSAgICBpbnQgY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBib29sKSB7IHJldHVybiBGdW5j
dGlvbkJvZHlSZXN1bHQ7IH0KKyAgICBpbnQgY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBib29sLCBDb25z
dHJ1Y3RvcktpbmQpIHsgcmV0dXJuIEZ1bmN0aW9uQm9keVJlc3VsdDsgfQogICAgIHZvaWQgc2V0
RnVuY3Rpb25OYW1lU3RhcnQoaW50LCBpbnQpIHsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHMo
KSB7IHJldHVybiBBcmd1bWVudHNSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzKGlu
dCkgeyByZXR1cm4gQXJndW1lbnRzUmVzdWx0OyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRl
U3ByZWFkRXhwcmVzc2lvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwg
aW50LCBpbnQsIGludCkgeyByZXR1cm4gU3ByZWFkRXhwcjsgfQogICAgIGludCBjcmVhdGVBcmd1
bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4gQXJndW1lbnRz
TGlzdFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIGludCwgaW50KSB7IHJldHVybiBBcmd1bWVudHNMaXN0UmVzdWx0OyB9Ci0gICAg
UHJvcGVydHkgY3JlYXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciogbmFtZSwgaW50LCBQcm9w
ZXJ0eU5vZGU6OlR5cGUgdHlwZSwgUHJvcGVydHlOb2RlOjpQdXRUeXBlLCBib29sIGNvbXBsZXRl
KQorICAgIFByb3BlcnR5IGNyZWF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGlu
dCwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFByb3BlcnR5Tm9kZTo6UHV0VHlwZSwgYm9vbCBj
b21wbGV0ZSwgU3VwZXJCaW5kaW5nID0gU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQpCiAgICAgewog
ICAgICAgICBpZiAoIWNvbXBsZXRlKQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUp
OwpAQCAtMjMwLDE0ICsyMzYsMTQgQEAgcHVibGljOgogICAgIGludCBjcmVhdGVEZWJ1Z2dlcihj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0
OyB9CiAgICAgaW50IGNyZWF0ZUNvbnN0U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGludCBhcHBl
bmRDb25zdERlY2woY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBjb25zdCBJZGVudGlmaWVy
KiwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KLSAgICBQcm9wZXJ0eSBjcmVhdGVH
ZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3BlcnR5Tm9k
ZTo6VHlwZSB0eXBlLCBib29sIHN0cmljdCwgY29uc3QgSWRlbnRpZmllciogbmFtZSwgY29uc3Qg
UGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgdW5zaWduZWQpCisgICAgUHJvcGVy
dHkgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQ
cm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBzdHJpY3QsIGNvbnN0IElkZW50aWZpZXIqIG5h
bWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIHVuc2lnbmVkLCBT
dXBlckJpbmRpbmcpCiAgICAgewogICAgICAgICBBU1NFUlQobmFtZSk7CiAgICAgICAgIGlmICgh
c3RyaWN0KQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwogICAgICAgICByZXR1
cm4gUHJvcGVydHkobmFtZSwgdHlwZSk7CiAgICAgfQotICAgIFByb3BlcnR5IGNyZWF0ZUdldHRl
ck9yU2V0dGVyUHJvcGVydHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sIHN0cmljdCwg
ZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIHVu
c2lnbmVkKQorICAgIFByb3BlcnR5IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoVk0qIHZt
LCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3Bl
cnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sIHN0cmljdCwgZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNl
ckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIHVuc2lnbmVkLCBTdXBlckJpbmRpbmcpCiAg
ICAgewogICAgICAgICBpZiAoIXN0cmljdCkKICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSh0
eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTgxMTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDcgKzI2
MSw4IEBACiAgICAgbWFjcm8oaXNGaW5pdGUpIFwKICAgICBtYWNybyhUeXBlRXJyb3IpIFwKICAg
ICBtYWNybyh1bmRlZmluZWQpIFwKLSAgICBtYWNybyhCdWlsdGluTG9nKQorICAgIG1hY3JvKEJ1
aWx0aW5Mb2cpIFwKKyAgICBtYWNybyhob21lT2JqZWN0KQogCiBuYW1lc3BhY2UgSlNDIHsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJl
dmlzaW9uIDE4MTE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDY3LDcgKzQ2Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgY2xlYXJDb2RlKCk7CiAKLSAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNv
bnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgp
LCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlKTsgfQorICAgIEV4ZWN1dGFibGVJbmZvIGV4
ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0
aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsg
fQogCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gbV91bmxpbmtlZEV2YWxD
b2RlQmxvY2stPm51bVZhcmlhYmxlcygpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZGdW5jdGlv
bkRlY2xzKCkgeyByZXR1cm4gbV91bmxpbmtlZEV2YWxDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rp
b25EZWNscygpOyB9CkBAIC01MjIsNyArNTIyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVh
ckNvZGUoKTsKIAotICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3Ry
aWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UpOyB9CisgICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJs
ZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwg
dXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSwgZmFsc2UpOyB9CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvaXJjL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9pcmMvX19pbml0X18ucHkJKHJldmlz
aW9uIDE4MTE5MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9pcmMvX19p
bml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEgKzAsMCBAQAotIyBSZXF1aXJlZCBmb3IgUHl0
aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvaXJjL2lyY2JvdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvaXJjL2lyY2JvdC5weQkocmV2aXNp
b24gMTgxMTkzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L2lyYy9pcmNi
b3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNDM4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAx
OTk5LS0yMDAyICBKb2VsIFJvc2RhaGwKLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0jIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyB2ZXJzaW9u
IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSMgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u
LCBNQSAwMjExMS0xMzA3ICBVU0EKLSMKLSMgSm9lbCBSb3NkYWhsIDxqb2VsQHJvc2RhaGwubmV0
PgotIwotIyAkSWQ6IGlyY2JvdC5weSx2IDEuMjMgMjAwOC8wOS8xMSAwNzozODozMCBrZWx0dXMg
RXhwICQKLQotIiIiaXJjYm90IC0tIFNpbXBsZSBJUkMgYm90IGxpYnJhcnkuCi0KLVRoaXMgbW9k
dWxlIGNvbnRhaW5zIGEgc2luZ2xlLXNlcnZlciBJUkMgYm90IGNsYXNzIHRoYXQgY2FuIGJlIHVz
ZWQgdG8KLXdyaXRlIHNpbXBsZXIgYm90cy4KLSIiIgotCi1pbXBvcnQgc3lzCi1mcm9tIFVzZXJE
aWN0IGltcG9ydCBVc2VyRGljdAotCi1mcm9tIGlyY2xpYiBpbXBvcnQgU2ltcGxlSVJDQ2xpZW50
Ci1mcm9tIGlyY2xpYiBpbXBvcnQgbm1fdG9fbiwgaXJjX2xvd2VyLCBhbGxfZXZlbnRzCi1mcm9t
IGlyY2xpYiBpbXBvcnQgcGFyc2VfY2hhbm5lbF9tb2RlcywgaXNfY2hhbm5lbAotZnJvbSBpcmNs
aWIgaW1wb3J0IFNlcnZlckNvbm5lY3Rpb25FcnJvcgotCi1jbGFzcyBTaW5nbGVTZXJ2ZXJJUkNC
b3QoU2ltcGxlSVJDQ2xpZW50KToKLSAgICAiIiJBIHNpbmdsZS1zZXJ2ZXIgSVJDIGJvdCBjbGFz
cy4KLQotICAgIFRoZSBib3QgdHJpZXMgdG8gcmVjb25uZWN0IGlmIGl0IGlzIGRpc2Nvbm5lY3Rl
ZC4KLQotICAgIFRoZSBib3Qga2VlcHMgdHJhY2sgb2YgdGhlIGNoYW5uZWxzIGl0IGhhcyBqb2lu
ZWQsIHRoZSBvdGhlcgotICAgIGNsaWVudHMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgY2hhbm5l
bHMgYW5kIHdoaWNoIG9mIHRob3NlIHRoYXQKLSAgICBoYXZlIG9wZXJhdG9yIG9yIHZvaWNlIG1v
ZGVzLiAgVGhlICJkYXRhYmFzZSIgaXMga2VwdCBpbiB0aGUKLSAgICBzZWxmLmNoYW5uZWxzIGF0
dHJpYnV0ZSwgd2hpY2ggaXMgYW4gSVJDRGljdCBvZiBDaGFubmVscy4KLSAgICAiIiIKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgc2VydmVyX2xpc3QsIG5pY2tuYW1lLCByZWFsbmFtZSwgcmVjb25u
ZWN0aW9uX2ludGVydmFsPTYwKToKLSAgICAgICAgIiIiQ29uc3RydWN0b3IgZm9yIFNpbmdsZVNl
cnZlcklSQ0JvdCBvYmplY3RzLgotCi0gICAgICAgIEFyZ3VtZW50czoKLQotICAgICAgICAgICAg
c2VydmVyX2xpc3QgLS0gQSBsaXN0IG9mIHR1cGxlcyAoc2VydmVyLCBwb3J0KSB0aGF0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIHdoaWNoIHNlcnZlcnMgdGhlIGJvdCBzaG91
bGQgdHJ5IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0IHRvLgotCi0gICAg
ICAgICAgICBuaWNrbmFtZSAtLSBUaGUgYm90J3Mgbmlja25hbWUuCi0KLSAgICAgICAgICAgIHJl
YWxuYW1lIC0tIFRoZSBib3QncyByZWFsbmFtZS4KLQotICAgICAgICAgICAgcmVjb25uZWN0aW9u
X2ludGVydmFsIC0tIEhvdyBsb25nIHRoZSBib3Qgc2hvdWxkIHdhaXQKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdHJ5aW5nIHRvIHJlY29ubmVjdC4KLQotICAg
ICAgICAgICAgZGNjX2Nvbm5lY3Rpb25zIC0tIEEgbGlzdCBvZiBpbml0aWF0ZWQvYWNjZXB0ZWQg
RENDCi0gICAgICAgICAgICBjb25uZWN0aW9ucy4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgU2lt
cGxlSVJDQ2xpZW50Ll9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuY2hhbm5lbHMgPSBJUkNE
aWN0KCkKLSAgICAgICAgc2VsZi5zZXJ2ZXJfbGlzdCA9IHNlcnZlcl9saXN0Ci0gICAgICAgIGlm
IG5vdCByZWNvbm5lY3Rpb25faW50ZXJ2YWwgb3IgcmVjb25uZWN0aW9uX2ludGVydmFsIDwgMDoK
LSAgICAgICAgICAgIHJlY29ubmVjdGlvbl9pbnRlcnZhbCA9IDIqKjMxCi0gICAgICAgIHNlbGYu
cmVjb25uZWN0aW9uX2ludGVydmFsID0gcmVjb25uZWN0aW9uX2ludGVydmFsCi0KLSAgICAgICAg
c2VsZi5fbmlja25hbWUgPSBuaWNrbmFtZQotICAgICAgICBzZWxmLl9yZWFsbmFtZSA9IHJlYWxu
YW1lCi0gICAgICAgIGZvciBpIGluIFsiZGlzY29ubmVjdCIsICJqb2luIiwgImtpY2siLCAibW9k
ZSIsCi0gICAgICAgICAgICAgICAgICAibmFtcmVwbHkiLCAibmljayIsICJwYXJ0IiwgInF1aXQi
XToKLSAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbi5hZGRfZ2xvYmFsX2hhbmRsZXIoaSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihzZWxm
LCAiX29uXyIgKyBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLTEwKQotICAgIGRlZiBfY29ubmVjdGVkX2NoZWNrZXIoc2VsZik6Ci0gICAgICAgICIi
IltJbnRlcm5hbF0iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuY29ubmVjdGlvbi5pc19jb25uZWN0
ZWQoKToKLSAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbi5leGVjdXRlX2RlbGF5ZWQoc2VsZi5y
ZWNvbm5lY3Rpb25faW50ZXJ2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZF9jaGVja2VyKQotICAgICAgICAgICAgc2VsZi5qdW1w
X3NlcnZlcigpCi0KLSAgICBkZWYgX2Nvbm5lY3Qoc2VsZik6Ci0gICAgICAgICIiIltJbnRlcm5h
bF0iIiIKLSAgICAgICAgcGFzc3dvcmQgPSBOb25lCi0gICAgICAgIGlmIGxlbihzZWxmLnNlcnZl
cl9saXN0WzBdKSA+IDI6Ci0gICAgICAgICAgICBwYXNzd29yZCA9IHNlbGYuc2VydmVyX2xpc3Rb
MF1bMl0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5jb25uZWN0KHNlbGYuc2VydmVy
X2xpc3RbMF1bMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfbGlzdFsw
XVsxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9uaWNrbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXNzd29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpcmNu
YW1lPXNlbGYuX3JlYWxuYW1lKQotICAgICAgICBleGNlcHQgU2VydmVyQ29ubmVjdGlvbkVycm9y
OgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIF9vbl9kaXNjb25uZWN0KHNlbGYsIGMsIGUp
OgotICAgICAgICAiIiJbSW50ZXJuYWxdIiIiCi0gICAgICAgIHNlbGYuY2hhbm5lbHMgPSBJUkNE
aWN0KCkKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uLmV4ZWN1dGVfZGVsYXllZChzZWxmLnJlY29u
bmVjdGlvbl9pbnRlcnZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9jb25uZWN0ZWRfY2hlY2tlcikKLQotICAgIGRlZiBfb25fam9pbihzZWxmLCBjLCBl
KToKLSAgICAgICAgIiIiW0ludGVybmFsXSIiIgotICAgICAgICBjaCA9IGUudGFyZ2V0KCkKLSAg
ICAgICAgbmljayA9IG5tX3RvX24oZS5zb3VyY2UoKSkKLSAgICAgICAgaWYgbmljayA9PSBjLmdl
dF9uaWNrbmFtZSgpOgotICAgICAgICAgICAgc2VsZi5jaGFubmVsc1tjaF0gPSBDaGFubmVsKCkK
LSAgICAgICAgc2VsZi5jaGFubmVsc1tjaF0uYWRkX3VzZXIobmljaykKLQotICAgIGRlZiBfb25f
a2ljayhzZWxmLCBjLCBlKToKLSAgICAgICAgIiIiW0ludGVybmFsXSIiIgotICAgICAgICBuaWNr
ID0gZS5hcmd1bWVudHMoKVswXQotICAgICAgICBjaGFubmVsID0gZS50YXJnZXQoKQotCi0gICAg
ICAgIGlmIG5pY2sgPT0gYy5nZXRfbmlja25hbWUoKToKLSAgICAgICAgICAgIGRlbCBzZWxmLmNo
YW5uZWxzW2NoYW5uZWxdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmNoYW5uZWxz
W2NoYW5uZWxdLnJlbW92ZV91c2VyKG5pY2spCi0KLSAgICBkZWYgX29uX21vZGUoc2VsZiwgYywg
ZSk6Ci0gICAgICAgICIiIltJbnRlcm5hbF0iIiIKLSAgICAgICAgbW9kZXMgPSBwYXJzZV9jaGFu
bmVsX21vZGVzKCIgIi5qb2luKGUuYXJndW1lbnRzKCkpKQotICAgICAgICB0ID0gZS50YXJnZXQo
KQotICAgICAgICBpZiBpc19jaGFubmVsKHQpOgotICAgICAgICAgICAgY2ggPSBzZWxmLmNoYW5u
ZWxzW3RdCi0gICAgICAgICAgICBmb3IgbW9kZSBpbiBtb2RlczoKLSAgICAgICAgICAgICAgICBp
ZiBtb2RlWzBdID09ICIrIjoKLSAgICAgICAgICAgICAgICAgICAgZiA9IGNoLnNldF9tb2RlCi0g
ICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZiA9IGNoLmNsZWFyX21v
ZGUKLSAgICAgICAgICAgICAgICBmKG1vZGVbMV0sIG1vZGVbMl0pCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAjIE1vZGUgb24gc2VsZi4uLiBYWFgKLSAgICAgICAgICAgIHBhc3MKLQotICAg
IGRlZiBfb25fbmFtcmVwbHkoc2VsZiwgYywgZSk6Ci0gICAgICAgICIiIltJbnRlcm5hbF0iIiIK
LQotICAgICAgICAjIGUuYXJndW1lbnRzKClbMF0gPT0gIkAiIGZvciBzZWNyZXQgY2hhbm5lbHMs
Ci0gICAgICAgICMgICAgICAgICAgICAgICAgICAgICAiKiIgZm9yIHByaXZhdGUgY2hhbm5lbHMs
Ci0gICAgICAgICMgICAgICAgICAgICAgICAgICAgICAiPSIgZm9yIG90aGVycyAocHVibGljIGNo
YW5uZWxzKQotICAgICAgICAjIGUuYXJndW1lbnRzKClbMV0gPT0gY2hhbm5lbAotICAgICAgICAj
IGUuYXJndW1lbnRzKClbMl0gPT0gbmljayBsaXN0Ci0KLSAgICAgICAgY2ggPSBlLmFyZ3VtZW50
cygpWzFdCi0gICAgICAgIGZvciBuaWNrIGluIGUuYXJndW1lbnRzKClbMl0uc3BsaXQoKToKLSAg
ICAgICAgICAgIGlmIG5pY2tbMF0gPT0gIkAiOgotICAgICAgICAgICAgICAgIG5pY2sgPSBuaWNr
WzE6XQotICAgICAgICAgICAgICAgIHNlbGYuY2hhbm5lbHNbY2hdLnNldF9tb2RlKCJvIiwgbmlj
aykKLSAgICAgICAgICAgIGVsaWYgbmlja1swXSA9PSAiKyI6Ci0gICAgICAgICAgICAgICAgbmlj
ayA9IG5pY2tbMTpdCi0gICAgICAgICAgICAgICAgc2VsZi5jaGFubmVsc1tjaF0uc2V0X21vZGUo
InYiLCBuaWNrKQotICAgICAgICAgICAgc2VsZi5jaGFubmVsc1tjaF0uYWRkX3VzZXIobmljaykK
LQotICAgIGRlZiBfb25fbmljayhzZWxmLCBjLCBlKToKLSAgICAgICAgIiIiW0ludGVybmFsXSIi
IgotICAgICAgICBiZWZvcmUgPSBubV90b19uKGUuc291cmNlKCkpCi0gICAgICAgIGFmdGVyID0g
ZS50YXJnZXQoKQotICAgICAgICBmb3IgY2ggaW4gc2VsZi5jaGFubmVscy52YWx1ZXMoKToKLSAg
ICAgICAgICAgIGlmIGNoLmhhc191c2VyKGJlZm9yZSk6Ci0gICAgICAgICAgICAgICAgY2guY2hh
bmdlX25pY2soYmVmb3JlLCBhZnRlcikKLQotICAgIGRlZiBfb25fcGFydChzZWxmLCBjLCBlKToK
LSAgICAgICAgIiIiW0ludGVybmFsXSIiIgotICAgICAgICBuaWNrID0gbm1fdG9fbihlLnNvdXJj
ZSgpKQotICAgICAgICBjaGFubmVsID0gZS50YXJnZXQoKQotCi0gICAgICAgIGlmIG5pY2sgPT0g
Yy5nZXRfbmlja25hbWUoKToKLSAgICAgICAgICAgIGRlbCBzZWxmLmNoYW5uZWxzW2NoYW5uZWxd
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmNoYW5uZWxzW2NoYW5uZWxdLnJlbW92
ZV91c2VyKG5pY2spCi0KLSAgICBkZWYgX29uX3F1aXQoc2VsZiwgYywgZSk6Ci0gICAgICAgICIi
IltJbnRlcm5hbF0iIiIKLSAgICAgICAgbmljayA9IG5tX3RvX24oZS5zb3VyY2UoKSkKLSAgICAg
ICAgZm9yIGNoIGluIHNlbGYuY2hhbm5lbHMudmFsdWVzKCk6Ci0gICAgICAgICAgICBpZiBjaC5o
YXNfdXNlcihuaWNrKToKLSAgICAgICAgICAgICAgICBjaC5yZW1vdmVfdXNlcihuaWNrKQotCi0g
ICAgZGVmIGRpZShzZWxmLCBtc2c9IkJ5ZSwgY3J1ZWwgd29ybGQhIik6Ci0gICAgICAgICIiIkxl
dCB0aGUgYm90IGRpZS4KLQotICAgICAgICBBcmd1bWVudHM6Ci0KLSAgICAgICAgICAgIG1zZyAt
LSBRdWl0IG1lc3NhZ2UuCi0gICAgICAgICIiIgotCi0gICAgICAgIHNlbGYuY29ubmVjdGlvbi5k
aXNjb25uZWN0KG1zZykKLSAgICAgICAgc3lzLmV4aXQoMCkKLQotICAgIGRlZiBkaXNjb25uZWN0
KHNlbGYsIG1zZz0iSSdsbCBiZSBiYWNrISIpOgotICAgICAgICAiIiJEaXNjb25uZWN0IHRoZSBi
b3QuCi0KLSAgICAgICAgVGhlIGJvdCB3aWxsIHRyeSB0byByZWNvbm5lY3QgYWZ0ZXIgYSB3aGls
ZS4KLQotICAgICAgICBBcmd1bWVudHM6Ci0KLSAgICAgICAgICAgIG1zZyAtLSBRdWl0IG1lc3Nh
Z2UuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmNvbm5lY3Rpb24uZGlzY29ubmVjdChtc2cp
Ci0KLSAgICBkZWYgZ2V0X3ZlcnNpb24oc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIGJv
dCB2ZXJzaW9uLgotCi0gICAgICAgIFVzZWQgd2hlbiBhbnN3ZXJpbmcgYSBDVENQIFZFUlNJT04g
cmVxdWVzdC4KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiAiaXJjYm90LnB5IGJ5IEpvZWwg
Um9zZGFobCA8am9lbEByb3NkYWhsLm5ldD4iCi0KLSAgICBkZWYganVtcF9zZXJ2ZXIoc2VsZiwg
bXNnPSJDaGFuZ2luZyBzZXJ2ZXJzIik6Ci0gICAgICAgICIiIkNvbm5lY3QgdG8gYSBuZXcgc2Vy
dmVyLCBwb3NzaWJseSBkaXNjb25uZWN0aW5nIGZyb20gdGhlIGN1cnJlbnQuCi0KLSAgICAgICAg
VGhlIGJvdCB3aWxsIHNraXAgdG8gbmV4dCBzZXJ2ZXIgaW4gdGhlIHNlcnZlcl9saXN0IGVhY2gg
dGltZQotICAgICAgICBqdW1wX3NlcnZlciBpcyBjYWxsZWQuCi0gICAgICAgICIiIgotICAgICAg
ICBpZiBzZWxmLmNvbm5lY3Rpb24uaXNfY29ubmVjdGVkKCk6Ci0gICAgICAgICAgICBzZWxmLmNv
bm5lY3Rpb24uZGlzY29ubmVjdChtc2cpCi0KLSAgICAgICAgc2VsZi5zZXJ2ZXJfbGlzdC5hcHBl
bmQoc2VsZi5zZXJ2ZXJfbGlzdC5wb3AoMCkpCi0gICAgICAgIHNlbGYuX2Nvbm5lY3QoKQotCi0g
ICAgZGVmIG9uX2N0Y3Aoc2VsZiwgYywgZSk6Ci0gICAgICAgICIiIkRlZmF1bHQgaGFuZGxlciBm
b3IgY3RjcCBldmVudHMuCi0KLSAgICAgICAgUmVwbGllcyB0byBWRVJTSU9OIGFuZCBQSU5HIHJl
cXVlc3RzIGFuZCByZWxheXMgRENDIHJlcXVlc3RzCi0gICAgICAgIHRvIHRoZSBvbl9kY2NjaGF0
IG1ldGhvZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIGUuYXJndW1lbnRzKClbMF0gPT0gIlZF
UlNJT04iOgotICAgICAgICAgICAgYy5jdGNwX3JlcGx5KG5tX3RvX24oZS5zb3VyY2UoKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIlZFUlNJT04gIiArIHNlbGYuZ2V0X3ZlcnNpb24oKSkK
LSAgICAgICAgZWxpZiBlLmFyZ3VtZW50cygpWzBdID09ICJQSU5HIjoKLSAgICAgICAgICAgIGlm
IGxlbihlLmFyZ3VtZW50cygpKSA+IDE6Ci0gICAgICAgICAgICAgICAgYy5jdGNwX3JlcGx5KG5t
X3RvX24oZS5zb3VyY2UoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQSU5HICIg
KyBlLmFyZ3VtZW50cygpWzFdKQotICAgICAgICBlbGlmIGUuYXJndW1lbnRzKClbMF0gPT0gIkRD
QyIgYW5kIGUuYXJndW1lbnRzKClbMV0uc3BsaXQoIiAiLCAxKVswXSA9PSAiQ0hBVCI6Ci0gICAg
ICAgICAgICBzZWxmLm9uX2RjY2NoYXQoYywgZSkKLQotICAgIGRlZiBvbl9kY2NjaGF0KHNlbGYs
IGMsIGUpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgICIi
IlN0YXJ0IHRoZSBib3QuIiIiCi0gICAgICAgIHNlbGYuX2Nvbm5lY3QoKQotICAgICAgICBTaW1w
bGVJUkNDbGllbnQuc3RhcnQoc2VsZikKLQotCi1jbGFzcyBJUkNEaWN0OgotICAgICIiIkEgZGlj
dGlvbmFyeSBzdWl0YWJsZSBmb3Igc3RvcmluZyBJUkMtcmVsYXRlZCB0aGluZ3MuCi0KLSAgICBE
aWN0aW9uYXJ5IGtleXMgYSBhbmQgYiBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZiBhbmQgb25seSBp
ZgotICAgIGlyY19sb3dlcihhKSA9PSBpcmNfbG93ZXIoYikKLQotICAgIE90aGVyd2lzZSwgaXQg
c2hvdWxkIGJlaGF2ZSBleGFjdGx5IGFzIGEgbm9ybWFsIGRpY3Rpb25hcnkuCi0gICAgIiIiCi0K
LSAgICBkZWYgX19pbml0X18oc2VsZiwgZGljdD1Ob25lKToKLSAgICAgICAgc2VsZi5kYXRhID0g
e30KLSAgICAgICAgc2VsZi5jYW5vbl9rZXlzID0ge30gICMgQ2Fub25pY2FsIGtleXMKLSAgICAg
ICAgaWYgZGljdCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYudXBkYXRlKGRpY3QpCi0g
ICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gcmVwcihzZWxmLmRhdGEpCi0g
ICAgZGVmIF9fY21wX18oc2VsZiwgZGljdCk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoZGljdCwg
SVJDRGljdCk6Ci0gICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuZGF0YSwgZGljdC5kYXRhKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLmRhdGEsIGRpY3QpCi0g
ICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBsZW4oc2VsZi5kYXRhKQotICAg
IGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gc2VsZi5kYXRhW3Nl
bGYuY2Fub25fa2V5c1tpcmNfbG93ZXIoa2V5KV1dCi0gICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYs
IGtleSwgaXRlbSk6Ci0gICAgICAgIGlmIGtleSBpbiBzZWxmOgotICAgICAgICAgICAgZGVsIHNl
bGZba2V5XQotICAgICAgICBzZWxmLmRhdGFba2V5XSA9IGl0ZW0KLSAgICAgICAgc2VsZi5jYW5v
bl9rZXlzW2lyY19sb3dlcihrZXkpXSA9IGtleQotICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBr
ZXkpOgotICAgICAgICBjayA9IGlyY19sb3dlcihrZXkpCi0gICAgICAgIGRlbCBzZWxmLmRhdGFb
c2VsZi5jYW5vbl9rZXlzW2NrXV0KLSAgICAgICAgZGVsIHNlbGYuY2Fub25fa2V5c1tja10KLSAg
ICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBpdGVyKHNlbGYuZGF0YSkKLSAg
ICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJldHVybiBzZWxmLmhhc19r
ZXkoa2V5KQotICAgIGRlZiBjbGVhcihzZWxmKToKLSAgICAgICAgc2VsZi5kYXRhLmNsZWFyKCkK
LSAgICAgICAgc2VsZi5jYW5vbl9rZXlzLmNsZWFyKCkKLSAgICBkZWYgY29weShzZWxmKToKLSAg
ICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgVXNlckRpY3Q6Ci0gICAgICAgICAgICByZXR1cm4g
VXNlckRpY3Qoc2VsZi5kYXRhKQotICAgICAgICBpbXBvcnQgY29weQotICAgICAgICByZXR1cm4g
Y29weS5jb3B5KHNlbGYpCi0gICAgZGVmIGtleXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxm
LmRhdGEua2V5cygpCi0gICAgZGVmIGl0ZW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5k
YXRhLml0ZW1zKCkKLSAgICBkZWYgdmFsdWVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5k
YXRhLnZhbHVlcygpCi0gICAgZGVmIGhhc19rZXkoc2VsZiwga2V5KToKLSAgICAgICAgcmV0dXJu
IGlyY19sb3dlcihrZXkpIGluIHNlbGYuY2Fub25fa2V5cwotICAgIGRlZiB1cGRhdGUoc2VsZiwg
ZGljdCk6Ci0gICAgICAgIGZvciBrLCB2IGluIGRpY3QuaXRlbXMoKToKLSAgICAgICAgICAgIHNl
bGYuZGF0YVtrXSA9IHYKLSAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZmFpbG9iaj1Ob25lKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYuZGF0YS5nZXQoa2V5LCBmYWlsb2JqKQotCi0KLWNsYXNzIENoYW5u
ZWw6Ci0gICAgIiIiQSBjbGFzcyBmb3Iga2VlcGluZyBpbmZvcm1hdGlvbiBhYm91dCBhbiBJUkMg
Y2hhbm5lbC4KLQotICAgIFRoaXMgY2xhc3MgY2FuIGJlIGltcHJvdmVkIGEgbG90LgotICAgICIi
IgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLnVzZXJkaWN0ID0gSVJD
RGljdCgpCi0gICAgICAgIHNlbGYub3BlcmRpY3QgPSBJUkNEaWN0KCkKLSAgICAgICAgc2VsZi52
b2ljZWRkaWN0ID0gSVJDRGljdCgpCi0gICAgICAgIHNlbGYubW9kZXMgPSB7fQotCi0gICAgZGVm
IHVzZXJzKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIGFuIHVuc29ydGVkIGxpc3Qgb2YgdGhl
IGNoYW5uZWwncyB1c2Vycy4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYudXNlcmRpY3Qua2V5cygp
Ci0KLSAgICBkZWYgb3BlcnMoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgYW4gdW5zb3J0ZWQg
bGlzdCBvZiB0aGUgY2hhbm5lbCdzIG9wZXJhdG9ycy4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYu
b3BlcmRpY3Qua2V5cygpCi0KLSAgICBkZWYgdm9pY2VkKHNlbGYpOgotICAgICAgICAiIiJSZXR1
cm5zIGFuIHVuc29ydGVkIGxpc3Qgb2YgdGhlIHBlcnNvbnMgdGhhdCBoYXZlIHZvaWNlCi0gICAg
ICAgIG1vZGUgc2V0IGluIHRoZSBjaGFubmVsLiIiIgotICAgICAgICByZXR1cm4gc2VsZi52b2lj
ZWRkaWN0LmtleXMoKQotCi0gICAgZGVmIGhhc191c2VyKHNlbGYsIG5pY2spOgotICAgICAgICAi
IiJDaGVjayB3aGV0aGVyIHRoZSBjaGFubmVsIGhhcyBhIHVzZXIuIiIiCi0gICAgICAgIHJldHVy
biBuaWNrIGluIHNlbGYudXNlcmRpY3QKLQotICAgIGRlZiBpc19vcGVyKHNlbGYsIG5pY2spOgot
ICAgICAgICAiIiJDaGVjayB3aGV0aGVyIGEgdXNlciBoYXMgb3BlcmF0b3Igc3RhdHVzIGluIHRo
ZSBjaGFubmVsLiIiIgotICAgICAgICByZXR1cm4gbmljayBpbiBzZWxmLm9wZXJkaWN0Ci0KLSAg
ICBkZWYgaXNfdm9pY2VkKHNlbGYsIG5pY2spOgotICAgICAgICAiIiJDaGVjayB3aGV0aGVyIGEg
dXNlciBoYXMgdm9pY2UgbW9kZSBzZXQgaW4gdGhlIGNoYW5uZWwuIiIiCi0gICAgICAgIHJldHVy
biBuaWNrIGluIHNlbGYudm9pY2VkZGljdAotCi0gICAgZGVmIGFkZF91c2VyKHNlbGYsIG5pY2sp
OgotICAgICAgICBzZWxmLnVzZXJkaWN0W25pY2tdID0gMQotCi0gICAgZGVmIHJlbW92ZV91c2Vy
KHNlbGYsIG5pY2spOgotICAgICAgICBmb3IgZCBpbiBzZWxmLnVzZXJkaWN0LCBzZWxmLm9wZXJk
aWN0LCBzZWxmLnZvaWNlZGRpY3Q6Ci0gICAgICAgICAgICBpZiBuaWNrIGluIGQ6Ci0gICAgICAg
ICAgICAgICAgZGVsIGRbbmlja10KLQotICAgIGRlZiBjaGFuZ2VfbmljayhzZWxmLCBiZWZvcmUs
IGFmdGVyKToKLSAgICAgICAgc2VsZi51c2VyZGljdFthZnRlcl0gPSAxCi0gICAgICAgIGRlbCBz
ZWxmLnVzZXJkaWN0W2JlZm9yZV0KLSAgICAgICAgaWYgYmVmb3JlIGluIHNlbGYub3BlcmRpY3Q6
Ci0gICAgICAgICAgICBzZWxmLm9wZXJkaWN0W2FmdGVyXSA9IDEKLSAgICAgICAgICAgIGRlbCBz
ZWxmLm9wZXJkaWN0W2JlZm9yZV0KLSAgICAgICAgaWYgYmVmb3JlIGluIHNlbGYudm9pY2VkZGlj
dDoKLSAgICAgICAgICAgIHNlbGYudm9pY2VkZGljdFthZnRlcl0gPSAxCi0gICAgICAgICAgICBk
ZWwgc2VsZi52b2ljZWRkaWN0W2JlZm9yZV0KLQotICAgIGRlZiBzZXRfbW9kZShzZWxmLCBtb2Rl
LCB2YWx1ZT1Ob25lKToKLSAgICAgICAgIiIiU2V0IG1vZGUgb24gdGhlIGNoYW5uZWwuCi0KLSAg
ICAgICAgQXJndW1lbnRzOgotCi0gICAgICAgICAgICBtb2RlIC0tIFRoZSBtb2RlIChhIHNpbmds
ZS1jaGFyYWN0ZXIgc3RyaW5nKS4KLQotICAgICAgICAgICAgdmFsdWUgLS0gVmFsdWUKLSAgICAg
ICAgIiIiCi0gICAgICAgIGlmIG1vZGUgPT0gIm8iOgotICAgICAgICAgICAgc2VsZi5vcGVyZGlj
dFt2YWx1ZV0gPSAxCi0gICAgICAgIGVsaWYgbW9kZSA9PSAidiI6Ci0gICAgICAgICAgICBzZWxm
LnZvaWNlZGRpY3RbdmFsdWVdID0gMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5t
b2Rlc1ttb2RlXSA9IHZhbHVlCi0KLSAgICBkZWYgY2xlYXJfbW9kZShzZWxmLCBtb2RlLCB2YWx1
ZT1Ob25lKToKLSAgICAgICAgIiIiQ2xlYXIgbW9kZSBvbiB0aGUgY2hhbm5lbC4KLQotICAgICAg
ICBBcmd1bWVudHM6Ci0KLSAgICAgICAgICAgIG1vZGUgLS0gVGhlIG1vZGUgKGEgc2luZ2xlLWNo
YXJhY3RlciBzdHJpbmcpLgotCi0gICAgICAgICAgICB2YWx1ZSAtLSBWYWx1ZQotICAgICAgICAi
IiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgbW9kZSA9PSAibyI6Ci0gICAgICAgICAg
ICAgICAgZGVsIHNlbGYub3BlcmRpY3RbdmFsdWVdCi0gICAgICAgICAgICBlbGlmIG1vZGUgPT0g
InYiOgotICAgICAgICAgICAgICAgIGRlbCBzZWxmLnZvaWNlZGRpY3RbdmFsdWVdCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRlbCBzZWxmLm1vZGVzW21vZGVdCi0gICAgICAg
IGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiBoYXNfbW9kZShz
ZWxmLCBtb2RlKToKLSAgICAgICAgcmV0dXJuIG1vZGUgaW4gc2VsZi5tb2RlcwotCi0gICAgZGVm
IGlzX21vZGVyYXRlZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuaGFzX21vZGUoIm0iKQot
Ci0gICAgZGVmIGlzX3NlY3JldChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuaGFzX21vZGUo
InMiKQotCi0gICAgZGVmIGlzX3Byb3RlY3RlZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
aGFzX21vZGUoInAiKQotCi0gICAgZGVmIGhhc190b3BpY19sb2NrKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gc2VsZi5oYXNfbW9kZSgidCIpCi0KLSAgICBkZWYgaXNfaW52aXRlX29ubHkoc2VsZik6
Ci0gICAgICAgIHJldHVybiBzZWxmLmhhc19tb2RlKCJpIikKLQotICAgIGRlZiBoYXNfYWxsb3df
ZXh0ZXJuYWxfbWVzc2FnZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmhhc19tb2RlKCJu
IikKLQotICAgIGRlZiBoYXNfbGltaXQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmhhc19t
b2RlKCJsIikKLQotICAgIGRlZiBsaW1pdChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5oYXNfbGlt
aXQoKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZGVzW2xdCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGhhc19rZXkoc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLmhhc19tb2RlKCJrIikKLQotICAgIGRlZiBrZXkoc2VsZik6Ci0gICAgICAg
IGlmIHNlbGYuaGFzX2tleSgpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kZXNbImsiXQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9pcmMvaXJjbGliLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9pcmMvaXJjbGliLnB5CShyZXZpc2lvbiAxODEx
OTMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvaXJjL2lyY2xpYi5weQko
d29ya2luZyBjb3B5KQpAQCAtMSwxNTYwICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAxOTk5LS0y
MDAyICBKb2VsIFJvc2RhaGwKLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0jIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyB2ZXJzaW9uIDIuMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMK
LSMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSMgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAw
MjExMS0xMzA3ICBVU0EKLSMKLSMga2VsdHVzIDxrZWx0dXNAdXNlcnMuc291cmNlZm9yZ2UubmV0
PgotIwotIyAkSWQ6IGlyY2xpYi5weSx2IDEuNDcgMjAwOC8wOS8yNSAyMjowMDo1OSBrZWx0dXMg
RXhwICQKLQotIiIiaXJjbGliIC0tIEludGVybmV0IFJlbGF5IENoYXQgKElSQykgcHJvdG9jb2wg
Y2xpZW50IGxpYnJhcnkuCi0KLVRoaXMgbGlicmFyeSBpcyBpbnRlbmRlZCB0byBlbmNhcHN1bGF0
ZSB0aGUgSVJDIHByb3RvY29sIGF0IGEgcXVpdGUKLWxvdyBsZXZlbC4gIEl0IHByb3ZpZGVzIGFu
IGV2ZW50LWRyaXZlbiBJUkMgY2xpZW50IGZyYW1ld29yay4gIEl0IGhhcwotYSBmYWlybHkgdGhv
cm91Z2ggc3VwcG9ydCBmb3IgdGhlIGJhc2ljIElSQyBwcm90b2NvbCwgQ1RDUCwgRENDIGNoYXQs
Ci1idXQgRENDIGZpbGUgdHJhbnNmZXJzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLgotCi1JbiBvcmRl
ciB0byB1bmRlcnN0YW5kIGhvdyB0byBtYWtlIGFuIElSQyBjbGllbnQsIEknbSBhZnJhaWQgeW91
IG1vcmUKLW9yIGxlc3MgbXVzdCB1bmRlcnN0YW5kIHRoZSBJUkMgc3BlY2lmaWNhdGlvbnMuICBU
aGV5IGFyZSBhdmFpbGFibGUKLWhlcmU6IFtJUkMgc3BlY2lmaWNhdGlvbnNdLgotCi1UaGUgbWFp
biBmZWF0dXJlcyBvZiB0aGUgSVJDIGNsaWVudCBmcmFtZXdvcmsgYXJlOgotCi0gICogQWJzdHJh
Y3Rpb24gb2YgdGhlIElSQyBwcm90b2NvbC4KLSAgKiBIYW5kbGVzIG11bHRpcGxlIHNpbXVsdGFu
ZW91cyBJUkMgc2VydmVyIGNvbm5lY3Rpb25zLgotICAqIEhhbmRsZXMgc2VydmVyIFBPTkdpbmcg
dHJhbnNwYXJlbnRseS4KLSAgKiBNZXNzYWdlcyB0byB0aGUgSVJDIHNlcnZlciBhcmUgZG9uZSBi
eSBjYWxsaW5nIG1ldGhvZHMgb24gYW4gSVJDCi0gICAgY29ubmVjdGlvbiBvYmplY3QuCi0gICog
TWVzc2FnZXMgZnJvbSBhbiBJUkMgc2VydmVyIHRyaWdnZXJzIGV2ZW50cywgd2hpY2ggY2FuIGJl
IGNhdWdodAotICAgIGJ5IGV2ZW50IGhhbmRsZXJzLgotICAqIFJlYWRpbmcgZnJvbSBhbmQgd3Jp
dGluZyB0byBJUkMgc2VydmVyIHNvY2tldHMgYXJlIG5vcm1hbGx5IGRvbmUKLSAgICBieSBhbiBp
bnRlcm5hbCBzZWxlY3QoKSBsb29wLCBidXQgdGhlIHNlbGVjdCgpaW5nIG1heSBiZSBkb25lIGJ5
Ci0gICAgYW4gZXh0ZXJuYWwgbWFpbiBsb29wLgotICAqIEZ1bmN0aW9ucyBjYW4gYmUgcmVnaXN0
ZXJlZCB0byBleGVjdXRlIGF0IHNwZWNpZmllZCB0aW1lcyBieSB0aGUKLSAgICBldmVudC1sb29w
LgotICAqIERlY29kZXMgQ1RDUCB0YWdnaW5nIGNvcnJlY3RseSAoaG9wZWZ1bGx5KTsgSSBoYXZl
bid0IHNlZW4gYW55Ci0gICAgb3RoZXIgSVJDIGNsaWVudCBpbXBsZW1lbnRhdGlvbiB0aGF0IGhh
bmRsZXMgdGhlIENUQ1AKLSAgICBzcGVjaWZpY2F0aW9uIHN1YnRpbHRpZXMuCi0gICogQSBraW5k
IG9mIHNpbXBsZSwgc2luZ2xlLXNlcnZlciwgb2JqZWN0LW9yaWVudGVkIElSQyBjbGllbnQgY2xh
c3MKLSAgICB0aGF0IGRpc3BhdGNoZXMgZXZlbnRzIHRvIGluc3RhbmNlIG1ldGhvZHMgaXMgaW5j
bHVkZWQuCi0KLUN1cnJlbnQgbGltaXRhdGlvbnM6Ci0KLSAgKiBUaGUgSVJDIHByb3RvY29sIHNo
aW5lcyB0aHJvdWdoIHRoZSBhYnN0cmFjdGlvbiBhIGJpdCB0b28gbXVjaC4KLSAgKiBEYXRhIGlz
IG5vdCB3cml0dGVuIGFzeW5jaHJvbm91c2x5IHRvIHRoZSBzZXJ2ZXIsIGkuZS4gdGhlIHdyaXRl
KCkKLSAgICBtYXkgYmxvY2sgaWYgdGhlIFRDUCBidWZmZXJzIGFyZSBzdHVmZmVkLgotICAqIFRo
ZXJlIGFyZSBubyBzdXBwb3J0IGZvciBEQ0MgZmlsZSB0cmFuc2ZlcnMuCi0gICogVGhlIGF1dGhv
ciBoYXZlbid0IGV2ZW4gcmVhZCBSRkMgMjgxMCwgMjgxMSwgMjgxMiBhbmQgMjgxMy4KLSAgKiBM
aWtlIG1vc3QgcHJvamVjdHMsIGRvY3VtZW50YXRpb24gaXMgbGFja2luZy4uLgotCi0uLiBbSVJD
IHNwZWNpZmljYXRpb25zXSBodHRwOi8vd3d3LmlyY2hlbHAub3JnL2lyY2hlbHAvcmZjLwotIiIi
Ci0KLWltcG9ydCBiaXNlY3QKLWltcG9ydCByZQotaW1wb3J0IHNlbGVjdAotaW1wb3J0IHNvY2tl
dAotaW1wb3J0IHN0cmluZwotaW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLWltcG9ydCB0eXBlcwot
Ci1WRVJTSU9OID0gMCwgNCwgOAotREVCVUcgPSAwCi0KLSMgVE9ETwotIyAtLS0tCi0jIChtYXli
ZSkgdGhyZWFkIHNhZmV0eQotIyAobWF5YmUpIGNvbG9yIHBhcnNlciBjb252ZW5pZW5jZSBmdW5j
dGlvbnMKLSMgZG9jdW1lbnRhdGlvbiAoaW5jbHVkaW5nIGFsbCBldmVudCB0eXBlcykKLSMgKG1h
eWJlKSBhZGQgYXdhcmVuZXNzIG9mIGRpZmZlcmVudCB0eXBlcyBvZiBpcmNkcwotIyBzZW5kIGRh
dGEgYXN5bmNocm9ub3VzbHkgdG8gdGhlIHNlcnZlciAoYW5kIERDQyBjb25uZWN0aW9ucykKLSMg
KG1heWJlKSBhdXRvbWF0aWNhbGx5IGNsb3NlIHVudXNlZCwgcGFzc2l2ZSBEQ0MgY29ubmVjdGlv
bnMgYWZ0ZXIgYSB3aGlsZQotCi0jIE5PVEVTCi0jIC0tLS0tCi0jIGNvbm5lY3Rpb24ucXVpdCgp
IG9ubHkgc2VuZHMgUVVJVCB0byB0aGUgc2VydmVyLgotIyBFUlJPUiBmcm9tIHRoZSBzZXJ2ZXIg
dHJpZ2dlcnMgdGhlIGVycm9yIGV2ZW50IGFuZCB0aGUgZGlzY29ubmVjdCBldmVudC4KLSMgZHJv
cHBpbmcgb2YgdGhlIGNvbm5lY3Rpb24gdHJpZ2dlcnMgdGhlIGRpc2Nvbm5lY3QgZXZlbnQuCi0K
LWNsYXNzIElSQ0Vycm9yKEV4Y2VwdGlvbik6Ci0gICAgIiIiUmVwcmVzZW50cyBhbiBJUkMgZXhj
ZXB0aW9uLiIiIgotICAgIHBhc3MKLQotCi1jbGFzcyBJUkM6Ci0gICAgIiIiQ2xhc3MgdGhhdCBo
YW5kbGVzIG9uZSBvciBzZXZlcmFsIElSQyBzZXJ2ZXIgY29ubmVjdGlvbnMuCi0KLSAgICBXaGVu
IGFuIElSQyBvYmplY3QgaGFzIGJlZW4gaW5zdGFudGlhdGVkLCBpdCBjYW4gYmUgdXNlZCB0byBj
cmVhdGUKLSAgICBDb25uZWN0aW9uIG9iamVjdHMgdGhhdCByZXByZXNlbnQgdGhlIElSQyBjb25u
ZWN0aW9ucy4gIFRoZQotICAgIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBJUkMgb2JqZWN0IGlzIHRv
IHByb3ZpZGUgYW4gZXZlbnQtZHJpdmVuCi0gICAgZnJhbWV3b3JrIGZvciB0aGUgY29ubmVjdGlv
bnMgYW5kIHRvIGtlZXAgdGhlIGNvbm5lY3Rpb25zIGFsaXZlLgotICAgIEl0IHJ1bnMgYSBzZWxl
Y3QgbG9vcCB0byBwb2xsIGVhY2ggY29ubmVjdGlvbidzIFRDUCBzb2NrZXQgYW5kCi0gICAgaGFu
ZHMgb3ZlciB0aGUgc29ja2V0cyB3aXRoIGluY29taW5nIGRhdGEgZm9yIHByb2Nlc3NpbmcgYnkg
dGhlCi0gICAgY29ycmVzcG9uZGluZyBjb25uZWN0aW9uLgotCi0gICAgVGhlIG1ldGhvZHMgb2Yg
bW9zdCBpbnRlcmVzdCBmb3IgYW4gSVJDIGNsaWVudCB3cml0ZXIgYXJlIHNlcnZlciwKLSAgICBh
ZGRfZ2xvYmFsX2hhbmRsZXIsIHJlbW92ZV9nbG9iYWxfaGFuZGxlciwgZXhlY3V0ZV9hdCwKLSAg
ICBleGVjdXRlX2RlbGF5ZWQsIHByb2Nlc3Nfb25jZSBhbmQgcHJvY2Vzc19mb3JldmVyLgotCi0g
ICAgSGVyZSBpcyBhbiBleGFtcGxlOgotCi0gICAgICAgIGlyYyA9IGlyY2xpYi5JUkMoKQotICAg
ICAgICBzZXJ2ZXIgPSBpcmMuc2VydmVyKCkKLSAgICAgICAgc2VydmVyLmNvbm5lY3QoXCJpcmMu
c29tZS53aGVyZVwiLCA2NjY3LCBcIm15X25pY2tuYW1lXCIpCi0gICAgICAgIHNlcnZlci5wcml2
bXNnKFwiYV9uaWNrbmFtZVwiLCBcIkhpIHRoZXJlIVwiKQotICAgICAgICBpcmMucHJvY2Vzc19m
b3JldmVyKCkKLQotICAgIFRoaXMgd2lsbCBjb25uZWN0IHRvIHRoZSBJUkMgc2VydmVyIGlyYy5z
b21lLndoZXJlIG9uIHBvcnQgNjY2NwotICAgIHVzaW5nIHRoZSBuaWNrbmFtZSBteV9uaWNrbmFt
ZSBhbmQgc2VuZCB0aGUgbWVzc2FnZSBcIkhpIHRoZXJlIVwiCi0gICAgdG8gdGhlIG5pY2tuYW1l
IGFfbmlja25hbWUuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZm5fdG9fYWRk
X3NvY2tldD1Ob25lLAotICAgICAgICAgICAgICAgICBmbl90b19yZW1vdmVfc29ja2V0PU5vbmUs
Ci0gICAgICAgICAgICAgICAgIGZuX3RvX2FkZF90aW1lb3V0PU5vbmUpOgotICAgICAgICAiIiJD
b25zdHJ1Y3RvciBmb3IgSVJDIG9iamVjdHMuCi0KLSAgICAgICAgT3B0aW9uYWwgYXJndW1lbnRz
IGFyZSBmbl90b19hZGRfc29ja2V0LCBmbl90b19yZW1vdmVfc29ja2V0Ci0gICAgICAgIGFuZCBm
bl90b19hZGRfdGltZW91dC4gIFRoZSBmaXJzdCB0d28gc3BlY2lmeSBmdW5jdGlvbnMgdGhhdAot
ICAgICAgICB3aWxsIGJlIGNhbGxlZCB3aXRoIGEgc29ja2V0IG9iamVjdCBhcyBhcmd1bWVudCB3
aGVuIHRoZSBJUkMKLSAgICAgICAgb2JqZWN0IHdhbnRzIHRvIGJlIG5vdGlmaWVkIChvciBzdG9w
IGJlaW5nIG5vdGlmaWVkKSBvZiBkYXRhCi0gICAgICAgIGNvbWluZyBvbiBhIG5ldyBzb2NrZXQu
ICBXaGVuIG5ldyBkYXRhIGFycml2ZXMsIHRoZSBtZXRob2QKLSAgICAgICAgcHJvY2Vzc19kYXRh
IHNob3VsZCBiZSBjYWxsZWQuICBTaW1pbGFybHksIGZuX3RvX2FkZF90aW1lb3V0Ci0gICAgICAg
IGlzIGNhbGxlZCB3aXRoIGEgbnVtYmVyIG9mIHNlY29uZHMgKGEgZmxvYXRpbmcgcG9pbnQgbnVt
YmVyKQotICAgICAgICBhcyBmaXJzdCBhcmd1bWVudCB3aGVuIHRoZSBJUkMgb2JqZWN0IHdhbnRz
IHRvIHJlY2VpdmUgYQotICAgICAgICBub3RpZmljYXRpb24gKGJ5IGNhbGxpbmcgdGhlIHByb2Nl
c3NfdGltZW91dCBtZXRob2QpLiAgU28sIGlmCi0gICAgICAgIGUuZy4gdGhlIGFyZ3VtZW50IGlz
IDQyLjE3LCB0aGUgb2JqZWN0IHdhbnRzIHRoZQotICAgICAgICBwcm9jZXNzX3RpbWVvdXQgbWV0
aG9kIHRvIGJlIGNhbGxlZCBhZnRlciA0MiBzZWNvbmRzIGFuZCAxNzAKLSAgICAgICAgbWlsbGlz
ZWNvbmRzLgotCi0gICAgICAgIFRoZSB0aHJlZSBhcmd1bWVudHMgbWFpbmx5IGV4aXN0IHRvIGJl
IGFibGUgdG8gdXNlIGFuIGV4dGVybmFsCi0gICAgICAgIG1haW4gbG9vcCAoZm9yIGV4YW1wbGUg
VGtpbnRlcidzIG9yIFB5R1RLJ3MgbWFpbiBhcHAgbG9vcCkKLSAgICAgICAgaW5zdGVhZCBvZiBj
YWxsaW5nIHRoZSBwcm9jZXNzX2ZvcmV2ZXIgbWV0aG9kLgotCi0gICAgICAgIEFuIGFsdGVybmF0
aXZlIGlzIHRvIGp1c3QgY2FsbCBTZXJ2ZXJDb25uZWN0aW9uLnByb2Nlc3Nfb25jZSgpCi0gICAg
ICAgIG9uY2UgaW4gYSB3aGlsZS4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgaWYgZm5fdG9fYWRk
X3NvY2tldCBhbmQgZm5fdG9fcmVtb3ZlX3NvY2tldDoKLSAgICAgICAgICAgIHNlbGYuZm5fdG9f
YWRkX3NvY2tldCA9IGZuX3RvX2FkZF9zb2NrZXQKLSAgICAgICAgICAgIHNlbGYuZm5fdG9fcmVt
b3ZlX3NvY2tldCA9IGZuX3RvX3JlbW92ZV9zb2NrZXQKLSAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgIHNlbGYuZm5fdG9fYWRkX3NvY2tldCA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYuZm5fdG9f
cmVtb3ZlX3NvY2tldCA9IE5vbmUKLQotICAgICAgICBzZWxmLmZuX3RvX2FkZF90aW1lb3V0ID0g
Zm5fdG9fYWRkX3RpbWVvdXQKLSAgICAgICAgc2VsZi5jb25uZWN0aW9ucyA9IFtdCi0gICAgICAg
IHNlbGYuaGFuZGxlcnMgPSB7fQotICAgICAgICBzZWxmLmRlbGF5ZWRfY29tbWFuZHMgPSBbXSAj
IGxpc3Qgb2YgdHVwbGVzIGluIHRoZSBmb3JtYXQgKHRpbWUsIGZ1bmN0aW9uLCBhcmd1bWVudHMp
Ci0KLSAgICAgICAgc2VsZi5hZGRfZ2xvYmFsX2hhbmRsZXIoInBpbmciLCBfcGluZ19wb25nZXIs
IC00MikKLQotICAgIGRlZiBzZXJ2ZXIoc2VsZik6Ci0gICAgICAgICIiIkNyZWF0ZXMgYW5kIHJl
dHVybnMgYSBTZXJ2ZXJDb25uZWN0aW9uIG9iamVjdC4iIiIKLQotICAgICAgICBjID0gU2VydmVy
Q29ubmVjdGlvbihzZWxmKQotICAgICAgICBzZWxmLmNvbm5lY3Rpb25zLmFwcGVuZChjKQotICAg
ICAgICByZXR1cm4gYwotCi0gICAgZGVmIHByb2Nlc3NfZGF0YShzZWxmLCBzb2NrZXRzKToKLSAg
ICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlcmUgaXMgbW9yZSBkYXRhIHRvIHJlYWQgb24gY29ubmVj
dGlvbiBzb2NrZXRzLgotCi0gICAgICAgIEFyZ3VtZW50czoKLQotICAgICAgICAgICAgc29ja2V0
cyAtLSBBIGxpc3Qgb2Ygc29ja2V0IG9iamVjdHMuCi0KLSAgICAgICAgU2VlIGRvY3VtZW50YXRp
b24gZm9yIElSQy5fX2luaXRfXy4KLSAgICAgICAgIiIiCi0gICAgICAgIGZvciBzIGluIHNvY2tl
dHM6Ci0gICAgICAgICAgICBmb3IgYyBpbiBzZWxmLmNvbm5lY3Rpb25zOgotICAgICAgICAgICAg
ICAgIGlmIHMgPT0gYy5fZ2V0X3NvY2tldCgpOgotICAgICAgICAgICAgICAgICAgICBjLnByb2Nl
c3NfZGF0YSgpCi0KLSAgICBkZWYgcHJvY2Vzc190aW1lb3V0KHNlbGYpOgotICAgICAgICAiIiJD
YWxsZWQgd2hlbiBhIHRpbWVvdXQgbm90aWZpY2F0aW9uIGlzIGR1ZS4KLQotICAgICAgICBTZWUg
ZG9jdW1lbnRhdGlvbiBmb3IgSVJDLl9faW5pdF9fLgotICAgICAgICAiIiIKLSAgICAgICAgdCA9
IHRpbWUudGltZSgpCi0gICAgICAgIHdoaWxlIHNlbGYuZGVsYXllZF9jb21tYW5kczoKLSAgICAg
ICAgICAgIGlmIHQgPj0gc2VsZi5kZWxheWVkX2NvbW1hbmRzWzBdWzBdOgotICAgICAgICAgICAg
ICAgIHNlbGYuZGVsYXllZF9jb21tYW5kc1swXVsxXSgqc2VsZi5kZWxheWVkX2NvbW1hbmRzWzBd
WzJdKQotICAgICAgICAgICAgICAgIGRlbCBzZWxmLmRlbGF5ZWRfY29tbWFuZHNbMF0KLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAgIGRlZiBwcm9jZXNzX29u
Y2Uoc2VsZiwgdGltZW91dD0wKToKLSAgICAgICAgIiIiUHJvY2VzcyBkYXRhIGZyb20gY29ubmVj
dGlvbnMgb25jZS4KLQotICAgICAgICBBcmd1bWVudHM6Ci0KLSAgICAgICAgICAgIHRpbWVvdXQg
LS0gSG93IGxvbmcgdGhlIHNlbGVjdCgpIGNhbGwgc2hvdWxkIHdhaXQgaWYgbm8KLSAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YSBpcyBhdmFpbGFibGUuCi0KLSAgICAgICAgVGhpcyBtZXRob2Qg
c2hvdWxkIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkgdG8gY2hlY2sgYW5kIHByb2Nlc3MKLSAgICAg
ICAgaW5jb21pbmcgZGF0YSwgaWYgdGhlcmUgYXJlIGFueS4gIElmIHRoYXQgc2VlbXMgYm9yaW5n
LCBsb29rCi0gICAgICAgIGF0IHRoZSBwcm9jZXNzX2ZvcmV2ZXIgbWV0aG9kLgotICAgICAgICAi
IiIKLSAgICAgICAgc29ja2V0cyA9IG1hcChsYW1iZGEgeDogeC5fZ2V0X3NvY2tldCgpLCBzZWxm
LmNvbm5lY3Rpb25zKQotICAgICAgICBzb2NrZXRzID0gZmlsdGVyKGxhbWJkYSB4OiB4ICE9IE5v
bmUsIHNvY2tldHMpCi0gICAgICAgIGlmIHNvY2tldHM6Ci0gICAgICAgICAgICAoaSwgbywgZSkg
PSBzZWxlY3Quc2VsZWN0KHNvY2tldHMsIFtdLCBbXSwgdGltZW91dCkKLSAgICAgICAgICAgIHNl
bGYucHJvY2Vzc19kYXRhKGkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0aW1lLnNsZWVw
KHRpbWVvdXQpCi0gICAgICAgIHNlbGYucHJvY2Vzc190aW1lb3V0KCkKLQotICAgIGRlZiBwcm9j
ZXNzX2ZvcmV2ZXIoc2VsZiwgdGltZW91dD0wLjIpOgotICAgICAgICAiIiJSdW4gYW4gaW5maW5p
dGUgbG9vcCwgcHJvY2Vzc2luZyBkYXRhIGZyb20gY29ubmVjdGlvbnMuCi0KLSAgICAgICAgVGhp
cyBtZXRob2QgcmVwZWF0ZWRseSBjYWxscyBwcm9jZXNzX29uY2UuCi0KLSAgICAgICAgQXJndW1l
bnRzOgotCi0gICAgICAgICAgICB0aW1lb3V0IC0tIFBhcmFtZXRlciB0byBwYXNzIHRvIHByb2Nl
c3Nfb25jZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBzZWxm
LnByb2Nlc3Nfb25jZSh0aW1lb3V0KQotCi0gICAgZGVmIGRpc2Nvbm5lY3RfYWxsKHNlbGYsIG1l
c3NhZ2U9IiIpOgotICAgICAgICAiIiJEaXNjb25uZWN0cyBhbGwgY29ubmVjdGlvbnMuIiIiCi0g
ICAgICAgIGZvciBjIGluIHNlbGYuY29ubmVjdGlvbnM6Ci0gICAgICAgICAgICBjLmRpc2Nvbm5l
Y3QobWVzc2FnZSkKLQotICAgIGRlZiBhZGRfZ2xvYmFsX2hhbmRsZXIoc2VsZiwgZXZlbnQsIGhh
bmRsZXIsIHByaW9yaXR5PTApOgotICAgICAgICAiIiJBZGRzIGEgZ2xvYmFsIGhhbmRsZXIgZnVu
Y3Rpb24gZm9yIGEgc3BlY2lmaWMgZXZlbnQgdHlwZS4KLQotICAgICAgICBBcmd1bWVudHM6Ci0K
LSAgICAgICAgICAgIGV2ZW50IC0tIEV2ZW50IHR5cGUgKGEgc3RyaW5nKS4gIENoZWNrIHRoZSB2
YWx1ZXMgb2YgdGhlCi0gICAgICAgICAgICBudW1lcmljX2V2ZW50cyBkaWN0aW9uYXJ5IGluIGly
Y2xpYi5weSBmb3IgcG9zc2libGUgZXZlbnQKLSAgICAgICAgICAgIHR5cGVzLgotCi0gICAgICAg
ICAgICBoYW5kbGVyIC0tIENhbGxiYWNrIGZ1bmN0aW9uLgotCi0gICAgICAgICAgICBwcmlvcml0
eSAtLSBBIG51bWJlciAodGhlIGxvd2VyIG51bWJlciwgdGhlIGhpZ2hlciBwcmlvcml0eSkuCi0K
LSAgICAgICAgVGhlIGhhbmRsZXIgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBzcGVj
aWZpZWQgZXZlbnQgaXMKLSAgICAgICAgdHJpZ2dlcmVkIGluIGFueSBvZiB0aGUgY29ubmVjdGlv
bnMuICBTZWUgZG9jdW1lbnRhdGlvbiBmb3IKLSAgICAgICAgdGhlIEV2ZW50IGNsYXNzLgotCi0g
ICAgICAgIFRoZSBoYW5kbGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGluIHByaW9yaXR5IG9yZGVy
IChsb3dlc3QKLSAgICAgICAgbnVtYmVyIGlzIGhpZ2hlc3QgcHJpb3JpdHkpLiAgSWYgYSBoYW5k
bGVyIGZ1bmN0aW9uIHJldHVybnMKLSAgICAgICAgXCJOTyBNT1JFXCIsIG5vIG1vcmUgaGFuZGxl
cnMgd2lsbCBiZSBjYWxsZWQuCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3QgZXZlbnQgaW4g
c2VsZi5oYW5kbGVyczoKLSAgICAgICAgICAgIHNlbGYuaGFuZGxlcnNbZXZlbnRdID0gW10KLSAg
ICAgICAgYmlzZWN0Lmluc29ydChzZWxmLmhhbmRsZXJzW2V2ZW50XSwgKChwcmlvcml0eSwgaGFu
ZGxlcikpKQotCi0gICAgZGVmIHJlbW92ZV9nbG9iYWxfaGFuZGxlcihzZWxmLCBldmVudCwgaGFu
ZGxlcik6Ci0gICAgICAgICIiIlJlbW92ZXMgYSBnbG9iYWwgaGFuZGxlciBmdW5jdGlvbi4KLQot
ICAgICAgICBBcmd1bWVudHM6Ci0KLSAgICAgICAgICAgIGV2ZW50IC0tIEV2ZW50IHR5cGUgKGEg
c3RyaW5nKS4KLQotICAgICAgICAgICAgaGFuZGxlciAtLSBDYWxsYmFjayBmdW5jdGlvbi4KLQot
ICAgICAgICBSZXR1cm5zIDEgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIDAuCi0gICAgICAgICIiIgot
ICAgICAgICBpZiBub3QgZXZlbnQgaW4gc2VsZi5oYW5kbGVyczoKLSAgICAgICAgICAgIHJldHVy
biAwCi0gICAgICAgIGZvciBoIGluIHNlbGYuaGFuZGxlcnNbZXZlbnRdOgotICAgICAgICAgICAg
aWYgaGFuZGxlciA9PSBoWzFdOgotICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlcnNbZXZlbnRd
LnJlbW92ZShoKQotICAgICAgICByZXR1cm4gMQotCi0gICAgZGVmIGV4ZWN1dGVfYXQoc2VsZiwg
YXQsIGZ1bmN0aW9uLCBhcmd1bWVudHM9KCkpOgotICAgICAgICAiIiJFeGVjdXRlIGEgZnVuY3Rp
b24gYXQgYSBzcGVjaWZpZWQgdGltZS4KLQotICAgICAgICBBcmd1bWVudHM6Ci0KLSAgICAgICAg
ICAgIGF0IC0tIEV4ZWN1dGUgYXQgdGhpcyB0aW1lIChzdGFuZGFyZCBcInRpbWVfdFwiIHRpbWUp
LgotCi0gICAgICAgICAgICBmdW5jdGlvbiAtLSBGdW5jdGlvbiB0byBjYWxsLgotCi0gICAgICAg
ICAgICBhcmd1bWVudHMgLS0gQXJndW1lbnRzIHRvIGdpdmUgdGhlIGZ1bmN0aW9uLgotICAgICAg
ICAiIiIKLSAgICAgICAgc2VsZi5leGVjdXRlX2RlbGF5ZWQoYXQtdGltZS50aW1lKCksIGZ1bmN0
aW9uLCBhcmd1bWVudHMpCi0KLSAgICBkZWYgZXhlY3V0ZV9kZWxheWVkKHNlbGYsIGRlbGF5LCBm
dW5jdGlvbiwgYXJndW1lbnRzPSgpKToKLSAgICAgICAgIiIiRXhlY3V0ZSBhIGZ1bmN0aW9uIGFm
dGVyIGEgc3BlY2lmaWVkIHRpbWUuCi0KLSAgICAgICAgQXJndW1lbnRzOgotCi0gICAgICAgICAg
ICBkZWxheSAtLSBIb3cgbWFueSBzZWNvbmRzIHRvIHdhaXQuCi0KLSAgICAgICAgICAgIGZ1bmN0
aW9uIC0tIEZ1bmN0aW9uIHRvIGNhbGwuCi0KLSAgICAgICAgICAgIGFyZ3VtZW50cyAtLSBBcmd1
bWVudHMgdG8gZ2l2ZSB0aGUgZnVuY3Rpb24uCi0gICAgICAgICIiIgotICAgICAgICBiaXNlY3Qu
aW5zb3J0KHNlbGYuZGVsYXllZF9jb21tYW5kcywgKGRlbGF5K3RpbWUudGltZSgpLCBmdW5jdGlv
biwgYXJndW1lbnRzKSkKLSAgICAgICAgaWYgc2VsZi5mbl90b19hZGRfdGltZW91dDoKLSAgICAg
ICAgICAgIHNlbGYuZm5fdG9fYWRkX3RpbWVvdXQoZGVsYXkpCi0KLSAgICBkZWYgZGNjKHNlbGYs
IGRjY3R5cGU9ImNoYXQiKToKLSAgICAgICAgIiIiQ3JlYXRlcyBhbmQgcmV0dXJucyBhIERDQ0Nv
bm5lY3Rpb24gb2JqZWN0LgotCi0gICAgICAgIEFyZ3VtZW50czoKLQotICAgICAgICAgICAgZGNj
dHlwZSAtLSAiY2hhdCIgZm9yIERDQyBDSEFUIGNvbm5lY3Rpb25zIG9yICJyYXciIGZvcgotICAg
ICAgICAgICAgICAgICAgICAgICBEQ0MgU0VORCAob3Igb3RoZXIgRENDIHR5cGVzKS4gSWYgImNo
YXQiLAotICAgICAgICAgICAgICAgICAgICAgICBpbmNvbWluZyBkYXRhIHdpbGwgYmUgc3BsaXQg
aW4gbmV3bGluZS1zZXBhcmF0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzLiBJZiAi
cmF3IiwgaW5jb21pbmcgZGF0YSBpcyBub3QgdG91Y2hlZC4KLSAgICAgICAgIiIiCi0gICAgICAg
IGMgPSBEQ0NDb25uZWN0aW9uKHNlbGYsIGRjY3R5cGUpCi0gICAgICAgIHNlbGYuY29ubmVjdGlv
bnMuYXBwZW5kKGMpCi0gICAgICAgIHJldHVybiBjCi0KLSAgICBkZWYgX2hhbmRsZV9ldmVudChz
ZWxmLCBjb25uZWN0aW9uLCBldmVudCk6Ci0gICAgICAgICIiIltJbnRlcm5hbF0iIiIKLSAgICAg
ICAgaCA9IHNlbGYuaGFuZGxlcnMKLSAgICAgICAgZm9yIGhhbmRsZXIgaW4gaC5nZXQoImFsbF9l
dmVudHMiLCBbXSkgKyBoLmdldChldmVudC5ldmVudHR5cGUoKSwgW10pOgotICAgICAgICAgICAg
aWYgaGFuZGxlclsxXShjb25uZWN0aW9uLCBldmVudCkgPT0gIk5PIE1PUkUiOgotICAgICAgICAg
ICAgICAgIHJldHVybgotCi0gICAgZGVmIF9yZW1vdmVfY29ubmVjdGlvbihzZWxmLCBjb25uZWN0
aW9uKToKLSAgICAgICAgIiIiW0ludGVybmFsXSIiIgotICAgICAgICBzZWxmLmNvbm5lY3Rpb25z
LnJlbW92ZShjb25uZWN0aW9uKQotICAgICAgICBpZiBzZWxmLmZuX3RvX3JlbW92ZV9zb2NrZXQ6
Ci0gICAgICAgICAgICBzZWxmLmZuX3RvX3JlbW92ZV9zb2NrZXQoY29ubmVjdGlvbi5fZ2V0X3Nv
Y2tldCgpKQotCi1fcmZjXzE0NTlfY29tbWFuZF9yZWdleHAgPSByZS5jb21waWxlKCJeKDooP1A8
cHJlZml4PlteIF0rKSArKT8oP1A8Y29tbWFuZD5bXiBdKykoICooP1A8YXJndW1lbnQ+IC4rKSk/
IikKLQotY2xhc3MgQ29ubmVjdGlvbjoKLSAgICAiIiJCYXNlIGNsYXNzIGZvciBJUkMgY29ubmVj
dGlvbnMuCi0KLSAgICBNdXN0IGJlIG92ZXJyaWRkZW4uCi0gICAgIiIiCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIGlyY2xpYm9iaik6Ci0gICAgICAgIHNlbGYuaXJjbGlib2JqID0gaXJjbGlib2Jq
Ci0KLSAgICBkZWYgX2dldF9zb2NrZXQoKToKLSAgICAgICAgcmFpc2UgSVJDRXJyb3IsICJOb3Qg
b3ZlcnJpZGRlbiIKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMj
IyBDb252ZW5pZW5jZSB3cmFwcGVycy4KLQotICAgIGRlZiBleGVjdXRlX2F0KHNlbGYsIGF0LCBm
dW5jdGlvbiwgYXJndW1lbnRzPSgpKToKLSAgICAgICAgc2VsZi5pcmNsaWJvYmouZXhlY3V0ZV9h
dChhdCwgZnVuY3Rpb24sIGFyZ3VtZW50cykKLQotICAgIGRlZiBleGVjdXRlX2RlbGF5ZWQoc2Vs
ZiwgZGVsYXksIGZ1bmN0aW9uLCBhcmd1bWVudHM9KCkpOgotICAgICAgICBzZWxmLmlyY2xpYm9i
ai5leGVjdXRlX2RlbGF5ZWQoZGVsYXksIGZ1bmN0aW9uLCBhcmd1bWVudHMpCi0KLQotY2xhc3Mg
U2VydmVyQ29ubmVjdGlvbkVycm9yKElSQ0Vycm9yKToKLSAgICBwYXNzCi0KLWNsYXNzIFNlcnZl
ck5vdENvbm5lY3RlZEVycm9yKFNlcnZlckNvbm5lY3Rpb25FcnJvcik6Ci0gICAgcGFzcwotCi0K
LSMgSHVoIT8gIENycnJyYXp5IEVGTmV0IGRvZXNuJ3QgZm9sbG93IHRoZSBSRkM6IHRoZWlyIGly
Y2Qgc2VlbXMgdG8KLSMgdXNlIFxuIGFzIG1lc3NhZ2Ugc2VwYXJhdG9yISAgOlAKLV9saW5lc2Vw
X3JlZ2V4cCA9IHJlLmNvbXBpbGUoIlxyP1xuIikKLQotY2xhc3MgU2VydmVyQ29ubmVjdGlvbihD
b25uZWN0aW9uKToKLSAgICAiIiJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gSVJDIHNlcnZlciBj
b25uZWN0aW9uLgotCi0gICAgU2VydmVyQ29ubmVjdGlvbiBvYmplY3RzIGFyZSBpbnN0YW50aWF0
ZWQgYnkgY2FsbGluZyB0aGUgc2VydmVyCi0gICAgbWV0aG9kIG9uIGFuIElSQyBvYmplY3QuCi0g
ICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaXJjbGlib2JqKToKLSAgICAgICAgQ29u
bmVjdGlvbi5fX2luaXRfXyhzZWxmLCBpcmNsaWJvYmopCi0gICAgICAgIHNlbGYuY29ubmVjdGVk
ID0gMCAgIyBOb3QgY29ubmVjdGVkIHlldC4KLSAgICAgICAgc2VsZi5zb2NrZXQgPSBOb25lCi0g
ICAgICAgIHNlbGYuc3NsID0gTm9uZQotCi0gICAgZGVmIGNvbm5lY3Qoc2VsZiwgc2VydmVyLCBw
b3J0LCBuaWNrbmFtZSwgcGFzc3dvcmQ9Tm9uZSwgdXNlcm5hbWU9Tm9uZSwKLSAgICAgICAgICAg
ICAgICBpcmNuYW1lPU5vbmUsIGxvY2FsYWRkcmVzcz0iIiwgbG9jYWxwb3J0PTAsIHNzbD1GYWxz
ZSwgaXB2Nj1GYWxzZSk6Ci0gICAgICAgICIiIkNvbm5lY3QvcmVjb25uZWN0IHRvIGEgc2VydmVy
LgotCi0gICAgICAgIEFyZ3VtZW50czoKLQotICAgICAgICAgICAgc2VydmVyIC0tIFNlcnZlciBu
YW1lLgotCi0gICAgICAgICAgICBwb3J0IC0tIFBvcnQgbnVtYmVyLgotCi0gICAgICAgICAgICBu
aWNrbmFtZSAtLSBUaGUgbmlja25hbWUuCi0KLSAgICAgICAgICAgIHBhc3N3b3JkIC0tIFBhc3N3
b3JkIChpZiBhbnkpLgotCi0gICAgICAgICAgICB1c2VybmFtZSAtLSBUaGUgdXNlcm5hbWUuCi0K
LSAgICAgICAgICAgIGlyY25hbWUgLS0gVGhlIElSQyBuYW1lICgicmVhbG5hbWUiKS4KLQotICAg
ICAgICAgICAgbG9jYWxhZGRyZXNzIC0tIEJpbmQgdGhlIGNvbm5lY3Rpb24gdG8gYSBzcGVjaWZp
YyBsb2NhbCBJUCBhZGRyZXNzLgotCi0gICAgICAgICAgICBsb2NhbHBvcnQgLS0gQmluZCB0aGUg
Y29ubmVjdGlvbiB0byBhIHNwZWNpZmljIGxvY2FsIHBvcnQuCi0KLSAgICAgICAgICAgIHNzbCAt
LSBFbmFibGUgc3VwcG9ydCBmb3Igc3NsLgotCi0gICAgICAgICAgICBpcHY2IC0tIEVuYWJsZSBz
dXBwb3J0IGZvciBpcHY2LgotCi0gICAgICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB0
byByZWNvbm5lY3QgYSBjbG9zZWQgY29ubmVjdGlvbi4KLQotICAgICAgICBSZXR1cm5zIHRoZSBT
ZXJ2ZXJDb25uZWN0aW9uIG9iamVjdC4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuY29u
bmVjdGVkOgotICAgICAgICAgICAgc2VsZi5kaXNjb25uZWN0KCJDaGFuZ2luZyBzZXJ2ZXJzIikK
LQotICAgICAgICBzZWxmLnByZXZpb3VzX2J1ZmZlciA9ICIiCi0gICAgICAgIHNlbGYuaGFuZGxl
cnMgPSB7fQotICAgICAgICBzZWxmLnJlYWxfc2VydmVyX25hbWUgPSAiIgotICAgICAgICBzZWxm
LnJlYWxfbmlja25hbWUgPSBuaWNrbmFtZQotICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgot
ICAgICAgICBzZWxmLnBvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYubmlja25hbWUgPSBuaWNrbmFt
ZQotICAgICAgICBzZWxmLnVzZXJuYW1lID0gdXNlcm5hbWUgb3Igbmlja25hbWUKLSAgICAgICAg
c2VsZi5pcmNuYW1lID0gaXJjbmFtZSBvciBuaWNrbmFtZQotICAgICAgICBzZWxmLnBhc3N3b3Jk
ID0gcGFzc3dvcmQKLSAgICAgICAgc2VsZi5sb2NhbGFkZHJlc3MgPSBsb2NhbGFkZHJlc3MKLSAg
ICAgICAgc2VsZi5sb2NhbHBvcnQgPSBsb2NhbHBvcnQKLSAgICAgICAgc2VsZi5sb2NhbGhvc3Qg
PSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQotICAgICAgICBpZiBpcHY2OgotICAgICAgICAgICAgc2Vs
Zi5zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfU1RS
RUFNKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBzb2NrZXQuc29j
a2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHRyeToKLSAg
ICAgICAgICAgIHNlbGYuc29ja2V0LmJpbmQoKHNlbGYubG9jYWxhZGRyZXNzLCBzZWxmLmxvY2Fs
cG9ydCkpCi0gICAgICAgICAgICBzZWxmLnNvY2tldC5jb25uZWN0KChzZWxmLnNlcnZlciwgc2Vs
Zi5wb3J0KSkKLSAgICAgICAgICAgIGlmIHNzbDoKLSAgICAgICAgICAgICAgICBzZWxmLnNzbCA9
IHNvY2tldC5zc2woc2VsZi5zb2NrZXQpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIHg6
Ci0gICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLnNvY2tl
dCA9IE5vbmUKLSAgICAgICAgICAgIHJhaXNlIFNlcnZlckNvbm5lY3Rpb25FcnJvciwgIkNvdWxk
bid0IGNvbm5lY3QgdG8gc29ja2V0OiAlcyIgJSB4Ci0gICAgICAgIHNlbGYuY29ubmVjdGVkID0g
MQotICAgICAgICBpZiBzZWxmLmlyY2xpYm9iai5mbl90b19hZGRfc29ja2V0OgotICAgICAgICAg
ICAgc2VsZi5pcmNsaWJvYmouZm5fdG9fYWRkX3NvY2tldChzZWxmLnNvY2tldCkKLQotICAgICAg
ICAjIExvZyBvbi4uLgotICAgICAgICBpZiBzZWxmLnBhc3N3b3JkOgotICAgICAgICAgICAgc2Vs
Zi5wYXNzXyhzZWxmLnBhc3N3b3JkKQotICAgICAgICBzZWxmLm5pY2soc2VsZi5uaWNrbmFtZSkK
LSAgICAgICAgc2VsZi51c2VyKHNlbGYudXNlcm5hbWUsIHNlbGYuaXJjbmFtZSkKLSAgICAgICAg
cmV0dXJuIHNlbGYKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgIiIiQ2xvc2UgdGhl
IGNvbm5lY3Rpb24uCi0KLSAgICAgICAgVGhpcyBtZXRob2QgY2xvc2VzIHRoZSBjb25uZWN0aW9u
IHBlcm1hbmVudGx5OyBhZnRlciBpdCBoYXMKLSAgICAgICAgYmVlbiBjYWxsZWQsIHRoZSBvYmpl
Y3QgaXMgdW51c2FibGUuCi0gICAgICAgICIiIgotCi0gICAgICAgIHNlbGYuZGlzY29ubmVjdCgi
Q2xvc2luZyBvYmplY3QiKQotICAgICAgICBzZWxmLmlyY2xpYm9iai5fcmVtb3ZlX2Nvbm5lY3Rp
b24oc2VsZikKLQotICAgIGRlZiBfZ2V0X3NvY2tldChzZWxmKToKLSAgICAgICAgIiIiW0ludGVy
bmFsXSIiIgotICAgICAgICByZXR1cm4gc2VsZi5zb2NrZXQKLQotICAgIGRlZiBnZXRfc2VydmVy
X25hbWUoc2VsZik6Ci0gICAgICAgICIiIkdldCB0aGUgKHJlYWwpIHNlcnZlciBuYW1lLgotCi0g
ICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIChyZWFsKSBzZXJ2ZXIgbmFtZSwgb3IsIG1v
cmUKLSAgICAgICAgc3BlY2lmaWNhbGx5LCB3aGF0IHRoZSBzZXJ2ZXIgY2FsbHMgaXRzZWxmLgot
ICAgICAgICAiIiIKLQotICAgICAgICBpZiBzZWxmLnJlYWxfc2VydmVyX25hbWU6Ci0gICAgICAg
ICAgICByZXR1cm4gc2VsZi5yZWFsX3NlcnZlcl9uYW1lCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICByZXR1cm4gIiIKLQotICAgIGRlZiBnZXRfbmlja25hbWUoc2VsZik6Ci0gICAgICAgICIi
IkdldCB0aGUgKHJlYWwpIG5pY2sgbmFtZS4KLQotICAgICAgICBUaGlzIG1ldGhvZCByZXR1cm5z
IHRoZSAocmVhbCkgbmlja25hbWUuICBUaGUgbGlicmFyeSBrZWVwcwotICAgICAgICB0cmFjayBv
ZiBuaWNrIGNoYW5nZXMsIHNvIGl0IG1pZ2h0IG5vdCBiZSB0aGUgbmljayBuYW1lIHRoYXQKLSAg
ICAgICAgd2FzIHBhc3NlZCB0byB0aGUgY29ubmVjdCgpIG1ldGhvZC4gICIiIgotCi0gICAgICAg
IHJldHVybiBzZWxmLnJlYWxfbmlja25hbWUKLQotICAgIGRlZiBwcm9jZXNzX2RhdGEoc2VsZik6
Ci0gICAgICAgICIiIltJbnRlcm5hbF0iIiIKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBp
ZiBzZWxmLnNzbDoKLSAgICAgICAgICAgICAgICBuZXdfZGF0YSA9IHNlbGYuc3NsLnJlYWQoMioq
MTQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG5ld19kYXRhID0gc2VsZi5z
b2NrZXQucmVjdigyKioxNCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgeDoKLSAgICAg
ICAgICAgICMgVGhlIHNlcnZlciBodW5nIHVwLgotICAgICAgICAgICAgc2VsZi5kaXNjb25uZWN0
KCJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAg
IGlmIG5vdCBuZXdfZGF0YToKLSAgICAgICAgICAgICMgUmVhZCBub3RoaW5nOiBjb25uZWN0aW9u
IG11c3QgYmUgZG93bi4KLSAgICAgICAgICAgIHNlbGYuZGlzY29ubmVjdCgiQ29ubmVjdGlvbiBy
ZXNldCBieSBwZWVyIikKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGxpbmVzID0gX2xp
bmVzZXBfcmVnZXhwLnNwbGl0KHNlbGYucHJldmlvdXNfYnVmZmVyICsgbmV3X2RhdGEpCi0KLSAg
ICAgICAgIyBTYXZlIHRoZSBsYXN0LCB1bmZpbmlzaGVkIGxpbmUuCi0gICAgICAgIHNlbGYucHJl
dmlvdXNfYnVmZmVyID0gbGluZXMucG9wKCkKLQotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoK
LSAgICAgICAgICAgIGlmIERFQlVHOgotICAgICAgICAgICAgICAgIHByaW50ICJGUk9NIFNFUlZF
UjoiLCBsaW5lCi0KLSAgICAgICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgICAgIGNv
bnRpbnVlCi0KLSAgICAgICAgICAgIHByZWZpeCA9IE5vbmUKLSAgICAgICAgICAgIGNvbW1hbmQg
PSBOb25lCi0gICAgICAgICAgICBhcmd1bWVudHMgPSBOb25lCi0gICAgICAgICAgICBzZWxmLl9o
YW5kbGVfZXZlbnQoRXZlbnQoImFsbF9yYXdfbWVzc2FnZXMiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X3NlcnZlcl9uYW1lKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbbGluZV0pKQotCi0gICAgICAgICAgICBtID0gX3JmY18xNDU5X2NvbW1hbmRf
cmVnZXhwLm1hdGNoKGxpbmUpCi0gICAgICAgICAgICBpZiBtLmdyb3VwKCJwcmVmaXgiKToKLSAg
ICAgICAgICAgICAgICBwcmVmaXggPSBtLmdyb3VwKCJwcmVmaXgiKQotICAgICAgICAgICAgICAg
IGlmIG5vdCBzZWxmLnJlYWxfc2VydmVyX25hbWU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYu
cmVhbF9zZXJ2ZXJfbmFtZSA9IHByZWZpeAotCi0gICAgICAgICAgICBpZiBtLmdyb3VwKCJjb21t
YW5kIik6Ci0gICAgICAgICAgICAgICAgY29tbWFuZCA9IG0uZ3JvdXAoImNvbW1hbmQiKS5sb3dl
cigpCi0KLSAgICAgICAgICAgIGlmIG0uZ3JvdXAoImFyZ3VtZW50Iik6Ci0gICAgICAgICAgICAg
ICAgYSA9IG0uZ3JvdXAoImFyZ3VtZW50Iikuc3BsaXQoIiA6IiwgMSkKLSAgICAgICAgICAgICAg
ICBhcmd1bWVudHMgPSBhWzBdLnNwbGl0KCkKLSAgICAgICAgICAgICAgICBpZiBsZW4oYSkgPT0g
MjoKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChhWzFdKQotCi0gICAgICAg
ICAgICAjIFRyYW5zbGF0ZSBudW1lcmljcyBpbnRvIG1vcmUgcmVhZGFibGUgc3RyaW5ncy4KLSAg
ICAgICAgICAgIGlmIGNvbW1hbmQgaW4gbnVtZXJpY19ldmVudHM6Ci0gICAgICAgICAgICAgICAg
Y29tbWFuZCA9IG51bWVyaWNfZXZlbnRzW2NvbW1hbmRdCi0KLSAgICAgICAgICAgIGlmIGNvbW1h
bmQgPT0gIm5pY2siOgotICAgICAgICAgICAgICAgIGlmIG5tX3RvX24ocHJlZml4KSA9PSBzZWxm
LnJlYWxfbmlja25hbWU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucmVhbF9uaWNrbmFtZSA9
IGFyZ3VtZW50c1swXQotICAgICAgICAgICAgZWxpZiBjb21tYW5kID09ICJ3ZWxjb21lIjoKLSAg
ICAgICAgICAgICAgICAjIFJlY29yZCB0aGUgbmlja25hbWUgaW4gY2FzZSB0aGUgY2xpZW50IGNo
YW5nZWQgbmljawotICAgICAgICAgICAgICAgICMgaW4gYSBuaWNrbmFtZWludXNlIGNhbGxiYWNr
LgotICAgICAgICAgICAgICAgIHNlbGYucmVhbF9uaWNrbmFtZSA9IGFyZ3VtZW50c1swXQotCi0g
ICAgICAgICAgICBpZiBjb21tYW5kIGluIFsicHJpdm1zZyIsICJub3RpY2UiXToKLSAgICAgICAg
ICAgICAgICB0YXJnZXQsIG1lc3NhZ2UgPSBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXQotICAg
ICAgICAgICAgICAgIG1lc3NhZ2VzID0gX2N0Y3BfZGVxdW90ZShtZXNzYWdlKQotCi0gICAgICAg
ICAgICAgICAgaWYgY29tbWFuZCA9PSAicHJpdm1zZyI6Ci0gICAgICAgICAgICAgICAgICAgIGlm
IGlzX2NoYW5uZWwodGFyZ2V0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAi
cHVibXNnIgotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlz
X2NoYW5uZWwodGFyZ2V0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAicHVi
bm90aWNlIgotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAg
ICAgY29tbWFuZCA9ICJwcml2bm90aWNlIgotCi0gICAgICAgICAgICAgICAgZm9yIG0gaW4gbWVz
c2FnZXM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHR5cGUobSkgaXMgdHlwZXMuVHVwbGVUeXBl
OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29tbWFuZCBpbiBbInByaXZtc2ciLCAicHVi
bXNnIl06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9ICJjdGNwIgotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b21tYW5kID0gImN0Y3ByZXBseSIKLQotICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGxpc3Qo
bSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIERFQlVHOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByaW50ICJjb21tYW5kOiAlcywgc291cmNlOiAlcywgdGFyZ2V0OiAlcywgYXJn
dW1lbnRzOiAlcyIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQs
IHByZWZpeCwgdGFyZ2V0LCBtKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxl
X2V2ZW50KEV2ZW50KGNvbW1hbmQsIHByZWZpeCwgdGFyZ2V0LCBtKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIGNvbW1hbmQgPT0gImN0Y3AiIGFuZCBtWzBdID09ICJBQ1RJT04iOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9ldmVudChFdmVudCgiYWN0aW9u
IiwgcHJlZml4LCB0YXJnZXQsIG1bMTpdKSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIERFQlVHOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByaW50ICJjb21tYW5kOiAlcywgc291cmNlOiAlcywgdGFyZ2V0OiAlcywgYXJndW1lbnRz
OiAlcyIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIHByZWZp
eCwgdGFyZ2V0LCBbbV0pCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZXZl
bnQoRXZlbnQoY29tbWFuZCwgcHJlZml4LCB0YXJnZXQsIFttXSkpCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIHRhcmdldCA9IE5vbmUKLQotICAgICAgICAgICAgICAgIGlmIGNv
bW1hbmQgPT0gInF1aXQiOgotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgPSBbYXJndW1l
bnRzWzBdXQotICAgICAgICAgICAgICAgIGVsaWYgY29tbWFuZCA9PSAicGluZyI6Ci0gICAgICAg
ICAgICAgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1swXQotICAgICAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1swXQotICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHMgPSBhcmd1bWVudHNbMTpdCi0KLSAgICAgICAgICAgICAgICBpZiBj
b21tYW5kID09ICJtb2RlIjoKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzX2NoYW5uZWwo
dGFyZ2V0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAidW1vZGUiCi0KLSAg
ICAgICAgICAgICAgICBpZiBERUJVRzoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgImNvbW1h
bmQ6ICVzLCBzb3VyY2U6ICVzLCB0YXJnZXQ6ICVzLCBhcmd1bWVudHM6ICVzIiAlICgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIHByZWZpeCwgdGFyZ2V0LCBhcmd1bWVudHMpCi0g
ICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V2ZW50KEV2ZW50KGNvbW1hbmQsIHByZWZpeCwg
dGFyZ2V0LCBhcmd1bWVudHMpKQotCi0gICAgZGVmIF9oYW5kbGVfZXZlbnQoc2VsZiwgZXZlbnQp
OgotICAgICAgICAiIiJbSW50ZXJuYWxdIiIiCi0gICAgICAgIHNlbGYuaXJjbGlib2JqLl9oYW5k
bGVfZXZlbnQoc2VsZiwgZXZlbnQpCi0gICAgICAgIGlmIGV2ZW50LmV2ZW50dHlwZSgpIGluIHNl
bGYuaGFuZGxlcnM6Ci0gICAgICAgICAgICBmb3IgZm4gaW4gc2VsZi5oYW5kbGVyc1tldmVudC5l
dmVudHR5cGUoKV06Ci0gICAgICAgICAgICAgICAgZm4oc2VsZiwgZXZlbnQpCi0KLSAgICBkZWYg
aXNfY29ubmVjdGVkKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gY29ubmVjdGlvbiBzdGF0dXMu
Ci0KLSAgICAgICAgUmV0dXJucyB0cnVlIGlmIGNvbm5lY3RlZCwgb3RoZXJ3aXNlIGZhbHNlLgot
ICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGVkCi0KLSAgICBkZWYgYWRk
X2dsb2JhbF9oYW5kbGVyKHNlbGYsICphcmdzKToKLSAgICAgICAgIiIiQWRkIGdsb2JhbCBoYW5k
bGVyLgotCi0gICAgICAgIFNlZSBkb2N1bWVudGF0aW9uIGZvciBJUkMuYWRkX2dsb2JhbF9oYW5k
bGVyLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5pcmNsaWJvYmouYWRkX2dsb2JhbF9oYW5k
bGVyKCphcmdzKQotCi0gICAgZGVmIHJlbW92ZV9nbG9iYWxfaGFuZGxlcihzZWxmLCAqYXJncyk6
Ci0gICAgICAgICIiIlJlbW92ZSBnbG9iYWwgaGFuZGxlci4KLQotICAgICAgICBTZWUgZG9jdW1l
bnRhdGlvbiBmb3IgSVJDLnJlbW92ZV9nbG9iYWxfaGFuZGxlci4KLSAgICAgICAgIiIiCi0gICAg
ICAgIHNlbGYuaXJjbGlib2JqLnJlbW92ZV9nbG9iYWxfaGFuZGxlcigqYXJncykKLQotICAgIGRl
ZiBhY3Rpb24oc2VsZiwgdGFyZ2V0LCBhY3Rpb24pOgotICAgICAgICAiIiJTZW5kIGEgQ1RDUCBB
Q1RJT04gY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5jdGNwKCJBQ1RJT04iLCB0YXJnZXQsIGFj
dGlvbikKLQotICAgIGRlZiBhZG1pbihzZWxmLCBzZXJ2ZXI9IiIpOgotICAgICAgICAiIiJTZW5k
IGFuIEFETUlOIGNvbW1hbmQuIiIiCi0gICAgICAgIHNlbGYuc2VuZF9yYXcoIiAiLmpvaW4oWyJB
RE1JTiIsIHNlcnZlcl0pLnN0cmlwKCkpCi0KLSAgICBkZWYgY3RjcChzZWxmLCBjdGNwdHlwZSwg
dGFyZ2V0LCBwYXJhbWV0ZXI9IiIpOgotICAgICAgICAiIiJTZW5kIGEgQ1RDUCBjb21tYW5kLiIi
IgotICAgICAgICBjdGNwdHlwZSA9IGN0Y3B0eXBlLnVwcGVyKCkKLSAgICAgICAgc2VsZi5wcml2
bXNnKHRhcmdldCwgIlwwMDElcyVzXDAwMSIgJSAoY3RjcHR5cGUsIHBhcmFtZXRlciBhbmQgKCIg
IiArIHBhcmFtZXRlcikgb3IgIiIpKQotCi0gICAgZGVmIGN0Y3BfcmVwbHkoc2VsZiwgdGFyZ2V0
LCBwYXJhbWV0ZXIpOgotICAgICAgICAiIiJTZW5kIGEgQ1RDUCBSRVBMWSBjb21tYW5kLiIiIgot
ICAgICAgICBzZWxmLm5vdGljZSh0YXJnZXQsICJcMDAxJXNcMDAxIiAlIHBhcmFtZXRlcikKLQot
ICAgIGRlZiBkaXNjb25uZWN0KHNlbGYsIG1lc3NhZ2U9IiIpOgotICAgICAgICAiIiJIYW5nIHVw
IHRoZSBjb25uZWN0aW9uLgotCi0gICAgICAgIEFyZ3VtZW50czoKLQotICAgICAgICAgICAgbWVz
c2FnZSAtLSBRdWl0IG1lc3NhZ2UuCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5j
b25uZWN0ZWQ6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBzZWxmLmNvbm5lY3RlZCA9
IDAKLQotICAgICAgICBzZWxmLnF1aXQobWVzc2FnZSkKLQotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIHg6
Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuc29ja2V0ID0gTm9uZQotICAgICAgICBz
ZWxmLl9oYW5kbGVfZXZlbnQoRXZlbnQoImRpc2Nvbm5lY3QiLCBzZWxmLnNlcnZlciwgIiIsIFtt
ZXNzYWdlXSkpCi0KLSAgICBkZWYgZ2xvYm9wcyhzZWxmLCB0ZXh0KToKLSAgICAgICAgIiIiU2Vu
ZCBhIEdMT0JPUFMgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiR0xPQk9QUyA6
IiArIHRleHQpCi0KLSAgICBkZWYgaW5mbyhzZWxmLCBzZXJ2ZXI9IiIpOgotICAgICAgICAiIiJT
ZW5kIGFuIElORk8gY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiICIuam9pbihb
IklORk8iLCBzZXJ2ZXJdKS5zdHJpcCgpKQotCi0gICAgZGVmIGludml0ZShzZWxmLCBuaWNrLCBj
aGFubmVsKToKLSAgICAgICAgIiIiU2VuZCBhbiBJTlZJVEUgY29tbWFuZC4iIiIKLSAgICAgICAg
c2VsZi5zZW5kX3JhdygiICIuam9pbihbIklOVklURSIsIG5pY2ssIGNoYW5uZWxdKS5zdHJpcCgp
KQotCi0gICAgZGVmIGlzb24oc2VsZiwgbmlja3MpOgotICAgICAgICAiIiJTZW5kIGFuIElTT04g
Y29tbWFuZC4KLQotICAgICAgICBBcmd1bWVudHM6Ci0KLSAgICAgICAgICAgIG5pY2tzIC0tIExp
c3Qgb2Ygbmlja3MuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLnNlbmRfcmF3KCJJU09OICIg
KyAiICIuam9pbihuaWNrcykpCi0KLSAgICBkZWYgam9pbihzZWxmLCBjaGFubmVsLCBrZXk9IiIp
OgotICAgICAgICAiIiJTZW5kIGEgSk9JTiBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNlbmRf
cmF3KCJKT0lOICVzJXMiICUgKGNoYW5uZWwsIChrZXkgYW5kICgiICIgKyBrZXkpKSkpCi0KLSAg
ICBkZWYga2ljayhzZWxmLCBjaGFubmVsLCBuaWNrLCBjb21tZW50PSIiKToKLSAgICAgICAgIiIi
U2VuZCBhIEtJQ0sgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiS0lDSyAlcyAl
cyVzIiAlIChjaGFubmVsLCBuaWNrLCAoY29tbWVudCBhbmQgKCIgOiIgKyBjb21tZW50KSkpKQot
Ci0gICAgZGVmIGxpbmtzKHNlbGYsIHJlbW90ZV9zZXJ2ZXI9IiIsIHNlcnZlcl9tYXNrPSIiKToK
LSAgICAgICAgIiIiU2VuZCBhIExJTktTIGNvbW1hbmQuIiIiCi0gICAgICAgIGNvbW1hbmQgPSAi
TElOS1MiCi0gICAgICAgIGlmIHJlbW90ZV9zZXJ2ZXI6Ci0gICAgICAgICAgICBjb21tYW5kID0g
Y29tbWFuZCArICIgIiArIHJlbW90ZV9zZXJ2ZXIKLSAgICAgICAgaWYgc2VydmVyX21hc2s6Ci0g
ICAgICAgICAgICBjb21tYW5kID0gY29tbWFuZCArICIgIiArIHNlcnZlcl9tYXNrCi0gICAgICAg
IHNlbGYuc2VuZF9yYXcoY29tbWFuZCkKLQotICAgIGRlZiBsaXN0KHNlbGYsIGNoYW5uZWxzPU5v
bmUsIHNlcnZlcj0iIik6Ci0gICAgICAgICIiIlNlbmQgYSBMSVNUIGNvbW1hbmQuIiIiCi0gICAg
ICAgIGNvbW1hbmQgPSAiTElTVCIKLSAgICAgICAgaWYgY2hhbm5lbHM6Ci0gICAgICAgICAgICBj
b21tYW5kID0gY29tbWFuZCArICIgIiArICIsIi5qb2luKGNoYW5uZWxzKQotICAgICAgICBpZiBz
ZXJ2ZXI6Ci0gICAgICAgICAgICBjb21tYW5kID0gY29tbWFuZCArICIgIiArIHNlcnZlcgotICAg
ICAgICBzZWxmLnNlbmRfcmF3KGNvbW1hbmQpCi0KLSAgICBkZWYgbHVzZXJzKHNlbGYsIHNlcnZl
cj0iIik6Ci0gICAgICAgICIiIlNlbmQgYSBMVVNFUlMgY29tbWFuZC4iIiIKLSAgICAgICAgc2Vs
Zi5zZW5kX3JhdygiTFVTRVJTIiArIChzZXJ2ZXIgYW5kICgiICIgKyBzZXJ2ZXIpKSkKLQotICAg
IGRlZiBtb2RlKHNlbGYsIHRhcmdldCwgY29tbWFuZCk6Ci0gICAgICAgICIiIlNlbmQgYSBNT0RF
IGNvbW1hbmQuIiIiCi0gICAgICAgIHNlbGYuc2VuZF9yYXcoIk1PREUgJXMgJXMiICUgKHRhcmdl
dCwgY29tbWFuZCkpCi0KLSAgICBkZWYgbW90ZChzZWxmLCBzZXJ2ZXI9IiIpOgotICAgICAgICAi
IiJTZW5kIGFuIE1PVEQgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiTU9URCIg
KyAoc2VydmVyIGFuZCAoIiAiICsgc2VydmVyKSkpCi0KLSAgICBkZWYgbmFtZXMoc2VsZiwgY2hh
bm5lbHM9Tm9uZSk6Ci0gICAgICAgICIiIlNlbmQgYSBOQU1FUyBjb21tYW5kLiIiIgotICAgICAg
ICBzZWxmLnNlbmRfcmF3KCJOQU1FUyIgKyAoY2hhbm5lbHMgYW5kICgiICIgKyAiLCIuam9pbihj
aGFubmVscykpIG9yICIiKSkKLQotICAgIGRlZiBuaWNrKHNlbGYsIG5ld25pY2spOgotICAgICAg
ICAiIiJTZW5kIGEgTklDSyBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNlbmRfcmF3KCJOSUNL
ICIgKyBuZXduaWNrKQotCi0gICAgZGVmIG5vdGljZShzZWxmLCB0YXJnZXQsIHRleHQpOgotICAg
ICAgICAiIiJTZW5kIGEgTk9USUNFIGNvbW1hbmQuIiIiCi0gICAgICAgICMgU2hvdWxkIGxpbWl0
IGxlbih0ZXh0KSBoZXJlIQotICAgICAgICBzZWxmLnNlbmRfcmF3KCJOT1RJQ0UgJXMgOiVzIiAl
ICh0YXJnZXQsIHRleHQpKQotCi0gICAgZGVmIG9wZXIoc2VsZiwgbmljaywgcGFzc3dvcmQpOgot
ICAgICAgICAiIiJTZW5kIGFuIE9QRVIgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3Jh
dygiT1BFUiAlcyAlcyIgJSAobmljaywgcGFzc3dvcmQpKQotCi0gICAgZGVmIHBhcnQoc2VsZiwg
Y2hhbm5lbHMsIG1lc3NhZ2U9IiIpOgotICAgICAgICAiIiJTZW5kIGEgUEFSVCBjb21tYW5kLiIi
IgotICAgICAgICBpZiB0eXBlKGNoYW5uZWxzKSA9PSB0eXBlcy5TdHJpbmdUeXBlOgotICAgICAg
ICAgICAgc2VsZi5zZW5kX3JhdygiUEFSVCAiICsgY2hhbm5lbHMgKyAobWVzc2FnZSBhbmQgKCIg
IiArIG1lc3NhZ2UpKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2VuZF9yYXco
IlBBUlQgIiArICIsIi5qb2luKGNoYW5uZWxzKSArIChtZXNzYWdlIGFuZCAoIiAiICsgbWVzc2Fn
ZSkpKQotCi0gICAgZGVmIHBhc3NfKHNlbGYsIHBhc3N3b3JkKToKLSAgICAgICAgIiIiU2VuZCBh
IFBBU1MgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiUEFTUyAiICsgcGFzc3dv
cmQpCi0KLSAgICBkZWYgcGluZyhzZWxmLCB0YXJnZXQsIHRhcmdldDI9IiIpOgotICAgICAgICAi
IiJTZW5kIGEgUElORyBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNlbmRfcmF3KCJQSU5HICVz
JXMiICUgKHRhcmdldCwgdGFyZ2V0MiBhbmQgKCIgIiArIHRhcmdldDIpKSkKLQotICAgIGRlZiBw
b25nKHNlbGYsIHRhcmdldCwgdGFyZ2V0Mj0iIik6Ci0gICAgICAgICIiIlNlbmQgYSBQT05HIGNv
bW1hbmQuIiIiCi0gICAgICAgIHNlbGYuc2VuZF9yYXcoIlBPTkcgJXMlcyIgJSAodGFyZ2V0LCB0
YXJnZXQyIGFuZCAoIiAiICsgdGFyZ2V0MikpKQotCi0gICAgZGVmIHByaXZtc2coc2VsZiwgdGFy
Z2V0LCB0ZXh0KToKLSAgICAgICAgIiIiU2VuZCBhIFBSSVZNU0cgY29tbWFuZC4iIiIKLSAgICAg
ICAgIyBTaG91bGQgbGltaXQgbGVuKHRleHQpIGhlcmUhCi0gICAgICAgIHNlbGYuc2VuZF9yYXco
IlBSSVZNU0cgJXMgOiVzIiAlICh0YXJnZXQsIHRleHQpKQotCi0gICAgZGVmIHByaXZtc2dfbWFu
eShzZWxmLCB0YXJnZXRzLCB0ZXh0KToKLSAgICAgICAgIiIiU2VuZCBhIFBSSVZNU0cgY29tbWFu
ZCB0byBtdWx0aXBsZSB0YXJnZXRzLiIiIgotICAgICAgICAjIFNob3VsZCBsaW1pdCBsZW4odGV4
dCkgaGVyZSEKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiUFJJVk1TRyAlcyA6JXMiICUgKCIsIi5q
b2luKHRhcmdldHMpLCB0ZXh0KSkKLQotICAgIGRlZiBxdWl0KHNlbGYsIG1lc3NhZ2U9IiIpOgot
ICAgICAgICAiIiJTZW5kIGEgUVVJVCBjb21tYW5kLiIiIgotICAgICAgICAjIE5vdGUgdGhhdCBt
YW55IElSQyBzZXJ2ZXJzIGRvbid0IHVzZSB5b3VyIFFVSVQgbWVzc2FnZQotICAgICAgICAjIHVu
bGVzcyB5b3UndmUgYmVlbiBjb25uZWN0ZWQgZm9yIGF0IGxlYXN0IDUgbWludXRlcyEKLSAgICAg
ICAgc2VsZi5zZW5kX3JhdygiUVVJVCIgKyAobWVzc2FnZSBhbmQgKCIgOiIgKyBtZXNzYWdlKSkp
Ci0KLSAgICBkZWYgc2VuZF9yYXcoc2VsZiwgc3RyaW5nKToKLSAgICAgICAgIiIiU2VuZCByYXcg
c3RyaW5nIHRvIHRoZSBzZXJ2ZXIuCi0KLSAgICAgICAgVGhlIHN0cmluZyB3aWxsIGJlIHBhZGRl
ZCB3aXRoIGFwcHJvcHJpYXRlIENSIExGLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5z
b2NrZXQgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIFNlcnZlck5vdENvbm5lY3RlZEVycm9y
LCAiTm90IGNvbm5lY3RlZC4iCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIHNlbGYuc3Ns
OgotICAgICAgICAgICAgICAgIHNlbGYuc3NsLndyaXRlKHN0cmluZyArICJcclxuIikKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChzdHJpbmcgKyAi
XHJcbiIpCi0gICAgICAgICAgICBpZiBERUJVRzoKLSAgICAgICAgICAgICAgICBwcmludCAiVE8g
U0VSVkVSOiIsIHN0cmluZwotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCB4OgotICAgICAg
ICAgICAgIyBPdWNoIQotICAgICAgICAgICAgc2VsZi5kaXNjb25uZWN0KCJDb25uZWN0aW9uIHJl
c2V0IGJ5IHBlZXIuIikKLQotICAgIGRlZiBzcXVpdChzZWxmLCBzZXJ2ZXIsIGNvbW1lbnQ9IiIp
OgotICAgICAgICAiIiJTZW5kIGFuIFNRVUlUIGNvbW1hbmQuIiIiCi0gICAgICAgIHNlbGYuc2Vu
ZF9yYXcoIlNRVUlUICVzJXMiICUgKHNlcnZlciwgY29tbWVudCBhbmQgKCIgOiIgKyBjb21tZW50
KSkpCi0KLSAgICBkZWYgc3RhdHMoc2VsZiwgc3RhdHN0eXBlLCBzZXJ2ZXI9IiIpOgotICAgICAg
ICAiIiJTZW5kIGEgU1RBVFMgY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5zZW5kX3JhdygiU1RB
VFMgJXMlcyIgJSAoc3RhdHN0eXBlLCBzZXJ2ZXIgYW5kICgiICIgKyBzZXJ2ZXIpKSkKLQotICAg
IGRlZiB0aW1lKHNlbGYsIHNlcnZlcj0iIik6Ci0gICAgICAgICIiIlNlbmQgYSBUSU1FIGNvbW1h
bmQuIiIiCi0gICAgICAgIHNlbGYuc2VuZF9yYXcoIlRJTUUiICsgKHNlcnZlciBhbmQgKCIgIiAr
IHNlcnZlcikpKQotCi0gICAgZGVmIHRvcGljKHNlbGYsIGNoYW5uZWwsIG5ld190b3BpYz1Ob25l
KToKLSAgICAgICAgIiIiU2VuZCBhIFRPUElDIGNvbW1hbmQuIiIiCi0gICAgICAgIGlmIG5ld190
b3BpYyBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5zZW5kX3JhdygiVE9QSUMgIiArIGNoYW5u
ZWwpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnNlbmRfcmF3KCJUT1BJQyAlcyA6
JXMiICUgKGNoYW5uZWwsIG5ld190b3BpYykpCi0KLSAgICBkZWYgdHJhY2Uoc2VsZiwgdGFyZ2V0
PSIiKToKLSAgICAgICAgIiIiU2VuZCBhIFRSQUNFIGNvbW1hbmQuIiIiCi0gICAgICAgIHNlbGYu
c2VuZF9yYXcoIlRSQUNFIiArICh0YXJnZXQgYW5kICgiICIgKyB0YXJnZXQpKSkKLQotICAgIGRl
ZiB1c2VyKHNlbGYsIHVzZXJuYW1lLCByZWFsbmFtZSk6Ci0gICAgICAgICIiIlNlbmQgYSBVU0VS
IGNvbW1hbmQuIiIiCi0gICAgICAgIHNlbGYuc2VuZF9yYXcoIlVTRVIgJXMgMCAqIDolcyIgJSAo
dXNlcm5hbWUsIHJlYWxuYW1lKSkKLQotICAgIGRlZiB1c2VyaG9zdChzZWxmLCBuaWNrcyk6Ci0g
ICAgICAgICIiIlNlbmQgYSBVU0VSSE9TVCBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNlbmRf
cmF3KCJVU0VSSE9TVCAiICsgIiwiLmpvaW4obmlja3MpKQotCi0gICAgZGVmIHVzZXJzKHNlbGYs
IHNlcnZlcj0iIik6Ci0gICAgICAgICIiIlNlbmQgYSBVU0VSUyBjb21tYW5kLiIiIgotICAgICAg
ICBzZWxmLnNlbmRfcmF3KCJVU0VSUyIgKyAoc2VydmVyIGFuZCAoIiAiICsgc2VydmVyKSkpCi0K
LSAgICBkZWYgdmVyc2lvbihzZWxmLCBzZXJ2ZXI9IiIpOgotICAgICAgICAiIiJTZW5kIGEgVkVS
U0lPTiBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNlbmRfcmF3KCJWRVJTSU9OIiArIChzZXJ2
ZXIgYW5kICgiICIgKyBzZXJ2ZXIpKSkKLQotICAgIGRlZiB3YWxsb3BzKHNlbGYsIHRleHQpOgot
ICAgICAgICAiIiJTZW5kIGEgV0FMTE9QUyBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNlbmRf
cmF3KCJXQUxMT1BTIDoiICsgdGV4dCkKLQotICAgIGRlZiB3aG8oc2VsZiwgdGFyZ2V0PSIiLCBv
cD0iIik6Ci0gICAgICAgICIiIlNlbmQgYSBXSE8gY29tbWFuZC4iIiIKLSAgICAgICAgc2VsZi5z
ZW5kX3JhdygiV0hPJXMlcyIgJSAodGFyZ2V0IGFuZCAoIiAiICsgdGFyZ2V0KSwgb3AgYW5kICgi
IG8iKSkpCi0KLSAgICBkZWYgd2hvaXMoc2VsZiwgdGFyZ2V0cyk6Ci0gICAgICAgICIiIlNlbmQg
YSBXSE9JUyBjb21tYW5kLiIiIgotICAgICAgICBzZWxmLnNlbmRfcmF3KCJXSE9JUyAiICsgIiwi
LmpvaW4odGFyZ2V0cykpCi0KLSAgICBkZWYgd2hvd2FzKHNlbGYsIG5pY2ssIG1heD0iIiwgc2Vy
dmVyPSIiKToKLSAgICAgICAgIiIiU2VuZCBhIFdIT1dBUyBjb21tYW5kLiIiIgotICAgICAgICBz
ZWxmLnNlbmRfcmF3KCJXSE9XQVMgJXMlcyVzIiAlIChuaWNrLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXggYW5kICgiICIgKyBtYXgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIgYW5kICgiICIgKyBzZXJ2ZXIpKSkK
LQotY2xhc3MgRENDQ29ubmVjdGlvbkVycm9yKElSQ0Vycm9yKToKLSAgICBwYXNzCi0KLQotY2xh
c3MgRENDQ29ubmVjdGlvbihDb25uZWN0aW9uKToKLSAgICAiIiJUaGlzIGNsYXNzIHJlcHJlc2Vu
dHMgYSBEQ0MgY29ubmVjdGlvbi4KLQotICAgIERDQ0Nvbm5lY3Rpb24gb2JqZWN0cyBhcmUgaW5z
dGFudGlhdGVkIGJ5IGNhbGxpbmcgdGhlIGRjYwotICAgIG1ldGhvZCBvbiBhbiBJUkMgb2JqZWN0
LgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpcmNsaWJvYmosIGRjY3R5cGUpOgot
ICAgICAgICBDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGlyY2xpYm9iaikKLSAgICAgICAgc2Vs
Zi5jb25uZWN0ZWQgPSAwCi0gICAgICAgIHNlbGYucGFzc2l2ZSA9IDAKLSAgICAgICAgc2VsZi5k
Y2N0eXBlID0gZGNjdHlwZQotICAgICAgICBzZWxmLnBlZXJhZGRyZXNzID0gTm9uZQotICAgICAg
ICBzZWxmLnBlZXJwb3J0ID0gTm9uZQotCi0gICAgZGVmIGNvbm5lY3Qoc2VsZiwgYWRkcmVzcywg
cG9ydCk6Ci0gICAgICAgICIiIkNvbm5lY3QvcmVjb25uZWN0IHRvIGEgRENDIHBlZXIuCi0KLSAg
ICAgICAgQXJndW1lbnRzOgotICAgICAgICAgICAgYWRkcmVzcyAtLSBIb3N0L0lQIGFkZHJlc3Mg
b2YgdGhlIHBlZXIuCi0KLSAgICAgICAgICAgIHBvcnQgLS0gVGhlIHBvcnQgbnVtYmVyIHRvIGNv
bm5lY3QgdG8uCi0KLSAgICAgICAgUmV0dXJucyB0aGUgRENDQ29ubmVjdGlvbiBvYmplY3QuCi0g
ICAgICAgICIiIgotICAgICAgICBzZWxmLnBlZXJhZGRyZXNzID0gc29ja2V0LmdldGhvc3RieW5h
bWUoYWRkcmVzcykKLSAgICAgICAgc2VsZi5wZWVycG9ydCA9IHBvcnQKLSAgICAgICAgc2VsZi5z
b2NrZXQgPSBOb25lCi0gICAgICAgIHNlbGYucHJldmlvdXNfYnVmZmVyID0gIiIKLSAgICAgICAg
c2VsZi5oYW5kbGVycyA9IHt9Ci0gICAgICAgIHNlbGYuc29ja2V0ID0gc29ja2V0LnNvY2tldChz
b2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICBzZWxmLnBhc3NpdmUg
PSAwCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuc29ja2V0LmNvbm5lY3QoKHNlbGYu
cGVlcmFkZHJlc3MsIHNlbGYucGVlcnBvcnQpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9y
LCB4OgotICAgICAgICAgICAgcmFpc2UgRENDQ29ubmVjdGlvbkVycm9yLCAiQ291bGRuJ3QgY29u
bmVjdCB0byBzb2NrZXQ6ICVzIiAlIHgKLSAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSAxCi0gICAg
ICAgIGlmIHNlbGYuaXJjbGlib2JqLmZuX3RvX2FkZF9zb2NrZXQ6Ci0gICAgICAgICAgICBzZWxm
LmlyY2xpYm9iai5mbl90b19hZGRfc29ja2V0KHNlbGYuc29ja2V0KQotICAgICAgICByZXR1cm4g
c2VsZgotCi0gICAgZGVmIGxpc3RlbihzZWxmKToKLSAgICAgICAgIiIiV2FpdCBmb3IgYSBjb25u
ZWN0aW9uL3JlY29ubmVjdGlvbiBmcm9tIGEgRENDIHBlZXIuCi0KLSAgICAgICAgUmV0dXJucyB0
aGUgRENDQ29ubmVjdGlvbiBvYmplY3QuCi0KLSAgICAgICAgVGhlIGxvY2FsIElQIGFkZHJlc3Mg
YW5kIHBvcnQgYXJlIGF2YWlsYWJsZSBhcwotICAgICAgICBzZWxmLmxvY2FsYWRkcmVzcyBhbmQg
c2VsZi5sb2NhbHBvcnQuICBBZnRlciBjb25uZWN0aW9uIGZyb20gYQotICAgICAgICBwZWVyLCB0
aGUgcGVlciBhZGRyZXNzIGFuZCBwb3J0IGFyZSBhdmFpbGFibGUgYXMKLSAgICAgICAgc2VsZi5w
ZWVyYWRkcmVzcyBhbmQgc2VsZi5wZWVycG9ydC4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYu
cHJldmlvdXNfYnVmZmVyID0gIiIKLSAgICAgICAgc2VsZi5oYW5kbGVycyA9IHt9Ci0gICAgICAg
IHNlbGYuc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tf
U1RSRUFNKQotICAgICAgICBzZWxmLnBhc3NpdmUgPSAxCi0gICAgICAgIHRyeToKLSAgICAgICAg
ICAgIHNlbGYuc29ja2V0LmJpbmQoKHNvY2tldC5nZXRob3N0YnluYW1lKHNvY2tldC5nZXRob3N0
bmFtZSgpKSwgMCkpCi0gICAgICAgICAgICBzZWxmLmxvY2FsYWRkcmVzcywgc2VsZi5sb2NhbHBv
cnQgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpCi0gICAgICAgICAgICBzZWxmLnNvY2tldC5s
aXN0ZW4oMTApCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIHg6Ci0gICAgICAgICAgICBy
YWlzZSBEQ0NDb25uZWN0aW9uRXJyb3IsICJDb3VsZG4ndCBiaW5kIHNvY2tldDogJXMiICUgeAot
ICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIGRpc2Nvbm5lY3Qoc2VsZiwgbWVzc2FnZT0i
Iik6Ci0gICAgICAgICIiIkhhbmcgdXAgdGhlIGNvbm5lY3Rpb24gYW5kIGNsb3NlIHRoZSBvYmpl
Y3QuCi0KLSAgICAgICAgQXJndW1lbnRzOgotCi0gICAgICAgICAgICBtZXNzYWdlIC0tIFF1aXQg
bWVzc2FnZS4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLmNvbm5lY3RlZDoKLSAg
ICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHNlbGYuY29ubmVjdGVkID0gMAotICAgICAgICB0
cnk6Ci0gICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBzb2Nr
ZXQuZXJyb3IsIHg6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuc29ja2V0ID0gTm9u
ZQotICAgICAgICBzZWxmLmlyY2xpYm9iai5faGFuZGxlX2V2ZW50KAotICAgICAgICAgICAgc2Vs
ZiwKLSAgICAgICAgICAgIEV2ZW50KCJkY2NfZGlzY29ubmVjdCIsIHNlbGYucGVlcmFkZHJlc3Ms
ICIiLCBbbWVzc2FnZV0pKQotICAgICAgICBzZWxmLmlyY2xpYm9iai5fcmVtb3ZlX2Nvbm5lY3Rp
b24oc2VsZikKLQotICAgIGRlZiBwcm9jZXNzX2RhdGEoc2VsZik6Ci0gICAgICAgICIiIltJbnRl
cm5hbF0iIiIKLQotICAgICAgICBpZiBzZWxmLnBhc3NpdmUgYW5kIG5vdCBzZWxmLmNvbm5lY3Rl
ZDoKLSAgICAgICAgICAgIGNvbm4sIChzZWxmLnBlZXJhZGRyZXNzLCBzZWxmLnBlZXJwb3J0KSA9
IHNlbGYuc29ja2V0LmFjY2VwdCgpCi0gICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCi0g
ICAgICAgICAgICBzZWxmLnNvY2tldCA9IGNvbm4KLSAgICAgICAgICAgIHNlbGYuY29ubmVjdGVk
ID0gMQotICAgICAgICAgICAgaWYgREVCVUc6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIkRDQyBj
b25uZWN0aW9uIGZyb20gJXM6JWQiICUgKAotICAgICAgICAgICAgICAgICAgICBzZWxmLnBlZXJh
ZGRyZXNzLCBzZWxmLnBlZXJwb3J0KQotICAgICAgICAgICAgc2VsZi5pcmNsaWJvYmouX2hhbmRs
ZV9ldmVudCgKLSAgICAgICAgICAgICAgICBzZWxmLAotICAgICAgICAgICAgICAgIEV2ZW50KCJk
Y2NfY29ubmVjdCIsIHNlbGYucGVlcmFkZHJlc3MsIE5vbmUsIE5vbmUpKQotICAgICAgICAgICAg
cmV0dXJuCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbmV3X2RhdGEgPSBzZWxmLnNvY2tl
dC5yZWN2KDIqKjE0KQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCB4OgotICAgICAgICAg
ICAgIyBUaGUgc2VydmVyIGh1bmcgdXAuCi0gICAgICAgICAgICBzZWxmLmRpc2Nvbm5lY3QoIkNv
bm5lY3Rpb24gcmVzZXQgYnkgcGVlciIpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYg
bm90IG5ld19kYXRhOgotICAgICAgICAgICAgIyBSZWFkIG5vdGhpbmc6IGNvbm5lY3Rpb24gbXVz
dCBiZSBkb3duLgotICAgICAgICAgICAgc2VsZi5kaXNjb25uZWN0KCJDb25uZWN0aW9uIHJlc2V0
IGJ5IHBlZXIiKQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgaWYgc2VsZi5kY2N0eXBl
ID09ICJjaGF0IjoKLSAgICAgICAgICAgICMgVGhlIHNwZWNpZmljYXRpb24gc2F5cyBsaW5lcyBh
cmUgdGVybWluYXRlZCB3aXRoIExGLCBidXQKLSAgICAgICAgICAgICMgaXQgc2VlbXMgc2FmZXIg
dG8gaGFuZGxlIENSIExGIHRlcm1pbmF0aW9ucyB0b28uCi0gICAgICAgICAgICBjaHVua3MgPSBf
bGluZXNlcF9yZWdleHAuc3BsaXQoc2VsZi5wcmV2aW91c19idWZmZXIgKyBuZXdfZGF0YSkKLQot
ICAgICAgICAgICAgIyBTYXZlIHRoZSBsYXN0LCB1bmZpbmlzaGVkIGxpbmUuCi0gICAgICAgICAg
ICBzZWxmLnByZXZpb3VzX2J1ZmZlciA9IGNodW5rc1stMV0KLSAgICAgICAgICAgIGlmIGxlbihz
ZWxmLnByZXZpb3VzX2J1ZmZlcikgPiAyKioxNDoKLSAgICAgICAgICAgICAgICAjIEJhZCBwZWVy
ISBOYXVnaHR5IHBlZXIhCi0gICAgICAgICAgICAgICAgc2VsZi5kaXNjb25uZWN0KCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGNodW5rcyA9IGNodW5rc1s6LTFdCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBjaHVua3MgPSBbbmV3X2RhdGFdCi0KLSAgICAgICAgY29t
bWFuZCA9ICJkY2Ntc2ciCi0gICAgICAgIHByZWZpeCA9IHNlbGYucGVlcmFkZHJlc3MKLSAgICAg
ICAgdGFyZ2V0ID0gTm9uZQotICAgICAgICBmb3IgY2h1bmsgaW4gY2h1bmtzOgotICAgICAgICAg
ICAgaWYgREVCVUc6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIkZST00gUEVFUjoiLCBjaHVuawot
ICAgICAgICAgICAgYXJndW1lbnRzID0gW2NodW5rXQotICAgICAgICAgICAgaWYgREVCVUc6Ci0g
ICAgICAgICAgICAgICAgcHJpbnQgImNvbW1hbmQ6ICVzLCBzb3VyY2U6ICVzLCB0YXJnZXQ6ICVz
LCBhcmd1bWVudHM6ICVzIiAlICgKLSAgICAgICAgICAgICAgICAgICAgY29tbWFuZCwgcHJlZml4
LCB0YXJnZXQsIGFyZ3VtZW50cykKLSAgICAgICAgICAgIHNlbGYuaXJjbGlib2JqLl9oYW5kbGVf
ZXZlbnQoCi0gICAgICAgICAgICAgICAgc2VsZiwKLSAgICAgICAgICAgICAgICBFdmVudChjb21t
YW5kLCBwcmVmaXgsIHRhcmdldCwgYXJndW1lbnRzKSkKLQotICAgIGRlZiBfZ2V0X3NvY2tldChz
ZWxmKToKLSAgICAgICAgIiIiW0ludGVybmFsXSIiIgotICAgICAgICByZXR1cm4gc2VsZi5zb2Nr
ZXQKLQotICAgIGRlZiBwcml2bXNnKHNlbGYsIHN0cmluZyk6Ci0gICAgICAgICIiIlNlbmQgZGF0
YSB0byBEQ0MgcGVlci4KLQotICAgICAgICBUaGUgc3RyaW5nIHdpbGwgYmUgcGFkZGVkIHdpdGgg
YXBwcm9wcmlhdGUgTEYgaWYgaXQncyBhIERDQwotICAgICAgICBDSEFUIHNlc3Npb24uCi0gICAg
ICAgICIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kKHN0cmlu
ZykKLSAgICAgICAgICAgIGlmIHNlbGYuZGNjdHlwZSA9PSAiY2hhdCI6Ci0gICAgICAgICAgICAg
ICAgc2VsZi5zb2NrZXQuc2VuZCgiXG4iKQotICAgICAgICAgICAgaWYgREVCVUc6Ci0gICAgICAg
ICAgICAgICAgcHJpbnQgIlRPIFBFRVI6ICVzXG4iICUgc3RyaW5nCi0gICAgICAgIGV4Y2VwdCBz
b2NrZXQuZXJyb3IsIHg6Ci0gICAgICAgICAgICAjIE91Y2ghCi0gICAgICAgICAgICBzZWxmLmRp
c2Nvbm5lY3QoIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlci4iKQotCi1jbGFzcyBTaW1wbGVJUkND
bGllbnQ6Ci0gICAgIiIiQSBzaW1wbGUgc2luZ2xlLXNlcnZlciBJUkMgY2xpZW50IGNsYXNzLgot
Ci0gICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGFuIG9iamVjdC1vcmllbnRlZCB3cmFwcGVyIG9m
IHRoZSBJUkMKLSAgICBmcmFtZXdvcmsuICBBIHJlYWwgSVJDIGNsaWVudCBjYW4gYmUgbWFkZSBi
eSBzdWJjbGFzc2luZyB0aGlzCi0gICAgY2xhc3MgYW5kIGFkZGluZyBhcHByb3ByaWF0ZSBtZXRo
b2RzLgotCi0gICAgVGhlIG1ldGhvZCBvbl9qb2luIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSAiam9p
biIgZXZlbnQgaXMgY3JlYXRlZAotICAgICh3aGljaCBpcyBkb25lIHdoZW4gdGhlIHNlcnZlciBz
ZW5kcyBhIEpPSU4gbWVzc3NhZ2UvY29tbWFuZCksCi0gICAgb25fcHJpdm1zZyB3aWxsIGJlIGNh
bGxlZCBmb3IgInByaXZtc2ciIGV2ZW50cywgYW5kIHNvIG9uLiAgVGhlCi0gICAgaGFuZGxlciBt
ZXRob2RzIGdldCB0d28gYXJndW1lbnRzOiB0aGUgY29ubmVjdGlvbiBvYmplY3QgKHNhbWUgYXMK
LSAgICBzZWxmLmNvbm5lY3Rpb24pIGFuZCB0aGUgZXZlbnQgb2JqZWN0LgotCi0gICAgSW5zdGFu
Y2UgYXR0cmlidXRlcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHN1YiBjbGFzc2VzOgotCi0gICAgICAg
IGlyY29iaiAtLSBUaGUgSVJDIGluc3RhbmNlLgotCi0gICAgICAgIGNvbm5lY3Rpb24gLS0gVGhl
IFNlcnZlckNvbm5lY3Rpb24gaW5zdGFuY2UuCi0KLSAgICAgICAgZGNjX2Nvbm5lY3Rpb25zIC0t
IEEgbGlzdCBvZiBEQ0NDb25uZWN0aW9uIGluc3RhbmNlcy4KLSAgICAiIiIKLSAgICBkZWYgX19p
bml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuaXJjb2JqID0gSVJDKCkKLSAgICAgICAgc2VsZi5j
b25uZWN0aW9uID0gc2VsZi5pcmNvYmouc2VydmVyKCkKLSAgICAgICAgc2VsZi5kY2NfY29ubmVj
dGlvbnMgPSBbXQotICAgICAgICBzZWxmLmlyY29iai5hZGRfZ2xvYmFsX2hhbmRsZXIoImFsbF9l
dmVudHMiLCBzZWxmLl9kaXNwYXRjaGVyLCAtMTApCi0gICAgICAgIHNlbGYuaXJjb2JqLmFkZF9n
bG9iYWxfaGFuZGxlcigiZGNjX2Rpc2Nvbm5lY3QiLCBzZWxmLl9kY2NfZGlzY29ubmVjdCwgLTEw
KQotCi0gICAgZGVmIF9kaXNwYXRjaGVyKHNlbGYsIGMsIGUpOgotICAgICAgICAiIiJbSW50ZXJu
YWxdIiIiCi0gICAgICAgIG0gPSAib25fIiArIGUuZXZlbnR0eXBlKCkKLSAgICAgICAgaWYgaGFz
YXR0cihzZWxmLCBtKToKLSAgICAgICAgICAgIGdldGF0dHIoc2VsZiwgbSkoYywgZSkKLQotICAg
IGRlZiBfZGNjX2Rpc2Nvbm5lY3Qoc2VsZiwgYywgZSk6Ci0gICAgICAgIHNlbGYuZGNjX2Nvbm5l
Y3Rpb25zLnJlbW92ZShjKQotCi0gICAgZGVmIGNvbm5lY3Qoc2VsZiwgc2VydmVyLCBwb3J0LCBu
aWNrbmFtZSwgcGFzc3dvcmQ9Tm9uZSwgdXNlcm5hbWU9Tm9uZSwKLSAgICAgICAgICAgICAgICBp
cmNuYW1lPU5vbmUsIGxvY2FsYWRkcmVzcz0iIiwgbG9jYWxwb3J0PTAsIHNzbD1GYWxzZSwgaXB2
Nj1GYWxzZSk6Ci0gICAgICAgICIiIkNvbm5lY3QvcmVjb25uZWN0IHRvIGEgc2VydmVyLgotCi0g
ICAgICAgIEFyZ3VtZW50czoKLQotICAgICAgICAgICAgc2VydmVyIC0tIFNlcnZlciBuYW1lLgot
Ci0gICAgICAgICAgICBwb3J0IC0tIFBvcnQgbnVtYmVyLgotCi0gICAgICAgICAgICBuaWNrbmFt
ZSAtLSBUaGUgbmlja25hbWUuCi0KLSAgICAgICAgICAgIHBhc3N3b3JkIC0tIFBhc3N3b3JkIChp
ZiBhbnkpLgotCi0gICAgICAgICAgICB1c2VybmFtZSAtLSBUaGUgdXNlcm5hbWUuCi0KLSAgICAg
ICAgICAgIGlyY25hbWUgLS0gVGhlIElSQyBuYW1lLgotCi0gICAgICAgICAgICBsb2NhbGFkZHJl
c3MgLS0gQmluZCB0aGUgY29ubmVjdGlvbiB0byBhIHNwZWNpZmljIGxvY2FsIElQIGFkZHJlc3Mu
Ci0KLSAgICAgICAgICAgIGxvY2FscG9ydCAtLSBCaW5kIHRoZSBjb25uZWN0aW9uIHRvIGEgc3Bl
Y2lmaWMgbG9jYWwgcG9ydC4KLQotICAgICAgICAgICAgc3NsIC0tIEVuYWJsZSBzdXBwb3J0IGZv
ciBzc2wuCi0KLSAgICAgICAgICAgIGlwdjYgLS0gRW5hYmxlIHN1cHBvcnQgZm9yIGlwdjYuCi0K
LSAgICAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHRvIHJlY29ubmVjdCBhIGNsb3Nl
ZCBjb25uZWN0aW9uLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uLmNvbm5l
Y3Qoc2VydmVyLCBwb3J0LCBuaWNrbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFzc3dvcmQsIHVzZXJuYW1lLCBpcmNuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb2NhbGFkZHJlc3MsIGxvY2FscG9ydCwgc3NsLCBpcHY2KQotCi0gICAgZGVmIGRj
Y19jb25uZWN0KHNlbGYsIGFkZHJlc3MsIHBvcnQsIGRjY3R5cGU9ImNoYXQiKToKLSAgICAgICAg
IiIiQ29ubmVjdCB0byBhIERDQyBwZWVyLgotCi0gICAgICAgIEFyZ3VtZW50czoKLQotICAgICAg
ICAgICAgYWRkcmVzcyAtLSBJUCBhZGRyZXNzIG9mIHRoZSBwZWVyLgotCi0gICAgICAgICAgICBw
b3J0IC0tIFBvcnQgdG8gY29ubmVjdCB0by4KLQotICAgICAgICBSZXR1cm5zIGEgRENDQ29ubmVj
dGlvbiBpbnN0YW5jZS4KLSAgICAgICAgIiIiCi0gICAgICAgIGRjYyA9IHNlbGYuaXJjb2JqLmRj
YyhkY2N0eXBlKQotICAgICAgICBzZWxmLmRjY19jb25uZWN0aW9ucy5hcHBlbmQoZGNjKQotICAg
ICAgICBkY2MuY29ubmVjdChhZGRyZXNzLCBwb3J0KQotICAgICAgICByZXR1cm4gZGNjCi0KLSAg
ICBkZWYgZGNjX2xpc3RlbihzZWxmLCBkY2N0eXBlPSJjaGF0Iik6Ci0gICAgICAgICIiIkxpc3Rl
biBmb3IgY29ubmVjdGlvbnMgZnJvbSBhIERDQyBwZWVyLgotCi0gICAgICAgIFJldHVybnMgYSBE
Q0NDb25uZWN0aW9uIGluc3RhbmNlLgotICAgICAgICAiIiIKLSAgICAgICAgZGNjID0gc2VsZi5p
cmNvYmouZGNjKGRjY3R5cGUpCi0gICAgICAgIHNlbGYuZGNjX2Nvbm5lY3Rpb25zLmFwcGVuZChk
Y2MpCi0gICAgICAgIGRjYy5saXN0ZW4oKQotICAgICAgICByZXR1cm4gZGNjCi0KLSAgICBkZWYg
c3RhcnQoc2VsZik6Ci0gICAgICAgICIiIlN0YXJ0IHRoZSBJUkMgY2xpZW50LiIiIgotICAgICAg
ICBzZWxmLmlyY29iai5wcm9jZXNzX2ZvcmV2ZXIoKQotCi0KLWNsYXNzIEV2ZW50OgotICAgICIi
IkNsYXNzIHJlcHJlc2VudGluZyBhbiBJUkMgZXZlbnQuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIGV2ZW50dHlwZSwgc291cmNlLCB0YXJnZXQsIGFyZ3VtZW50cz1Ob25lKToKLSAgICAgICAg
IiIiQ29uc3RydWN0b3Igb2YgRXZlbnQgb2JqZWN0cy4KLQotICAgICAgICBBcmd1bWVudHM6Ci0K
LSAgICAgICAgICAgIGV2ZW50dHlwZSAtLSBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSBldmVudC4K
LQotICAgICAgICAgICAgc291cmNlIC0tIFRoZSBvcmlnaW5hdG9yIG9mIHRoZSBldmVudCAoYSBu
aWNrIG1hc2sgb3IgYSBzZXJ2ZXIpLgotCi0gICAgICAgICAgICB0YXJnZXQgLS0gVGhlIHRhcmdl
dCBvZiB0aGUgZXZlbnQgKGEgbmljayBvciBhIGNoYW5uZWwpLgotCi0gICAgICAgICAgICBhcmd1
bWVudHMgLS0gQW55IGV2ZW50IHNwZWNpZmljIGFyZ3VtZW50cy4KLSAgICAgICAgIiIiCi0gICAg
ICAgIHNlbGYuX2V2ZW50dHlwZSA9IGV2ZW50dHlwZQotICAgICAgICBzZWxmLl9zb3VyY2UgPSBz
b3VyY2UKLSAgICAgICAgc2VsZi5fdGFyZ2V0ID0gdGFyZ2V0Ci0gICAgICAgIGlmIGFyZ3VtZW50
czoKLSAgICAgICAgICAgIHNlbGYuX2FyZ3VtZW50cyA9IGFyZ3VtZW50cwotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgc2VsZi5fYXJndW1lbnRzID0gW10KLQotICAgIGRlZiBldmVudHR5cGUo
c2VsZik6Ci0gICAgICAgICIiIkdldCB0aGUgZXZlbnQgdHlwZS4iIiIKLSAgICAgICAgcmV0dXJu
IHNlbGYuX2V2ZW50dHlwZQotCi0gICAgZGVmIHNvdXJjZShzZWxmKToKLSAgICAgICAgIiIiR2V0
IHRoZSBldmVudCBzb3VyY2UuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9zb3VyY2UKLQotICAg
IGRlZiB0YXJnZXQoc2VsZik6Ci0gICAgICAgICIiIkdldCB0aGUgZXZlbnQgdGFyZ2V0LiIiIgot
ICAgICAgICByZXR1cm4gc2VsZi5fdGFyZ2V0Ci0KLSAgICBkZWYgYXJndW1lbnRzKHNlbGYpOgot
ICAgICAgICAiIiJHZXQgdGhlIGV2ZW50IGFyZ3VtZW50cy4iIiIKLSAgICAgICAgcmV0dXJuIHNl
bGYuX2FyZ3VtZW50cwotCi1fTE9XX0xFVkVMX1FVT1RFID0gIlwwMjAiCi1fQ1RDUF9MRVZFTF9R
VU9URSA9ICJcMTM0IgotX0NUQ1BfREVMSU1JVEVSID0gIlwwMDEiCi0KLV9sb3dfbGV2ZWxfbWFw
cGluZyA9IHsKLSAgICAiMCI6ICJcMDAwIiwKLSAgICAibiI6ICJcbiIsCi0gICAgInIiOiAiXHIi
LAotICAgIF9MT1dfTEVWRUxfUVVPVEU6IF9MT1dfTEVWRUxfUVVPVEUKLX0KLQotX2xvd19sZXZl
bF9yZWdleHAgPSByZS5jb21waWxlKF9MT1dfTEVWRUxfUVVPVEUgKyAiKC4pIikKLQotZGVmIG1h
c2tfbWF0Y2hlcyhuaWNrLCBtYXNrKToKLSAgICAiIiJDaGVjayBpZiBhIG5pY2sgbWF0Y2hlcyBh
IG1hc2suCi0KLSAgICBSZXR1cm5zIHRydWUgaWYgdGhlIG5pY2sgbWF0Y2hlcywgb3RoZXJ3aXNl
IGZhbHNlLgotICAgICIiIgotICAgIG5pY2sgPSBpcmNfbG93ZXIobmljaykKLSAgICBtYXNrID0g
aXJjX2xvd2VyKG1hc2spCi0gICAgbWFzayA9IG1hc2sucmVwbGFjZSgiXFwiLCAiXFxcXCIpCi0g
ICAgZm9yIGNoIGluICIuJHxbXSgpe30rIjoKLSAgICAgICAgbWFzayA9IG1hc2sucmVwbGFjZShj
aCwgIlxcIiArIGNoKQotICAgIG1hc2sgPSBtYXNrLnJlcGxhY2UoIj8iLCAiLiIpCi0gICAgbWFz
ayA9IG1hc2sucmVwbGFjZSgiKiIsICIuKiIpCi0gICAgciA9IHJlLmNvbXBpbGUobWFzaywgcmUu
SUdOT1JFQ0FTRSkKLSAgICByZXR1cm4gci5tYXRjaChuaWNrKQotCi1fc3BlY2lhbCA9ICItW11c
XGBee30iCi1uaWNrX2NoYXJhY3RlcnMgPSBzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5k
aWdpdHMgKyBfc3BlY2lhbAotX2lyY3N0cmluZ190cmFuc2xhdGlvbiA9IHN0cmluZy5tYWtldHJh
bnMoc3RyaW5nLmFzY2lpX3VwcGVyY2FzZSArICJbXVxcXiIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuYXNjaWlfbG93ZXJjYXNlICsgInt9fH4iKQot
Ci1kZWYgaXJjX2xvd2VyKHMpOgotICAgICIiIlJldHVybnMgYSBsb3dlcmNhc2VkIHN0cmluZy4K
LQotICAgIFRoZSBkZWZpbml0aW9uIG9mIGxvd2VyY2FzZWQgY29tZXMgZnJvbSB0aGUgSVJDIHNw
ZWNpZmljYXRpb24gKFJGQwotICAgIDE0NTkpLgotICAgICIiIgotICAgIHJldHVybiBzLnRyYW5z
bGF0ZShfaXJjc3RyaW5nX3RyYW5zbGF0aW9uKQotCi1kZWYgX2N0Y3BfZGVxdW90ZShtZXNzYWdl
KToKLSAgICAiIiJbSW50ZXJuYWxdIERlcXVvdGUgYSBtZXNzYWdlIGFjY29yZGluZyB0byBDVENQ
IHNwZWNpZmljYXRpb25zLgotCi0gICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IHdoZXJl
IGVhY2ggZWxlbWVudCBjYW4gYmUgZWl0aGVyIGEKLSAgICBzdHJpbmcgKG5vcm1hbCBtZXNzYWdl
KSBvciBhIHR1cGxlIG9mIG9uZSBvciB0d28gc3RyaW5ncyAodGFnZ2VkCi0gICAgbWVzc2FnZXMp
LiAgSWYgYSB0dXBsZSBoYXMgb25seSBvbmUgZWxlbWVudCAoaWUgaXMgYSBzaW5nbGV0b24pLAot
ICAgIHRoYXQgZWxlbWVudCBpcyB0aGUgdGFnOyBvdGhlcndpc2UgdGhlIHR1cGxlIGhhcyB0d28g
ZWxlbWVudHM6IHRoZQotICAgIHRhZyBhbmQgdGhlIGRhdGEuCi0KLSAgICBBcmd1bWVudHM6Ci0K
LSAgICAgICAgbWVzc2FnZSAtLSBUaGUgbWVzc2FnZSB0byBiZSBkZWNvZGVkLgotICAgICIiIgot
Ci0gICAgZGVmIF9sb3dfbGV2ZWxfcmVwbGFjZShtYXRjaF9vYmopOgotICAgICAgICBjaCA9IG1h
dGNoX29iai5ncm91cCgxKQotCi0gICAgICAgICMgSWYgbG93X2xldmVsX21hcHBpbmcgZG9lc24n
dCBoYXZlIHRoZSBjaGFyYWN0ZXIgYXMga2V5LCB3ZQotICAgICAgICAjIHNob3VsZCBqdXN0IHJl
dHVybiB0aGUgY2hhcmFjdGVyLgotICAgICAgICByZXR1cm4gX2xvd19sZXZlbF9tYXBwaW5nLmdl
dChjaCwgY2gpCi0KLSAgICBpZiBfTE9XX0xFVkVMX1FVT1RFIGluIG1lc3NhZ2U6Ci0gICAgICAg
ICMgWXVwLCB0aGVyZSB3YXMgYSBxdW90ZS4gIFJlbGVhc2UgdGhlIGRlcXVvdGVyLCBtYW4hCi0g
ICAgICAgIG1lc3NhZ2UgPSBfbG93X2xldmVsX3JlZ2V4cC5zdWIoX2xvd19sZXZlbF9yZXBsYWNl
LCBtZXNzYWdlKQotCi0gICAgaWYgX0NUQ1BfREVMSU1JVEVSIG5vdCBpbiBtZXNzYWdlOgotICAg
ICAgICByZXR1cm4gW21lc3NhZ2VdCi0gICAgZWxzZToKLSAgICAgICAgIyBTcGxpdCBpdCBpbnRv
IHBhcnRzLiAgKERvZXMgYW55IElSQyBjbGllbnQgYWN0dWFsbHkgKnVzZSoKLSAgICAgICAgIyBD
VENQIHN0YWNraW5nIGxpa2UgdGhpcz8pCi0gICAgICAgIGNodW5rcyA9IG1lc3NhZ2Uuc3BsaXQo
X0NUQ1BfREVMSU1JVEVSKQotCi0gICAgICAgIG1lc3NhZ2VzID0gW10KLSAgICAgICAgaSA9IDAK
LSAgICAgICAgd2hpbGUgaSA8IGxlbihjaHVua3MpLTE6Ci0gICAgICAgICAgICAjIEFkZCBtZXNz
YWdlIGlmIGl0J3Mgbm9uLWVtcHR5LgotICAgICAgICAgICAgaWYgbGVuKGNodW5rc1tpXSkgPiAw
OgotICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmFwcGVuZChjaHVua3NbaV0pCi0KLSAgICAgICAg
ICAgIGlmIGkgPCBsZW4oY2h1bmtzKS0yOgotICAgICAgICAgICAgICAgICMgQXllISAgQ1RDUCB0
YWdnZWQgZGF0YSBhaGVhZCEKLSAgICAgICAgICAgICAgICBtZXNzYWdlcy5hcHBlbmQodHVwbGUo
Y2h1bmtzW2krMV0uc3BsaXQoIiAiLCAxKSkpCi0KLSAgICAgICAgICAgIGkgPSBpICsgMgotCi0g
ICAgICAgIGlmIGxlbihjaHVua3MpICUgMiA9PSAwOgotICAgICAgICAgICAgIyBIZXksIGEgbG9u
ZWx5IF9DVENQX0RFTElNSVRFUiBhdCB0aGUgZW5kISAgVGhpcyBtZWFucwotICAgICAgICAgICAg
IyB0aGF0IHRoZSBsYXN0IGNodW5rLCBpbmNsdWRpbmcgdGhlIGRlbGltaXRlciwgaXMgYQotICAg
ICAgICAgICAgIyBub3JtYWwgbWVzc2FnZSEgIChUaGlzIGlzIGFjY29yZGluZyB0byB0aGUgQ1RD
UAotICAgICAgICAgICAgIyBzcGVjaWZpY2F0aW9uLikKLSAgICAgICAgICAgIG1lc3NhZ2VzLmFw
cGVuZChfQ1RDUF9ERUxJTUlURVIgKyBjaHVua3NbLTFdKQotCi0gICAgICAgIHJldHVybiBtZXNz
YWdlcwotCi1kZWYgaXNfY2hhbm5lbChzdHJpbmcpOgotICAgICIiIkNoZWNrIGlmIGEgc3RyaW5n
IGlzIGEgY2hhbm5lbCBuYW1lLgotCi0gICAgUmV0dXJucyB0cnVlIGlmIHRoZSBhcmd1bWVudCBp
cyBhIGNoYW5uZWwgbmFtZSwgb3RoZXJ3aXNlIGZhbHNlLgotICAgICIiIgotICAgIHJldHVybiBz
dHJpbmcgYW5kIHN0cmluZ1swXSBpbiAiIyYrISIKLQotZGVmIGlwX251bXN0cl90b19xdWFkKG51
bSk6Ci0gICAgIiIiQ29udmVydCBhbiBJUCBudW1iZXIgYXMgYW4gaW50ZWdlciBnaXZlbiBpbiBB
U0NJSQotICAgIHJlcHJlc2VudGF0aW9uIChlLmcuICczMjMyMjM1NTIxJykgdG8gYW4gSVAgYWRk
cmVzcyBzdHJpbmcKLSAgICAoZS5nLiAnMTkyLjE2OC4wLjEnKS4iIiIKLSAgICBuID0gbG9uZyhu
dW0pCi0gICAgcCA9IG1hcChzdHIsIG1hcChpbnQsIFtuID4+IDI0ICYgMHhGRiwgbiA+PiAxNiAm
IDB4RkYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBuID4+IDggJiAweEZGLCBuICYgMHhG
Rl0pKQotICAgIHJldHVybiAiLiIuam9pbihwKQotCi1kZWYgaXBfcXVhZF90b19udW1zdHIocXVh
ZCk6Ci0gICAgIiIiQ29udmVydCBhbiBJUCBhZGRyZXNzIHN0cmluZyAoZS5nLiAnMTkyLjE2OC4w
LjEnKSB0byBhbiBJUAotICAgIG51bWJlciBhcyBhbiBpbnRlZ2VyIGdpdmVuIGluIEFTQ0lJIHJl
cHJlc2VudGF0aW9uCi0gICAgKGUuZy4gJzMyMzIyMzU1MjEnKS4iIiIKLSAgICBwID0gbWFwKGxv
bmcsIHF1YWQuc3BsaXQoIi4iKSkKLSAgICBzID0gc3RyKChwWzBdIDw8IDI0KSB8IChwWzFdIDw8
IDE2KSB8IChwWzJdIDw8IDgpIHwgcFszXSkKLSAgICBpZiBzWy0xXSA9PSAiTCI6Ci0gICAgICAg
IHMgPSBzWzotMV0KLSAgICByZXR1cm4gcwotCi1kZWYgbm1fdG9fbihzKToKLSAgICAiIiJHZXQg
dGhlIG5pY2sgcGFydCBvZiBhIG5pY2ttYXNrLgotCi0gICAgKFRoZSBzb3VyY2Ugb2YgYW4gRXZl
bnQgaXMgYSBuaWNrbWFzay4pCi0gICAgIiIiCi0gICAgcmV0dXJuIHMuc3BsaXQoIiEiKVswXQot
Ci1kZWYgbm1fdG9fdWgocyk6Ci0gICAgIiIiR2V0IHRoZSB1c2VyaG9zdCBwYXJ0IG9mIGEgbmlj
a21hc2suCi0KLSAgICAoVGhlIHNvdXJjZSBvZiBhbiBFdmVudCBpcyBhIG5pY2ttYXNrLikKLSAg
ICAiIiIKLSAgICByZXR1cm4gcy5zcGxpdCgiISIpWzFdCi0KLWRlZiBubV90b19oKHMpOgotICAg
ICIiIkdldCB0aGUgaG9zdCBwYXJ0IG9mIGEgbmlja21hc2suCi0KLSAgICAoVGhlIHNvdXJjZSBv
ZiBhbiBFdmVudCBpcyBhIG5pY2ttYXNrLikKLSAgICAiIiIKLSAgICByZXR1cm4gcy5zcGxpdCgi
QCIpWzFdCi0KLWRlZiBubV90b191KHMpOgotICAgICIiIkdldCB0aGUgdXNlciBwYXJ0IG9mIGEg
bmlja21hc2suCi0KLSAgICAoVGhlIHNvdXJjZSBvZiBhbiBFdmVudCBpcyBhIG5pY2ttYXNrLikK
LSAgICAiIiIKLSAgICBzID0gcy5zcGxpdCgiISIpWzFdCi0gICAgcmV0dXJuIHMuc3BsaXQoIkAi
KVswXQotCi1kZWYgcGFyc2Vfbmlja19tb2Rlcyhtb2RlX3N0cmluZyk6Ci0gICAgIiIiUGFyc2Ug
YSBuaWNrIG1vZGUgc3RyaW5nLgotCi0gICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9m
IGxpc3RzIHdpdGggdGhyZWUgbWVtYmVyczogc2lnbiwKLSAgICBtb2RlIGFuZCBhcmd1bWVudC4g
IFRoZSBzaWduIGlzIFwiK1wiIG9yIFwiLVwiLiAgVGhlIGFyZ3VtZW50IGlzCi0gICAgYWx3YXlz
IE5vbmUuCi0KLSAgICBFeGFtcGxlOgotCi0gICAgPj4+IGlyY2xpYi5wYXJzZV9uaWNrX21vZGVz
KFwiK2FiLWNcIikKLSAgICBbWycrJywgJ2EnLCBOb25lXSwgWycrJywgJ2InLCBOb25lXSwgWyct
JywgJ2MnLCBOb25lXV0KLSAgICAiIiIKLQotICAgIHJldHVybiBfcGFyc2VfbW9kZXMobW9kZV9z
dHJpbmcsICIiKQotCi1kZWYgcGFyc2VfY2hhbm5lbF9tb2Rlcyhtb2RlX3N0cmluZyk6Ci0gICAg
IiIiUGFyc2UgYSBjaGFubmVsIG1vZGUgc3RyaW5nLgotCi0gICAgVGhlIGZ1bmN0aW9uIHJldHVy
bnMgYSBsaXN0IG9mIGxpc3RzIHdpdGggdGhyZWUgbWVtYmVyczogc2lnbiwKLSAgICBtb2RlIGFu
ZCBhcmd1bWVudC4gIFRoZSBzaWduIGlzIFwiK1wiIG9yIFwiLVwiLiAgVGhlIGFyZ3VtZW50IGlz
Ci0gICAgTm9uZSBpZiBtb2RlIGlzbid0IG9uZSBvZiBcImJcIiwgXCJrXCIsIFwibFwiLCBcInZc
IiBvciBcIm9cIi4KLQotICAgIEV4YW1wbGU6Ci0KLSAgICA+Pj4gaXJjbGliLnBhcnNlX2NoYW5u
ZWxfbW9kZXMoXCIrYWItYyBmb29cIikKLSAgICBbWycrJywgJ2EnLCBOb25lXSwgWycrJywgJ2In
LCAnZm9vJ10sIFsnLScsICdjJywgTm9uZV1dCi0gICAgIiIiCi0KLSAgICByZXR1cm4gX3BhcnNl
X21vZGVzKG1vZGVfc3RyaW5nLCAiYmtsdm8iKQotCi1kZWYgX3BhcnNlX21vZGVzKG1vZGVfc3Ry
aW5nLCB1bmFyeV9tb2Rlcz0iIik6Ci0gICAgIiIiW0ludGVybmFsXSIiIgotICAgIG1vZGVzID0g
W10KLSAgICBhcmdfY291bnQgPSAwCi0KLSAgICAjIFN0YXRlIHZhcmlhYmxlLgotICAgIHNpZ24g
PSAiIgotCi0gICAgYSA9IG1vZGVfc3RyaW5nLnNwbGl0KCkKLSAgICBpZiBsZW4oYSkgPT0gMDoK
LSAgICAgICAgcmV0dXJuIFtdCi0gICAgZWxzZToKLSAgICAgICAgbW9kZV9wYXJ0LCBhcmdzID0g
YVswXSwgYVsxOl0KLQotICAgIGlmIG1vZGVfcGFydFswXSBub3QgaW4gIistIjoKLSAgICAgICAg
cmV0dXJuIFtdCi0gICAgZm9yIGNoIGluIG1vZGVfcGFydDoKLSAgICAgICAgaWYgY2ggaW4gIist
IjoKLSAgICAgICAgICAgIHNpZ24gPSBjaAotICAgICAgICBlbGlmIGNoID09ICIgIjoKLSAgICAg
ICAgICAgIGNvbGxlY3RpbmdfYXJndW1lbnRzID0gMQotICAgICAgICBlbGlmIGNoIGluIHVuYXJ5
X21vZGVzOgotICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID49IGFyZ19jb3VudCArIDE6Ci0gICAg
ICAgICAgICAgICAgbW9kZXMuYXBwZW5kKFtzaWduLCBjaCwgYXJnc1thcmdfY291bnRdXSkKLSAg
ICAgICAgICAgICAgICBhcmdfY291bnQgPSBhcmdfY291bnQgKyAxCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIG1vZGVzLmFwcGVuZChbc2lnbiwgY2gsIE5vbmVdKQotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgbW9kZXMuYXBwZW5kKFtzaWduLCBjaCwgTm9uZV0pCi0gICAg
cmV0dXJuIG1vZGVzCi0KLWRlZiBfcGluZ19wb25nZXIoY29ubmVjdGlvbiwgZXZlbnQpOgotICAg
ICIiIltJbnRlcm5hbF0iIiIKLSAgICBjb25uZWN0aW9uLnBvbmcoZXZlbnQudGFyZ2V0KCkpCi0K
LSMgTnVtZXJpYyB0YWJsZSBtb3N0bHkgc3RvbGVuIGZyb20gdGhlIFBlcmwgSVJDIG1vZHVsZSAo
TmV0OjpJUkMpLgotbnVtZXJpY19ldmVudHMgPSB7Ci0gICAgIjAwMSI6ICJ3ZWxjb21lIiwKLSAg
ICAiMDAyIjogInlvdXJob3N0IiwKLSAgICAiMDAzIjogImNyZWF0ZWQiLAotICAgICIwMDQiOiAi
bXlpbmZvIiwKLSAgICAiMDA1IjogImZlYXR1cmVsaXN0IiwgICMgWFhYCi0gICAgIjIwMCI6ICJ0
cmFjZWxpbmsiLAotICAgICIyMDEiOiAidHJhY2Vjb25uZWN0aW5nIiwKLSAgICAiMjAyIjogInRy
YWNlaGFuZHNoYWtlIiwKLSAgICAiMjAzIjogInRyYWNldW5rbm93biIsCi0gICAgIjIwNCI6ICJ0
cmFjZW9wZXJhdG9yIiwKLSAgICAiMjA1IjogInRyYWNldXNlciIsCi0gICAgIjIwNiI6ICJ0cmFj
ZXNlcnZlciIsCi0gICAgIjIwNyI6ICJ0cmFjZXNlcnZpY2UiLAotICAgICIyMDgiOiAidHJhY2Vu
ZXd0eXBlIiwKLSAgICAiMjA5IjogInRyYWNlY2xhc3MiLAotICAgICIyMTAiOiAidHJhY2VyZWNv
bm5lY3QiLAotICAgICIyMTEiOiAic3RhdHNsaW5raW5mbyIsCi0gICAgIjIxMiI6ICJzdGF0c2Nv
bW1hbmRzIiwKLSAgICAiMjEzIjogInN0YXRzY2xpbmUiLAotICAgICIyMTQiOiAic3RhdHNubGlu
ZSIsCi0gICAgIjIxNSI6ICJzdGF0c2lsaW5lIiwKLSAgICAiMjE2IjogInN0YXRza2xpbmUiLAot
ICAgICIyMTciOiAic3RhdHNxbGluZSIsCi0gICAgIjIxOCI6ICJzdGF0c3lsaW5lIiwKLSAgICAi
MjE5IjogImVuZG9mc3RhdHMiLAotICAgICIyMjEiOiAidW1vZGVpcyIsCi0gICAgIjIzMSI6ICJz
ZXJ2aWNlaW5mbyIsCi0gICAgIjIzMiI6ICJlbmRvZnNlcnZpY2VzIiwKLSAgICAiMjMzIjogInNl
cnZpY2UiLAotICAgICIyMzQiOiAic2Vydmxpc3QiLAotICAgICIyMzUiOiAic2Vydmxpc3RlbmQi
LAotICAgICIyNDEiOiAic3RhdHNsbGluZSIsCi0gICAgIjI0MiI6ICJzdGF0c3VwdGltZSIsCi0g
ICAgIjI0MyI6ICJzdGF0c29saW5lIiwKLSAgICAiMjQ0IjogInN0YXRzaGxpbmUiLAotICAgICIy
NTAiOiAibHVzZXJjb25ucyIsCi0gICAgIjI1MSI6ICJsdXNlcmNsaWVudCIsCi0gICAgIjI1MiI6
ICJsdXNlcm9wIiwKLSAgICAiMjUzIjogImx1c2VydW5rbm93biIsCi0gICAgIjI1NCI6ICJsdXNl
cmNoYW5uZWxzIiwKLSAgICAiMjU1IjogImx1c2VybWUiLAotICAgICIyNTYiOiAiYWRtaW5tZSIs
Ci0gICAgIjI1NyI6ICJhZG1pbmxvYzEiLAotICAgICIyNTgiOiAiYWRtaW5sb2MyIiwKLSAgICAi
MjU5IjogImFkbWluZW1haWwiLAotICAgICIyNjEiOiAidHJhY2Vsb2ciLAotICAgICIyNjIiOiAi
ZW5kb2Z0cmFjZSIsCi0gICAgIjI2MyI6ICJ0cnlhZ2FpbiIsCi0gICAgIjI2NSI6ICJuX2xvY2Fs
IiwKLSAgICAiMjY2IjogIm5fZ2xvYmFsIiwKLSAgICAiMzAwIjogIm5vbmUiLAotICAgICIzMDEi
OiAiYXdheSIsCi0gICAgIjMwMiI6ICJ1c2VyaG9zdCIsCi0gICAgIjMwMyI6ICJpc29uIiwKLSAg
ICAiMzA1IjogInVuYXdheSIsCi0gICAgIjMwNiI6ICJub3dhd2F5IiwKLSAgICAiMzExIjogIndo
b2lzdXNlciIsCi0gICAgIjMxMiI6ICJ3aG9pc3NlcnZlciIsCi0gICAgIjMxMyI6ICJ3aG9pc29w
ZXJhdG9yIiwKLSAgICAiMzE0IjogIndob3dhc3VzZXIiLAotICAgICIzMTUiOiAiZW5kb2Z3aG8i
LAotICAgICIzMTYiOiAid2hvaXNjaGFub3AiLAotICAgICIzMTciOiAid2hvaXNpZGxlIiwKLSAg
ICAiMzE4IjogImVuZG9md2hvaXMiLAotICAgICIzMTkiOiAid2hvaXNjaGFubmVscyIsCi0gICAg
IjMyMSI6ICJsaXN0c3RhcnQiLAotICAgICIzMjIiOiAibGlzdCIsCi0gICAgIjMyMyI6ICJsaXN0
ZW5kIiwKLSAgICAiMzI0IjogImNoYW5uZWxtb2RlaXMiLAotICAgICIzMjkiOiAiY2hhbm5lbGNy
ZWF0ZSIsCi0gICAgIjMzMSI6ICJub3RvcGljIiwKLSAgICAiMzMyIjogImN1cnJlbnR0b3BpYyIs
Ci0gICAgIjMzMyI6ICJ0b3BpY2luZm8iLAotICAgICIzNDEiOiAiaW52aXRpbmciLAotICAgICIz
NDIiOiAic3VtbW9uaW5nIiwKLSAgICAiMzQ2IjogImludml0ZWxpc3QiLAotICAgICIzNDciOiAi
ZW5kb2ZpbnZpdGVsaXN0IiwKLSAgICAiMzQ4IjogImV4Y2VwdGxpc3QiLAotICAgICIzNDkiOiAi
ZW5kb2ZleGNlcHRsaXN0IiwKLSAgICAiMzUxIjogInZlcnNpb24iLAotICAgICIzNTIiOiAid2hv
cmVwbHkiLAotICAgICIzNTMiOiAibmFtcmVwbHkiLAotICAgICIzNjEiOiAia2lsbGRvbmUiLAot
ICAgICIzNjIiOiAiY2xvc2luZyIsCi0gICAgIjM2MyI6ICJjbG9zZWVuZCIsCi0gICAgIjM2NCI6
ICJsaW5rcyIsCi0gICAgIjM2NSI6ICJlbmRvZmxpbmtzIiwKLSAgICAiMzY2IjogImVuZG9mbmFt
ZXMiLAotICAgICIzNjciOiAiYmFubGlzdCIsCi0gICAgIjM2OCI6ICJlbmRvZmJhbmxpc3QiLAot
ICAgICIzNjkiOiAiZW5kb2Z3aG93YXMiLAotICAgICIzNzEiOiAiaW5mbyIsCi0gICAgIjM3MiI6
ICJtb3RkIiwKLSAgICAiMzczIjogImluZm9zdGFydCIsCi0gICAgIjM3NCI6ICJlbmRvZmluZm8i
LAotICAgICIzNzUiOiAibW90ZHN0YXJ0IiwKLSAgICAiMzc2IjogImVuZG9mbW90ZCIsCi0gICAg
IjM3NyI6ICJtb3RkMiIsICAgICAgICAjIDE5OTctMTAtMTYgLS0gdGtpbAotICAgICIzODEiOiAi
eW91cmVvcGVyIiwKLSAgICAiMzgyIjogInJlaGFzaGluZyIsCi0gICAgIjM4NCI6ICJteXBvcnRp
cyIsCi0gICAgIjM5MSI6ICJ0aW1lIiwKLSAgICAiMzkyIjogInVzZXJzc3RhcnQiLAotICAgICIz
OTMiOiAidXNlcnMiLAotICAgICIzOTQiOiAiZW5kb2Z1c2VycyIsCi0gICAgIjM5NSI6ICJub3Vz
ZXJzIiwKLSAgICAiNDAxIjogIm5vc3VjaG5pY2siLAotICAgICI0MDIiOiAibm9zdWNoc2VydmVy
IiwKLSAgICAiNDAzIjogIm5vc3VjaGNoYW5uZWwiLAotICAgICI0MDQiOiAiY2Fubm90c2VuZHRv
Y2hhbiIsCi0gICAgIjQwNSI6ICJ0b29tYW55Y2hhbm5lbHMiLAotICAgICI0MDYiOiAid2Fzbm9z
dWNobmljayIsCi0gICAgIjQwNyI6ICJ0b29tYW55dGFyZ2V0cyIsCi0gICAgIjQwOSI6ICJub29y
aWdpbiIsCi0gICAgIjQxMSI6ICJub3JlY2lwaWVudCIsCi0gICAgIjQxMiI6ICJub3RleHR0b3Nl
bmQiLAotICAgICI0MTMiOiAibm90b3BsZXZlbCIsCi0gICAgIjQxNCI6ICJ3aWxkdG9wbGV2ZWwi
LAotICAgICI0MjEiOiAidW5rbm93bmNvbW1hbmQiLAotICAgICI0MjIiOiAibm9tb3RkIiwKLSAg
ICAiNDIzIjogIm5vYWRtaW5pbmZvIiwKLSAgICAiNDI0IjogImZpbGVlcnJvciIsCi0gICAgIjQz
MSI6ICJub25pY2tuYW1lZ2l2ZW4iLAotICAgICI0MzIiOiAiZXJyb25ldXNuaWNrbmFtZSIsICMg
VGhpc3MgaXogaG93IGl0cyBzcGVsZCBpbiB0aGVlIFJGQy4KLSAgICAiNDMzIjogIm5pY2tuYW1l
aW51c2UiLAotICAgICI0MzYiOiAibmlja2NvbGxpc2lvbiIsCi0gICAgIjQzNyI6ICJ1bmF2YWls
cmVzb3VyY2UiLCAgIyAiTmljayB0ZW1wb3JhbGx5IHVuYXZhaWxhYmxlIgotICAgICI0NDEiOiAi
dXNlcm5vdGluY2hhbm5lbCIsCi0gICAgIjQ0MiI6ICJub3RvbmNoYW5uZWwiLAotICAgICI0NDMi
OiAidXNlcm9uY2hhbm5lbCIsCi0gICAgIjQ0NCI6ICJub2xvZ2luIiwKLSAgICAiNDQ1IjogInN1
bW1vbmRpc2FibGVkIiwKLSAgICAiNDQ2IjogInVzZXJzZGlzYWJsZWQiLAotICAgICI0NTEiOiAi
bm90cmVnaXN0ZXJlZCIsCi0gICAgIjQ2MSI6ICJuZWVkbW9yZXBhcmFtcyIsCi0gICAgIjQ2MiI6
ICJhbHJlYWR5cmVnaXN0ZXJlZCIsCi0gICAgIjQ2MyI6ICJub3Blcm1mb3Job3N0IiwKLSAgICAi
NDY0IjogInBhc3N3ZG1pc21hdGNoIiwKLSAgICAiNDY1IjogInlvdXJlYmFubmVkY3JlZXAiLCAj
IEkgbG92ZSB0aGlzIG9uZS4uLgotICAgICI0NjYiOiAieW91d2lsbGJlYmFubmVkIiwKLSAgICAi
NDY3IjogImtleXNldCIsCi0gICAgIjQ3MSI6ICJjaGFubmVsaXNmdWxsIiwKLSAgICAiNDcyIjog
InVua25vd25tb2RlIiwKLSAgICAiNDczIjogImludml0ZW9ubHljaGFuIiwKLSAgICAiNDc0Ijog
ImJhbm5lZGZyb21jaGFuIiwKLSAgICAiNDc1IjogImJhZGNoYW5uZWxrZXkiLAotICAgICI0NzYi
OiAiYmFkY2hhbm1hc2siLAotICAgICI0NzciOiAibm9jaGFubW9kZXMiLCAgIyAiQ2hhbm5lbCBk
b2Vzbid0IHN1cHBvcnQgbW9kZXMiCi0gICAgIjQ3OCI6ICJiYW5saXN0ZnVsbCIsCi0gICAgIjQ4
MSI6ICJub3ByaXZpbGVnZXMiLAotICAgICI0ODIiOiAiY2hhbm9wcml2c25lZWRlZCIsCi0gICAg
IjQ4MyI6ICJjYW50a2lsbHNlcnZlciIsCi0gICAgIjQ4NCI6ICJyZXN0cmljdGVkIiwgICAjIENv
bm5lY3Rpb24gaXMgcmVzdHJpY3RlZAotICAgICI0ODUiOiAidW5pcW9wcHJpdnNuZWVkZWQiLAot
ICAgICI0OTEiOiAibm9vcGVyaG9zdCIsCi0gICAgIjQ5MiI6ICJub3NlcnZpY2Vob3N0IiwKLSAg
ICAiNTAxIjogInVtb2RldW5rbm93bmZsYWciLAotICAgICI1MDIiOiAidXNlcnNkb250bWF0Y2gi
LAotfQotCi1nZW5lcmF0ZWRfZXZlbnRzID0gWwotICAgICMgR2VuZXJhdGVkIGV2ZW50cwotICAg
ICJkY2NfY29ubmVjdCIsCi0gICAgImRjY19kaXNjb25uZWN0IiwKLSAgICAiZGNjbXNnIiwKLSAg
ICAiZGlzY29ubmVjdCIsCi0gICAgImN0Y3AiLAotICAgICJjdGNwcmVwbHkiLAotXQotCi1wcm90
b2NvbF9ldmVudHMgPSBbCi0gICAgIyBJUkMgcHJvdG9jb2wgZXZlbnRzCi0gICAgImVycm9yIiwK
LSAgICAiam9pbiIsCi0gICAgImtpY2siLAotICAgICJtb2RlIiwKLSAgICAicGFydCIsCi0gICAg
InBpbmciLAotICAgICJwcml2bXNnIiwKLSAgICAicHJpdm5vdGljZSIsCi0gICAgInB1Ym1zZyIs
Ci0gICAgInB1Ym5vdGljZSIsCi0gICAgInF1aXQiLAotICAgICJpbnZpdGUiLAotICAgICJwb25n
IiwKLV0KLQotYWxsX2V2ZW50cyA9IGdlbmVyYXRlZF9ldmVudHMgKyBwcm90b2NvbF9ldmVudHMg
KyBudW1lcmljX2V2ZW50cy52YWx1ZXMoKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMTkzKQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTUtMDMtMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3Vw
cG9ydCBleHRlbmRzIGFuZCBzdXBlciBrZXl3b3JkcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgZm9yICJleHRlbmRzIiBhbmQgInN1
cGVyIiBrZXl3b3Jkcy4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICog
anMvY2xhc3Mtc3ludGF4LWV4dGVuZHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBq
cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9jbGFzcy1z
eW50YXgtc3VwZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9jbGFzcy1zeW50
YXgtc3VwZXIuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL2NsYXNzLXN5
bnRheC1leHRlbmRzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvY2xhc3Mt
c3ludGF4LXN1cGVyLmpzOiBBZGRlZC4KKwogMjAxNS0wMy0wNiAgRGVhbiBKYWNrc29uICA8ZGlu
b0BhcHBsZS5jb20+CiAKICAgICAgICAgU3VwcG9ydCAicGx1cy1saWdodGVyIiBpbiBtaXgtYmxl
bmQgbW9kZQpJbmRleDogTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAxODExOTMpCisrKyBMYXlv
dXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw4IEBA
IHdlYmtpdC5vcmcvYi8xMjc4NjAgWyBEZWJ1ZyBdIGpzL2Z1bmN0aW8KICMgRVM2IGNsYXNzIHN5
bnRheCBoYXNuJ3QgYmVlbiBlbmFibGVkIHlldC4KIHdlYmtpdC5vcmcvYi8xNDA0OTEganMvY2xh
c3Mtc3ludGF4LWRlY2xhcmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNDA0
OTEganMvY2xhc3Mtc3ludGF4LWV4cHJlc3Npb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzE0MDQ5MSBqcy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMTQwNDkxIGpzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sIFsgRmFpbHVyZSBdCiAK
ICMgVGhpcyB0ZXN0IHZlcmlmaWVzIGR5bmFtaWMgbWFuaXB1bGF0aW9uIG9mIHRoZSBtcm9vdCBh
bmQgbXNxcnQgZWxlbWVudHMuCiBtYXRobWwvcm9vdHMtcmVtb3ZlQ2hpbGQuaHRtbCBbIEltYWdl
T25seUZhaWx1cmUgXQpJbmRleDogTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LWV4dGVuZHMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1l
eHRlbmRzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL2NsYXNz
LXN5bnRheC1leHRlbmRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMx
IEBACitUZXN0cyBmb3IgRVM2IGNsYXNzIHN5bnRheCAiZXh0ZW5kcyIKKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1MgKG5ldyBCYXNlKSBpbnN0YW5jZW9mIEJhc2UgaXMgdHJ1
ZQorUEFTUyAobmV3IERlcml2ZWQpIGluc3RhbmNlb2YgRGVyaXZlZCBpcyB0cnVlCitQQVNTIChu
ZXcgRGVyaXZlZCkuYmFzZU1ldGhvZCgpIGlzICJiYXNlIgorUEFTUyAobmV3IERlcml2ZWQpLm92
ZXJyaWRlbk1ldGhvZCgpIGlzICJkZXJpdmVkIgorUEFTUyBEZXJpdmVkLnN0YXRpY0Jhc2VNZXRo
b2QoKSBpcyAiYmFzZSIKK1BBU1MgRGVyaXZlZC5zdGF0aWNPdmVycmlkZW5NZXRob2QoKSBpcyAi
ZGVyaXZlZCIKK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVy
cm9yOiBVbmV4cGVjdGVkIGVuZCBvZiBzY3JpcHQuCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIHRo
cmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQgb2Ygc2NyaXB0LgorUEFT
UyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBV
bmV4cGVjdGVkIGVuZCBvZiBzY3JpcHQuCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIEJhc2Uge30g
dGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBDbGFzcyBkZWNsYXJhdGlvbiB3aXRob3V0IGEg
Y29uc3RydWN0b3IgaXMgbm90IHN1cHBvcnRlZCB5ZXQuLgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5k
cyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IH0gfSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BB
U1MgeC5fX3Byb3RvX18gaXMgQmFzZQorUEFTUyB4LnByb3RvdHlwZS5fX3Byb3RvX18gaXMgQmFz
ZS5wcm90b3R5cGUKK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkg
eyB9IH07IHguX19wcm90b19fIGlzIEZ1bmN0aW9uLnByb3RvdHlwZQorUEFTUyB4Ll9fcHJvdG9f
XyBpcyBGdW5jdGlvbi5wcm90b3R5cGUKK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgMyB7IGNvbnN0
cnVjdG9yKCkgeyB9IH07IHguX19wcm90b19fIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFRo
ZSBzdXBlcmNsYXNzIGlzIG5vdCBhbiBvYmplY3QuLgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyAi
YWJjIiB7IGNvbnN0cnVjdG9yKCkgeyB9IH07IHguX19wcm90b19fIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IFRoZSBzdXBlcmNsYXNzIGlzIG5vdCBhbiBvYmplY3QuLgorYmFzZVdpdGhCYWRQ
cm90b3R5cGUgPSBjbGFzcyB7IGNvbnN0cnVjdG9yKCkgeyB9IH07IGJhc2VXaXRoQmFkUHJvdG90
eXBlLnByb3RvdHlwZSA9IDMKK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgYmFzZVdpdGhCYWRQcm90
b3R5cGUgeyBjb25zdHJ1Y3RvcigpIHsgfSB9IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFRo
ZSBzdXBlcmNsYXNzJ3MgcHJvdG90eXBlIGlzIG5vdCBhbiBvYmplY3QuLgorYmFzZVdpdGhCYWRQ
cm90b3R5cGUucHJvdG90eXBlID0gImFiYyIKK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgYmFzZVdp
dGhCYWRQcm90b3R5cGUgeyBjb25zdHJ1Y3RvcigpIHsgfSB9IHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IFRoZSBzdXBlcmNsYXNzJ3MgcHJvdG90eXBlIGlzIG5vdCBhbiBvYmplY3QuLgorUEFT
UyBiYXNlV2l0aEJhZFByb3RvdHlwZS5wcm90b3R5cGUgPSBudWxsOyB4ID0gY2xhc3MgZXh0ZW5k
cyBiYXNlV2l0aEJhZFByb3RvdHlwZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0gZGlkIG5vdCB0aHJv
dyBleGNlcHRpb24uCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgt
c3VwZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2NsYXNzLXN5
bnRheC1zdXBlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9j
bGFzcy1zeW50YXgtc3VwZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDEgQEAKK1Rlc3RzIGZvciBFUzYgY2xhc3Mgc3ludGF4ICJzdXBlciIKKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1MgKG5ldyBCYXNlKSBpbnN0YW5jZW9mIEJhc2UgaXMgdHJ1
ZQorUEFTUyAobmV3IERlcml2ZWQpIGluc3RhbmNlb2YgRGVyaXZlZCBpcyB0cnVlCitQQVNTIChu
ZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRob2QoKSBpcyBiYXNlTWV0aG9kVmFsdWUKK1BBU1MgeCA9
IChuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRob2Q7IHgoKSBpcyBiYXNlTWV0aG9kVmFsdWUKK1BB
U1MgKG5ldyBEZXJpdmVkKS5jYWxsQmFzZU1ldGhvZEluR2V0dGVyIGlzIGJhc2VNZXRob2RWYWx1
ZQorUEFTUyAobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kSW5TZXR0ZXIgPSAxOyB2YWx1ZUlu
U2V0dGVyIGlzIGJhc2VNZXRob2RWYWx1ZQorUEFTUyAobmV3IERlcml2ZWQpLmJhc2VNZXRob2RJ
bkdldHRlclNldHRlciBpcyAobmV3IEJhc2UpLmJhc2VNZXRob2QKK1BBU1MgKG5ldyBEZXJpdmVk
KS5iYXNlTWV0aG9kSW5HZXR0ZXJTZXR0ZXIgPSAxOyB2YWx1ZUluU2V0dGVyIGlzIChuZXcgQmFz
ZSkuYmFzZU1ldGhvZAorUEFTUyBEZXJpdmVkLnN0YXRpY01ldGhvZCgpIGlzICJiYXNlMyIKK1BB
U1MgKG5ldyBTZWNvbmREZXJpdmVkKS5jaGFpbk1ldGhvZCgpIGlzIFsiYmFzZSIsICJkZXJpdmVk
IiwgInNlY29uZERlcml2ZWQiXQorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3Ry
dWN0b3IoKSB7IHN1cGVyKCk7IH0gc3VwZXIoKSB7fSB9IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhF
cnJvcjogVW5leHBlY3RlZCBrZXl3b3JkICdzdXBlcicuIEV4cGVjdGVkIGFuIGluZGVudGlmaWVy
Li4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigp
OyB9IG1ldGhvZCgpIHsgc3VwZXIoKSB9IH0gdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBD
YW5ub3QgY2FsbCBzdXBlcigpIG91dHNpZGUgb2YgYSBjbGFzcyBjb25zdHJ1Y3Rvci4uCitQQVNT
IHggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBtZXRo
b2QoKSB7IHN1cGVyIH0gfSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IENhbm5vdCByZWZl
cmVuY2Ugc3VwZXIuLgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3Io
KSB7IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyByZXR1cm4gbmV3IHN1cGVyIH0gfSBkaWQgbm90IHRo
cm93IGV4Y2VwdGlvbi4KK1BBU1MgKG5ldyB4KS5tZXRob2QoKSBpbnN0YW5jZW9mIEJhc2UgaXMg
dHJ1ZQorUEFTUyAobmV3IHgpLm1ldGhvZCgpIGluc3RhbmNlb2YgeCBpcyBmYWxzZQorUEFTUyB4
ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9k
MSgpIHsgZGVsZXRlIChzdXBlci5mb28pIH0gbWV0aG9kMigpIHsgZGVsZXRlIHN1cGVyWyJmb28i
XSB9IH0gZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIChuZXcgeCkubWV0aG9kMSgpIHRo
cmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3Bl
cnR5LgorUEFTUyAobmV3IHgpLm1ldGhvZDIoKSB0aHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJy
b3I6IENhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eS4KK1BBU1MgbmV3IChjbGFzcyB7IGNv
bnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IH0pIGluc3RhbmNlb2YgT2JqZWN0IGlz
IHRydWUKK1BBU1MgbmV3IChjbGFzcyB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gMTsgfSB9KSBp
bnN0YW5jZW9mIE9iamVjdCBpcyB0cnVlCitQQVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsg
Y29uc3RydWN0b3IoKSB7IHJldHVybiB1bmRlZmluZWQgfSB9KSBpcyB1bmRlZmluZWQKK1BBU1Mg
eCA9IHsgfTsgbmV3IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJu
IHggfSB9KTsgaXMgeAorUEFTUyB4IGluc3RhbmNlb2YgQmFzZSBpcyBmYWxzZQorUEFTUyBuZXcg
KGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0pIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0
cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4uCitQQVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBCYXNl
IHsgY29uc3RydWN0b3IoKSB7IHJldHVybiAxOyB9IH0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IENhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9m
IGEgZGVyaXZlZCBjbGFzcy4uCitQQVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3Ry
dWN0b3IoKSB7IHJldHVybiB1bmRlZmluZWQgfSB9KSBpcyB1bmRlZmluZWQKK1BBU1MgeCA9IHsg
fTsgbmV3IChjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9
KTsgaXMgeAorUEFTUyB4IGluc3RhbmNlb2YgT2JqZWN0IGlzIHRydWUKK1BBU1MgbmV3IChjbGFz
cyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9KSB0aHJldyBleGNlcHRpb24gVHlw
ZUVycm9yOiBDYW5ub3QgcmV0dXJuIGEgbm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3Rv
ciBvZiBhIGRlcml2ZWQgY2xhc3MuLgorUEFTUyBuZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNv
bnN0cnVjdG9yKCkgeyByZXR1cm4gMTsgfSB9KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBD
YW5ub3QgcmV0dXJuIGEgbm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRl
cml2ZWQgY2xhc3MuLgorUEFTUyBuZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9y
KCkgeyBzdXBlcigpIH0gfSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
anMvY2xhc3Mtc3ludGF4LXN1cGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
Y2xhc3Mtc3ludGF4LXN1cGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9j
bGFzcy1zeW50YXgtc3VwZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9jbGFz
cy1zeW50YXgtc3VwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvanMvc2NyaXB0LXRlc3RzL2NsYXNzLXN5bnRheC1leHRlbmRzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jbGFzcy1zeW50YXgt
ZXh0ZW5kcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvL0Agc2tpcAorCitk
ZXNjcmlwdGlvbignVGVzdHMgZm9yIEVTNiBjbGFzcyBzeW50YXggImV4dGVuZHMiJyk7CisKK2Ns
YXNzIEJhc2UgeworICAgIGNvbnN0cnVjdG9yKCkgeyB9CisgICAgYmFzZU1ldGhvZCgpIHsgcmV0
dXJuICdiYXNlJzsgfQorICAgIG92ZXJyaWRlbk1ldGhvZCgpIHsgcmV0dXJuICdiYXNlJzsgfQor
ICAgIHN0YXRpYyBzdGF0aWNCYXNlTWV0aG9kKCkgeyByZXR1cm4gJ2Jhc2UnOyB9CisgICAgc3Rh
dGljIHN0YXRpY092ZXJyaWRlbk1ldGhvZCgpIHsgcmV0dXJuICdiYXNlJzsgfQorfQorCitjbGFz
cyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0K
KyAgICBvdmVycmlkZW5NZXRob2QoKSB7IHJldHVybiAnZGVyaXZlZCc7IH0KKyAgICBzdGF0aWMg
c3RhdGljT3ZlcnJpZGVuTWV0aG9kKCkgeyByZXR1cm4gJ2Rlcml2ZWQnOyB9Cit9CisKK3Nob3Vs
ZEJlVHJ1ZSgnKG5ldyBCYXNlKSBpbnN0YW5jZW9mIEJhc2UnKTsKK3Nob3VsZEJlVHJ1ZSgnKG5l
dyBEZXJpdmVkKSBpbnN0YW5jZW9mIERlcml2ZWQnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQp
LmJhc2VNZXRob2QoKScsICciYmFzZSInKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLm92ZXJy
aWRlbk1ldGhvZCgpJywgJyJkZXJpdmVkIicpOworc2hvdWxkQmUoJ0Rlcml2ZWQuc3RhdGljQmFz
ZU1ldGhvZCgpJywgJyJiYXNlIicpOworc2hvdWxkQmUoJ0Rlcml2ZWQuc3RhdGljT3ZlcnJpZGVu
TWV0aG9kKCknLCAnImRlcml2ZWQiJyk7CisKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5k
cycsICciU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgZW5kIG9mIHNjcmlwdCInKTsKK3Nob3VsZFRo
cm93KCd4ID0gY2xhc3MgZXh0ZW5kcycsICciU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgZW5kIG9m
IHNjcmlwdCInKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsnLCAnIlN5
bnRheEVycm9yOiBVbmV4cGVjdGVkIGVuZCBvZiBzY3JpcHQiJyk7CitzaG91bGRUaHJvdygneCA9
IGNsYXNzIGV4dGVuZHMgQmFzZSB7fScsICciU3ludGF4RXJyb3I6IENsYXNzIGRlY2xhcmF0aW9u
IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBpcyBub3Qgc3VwcG9ydGVkIHlldC4iJyk7CitzaG91bGRO
b3RUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0nKTsK
K3Nob3VsZEJlKCd4Ll9fcHJvdG9fXycsICdCYXNlJyk7CitzaG91bGRCZSgneC5wcm90b3R5cGUu
X19wcm90b19fJywgJ0Jhc2UucHJvdG90eXBlJyk7CitzaG91bGRCZSgneCA9IGNsYXNzIGV4dGVu
ZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyB9IH07IHguX19wcm90b19fJywgJ0Z1bmN0aW9uLnBy
b3RvdHlwZScpOworc2hvdWxkQmUoJ3guX19wcm90b19fJywgJ0Z1bmN0aW9uLnByb3RvdHlwZScp
Oworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIDMgeyBjb25zdHJ1Y3RvcigpIHsgfSB9
OyB4Ll9fcHJvdG9fXycsICciVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcyBpcyBub3QgYW4gb2Jq
ZWN0LiInKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyAiYWJjIiB7IGNvbnN0cnVj
dG9yKCkgeyB9IH07IHguX19wcm90b19fJywgJyJUeXBlRXJyb3I6IFRoZSBzdXBlcmNsYXNzIGlz
IG5vdCBhbiBvYmplY3QuIicpOworZXZhbEFuZExvZygnYmFzZVdpdGhCYWRQcm90b3R5cGUgPSBj
bGFzcyB7IGNvbnN0cnVjdG9yKCkgeyB9IH07IGJhc2VXaXRoQmFkUHJvdG90eXBlLnByb3RvdHlw
ZSA9IDMnKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBiYXNlV2l0aEJhZFByb3Rv
dHlwZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0nLCAnIlR5cGVFcnJvcjogVGhlIHN1cGVyY2xhc3Nc
J3MgcHJvdG90eXBlIGlzIG5vdCBhbiBvYmplY3QuIicpOworZXZhbEFuZExvZygnYmFzZVdpdGhC
YWRQcm90b3R5cGUucHJvdG90eXBlID0gImFiYyInKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3Mg
ZXh0ZW5kcyBiYXNlV2l0aEJhZFByb3RvdHlwZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0nLCAnIlR5
cGVFcnJvcjogVGhlIHN1cGVyY2xhc3NcJ3MgcHJvdG90eXBlIGlzIG5vdCBhbiBvYmplY3QuIicp
Oworc2hvdWxkTm90VGhyb3coJ2Jhc2VXaXRoQmFkUHJvdG90eXBlLnByb3RvdHlwZSA9IG51bGw7
IHggPSBjbGFzcyBleHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3IoKSB7
IH0gfScpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExheW91dFRl
c3RzL2pzL3NjcmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtc3VwZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2NsYXNzLXN5bnRheC1zdXBlci5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtc3VwZXIu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLy9AIHNraXAKKworZGVzY3JpcHRp
b24oJ1Rlc3RzIGZvciBFUzYgY2xhc3Mgc3ludGF4ICJzdXBlciInKTsKKwordmFyIGJhc2VNZXRo
b2RWYWx1ZSA9IHt9OwordmFyIHZhbHVlSW5TZXR0ZXIgPSBudWxsOworCitjbGFzcyBCYXNlIHsK
KyAgICBjb25zdHJ1Y3RvcigpIHsgfQorICAgIGJhc2VNZXRob2QoKSB7IHJldHVybiBiYXNlTWV0
aG9kVmFsdWU7IH0KKyAgICBjaGFpbk1ldGhvZCgpIHsgcmV0dXJuICdiYXNlJzsgfQorICAgIHN0
YXRpYyBzdGF0aWNNZXRob2QoKSB7IHJldHVybiAnYmFzZTMnOyB9Cit9CisKK2NsYXNzIERlcml2
ZWQgZXh0ZW5kcyBCYXNlIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfQorICAgIGNo
YWluTWV0aG9kKCkgeyByZXR1cm4gW3N1cGVyLmNoYWluTWV0aG9kKCksICdkZXJpdmVkJ107IH0K
KyAgICBjYWxsQmFzZU1ldGhvZCgpIHsgcmV0dXJuIHN1cGVyLmJhc2VNZXRob2QoKTsgfQorICAg
IGdldCBjYWxsQmFzZU1ldGhvZEluR2V0dGVyKCkgeyByZXR1cm4gc3VwZXJbJ2Jhc2VNZXRob2Qn
XSgpOyB9CisgICAgc2V0IGNhbGxCYXNlTWV0aG9kSW5TZXR0ZXIoKSB7IHdpbmRvdy52YWx1ZUlu
U2V0dGVyID0gc3VwZXIuYmFzZU1ldGhvZCgpOyB9CisgICAgZ2V0IGJhc2VNZXRob2RJbkdldHRl
clNldHRlcigpIHsgcmV0dXJuIHN1cGVyLmJhc2VNZXRob2Q7IH0KKyAgICBzZXQgYmFzZU1ldGhv
ZEluR2V0dGVyU2V0dGVyKCkgeyB3aW5kb3cudmFsdWVJblNldHRlciA9IHN1cGVyWydiYXNlTWV0
aG9kJ107IH0KKyAgICBzdGF0aWMgc3RhdGljTWV0aG9kKCkgeyByZXR1cm4gc3VwZXIuc3RhdGlj
TWV0aG9kKCk7IH0KK30KKworY2xhc3MgU2Vjb25kRGVyaXZlZCBleHRlbmRzIERlcml2ZWQgewor
ICAgIGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9CisgICAgY2hhaW5NZXRob2QoKSB7IHJldHVy
biBzdXBlci5jaGFpbk1ldGhvZCgpLmNvbmNhdChbJ3NlY29uZERlcml2ZWQnXSk7IH0KK30KKwor
c2hvdWxkQmVUcnVlKCcobmV3IEJhc2UpIGluc3RhbmNlb2YgQmFzZScpOworc2hvdWxkQmVUcnVl
KCcobmV3IERlcml2ZWQpIGluc3RhbmNlb2YgRGVyaXZlZCcpOworc2hvdWxkQmUoJyhuZXcgRGVy
aXZlZCkuY2FsbEJhc2VNZXRob2QoKScsICdiYXNlTWV0aG9kVmFsdWUnKTsKK3Nob3VsZEJlKCd4
ID0gKG5ldyBEZXJpdmVkKS5jYWxsQmFzZU1ldGhvZDsgeCgpJywgJ2Jhc2VNZXRob2RWYWx1ZScp
Oworc2hvdWxkQmUoJyhuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRob2RJbkdldHRlcicsICdiYXNl
TWV0aG9kVmFsdWUnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kSW5T
ZXR0ZXIgPSAxOyB2YWx1ZUluU2V0dGVyJywgJ2Jhc2VNZXRob2RWYWx1ZScpOworc2hvdWxkQmUo
JyhuZXcgRGVyaXZlZCkuYmFzZU1ldGhvZEluR2V0dGVyU2V0dGVyJywgJyhuZXcgQmFzZSkuYmFz
ZU1ldGhvZCcpOworc2hvdWxkQmUoJyhuZXcgRGVyaXZlZCkuYmFzZU1ldGhvZEluR2V0dGVyU2V0
dGVyID0gMTsgdmFsdWVJblNldHRlcicsICcobmV3IEJhc2UpLmJhc2VNZXRob2QnKTsKK3Nob3Vs
ZEJlKCdEZXJpdmVkLnN0YXRpY01ldGhvZCgpJywgJyJiYXNlMyInKTsKK3Nob3VsZEJlKCcobmV3
IFNlY29uZERlcml2ZWQpLmNoYWluTWV0aG9kKCknLCAnWyJiYXNlIiwgImRlcml2ZWQiLCAic2Vj
b25kRGVyaXZlZCJdJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNv
bnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IHN1cGVyKCkge30gfScsICciU3ludGF4RXJyb3I6IFVu
ZXhwZWN0ZWQga2V5d29yZCBcJ3N1cGVyXCcuIEV4cGVjdGVkIGFuIGluZGVudGlmaWVyLiInKTsK
K3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1
cGVyKCk7IH0gbWV0aG9kKCkgeyBzdXBlcigpIH0gfScsCisgICAgJyJTeW50YXhFcnJvcjogQ2Fu
bm90IGNhbGwgc3VwZXIoKSBvdXRzaWRlIG9mIGEgY2xhc3MgY29uc3RydWN0b3IuIicpOworc2hv
dWxkVGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIo
KTsgfSBtZXRob2QoKSB7IHN1cGVyIH0gfScsICciU3ludGF4RXJyb3I6IENhbm5vdCByZWZlcmVu
Y2Ugc3VwZXIuIicpOworc2hvdWxkTm90VGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyBj
b25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBtZXRob2QoKSB7IHJldHVybiBuZXcgc3VwZXIgfSB9
Jyk7CitzaG91bGRCZVRydWUoJyhuZXcgeCkubWV0aG9kKCkgaW5zdGFuY2VvZiBCYXNlJyk7Citz
aG91bGRCZUZhbHNlKCcobmV3IHgpLm1ldGhvZCgpIGluc3RhbmNlb2YgeCcpOworc2hvdWxkTm90
VGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsg
fSBtZXRob2QxKCkgeyBkZWxldGUgKHN1cGVyLmZvbykgfSBtZXRob2QyKCkgeyBkZWxldGUgc3Vw
ZXJbImZvbyJdIH0gfScpOworc2hvdWxkVGhyb3coJyhuZXcgeCkubWV0aG9kMSgpJywgJyJSZWZl
cmVuY2VFcnJvcjogQ2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5IicpOworc2hvdWxkVGhy
b3coJyhuZXcgeCkubWV0aG9kMigpJywgJyJSZWZlcmVuY2VFcnJvcjogQ2Fubm90IGRlbGV0ZSBh
IHN1cGVyIHByb3BlcnR5IicpOworc2hvdWxkQmVUcnVlKCduZXcgKGNsYXNzIHsgY29uc3RydWN0
b3IoKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gfSkgaW5zdGFuY2VvZiBPYmplY3QnKTsKK3Nob3Vs
ZEJlVHJ1ZSgnbmV3IChjbGFzcyB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gMTsgfSB9KSBpbnN0
YW5jZW9mIE9iamVjdCcpOworc2hvdWxkQmUoJ25ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29u
c3RydWN0b3IoKSB7IHJldHVybiB1bmRlZmluZWQgfSB9KScsICd1bmRlZmluZWQnKTsKK3Nob3Vs
ZEJlKCd4ID0geyB9OyBuZXcgKGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyBy
ZXR1cm4geCB9IH0pOycsICd4Jyk7CitzaG91bGRCZUZhbHNlKCd4IGluc3RhbmNlb2YgQmFzZScp
Oworc2hvdWxkVGhyb3coJ25ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7
IH0gfSknLCAnIlR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5vbi1vYmplY3QgdHlwZSBpbiB0
aGUgY29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLiInKTsKK3Nob3VsZFRocm93KCduZXcg
KGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gMTsgfSB9KScsICci
VHlwZUVycm9yOiBDYW5ub3QgcmV0dXJuIGEgbm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1
Y3RvciBvZiBhIGRlcml2ZWQgY2xhc3MuIicpOworc2hvdWxkQmUoJ25ldyAoY2xhc3MgZXh0ZW5k
cyBudWxsIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiB1bmRlZmluZWQgfSB9KScsICd1bmRlZmlu
ZWQnKTsKK3Nob3VsZEJlKCd4ID0geyB9OyBuZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0
cnVjdG9yKCkgeyByZXR1cm4geCB9IH0pOycsICd4Jyk7CitzaG91bGRCZVRydWUoJ3ggaW5zdGFu
Y2VvZiBPYmplY3QnKTsKK3Nob3VsZFRocm93KCduZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNv
bnN0cnVjdG9yKCkgeyB9IH0pJywgJyJUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4gYSBub24tb2Jq
ZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4iJyk7CitzaG91
bGRUaHJvdygnbmV3IChjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJu
IDE7IH0gfSknLCAnIlR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5vbi1vYmplY3QgdHlwZSBp
biB0aGUgY29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLiInKTsKK3Nob3VsZE5vdFRocm93
KCduZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpIH0gfSkn
KTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248133</attachid>
            <date>2015-03-06 19:45:40 -0800</date>
            <delta_ts>2015-03-09 15:50:16 -0700</delta_ts>
            <desc>Fixed the merge</desc>
            <filename>bug-142200-20150306194519.patch</filename>
            <type>text/plain</type>
            <size>78948</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxNS0wMy0wNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBTdXBwb3J0IGV4dGVuZHMgYW5kIHN1cGVyIGtleXdvcmRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIyMDAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgRVM2IGNs
YXNzIHN5bnRheCBpbmhlcml0YW5jZS4KKworICAgICAgICBBZGRlZCBDb25zdHJ1Y3RvcktpbmQg
YXMgd2VsbCBhcyBib29sZWFuIGZsYWdzIGluZGljYXRpbmcgdGhlIGNvbnN0cnVjdG9yIGtpbmQg
dG8KKyAgICAgICAgdmFyaW91cyBjbGFzc2VzIGluIFVubGlua2VkQ29kZUJsb2NrIGFzIHdlbGwg
YXMgQVNUIG5vZGVzLgorCisgICAgICAgIEVhY2ggbWV0aG9kIHN0b3JlcyB0aGUgYXNzb2NpYXRl
ZCBjbGFzcyBhcyBpdHMgaG9tZU9iamVjdFByaXZhdGVOYW1lLiBUaGlzIHZhbHVlIGlzIHVzZWQg
dG8KKyAgICAgICAgbWFrZSBzdXBlciBjYWxscy4KKworICAgICAgICAqIGJ5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxp
bmtlZENvZGVCbG9jayk6CisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
OgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlSW5mbzo6RXhlY3V0YWJsZUluZm8pOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29uc3RydWN0b3JLaW5kSXNEZXJp
dmVkKTogQWRkZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdHJ1Y3Rv
cktpbmRJc0Rlcml2ZWQpOiBBZGRlZC4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcik6IERvbid0IGVtaXQgb3BfY3JlYXRlX3RoaXMgaW4gYSBkZXJpdmVkIGNsYXNz
CisgICAgICAgIGFzIHRoZSBvYmplY3QgaXMgYWxsb2NhdGVkIGJ5IHRoZSBoaWdoZXN0IGJhc2Ug
Y2xhc3MncyBjb25zdHJ1Y3Rvci4gQWxzbyBzZXQgInRoaXMiIHRvIG51bGwKKyAgICAgICAgYW5k
IHN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbiBtX25ld1RhcmdldFJlZ2lzdGVyLiAidGhpcyIg
aXMgc3VwcG9zZWQgdG8gYmUgaW4gVERaIGJ1dAorICAgICAgICB0aGF0IHdpbGwgYmUgaW1wbGVt
ZW50ZWQgaW4gYSBzZXBhcmF0ZSBwYXRjaC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRSZXR1cm4pOiBBbGxvdyAidW5kZWZpbmVkIiB0byBiZSByZXR1cm5lZCBmcm9tIGEg
ZGVyaXZlZCBjbGFzcy4KKyAgICAgICAgSW4gYSBkZXJpdmVkIGNsYXNzJ3MgY29uc3RydWN0b3Is
IG5vdCByZXR1cm5pbmcgInVuZGVmaW5lZCIgb3IgYW4gb2JqZWN0IHJlc3VsdHMgaW4gYSB0eXBl
CisgICAgICAgIGVycm9yIGluc3RlYWQgb2YgInRoaXMiIGJlaW5nIHJldHVybmVkLgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93VHlwZUVycm9yKTogQWRkZWQuCisK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCk6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6bmV3VGFyZ2V0KTogQWRkZWQuCisKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vw
ZXJOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZC4gRW1pdHMgdGhlIGNvZGUgdG8gb2J0YWluIHRo
ZSBjYWxsZWUncyBwYXJlbnQgY2xhc3MuCisgICAgICAgIChKU0M6OmVtaXRTdXBlckJhc2VGb3JD
YWxsZWUpOiBBZGRlZC4gRW1pdHMgdGhlIGNvZGUgdG8gb2J0YWluIHRoZSBwYXJlbnQgY2xhc3Mn
cyBwcm90b3R5cGUuCisgICAgICAgIChKU0M6OmVtaXRQdXRIb21lT2JqZWN0KTogQWRkZWQuCisg
ICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZSk6IFN0b3JlcyB0aGUg
aG9tZSBvYmplY3Qgd2hlbiBhZGRpbmcgbWV0aG9kcy4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlM
aXN0Tm9kZTo6ZW1pdFB1dENvbnN0YW50UHJvcGVydHkpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6
QnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKTogQWRkZWQgdGhlIHN1cHBvcnQgZm9y
IHN1cGVyWydmb28nXS4KKyAgICAgICAgKEpTQzo6RG90QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNv
ZGUpOiBBZGRlZCB0aGUgc3VwcG9ydCBmb3Igc3VwZXIuZm9vLgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkIHRoZSBzdXBwb3J0IGZvciBz
dXBlcigpLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVj
b2RlKTogQWRkZWQgdGhlIHN1cHBvcnQgZm9yIHN1cGVyWydmb28nXSgpLgorICAgICAgICAoSlND
OjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZCB0aGUgc3VwcG9ydCBm
b3Igc3VwZXIuZm9vKCkuCisgICAgICAgIChKU0M6OkRlbGV0ZUJyYWNrZXROb2RlOjplbWl0Qnl0
ZWNvZGUpOiBGb3JiaWQgImRlbGV0ZSBzdXBlci5mb28iLgorICAgICAgICAoSlNDOjpEZWxldGVE
b3ROb2RlOjplbWl0Qnl0ZWNvZGUpOiBGb3JiaWQgImRlbGV0ZSBzdXBlclsnZm9vJ10iLgorICAg
ICAgICAoSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZCB0aGUgc3VwcG9y
dCBmb3IgImNsYXNzSGVyaXRhZ2UiLiBUaGlzIGlzIHRoZSBtYWluCisgICAgICAgIGxvZ2ljIGZv
ciBpbmhlcml0YW5jZS4gV2hlbiBhIGNsYXNzIEIgaW5oZXJpdHMgZnJvbSBhIGNsYXNzIEEsIHNl
dCBCLl9fcHJvdG9fXyB0byBBIGFuZCBzZXQKKyAgICAgICAgQi5wcm90b3R5cGUuX19wcm90b19f
IHRvIEEucHJvdG90eXBlLiBUaHJvdyBleGNlcHRpb25zIHdoZW4gZWl0aGVyIEEgb3IgQS5fX3By
b3RvX18gaXMgbm90CisgICAgICAgIGFuIG9iamVjdC4KKworICAgICAgICAqIHBhcnNlci9BU1RC
dWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OnN1cGVyRXhwcik6IEFkZGVkLgor
CisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6U3Vw
ZXJOb2RlOjpTdXBlck5vZGUpOiBBZGRlZC4KKworICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUpOgorCisg
ICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjpp
c1N1cGVyTm9kZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Tm9kZTo6dHlwZSk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Tm9kZTo6bmVlZHNTdXBlckJpbmRpbmcpOgorCisgICAgICAgICogcGFy
c2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1
bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0
aW9uSW5mbyk6IFRocm93IGEgcGFyc2VyIGVycm9yIGlmIHN1cGVyKCkgaXMgdXNlZCBvdXRzaWRl
CisgICAgICAgIG9mIGNsYXNzIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgKEpTQzo6UGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKTogQ29uc3RydWN0b3JLaW5kIGlzICJkZXJpdmVkIiBp
ZiBhbmQgb25seSBpZiB0aGUgcGFyZW50CisgICAgICAgIGNsYXNzIGlzIHNwZWNpZmllZCBpbiB0
aGUgZGVjbGFyYXRpb24gLyBleHByZXNzaW9uLgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOiBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgInN1cGVy
KCkiLCAic3VwZXIuZm9vIiwKKyAgICAgICAgYW5kICJzdXBlclsnZm9vJ10iLiBUaHJvdyBhIHNl
bWFudGljIGVycm9yIGlmICJzdXBlciIgYXBwZWFycyBieSBpdHNlbGYuCisKKyAgICAgICAgKiBw
YXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3BlOjpTY29wZSk6IEFkZGVkIG1faGFz
RGlyZWN0U3VwZXIuIFRoaXMgdmFyaWFibGUga2VlcHMgdHJhY2sgb2YgdGhlIHVzZSBvZiAic3Vw
ZXIoKSIKKyAgICAgICAgc28gdGhhdCBwYXJzZUZ1bmN0aW9uSW5mbyBjYW4gc3BpdCBhbiBlcnJv
ciBpZiBpdCdzIHVzZWQgb3V0c2lkZSBvZiBjbGFzcyBjb25zdHJ1Y3RvcnMuCisgICAgICAgIChK
U0M6OlNjb3BlOjpoYXNEaXJlY3RTdXBlcik6IEFkZGVkLgorICAgICAgICAoSlNDOjpTY29wZTo6
c2V0SGFzRGlyZWN0U3VwZXIpOiBBZGRlZC4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXJNb2Rl
cy5oOgorICAgICAgICAoSlNDOjpDb25zdHJ1Y3RvcktpbmQpOiBBZGRlZC4KKworICAgICAgICAq
IHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OnN1
cGVyRXhwcik6IEFkZGVkLgorCisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
OiBBZGRlZCBob21lT2JqZWN0UHJpdmF0ZU5hbWUuCisKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1
dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmV4ZWN1dGFibGVJbmZvKTog
CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpleGVjdXRhYmxlSW5mbyk6CisKIDIw
MTUtMDMtMDYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBBZG9wdCBPYmplY3QgTGl0ZXJhbCBTaG9ydGhhbmQgUHJvcGVydHkg
Q29uc3RydWN0aW9uIFN5bnRheApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAxODExOTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw3ICs2MSw4IEBAIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiBnZW5lcmEKICAgICBmdW5jdGlvbi0+ZmluaXNoUGFyc2luZyhleGVjdXRhYmxlLT5wYXJh
bWV0ZXJzKCksIGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+ZnVuY3Rpb25Nb2RlKCkp
OwogICAgIGV4ZWN1dGFibGUtPnJlY29yZFBhcnNlKGZ1bmN0aW9uLT5mZWF0dXJlcygpLCBmdW5j
dGlvbi0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSk7CiAgICAgCi0gICAgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogcmVzdWx0ID0gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKCZ2
bSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhmdW5jdGlvbi0+bmVlZHNBY3RpdmF0aW9u
KCksIGZ1bmN0aW9uLT51c2VzRXZhbCgpLCBmdW5jdGlvbi0+aXNTdHJpY3RNb2RlKCksIGtpbmQg
PT0gQ29kZUZvckNvbnN0cnVjdCwgZnVuY3Rpb25LaW5kID09IFVubGlua2VkQnVpbHRpbkZ1bmN0
aW9uKSk7CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gVW5saW5rZWRG
dW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwgRnVuY3Rpb25Db2RlLAorICAgICAgICBFeGVj
dXRhYmxlSW5mbyhmdW5jdGlvbi0+bmVlZHNBY3RpdmF0aW9uKCksIGZ1bmN0aW9uLT51c2VzRXZh
bCgpLCBmdW5jdGlvbi0+aXNTdHJpY3RNb2RlKCksIGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCwg
ZnVuY3Rpb25LaW5kID09IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uLCBleGVjdXRhYmxlLT5jb25z
dHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKSkpOwogICAgIGF1dG8gZ2VuZXJhdG9yKHN0ZDo6bWFrZV91
bmlxdWU8Qnl0ZWNvZGVHZW5lcmF0b3I+KHZtLCBmdW5jdGlvbi5nZXQoKSwgcmVzdWx0LCBkZWJ1
Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSkpOwogICAgIGVycm9yID0gZ2VuZXJhdG9yLT5nZW5lcmF0
ZSgpOwogICAgIGlmIChlcnJvci5pc1ZhbGlkKCkpCkBAIC04NCw2ICs4NSw5IEBAIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmMKICAgICAsIG1faXNJblN0cmljdENvbnRl
eHQobm9kZS0+aXNJblN0cmljdENvbnRleHQoKSkKICAgICAsIG1faGFzQ2FwdHVyZWRWYXJpYWJs
ZXMoZmFsc2UpCiAgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGtpbmQgPT0gVW5saW5rZWRCdWls
dGluRnVuY3Rpb24pCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgLCBtX2NvbnN0
cnVjdG9yS2luZElzRGVyaXZlZChub2RlLT5jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKSkKKyNl
bmRpZgogICAgICwgbV9uYW1lKG5vZGUtPmlkZW50KCkpCiAgICAgLCBtX2luZmVycmVkTmFtZShu
b2RlLT5pbmZlcnJlZE5hbWUoKSkKICAgICAsIG1fcGFyYW1ldGVycyhub2RlLT5wYXJhbWV0ZXJz
KCkpCkBAIC0yMDUsNiArMjA5LDkgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJs
b2NrKFZNKgogICAgICwgbV9pc0NvbnN0cnVjdG9yKGluZm8ubV9pc0NvbnN0cnVjdG9yKQogICAg
ICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKICAgICAsIG1faXNCdWlsdGluRnVuY3Rp
b24oaW5mby5tX2lzQnVpbHRpbkZ1bmN0aW9uKQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoaW5mby5tX2NvbnN0cnVjdG9yS2lu
ZElzRGVyaXZlZCkKKyNlbmRpZgogICAgICwgbV9maXJzdExpbmUoMCkKICAgICAsIG1fbGluZUNv
dW50KDApCiAgICAgLCBtX2VuZENvbHVtbihVSU5UX01BWCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAx
ODExOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTkgKzY1LDI2IEBAIHR5cGVkZWYgdW5zaWduZWQg
VW5saW5rZWRPYmplY3RBbGxvY2F0aW8KIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRMTEludENh
bGxMaW5rSW5mbzsKIAogc3RydWN0IEV4ZWN1dGFibGVJbmZvIHsKLSAgICBFeGVjdXRhYmxlSW5m
byhib29sIG5lZWRzQWN0aXZhdGlvbiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBpc1N0cmljdE1vZGUs
IGJvb2wgaXNDb25zdHJ1Y3RvciwgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbikKKyAgICBFeGVjdXRh
YmxlSW5mbyhib29sIG5lZWRzQWN0aXZhdGlvbiwgYm9vbCB1c2VzRXZhbCwgYm9vbCBpc1N0cmlj
dE1vZGUsIGJvb2wgaXNDb25zdHJ1Y3RvciwgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbiwgYm9vbCBj
b25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQpCiAgICAgICAgIDogbV9uZWVkc0FjdGl2YXRpb24obmVl
ZHNBY3RpdmF0aW9uKQogICAgICAgICAsIG1fdXNlc0V2YWwodXNlc0V2YWwpCiAgICAgICAgICwg
bV9pc1N0cmljdE1vZGUoaXNTdHJpY3RNb2RlKQogICAgICAgICAsIG1faXNDb25zdHJ1Y3Rvcihp
c0NvbnN0cnVjdG9yKQogICAgICAgICAsIG1faXNCdWlsdGluRnVuY3Rpb24oaXNCdWlsdGluRnVu
Y3Rpb24pCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgICwgbV9jb25zdHJ1
Y3RvcktpbmRJc0Rlcml2ZWQoY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKQorI2VuZGlmCiAgICAg
eworICAgICAgICBVTlVTRURfUEFSQU0oY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKTsKICAgICB9
CiAgICAgYm9vbCBtX25lZWRzQWN0aXZhdGlvbiA6IDE7CiAgICAgYm9vbCBtX3VzZXNFdmFsIDog
MTsKICAgICBib29sIG1faXNTdHJpY3RNb2RlIDogMTsKICAgICBib29sIG1faXNDb25zdHJ1Y3Rv
ciA6IDE7CiAgICAgYm9vbCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyNpZiBFTkFCTEUoRVM2
X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkIDogMTsK
KyNlbmRpZgogfTsKIAogZW51bSBVbmxpbmtlZEZ1bmN0aW9uS2luZCB7CkBAIC0xMTYsNiArMTIz
LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBKU1BhcnNlU3RyaWN0OwogICAgICAg
ICByZXR1cm4gSlNQYXJzZU5vcm1hbDsKICAgICB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5U
QVgpCisgICAgYm9vbCBjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZDsgfQorI2Vsc2UKKyAgICBib29sIGNvbnN0cnVjdG9y
S2luZElzRGVyaXZlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKIAogICAgIHVu
c2lnbmVkIGZpcnN0TGluZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RMaW5lT2Zmc2V0
OyB9CiAgICAgdW5zaWduZWQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ291bnQ7
IH0KQEAgLTE2OCw2ICsxODAsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0luU3RyaWN0Q29u
dGV4dCA6IDE7CiAgICAgYm9vbCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzIDogMTsKICAgICBib29s
IG1faXNCdWlsdGluRnVuY3Rpb24gOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQor
ICAgIGJvb2wgbV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQgOiAxOworI2VuZGlmCiAKICAgICBJ
ZGVudGlmaWVyIG1fbmFtZTsKICAgICBJZGVudGlmaWVyIG1faW5mZXJyZWROYW1lOwpAQCAtMzQy
LDcgKzM1NywxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbjsgfQogCiAgICAgYm9v
bCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNCdWlsdGluRnVuY3Rpb247
IH0KLSAgICAKKworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGJvb2wgY29uc3Ry
dWN0b3JLaW5kSXNEZXJpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcktpbmRJc0Rl
cml2ZWQ7IH0KKyNlbmRpZgorCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpCiAgICAgewogICAgICAg
ICBtX2p1bXBUYXJnZXRzLnNocmlua1RvRml0KCk7CkBAIC01MzQsNiArNTUzLDkgQEAgcHJpdmF0
ZToKICAgICBib29sIG1faXNDb25zdHJ1Y3RvciA6IDE7CiAgICAgYm9vbCBtX2hhc0NhcHR1cmVk
VmFyaWFibGVzIDogMTsKICAgICBib29sIG1faXNCdWlsdGluRnVuY3Rpb24gOiAxOworI2lmIEVO
QUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIGJvb2wgbV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2
ZWQgOiAxOworI2VuZGlmCiAgICAgdW5zaWduZWQgbV9maXJzdExpbmU7CiAgICAgdW5zaWduZWQg
bV9saW5lQ291bnQ7CiAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMTgxMTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMSw3ICs0MDEs
MTQgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGFkZENh
bGxlZShmdW5jdGlvbk5vZGUsIGNhbGxlZVJlZ2lzdGVyKTsKIAogICAgIGlmIChpc0NvbnN0cnVj
dG9yKCkpIHsKLSAgICAgICAgZW1pdENyZWF0ZVRoaXMoJm1fdGhpc1JlZ2lzdGVyKTsKKyNpZiBF
TkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2luZElzRGVy
aXZlZCgpKSB7CisgICAgICAgICAgICBtX25ld1RhcmdldFJlZ2lzdGVyID0gYWRkVmFyKCk7Cisg
ICAgICAgICAgICBlbWl0TW92ZShtX25ld1RhcmdldFJlZ2lzdGVyLCAmbV90aGlzUmVnaXN0ZXIp
OworICAgICAgICAgICAgZW1pdExvYWQoJm1fdGhpc1JlZ2lzdGVyLCBqc051bGwoKSk7CisgICAg
ICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgICAgICBlbWl0Q3JlYXRlVGhpcygmbV90aGlzUmVn
aXN0ZXIpOwogICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25Ob2RlLT51c2VzVGhpcygpIHx8IGNvZGVC
bG9jay0+dXNlc0V2YWwoKSkgewogICAgICAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nl
c3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogICAgICAgICBlbWl0T3Bjb2Rl
KG9wX3RvX3RoaXMpOwpAQCAtMTkwMSwxNCArMTkwOCwyNSBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFJldHVyCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2xl
eGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyID8gbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3Rlci0+
aW5kZXgoKSA6IGVtaXRMb2FkKDAsIEpTVmFsdWUoKSktPmluZGV4KCkpOwogICAgIH0KIAotICAg
IGlmIChpc0NvbnN0cnVjdG9yKCkgJiYgc3JjLT5pbmRleCgpICE9IG1fdGhpc1JlZ2lzdGVyLmlu
ZGV4KCkpIHsKLSAgICAgICAgUmVmUHRyPExhYmVsPiBpc09iamVjdExhYmVsID0gbmV3TGFiZWwo
KTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIHRoaXNNaWdodEJlVW5p
bml0aWFsaXplZCA9IGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpOworI2Vsc2UKKyAgICBib29s
IHRoaXNNaWdodEJlVW5pbml0aWFsaXplZCA9IGZhbHNlOworI2VuZGlmCisgICAgaWYgKGlzQ29u
c3RydWN0b3IoKSAmJiAoc3JjLT5pbmRleCgpICE9IG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkgfHwg
dGhpc01pZ2h0QmVVbmluaXRpYWxpemVkKSkgeworICAgICAgICBSZWZQdHI8TGFiZWw+IGlzT2Jq
ZWN0T3JVbmRlZmluZWRMYWJlbCA9IG5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW1pdEp1bXBJZlRy
dWUoZW1pdElzT2JqZWN0KG5ld1RlbXBvcmFyeSgpLCBzcmMpLCBpc09iamVjdExhYmVsLmdldCgp
KTsKKyAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzT2JqZWN0KG5ld1RlbXBvcmFyeSgpLCBz
cmMpLCBpc09iamVjdE9yVW5kZWZpbmVkTGFiZWwuZ2V0KCkpOwogCi0gICAgICAgIGVtaXRVbmFy
eU5vRHN0T3Aob3BfcmV0LCAmbV90aGlzUmVnaXN0ZXIpOworI2lmIEVOQUJMRShFUzZfQ0xBU1Nf
U1lOVEFYKQorICAgICAgICBpZiAoY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkpIHsKKyAgICAg
ICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZChuZXdUZW1wb3JhcnkoKSwgc3Jj
KSwgaXNPYmplY3RPclVuZGVmaW5lZExhYmVsLmdldCgpKTsKKyAgICAgICAgICAgIGVtaXRUaHJv
d1R5cGVFcnJvcigiQ2Fubm90IHJldHVybiBhIG5vbi1vYmplY3QgdHlwZSBpbiB0aGUgY29uc3Ry
dWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLiIpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAg
ICAgICAgICAgZW1pdFVuYXJ5Tm9Ec3RPcChvcF9yZXQsICZtX3RoaXNSZWdpc3Rlcik7CiAKLSAg
ICAgICAgZW1pdExhYmVsKGlzT2JqZWN0TGFiZWwuZ2V0KCkpOworICAgICAgICBlbWl0TGFiZWwo
aXNPYmplY3RPclVuZGVmaW5lZExhYmVsLmdldCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGVtaXRV
bmFyeU5vRHN0T3Aob3BfcmV0LCBzcmMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
MTgxMTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNyArMjY5LDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEoKSBjb25zdCB7IHJldHVybiBt
X3Njb3BlTm9kZS0+cGFyc2VyQXJlbmEoKTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlm
aWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX3ZtLT5wcm9wZXJ0eU5hbWVz
OyB9CiAKLSAgICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgeyByZXR1cm4gbV9jb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKTsgfQorICAgICAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdCB7
IHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpOyB9CisjaWYgRU5BQkxFKEVTNl9D
TEFTU19TWU5UQVgpCisgICAgICAgIGJvb2wgY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpOyB9Cisj
ZW5kaWYKIAogICAgICAgICBQYXJzZXJFcnJvciBnZW5lcmF0ZSgpOwogCkBAIC0yOTAsNyArMjkz
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVy
IHN0b3JpbmcgInRoaXMiCiAgICAgICAgIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0
dXJuICZtX3RoaXNSZWdpc3RlcjsgfQotICAgICAgICAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZ
TlRBWCkKKyAgICAgICAgUmVnaXN0ZXJJRCogbmV3VGFyZ2V0KCkgeyByZXR1cm4gbV9uZXdUYXJn
ZXRSZWdpc3RlcjsgfQorI2VuZGlmCisKICAgICAgICAgUmVnaXN0ZXJJRCogc2NvcGVSZWdpc3Rl
cigpIHsgcmV0dXJuIG1fc2NvcGVSZWdpc3RlcjsgfQogCiAgICAgICAgIC8vIFJldHVybnMgdGhl
IG5leHQgYXZhaWxhYmxlIHRlbXBvcmFyeSByZWdpc3Rlci4gUmVnaXN0ZXJzIHJldHVybmVkIGJ5
CkBAIC03NjMsNiArNzY5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQq
IG1fZW1wdHlWYWx1ZVJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBt
X2dsb2JhbE9iamVjdFJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBt
X2xvY2FsQXJndW1lbnRzUmVnaXN0ZXIgeyBudWxscHRyIH07CisjaWYgRU5BQkxFKEVTNl9DTEFT
U19TWU5UQVgpCisgICAgICAgIFJlZ2lzdGVySUQqIG1fbmV3VGFyZ2V0UmVnaXN0ZXIgeyBudWxs
cHRyIH07CisjZW5kaWYKIAogICAgICAgICBWZWN0b3I8SWRlbnRpZmllciwgMTY+IG1fd2F0Y2hh
YmxlVmFyaWFibGVzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1f
Y29uc3RhbnRQb29sUmVnaXN0ZXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTgxMTkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDM0IEBAIFJlZ2lzdGVySUQqIFRoaXNOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgRU5BQkxFKEVTNl9D
TEFTU19TWU5UQVgpCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdXBlck5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBT
dXBlck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCit7CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNhbGxl
ZS5zZXRJbmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhv
bWVPYmplY3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCAmY2FsbGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFt
ZSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvUGFyZW50ID0gZ2VuZXJhdG9yLmVtaXRH
ZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaG9tZU9iamVjdC5nZXQoKSwgZ2VuZXJh
dG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pOworICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcHJvdG9QYXJl
bnQuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOworfQorCitz
dGF0aWMgUmVnaXN0ZXJJRCogZW1pdFN1cGVyQmFzZUZvckNhbGxlZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yKQoreworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNhbGxlZS5zZXRJ
bmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhvbWVPYmpl
Y3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAmY2Fs
bGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IGhvbWVPYmplY3QuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVBy
b3RvKTsKK30KKworI2VuZGlmCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBS
ZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGJvb2wgUmVz
b2x2ZU5vZGU6OmlzUHVyZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKSBjb25zdApAQCAt
Mjk0LDYgKzMyMiwxMyBAQCBSZWdpc3RlcklEKiBPYmplY3RMaXRlcmFsTm9kZTo6ZW1pdEJ5dGVj
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eUxpc3ROb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbWl0UHV0SG9tZU9iamVjdChCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBmdW5jdGlvbiwgUmVnaXN0ZXJJRCogaG9tZU9iamVj
dCkKK3sKKyAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoZnVuY3Rpb24sIGdlbmVyYXRvci5wcm9w
ZXJ0eU5hbWVzKCkuaG9tZU9iamVjdFByaXZhdGVOYW1lLCBob21lT2JqZWN0KTsKK30KKyNlbmRp
ZgorCiBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIC8vIEZhc3QgY2Fz
ZTogdGhpcyBsb29wIGp1c3QgaGFuZGxlcyByZWd1bGFyIHZhbHVlIHByb3BlcnRpZXMuCkBAIC0z
MzAsNiArMzY1LDEwIEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY28K
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobm9kZS0+bV9hc3NpZ24pOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgICAgICAgICAgaWYgKG5vZGUtPm5lZWRzU3VwZXJCaW5kaW5nKCkpCisgICAgICAgICAg
ICAgICAgZW1pdFB1dEhvbWVPYmplY3QoZ2VuZXJhdG9yLCB2YWx1ZSwgZHN0KTsKKyNlbmRpZgog
CiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgZ2V0L3NldCBwcm9wZXJ0eSwgZmluZCBpdHMgZW50
cnkgaW4gdGhlIG1hcC4KICAgICAgICAgICAgIEFTU0VSVChub2RlLT5tX3R5cGUgPT0gUHJvcGVy
dHlOb2RlOjpHZXR0ZXIgfHwgbm9kZS0+bV90eXBlID09IFByb3BlcnR5Tm9kZTo6U2V0dGVyKTsK
QEAgLTM0NCwxMiArMzgzLDE4IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRC
eXRlY28KICAgICAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBwYWlyZWQgbm9kZSBub3cuCiAgICAg
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZ2V0dGVyUmVnOwogICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHNldHRlclJlZzsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAg
ICAgICAgICAgIFJlZ2lzdGVySUQqIHNlY29uZFJlZyA9IG51bGxwdHI7CisjZW5kaWYKIAogICAg
ICAgICAgICAgaWYgKG5vZGUtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6OkdldHRlcikgewogICAg
ICAgICAgICAgICAgIGdldHRlclJlZyA9IHZhbHVlOwogICAgICAgICAgICAgICAgIGlmIChwYWly
LnNlY29uZCkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGFpci5zZWNvbmQtPm1fdHlw
ZSA9PSBQcm9wZXJ0eU5vZGU6OlNldHRlcik7CiAgICAgICAgICAgICAgICAgICAgIHNldHRlclJl
ZyA9IGdlbmVyYXRvci5lbWl0Tm9kZShwYWlyLnNlY29uZC0+bV9hc3NpZ24pOworI2lmIEVOQUJM
RShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICAgICAgICAgICAgICBzZWNvbmRSZWcgPSBzZXR0
ZXJSZWcuZ2V0KCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBzZXR0ZXJSZWcgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChzZXR0ZXJSZWcuZ2V0KCksIGpzVW5kZWZp
bmVkKCkpOwpAQCAtMzYwLDEyICs0MDUsMjAgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9k
ZTo6ZW1pdEJ5dGVjbwogICAgICAgICAgICAgICAgIGlmIChwYWlyLnNlY29uZCkgewogICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQocGFpci5zZWNvbmQtPm1fdHlwZSA9PSBQcm9wZXJ0eU5vZGU6
OkdldHRlcik7CiAgICAgICAgICAgICAgICAgICAgIGdldHRlclJlZyA9IGdlbmVyYXRvci5lbWl0
Tm9kZShwYWlyLnNlY29uZC0+bV9hc3NpZ24pOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFY
KQorICAgICAgICAgICAgICAgICAgICBzZWNvbmRSZWcgPSBnZXR0ZXJSZWcuZ2V0KCk7CisjZW5k
aWYKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBnZXR0ZXJS
ZWcgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0TG9hZChnZXR0ZXJSZWcuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQor
ICAgICAgICAgICAgaWYgKHBhaXIuc2Vjb25kICYmIHBhaXIuc2Vjb25kLT5uZWVkc1N1cGVyQmlu
ZGluZygpKQorICAgICAgICAgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgc2Vj
b25kUmVnLCBkc3QpOworI2VuZGlmCisKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0R2V0
dGVyU2V0dGVyKGRzdCwgKm5vZGUtPm5hbWUoKSwgZ2V0dGVyUmVnLmdldCgpLCBzZXR0ZXJSZWcu
Z2V0KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzc1LDE4ICs0MjgsMzQgQEAgUmVnaXN0ZXJJ
RCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjbwogCiB2b2lkIFByb3BlcnR5TGlzdE5vZGU6
OmVtaXRQdXRDb25zdGFudFByb3BlcnR5KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIG5ld09iaiwgUHJvcGVydHlOb2RlJiBub2RlKQogeworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLm1fYXNzaWduKTsKKyNpZiBF
TkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobm9kZS5uZWVkc1N1cGVyQmluZGluZygp
KQorICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIHZhbHVlLmdldCgpLCBuZXdP
YmopOworI2VuZGlmCiAgICAgaWYgKG5vZGUubmFtZSgpKSB7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0RGlyZWN0UHV0QnlJZChuZXdPYmosICpub2RlLm5hbWUoKSwgZ2VuZXJhdG9yLmVtaXROb2Rl
KG5vZGUubV9hc3NpZ24pLCBub2RlLnB1dFR5cGUoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
RGlyZWN0UHV0QnlJZChuZXdPYmosICpub2RlLm5hbWUoKSwgdmFsdWUuZ2V0KCksIG5vZGUucHV0
VHlwZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUubV9leHByZXNzaW9uKTsKLSAg
ICBnZW5lcmF0b3IuZW1pdERpcmVjdFB1dEJ5VmFsKG5ld09iaiwgcHJvcGVydHlOYW1lLmdldCgp
LCBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2lnbikpOworICAgIGdlbmVyYXRvci5lbWl0
RGlyZWN0UHV0QnlWYWwobmV3T2JqLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHZhbHVlLmdldCgpKTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyYWNrZXRBY2Nlc3Nvck5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQnJhY2tl
dEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBp
ZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
Z2VuZXJhdGUgdGhlIHByb2ZpbGVyIGluZm8/CisgICAgICAgIGlmIChtX3N1YnNjcmlwdC0+aXNT
dHJpbmcoKSkgeworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWQgPSBzdGF0aWNfY2Fz
dDxTdHJpbmdOb2RlKj4obV9zdWJzY3JpcHQpLT52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBl
bWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvciksIGlkKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpLCBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvciksIGdlbmVyYXRvci5lbWl0
Tm9kZShtX3N1YnNjcmlwdCkpOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKG1fYmFzZS0+aXNS
ZXNvbHZlTm9kZSgpIAogICAgICAgICAmJiBnZW5lcmF0b3Iud2lsbFJlc29sdmVUb0FyZ3VtZW50
c1JlZ2lzdGVyKHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigp
KQogICAgICAgICAmJiAhZ2VuZXJhdG9yLnN5bWJvbFRhYmxlKCkuc2xvd0FyZ3VtZW50cygpKSB7
CkBAIC00MzEsNyArNTAwLDExIEBAIFJlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9kZTo6ZW1pdEJ5
dGVjb2QKICAgICB9CiAKIG5vbkFyZ3VtZW50c1BhdGg6CisjaWYgRU5BQkxFKEVTNl9DTEFTU19T
WU5UQVgpCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBtX2Jhc2UtPmlzU3VwZXJOb2Rl
KCkgPyBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9iYXNlKTsKKyNlbHNlCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9iYXNlKTsKKyNlbmRpZgogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWdpc3RlcklE
KiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZ2lz
dGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChmaW5hbERlc3QsIGJhc2UuZ2V0KCks
IG1faWRlbnQpOwpAQCAtNTIxLDYgKzU5NCwxNSBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxW
YWx1ZU5vZGU6OmVtaXRCCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9leHByKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwogICAgIENhbGxBcmd1
bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisjaWYgRU5BQkxFKEVTNl9D
TEFTU19TWU5UQVgpCisgICAgaWYgKG1fZXhwci0+aXNTdXBlck5vZGUoKSkgeworICAgICAgICBB
U1NFUlQoZ2VuZXJhdG9yLmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRvci5u
ZXdUYXJnZXQoKSk7CisgICAgICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q29u
c3RydWN0KHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCksIHJldCk7Cisg
ICAgICAgIHJldHVybiByZXQ7CisgICAgfQorI2VuZGlmCiAgICAgZ2VuZXJhdG9yLmVtaXRMb2Fk
KGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ2lz
dGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5n
ZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVy
KCkpIHsKQEAgLTU3NCwxMyArNjU2LDI1IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29s
dmVOb2RlOjplbWkKIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7
CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1f
YmFzZS0+aXNTdXBlck5vZGUoKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGJhc2VJ
c1N1cGVyID8gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVt
aXROb2RlKG1fYmFzZSk7CisjZWxzZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CisjZW5kaWYKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwogICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25T
dGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5j
dGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihk
c3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5n
ZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdz
KTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAoYmFzZUlzU3VwZXIpCisg
ICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBn
ZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCkpOworICAgIGVsc2UKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOworI2Vsc2UK
ICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFz
ZS5nZXQoKSk7CisjZW5kaWYKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENh
bGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAg
aWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZUJ5dGVjb2RlRG9l
c05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CkBAIC01OTYsOSArNjkwLDIxIEBAIFJlZ2lzdGVy
SUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXQKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuY3Rpb24gPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBm
dW5jdGlvbi5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRv
ciwgbV9hcmdzKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIGJhc2VJ
c1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOworICAgIGlmIChiYXNlSXNTdXBlcikKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdl
bmVyYXRvci50aGlzUmVnaXN0ZXIoKSk7CisgICAgZWxzZQorICAgICAgICBnZW5lcmF0b3IuZW1p
dE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9iYXNlKTsKKyNlbHNlCiAgICAg
Z2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1fYmFzZSk7
CisjZW5kaWYKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25E
aXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKKyNpZiBF
TkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rp
b24uZ2V0KCksIGJhc2VJc1N1cGVyID8gZW1pdFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3Ip
IDogY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CisjZWxzZQogICAgIGdl
bmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgbV9pZGVudCk7CisjZW5kaWYKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0
b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZUJ5
dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CkBAIC05NDAsNiArMTA0NiwxMCBA
QCBSZWdpc3RlcklEKiBEZWxldGVCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjCiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsKIAogICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAobV9iYXNlLT5pc1N1
cGVyTm9kZSgpKQorICAgICAgICByZXR1cm4gZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJh
dG9yLCAiQ2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5Iik7CisjZW5kaWYKICAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOwogfQogCkBAIC05NTAsNiArMTA2MCwxMCBAQCBSZWdp
c3RlcklEKiBEZWxldGVEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoCiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAKICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisjaWYg
RU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgaWYgKG1fYmFzZS0+aXNTdXBlck5vZGUoKSkK
KyAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkNhbm5v
dCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSIpOworI2VuZGlmCiAgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0RGVsZXRlQnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCByMC5nZXQo
KSwgbV9pZGVudCk7CiB9CiAKQEAgLTI4MDcsMTEgKzI5MjEsNDIgQEAgdm9pZCBDbGFzc0RlY2xO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZAogCiBSZWdpc3RlcklEKiBDbGFzc0V4cHJOb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQogewotICAgIEFTU0VSVCghbV9wYXJlbnRDbGFzc0V4cHJlc3Npb24pOworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBzdXBlcmNsYXNzOworICAgIGlmIChtX2NsYXNzSGVyaXRhZ2UpIHsKKyAgICAg
ICAgc3VwZXJjbGFzcyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXROb2RlKHN1cGVyY2xhc3MuZ2V0KCksIG1fY2xhc3NIZXJpdGFnZSk7CisgICAgfQog
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNvbnN0cnVjdG9yID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KGRzdCwgbV9jb25zdHJ1Y3RvckV4cHJlc3Npb24pOworICAgIC8vIEZJWE1FOiBNYWtlIHRoZSBw
cm90b3R5cGUgbm9uLWNvbmZpZ3VyYWJsZSAmIG5vbi13cml0YWJsZS4KICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcHJvdG90eXBlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKSwgY29uc3RydWN0b3IuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCku
cHJvdG90eXBlKTsKIAorICAgIGlmIChzdXBlcmNsYXNzKSB7CisgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiB0ZW1wUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAg
IFJlZlB0cjxMYWJlbD4gc3VwZXJjbGFzc0lzTnVsbExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShnZW5lcmF0b3IuZW1pdFVuYXJ5
T3Aob3BfZXFfbnVsbCwgdGVtcFJlZ2lzdGVyLmdldCgpLCBzdXBlcmNsYXNzLmdldCgpKSwgc3Vw
ZXJjbGFzc0lzTnVsbExhYmVsLmdldCgpKTsKKworICAgICAgICAvLyBGSVhNRTogVGhyb3cgVHlw
ZUVycm9yIGlmIGl0J3MgYSBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICAgICAgIFJlZlB0cjxMYWJl
bD4gc3VwZXJjbGFzc0lzT2JqZWN0TGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGdlbmVyYXRvci5lbWl0SXNPYmplY3QodGVtcFJl
Z2lzdGVyLmdldCgpLCBzdXBlcmNsYXNzLmdldCgpKSwgc3VwZXJjbGFzc0lzT2JqZWN0TGFiZWwu
Z2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJh
bCgiVGhlIHN1cGVyY2xhc3MgaXMgbm90IGFuIG9iamVjdC4iKSk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwoc3VwZXJjbGFzc0lzT2JqZWN0TGFiZWwuZ2V0KCkpOworCisgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBwcm90b1BhcmVudCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHByb3RvUGFyZW50LmdldCgpLCBzdXBlcmNs
YXNzLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7CisKKyAgICAg
ICAgUmVmUHRyPExhYmVsPiBwcm90b1BhcmVudElzT2JqZWN0T3JOdWxsTGFiZWwgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGdlbmVyYXRv
ci5lbWl0VW5hcnlPcChvcF9pc19vYmplY3Rfb3JfbnVsbCwgdGVtcFJlZ2lzdGVyLmdldCgpLCBw
cm90b1BhcmVudC5nZXQoKSksIHByb3RvUGFyZW50SXNPYmplY3RPck51bGxMYWJlbC5nZXQoKSk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJUaGUg
c3VwZXJjbGFzcydzIHByb3RvdHlwZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbChwcm90b1BhcmVudElzT2JqZWN0T3JOdWxsTGFiZWwuZ2V0KCkpOwor
CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJZChjb25zdHJ1Y3Rvci5nZXQoKSwg
Z2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8sIHN1cGVyY2xhc3MuZ2V0
KCksIFByb3BlcnR5Tm9kZTo6VW5rbm93bik7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0
UHV0QnlJZChwcm90b3R5cGUuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJz
Y29yZVByb3RvLCBwcm90b1BhcmVudC5nZXQoKSwgUHJvcGVydHlOb2RlOjpVbmtub3duKTsKKwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHN1cGVyY2xhc3NJc051bGxMYWJlbC5nZXQoKSk7
CisgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgY29uc3RydWN0b3IuZ2V0KCks
IHByb3RvdHlwZS5nZXQoKSk7CisgICAgfQorCiAgICAgaWYgKG1fc3RhdGljTWV0aG9kcykKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNvbnN0cnVjdG9yLmdldCgpLCBtX3N0YXRpY01ldGhv
ZHMpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAko
cmV2aXNpb24gMTgxMTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWls
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjksMTMgQEAgcHVibGljOgogICAgICAg
ICB1c2VzVGhpcygpOwogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBUaGlzTm9k
ZShsb2NhdGlvbik7CiAgICAgfQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIEV4
cHJlc3Npb25Ob2RlKiBzdXBlckV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgYW5kIGNhbGwgdXNlc1N1cGVyKCk7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFN1cGVyTm9kZShsb2NhdGlvbik7CisgICAg
fQorI2VuZGlmCiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBzdGFydCkKICAgICB7CiAgICAgICAgIGlmIChtX3ZtLT5wcm9wZXJ0eU5hbWVz
LT5hcmd1bWVudHMgPT0gKmlkZW50KQpAQCAtMjk4LDkgKzMwNSw5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBGdW5jdGlvbkJvZHlOb2RlKiBjcmVhdGVG
dW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWdu
ZWQgZW5kQ29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCkKKyAgICBGdW5jdGlvbkJvZHlOb2Rl
KiBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9u
LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1bnNpZ25lZCBzdGFydENvbHVt
biwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGluU3RyaWN0Q29udGV4dCwgQ29uc3RydWN0b3JL
aW5kIGNvbnN0cnVjdG9yS2luZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIEZ1bmN0aW9uQm9keU5vZGUobV9wYXJzZXJBcmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5k
TG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGluU3RyaWN0Q29udGV4dCk7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9uQm9keU5vZGUobV9wYXJzZXJB
cmVuYSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4s
IGluU3RyaWN0Q29udGV4dCwgY29uc3RydWN0b3JLaW5kKTsKICAgICB9CiAKICAgICB2b2lkIHNl
dEZ1bmN0aW9uTmFtZVN0YXJ0KEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGludCBmdW5jdGlvbk5h
bWVTdGFydCkKQEAgLTMwOSwyMyArMzE2LDI2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
TkVWRVJfSU5MSU5FIFByb3BlcnR5Tm9kZSogY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwg
Ym9vbCwKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rp
b25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZvLCB1bnNpZ25lZCBnZXRPclNldFN0YXJ0T2Zmc2V0KQor
ICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88
QVNUQnVpbGRlcj4mIGluZm8sIHVuc2lnbmVkIGdldE9yU2V0U3RhcnRPZmZzZXQsIFN1cGVyQmlu
ZGluZyBzdXBlckJpbmRpbmcpCiAgICAgewogICAgICAgICBBU1NFUlQobmFtZSk7CiAgICAgICAg
IGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5RW5kTGluZSwg
bG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAg
IGluZm8uYm9keS0+c2V0SW5mZXJyZWROYW1lKCpuYW1lKTsKICAgICAgICAgaW5mby5ib2R5LT5z
ZXRGdW5jdGlvbktleXdvcmRTdGFydChnZXRPclNldFN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKCpuYW1lLCBuZXcgKG1fcGFyc2Vy
QXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElk
ZW50aWZpZXIsCi0gICAgICAgICAgICBpbmZvLmJvZHksIG1fc291cmNlQ29kZS0+c3ViRXhwcmVz
c2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNlT2Zmc2V0LCBpbmZvLmJv
ZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5mby5wYXJhbWV0ZXJzKSwgdHlw
ZSwgUHJvcGVydHlOb2RlOjpVbmtub3duKTsKKyAgICAgICAgU291cmNlQ29kZSBzb3VyY2UgPSBt
X3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xv
c2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbik7
CisgICAgICAgIEZ1bmNFeHByTm9kZSogZnVuY0V4cHIgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1
bmNFeHByTm9kZShsb2NhdGlvbiwgbV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIs
IGluZm8uYm9keSwgc291cmNlLCBpbmZvLnBhcmFtZXRlcnMpOworICAgICAgICByZXR1cm4gbmV3
IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoKm5hbWUsIGZ1bmNFeHByLCB0eXBlLCBQcm9w
ZXJ0eU5vZGU6OlVua25vd24sIHN1cGVyQmluZGluZyk7CiAgICAgfQogICAgIAotICAgIE5FVkVS
X0lOTElORSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoVk0qIHZt
LCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sLCBkb3VibGUgbmFtZSwgY29uc3QgUGFy
c2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBpbmZvLCB1bnNpZ25lZCBnZXRPclNldFN0YXJ0
T2Zmc2V0KQorICAgIE5FVkVSX0lOTElORSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0
dGVyUHJvcGVydHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sLAorICAg
ICAgICBkb3VibGUgbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBp
bmZvLCB1bnNpZ25lZCBnZXRPclNldFN0YXJ0T2Zmc2V0LCBTdXBlckJpbmRpbmcgc3VwZXJCaW5k
aW5nKQogICAgIHsKICAgICAgICAgaW5mby5ib2R5LT5zZXRMb2MoaW5mby5ib2R5U3RhcnRMaW5l
LCBpbmZvLmJvZHlFbmRMaW5lLCBsb2NhdGlvbi5zdGFydE9mZnNldCwgbG9jYXRpb24ubGluZVN0
YXJ0T2Zmc2V0KTsKICAgICAgICAgaW5mby5ib2R5LT5zZXRGdW5jdGlvbktleXdvcmRTdGFydChn
ZXRPclNldFN0YXJ0T2Zmc2V0KTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBw
YXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIodm0sIG5h
bWUpOwotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoaWRl
bnQsIG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCB2bS0+cHJvcGVy
dHlOYW1lcy0+bnVsbElkZW50aWZpZXIsCi0gICAgICAgICAgICBpbmZvLmJvZHksIG1fc291cmNl
Q29kZS0+c3ViRXhwcmVzc2lvbihpbmZvLm9wZW5CcmFjZU9mZnNldCwgaW5mby5jbG9zZUJyYWNl
T2Zmc2V0LCBpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keVN0YXJ0Q29sdW1uKSwgaW5mby5w
YXJhbWV0ZXJzKSwgdHlwZSwgUHJvcGVydHlOb2RlOjpVbmtub3duKTsKKyAgICAgICAgU291cmNl
Q29kZSBzb3VyY2UgPSBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VP
ZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJv
ZHlTdGFydENvbHVtbik7CisgICAgICAgIEZ1bmNFeHByTm9kZSogZnVuY0V4cHIgPSBuZXcgKG1f
cGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgdm0tPnByb3BlcnR5TmFtZXMtPm51
bGxJZGVudGlmaWVyLCBpbmZvLmJvZHksIHNvdXJjZSwgaW5mby5wYXJhbWV0ZXJzKTsKKyAgICAg
ICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKGlkZW50LCBmdW5jRXhw
ciwgdHlwZSwgUHJvcGVydHlOb2RlOjpVbmtub3duLCBzdXBlckJpbmRpbmcpOwogICAgIH0KIAog
ICAgIEFyZ3VtZW50c05vZGUqIGNyZWF0ZUFyZ3VtZW50cygpIHsgcmV0dXJuIG5ldyAobV9wYXJz
ZXJBcmVuYSkgQXJndW1lbnRzTm9kZSgpOyB9CkBAIC0zMzMsMTEgKzM0MywxMSBAQCBwdWJsaWM6
CiAgICAgQXJndW1lbnRMaXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYXJnKSB7IHJldHVybiBuZXcgKG1f
cGFyc2VyQXJlbmEpIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRpb24sIGFyZyk7IH0KICAgICBBcmd1
bWVudExpc3ROb2RlKiBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIEFyZ3VtZW50TGlzdE5vZGUqIGFyZ3MsIEV4cHJlc3Npb25Ob2RlKiBhcmcpIHsg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQXJndW1lbnRMaXN0Tm9kZShsb2NhdGlvbiwgYXJn
cywgYXJnKTsgfQogCi0gICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVu
dGlmaWVyKiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6
OlR5cGUgdHlwZSwgUHJvcGVydHlOb2RlOjpQdXRUeXBlIHB1dFR5cGUsIGJvb2wpCisgICAgUHJv
cGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUs
IEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgUHJvcGVydHlO
b2RlOjpQdXRUeXBlIHB1dFR5cGUsIGJvb2wsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcgPSBT
dXBlckJpbmRpbmc6Ok5vdE5lZWRlZCkKICAgICB7CiAgICAgICAgIGlmIChub2RlLT5pc0Z1bmNF
eHByTm9kZSgpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4obm9kZSkt
PmJvZHkoKS0+c2V0SW5mZXJyZWROYW1lKCpwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoKnByb3BlcnR5TmFtZSwgbm9kZSwgdHlw
ZSwgcHV0VHlwZSk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5
Tm9kZSgqcHJvcGVydHlOYW1lLCBub2RlLCB0eXBlLCBwdXRUeXBlLCBzdXBlckJpbmRpbmcpOwog
ICAgIH0KICAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVByb3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJl
bmEmIHBhcnNlckFyZW5hLCBkb3VibGUgcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9k
ZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFByb3BlcnR5Tm9kZTo6UHV0VHlwZSBwdXRUeXBl
LCBib29sKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNv
bnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAxODExOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYg
KzExMiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCisjaWYgRU5BQkxFKEVT
Nl9DTEFTU19TWU5UQVgpCisgICAgaW5saW5lIFN1cGVyTm9kZTo6U3VwZXJOb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCisgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRp
b24pCisgICAgeworICAgIH0KKyNlbmRpZgorCiBpbmxpbmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpCiAgICAgICAgIDogRXhwcmVzc2lvbk5v
ZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9pZGVudChpZGVudCkKQEAgLTE1OSwxMCArMTY2LDEx
IEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMKICAgICB7CiAgICAg
fQogCi0gICAgaW5saW5lIFByb3BlcnR5Tm9kZTo6UHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZp
ZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24sIFR5cGUgdHlwZSwgUHV0VHlwZSBwdXRU
eXBlKQorICAgIGlubGluZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZShjb25zdCBJZGVudGlm
aWVyJiBuYW1lLCBFeHByZXNzaW9uTm9kZSogYXNzaWduLCBUeXBlIHR5cGUsIFB1dFR5cGUgcHV0
VHlwZSwgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZyA9IFN1cGVyQmluZGluZzo6Tm90TmVlZGVk
KQogICAgICAgICA6IG1fbmFtZSgmbmFtZSkKICAgICAgICAgLCBtX2Fzc2lnbihhc3NpZ24pCiAg
ICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9uZWVkc1N1cGVyQmluZGluZyhzdXBl
ckJpbmRpbmcgPT0gU3VwZXJCaW5kaW5nOjpOZWVkZWQpCiAgICAgICAgICwgbV9wdXRUeXBlKHB1
dFR5cGUpCiAgICAgewogICAgIH0KQEAgLTE3Miw2ICsxODAsNyBAQCBpbmxpbmUgUmVzb2x2ZU5v
ZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTCiAgICAgICAgICwgbV9leHByZXNzaW9uKG5hbWUpCiAg
ICAgICAgICwgbV9hc3NpZ24oYXNzaWduKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAg
ICAsIG1fbmVlZHNTdXBlckJpbmRpbmcoZmFsc2UpCiAgICAgICAgICwgbV9wdXRUeXBlKHB1dFR5
cGUpCiAgICAgewogICAgIH0KQEAgLTc4NywxMSArNzk2LDExIEBAIGlubGluZSBSZXNvbHZlTm9k
ZTo6UmVzb2x2ZU5vZGUoY29uc3QgSlMKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5lIENsYXNz
RXhwck5vZGU6OkNsYXNzRXhwck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGNvbnN0cnVjdG9yRXhwcmVz
c2lvbiwgRXhwcmVzc2lvbk5vZGUqIHBhcmVudENsYXNzRXhwcmVzc2lvbiwgUHJvcGVydHlMaXN0
Tm9kZSogaW5zdGFuY2VNZXRob2RzLCBQcm9wZXJ0eUxpc3ROb2RlKiBzdGF0aWNNZXRob2RzKQor
ICAgIGlubGluZSBDbGFzc0V4cHJOb2RlOjpDbGFzc0V4cHJOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4cHJlc3Npb25Ob2RlKiBj
b25zdHJ1Y3RvckV4cHJlc3Npb24sIEV4cHJlc3Npb25Ob2RlKiBjbGFzc0hlcml0YWdlLCBQcm9w
ZXJ0eUxpc3ROb2RlKiBpbnN0YW5jZU1ldGhvZHMsIFByb3BlcnR5TGlzdE5vZGUqIHN0YXRpY01l
dGhvZHMpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9u
YW1lKG5hbWUpCiAgICAgICAgICwgbV9jb25zdHJ1Y3RvckV4cHJlc3Npb24oY29uc3RydWN0b3JF
eHByZXNzaW9uKQotICAgICAgICAsIG1fcGFyZW50Q2xhc3NFeHByZXNzaW9uKHBhcmVudENsYXNz
RXhwcmVzc2lvbikKKyAgICAgICAgLCBtX2NsYXNzSGVyaXRhZ2UoY2xhc3NIZXJpdGFnZSkKICAg
ICAgICAgLCBtX2luc3RhbmNlTWV0aG9kcyhpbnN0YW5jZU1ldGhvZHMpCiAgICAgICAgICwgbV9z
dGF0aWNNZXRob2RzKHN0YXRpY01ldGhvZHMpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHJldmlzaW9uIDE4MTE5MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsMTMgKzE2Nywx
NyBAQCBGdW5jdGlvblBhcmFtZXRlcnM6On5GdW5jdGlvblBhcmFtZXRlcnMoCiAgICAgICAgIHBh
dHRlcm5zKClbaV0tPmRlcmVmKCk7CiB9CiAKLUZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9k
eU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24s
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVkIHN0YXJ0Q29sdW1u
LCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaXNJblN0cmljdENvbnRleHQpCitGdW5jdGlvbkJv
ZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKFBhcnNlckFyZW5hJiwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCB1
bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RD
b250ZXh0LCBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kKQogICAgIDogU3RhdGVtZW50
Tm9kZShlbmRMb2NhdGlvbikKICAgICAsIG1fc3RhcnRDb2x1bW4oc3RhcnRDb2x1bW4pCiAgICAg
LCBtX2VuZENvbHVtbihlbmRDb2x1bW4pCiAgICAgLCBtX3N0YXJ0U3RhcnRPZmZzZXQoc3RhcnRM
b2NhdGlvbi5zdGFydE9mZnNldCkKICAgICAsIG1faXNJblN0cmljdENvbnRleHQoaXNJblN0cmlj
dENvbnRleHQpCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgLCBtX2NvbnN0cnVj
dG9yS2luZElzRGVyaXZlZChjb25zdHJ1Y3RvcktpbmQgPT0gQ29uc3RydWN0b3JLaW5kOjpEZXJp
dmVkKQorI2VuZGlmCiB7CisgICAgVU5VU0VEX1BBUkFNKGNvbnN0cnVjdG9yS2luZCk7CiB9CiAK
IHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIFBhcmFtZXRlck5vZGUqIGZpcnN0UGFyYW1ldGVyLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgZW51bSBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTgxMTkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNiArMTY0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1YnRyYWN0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzQm9vbGVhbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NwcmVhZEV4cHJlc3Np
b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdXBl
ck5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBl
bWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImLCBMYWJlbCos
IExhYmVsKiwgRmFsbFRocm91Z2hNb2RlKTsKIApAQCAtNDQ1LDYgKzQ0NiwxNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwogICAgIH07CiAKKyNpZiBF
TkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBjbGFzcyBTdXBlck5vZGUgZmluYWwgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3VwZXJOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBib29s
IGlzU3VwZXJOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgb3ZlcnJpZGU7CisgICAgfTsKKyNlbmRpZgorCiAgICAgY2xhc3MgUmVzb2x2
ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVz
b2x2ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBzdGFydCk7CkBAIC01MDEsMTMgKzUxMywxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgZW51bSBUeXBlIHsgQ29uc3RhbnQgPSAxLCBHZXR0ZXIgPSAyLCBTZXR0
ZXIgPSA0IH07CiAgICAgICAgIGVudW0gUHV0VHlwZSB7IFVua25vd24sIEtub3duRGlyZWN0IH07
CiAKLSAgICAgICAgUHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9k
ZSosIFR5cGUsIFB1dFR5cGUpOworICAgICAgICBQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmll
ciYsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSwgUHV0VHlwZSwgU3VwZXJCaW5kaW5nKTsKICAgICAg
ICAgUHJvcGVydHlOb2RlKEV4cHJlc3Npb25Ob2RlKiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25O
b2RlKiwgVHlwZSwgUHV0VHlwZSk7Ci0gICAgICAgIAorCiAgICAgICAgIEV4cHJlc3Npb25Ob2Rl
KiBleHByZXNzaW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbjsgfQogICAgICAg
ICBjb25zdCBJZGVudGlmaWVyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKLSAg
ICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgICAgIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KKyAgICAg
ICAgYm9vbCBuZWVkc1N1cGVyQmluZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNTdXBlckJp
bmRpbmc7IH0KICAgICAgICAgUHV0VHlwZSBwdXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wdXRU
eXBlOyB9CiAKICAgICBwcml2YXRlOgpAQCAtNTE1LDcgKzUyOCw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBtX25hbWU7CiAgICAgICAgIEV4cHJlc3Npb25O
b2RlKiBtX2V4cHJlc3Npb247CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2Fzc2lnbjsKLSAg
ICAgICAgVHlwZSBtX3R5cGU7CisgICAgICAgIHVuc2lnbmVkIG1fdHlwZSA6IDM7CisgICAgICAg
IHVuc2lnbmVkIG1fbmVlZHNTdXBlckJpbmRpbmcgOiAxOwogICAgICAgICBQdXRUeXBlIG1fcHV0
VHlwZTsKICAgICB9OwogCkBAIC0xNTQ3LDcgKzE1NjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIFBhcnNlckFyZW5hRGVsZXRhYmxlOjpvcGVyYXRvciBu
ZXc7CiAKLSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBz
dGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0KTsK
KyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShQYXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCB1bnNpZ25lZCBzdGFydENv
bHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uLCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBDb25zdHJ1
Y3RvcktpbmQpOwogCiAgICAgICAgIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5nZXQoKTsgfQogCkBAIC0xNTc1LDYgKzE1ODksOSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBpbnQgc3RhcnRTdGFydE9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnRTdGFydE9mZnNldDsgfQogICAgICAgICBib29sIGlzSW5TdHJpY3RD
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RyaWN0Q29udGV4dDsgfQorI2lmIEVOQUJM
RShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICBib29sIGNvbnN0cnVjdG9yS2luZElzRGVyaXZl
ZCgpIHsgcmV0dXJuIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkOyB9CisjZW5kaWYKIAogICAg
IHByb3RlY3RlZDoKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwpAQCAtMTU4Nyw3ICsxNjA0
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKICAg
ICAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKICAgICAgICAgaW50IG1fc3RhcnRTdGFydE9mZnNl
dDsKLSAgICAgICAgYm9vbCBtX2lzSW5TdHJpY3RDb250ZXh0OworICAgICAgICBib29sIG1faXNJ
blN0cmljdENvbnRleHQgOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAg
ICBib29sIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkIDogMTsKKyNlbmRpZgogICAgIH07CiAK
ICAgICBjbGFzcyBGdW5jdGlvbk5vZGUgZmluYWwgOiBwdWJsaWMgU2NvcGVOb2RlIHsKQEAgLTE2
NDQsNyArMTY2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXImIG1fbmFtZTsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fY29uc3RydWN0b3JFeHByZXNz
aW9uOwotICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9wYXJlbnRDbGFzc0V4cHJlc3Npb247Cisg
ICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2NsYXNzSGVyaXRhZ2U7CiAgICAgICAgIFByb3BlcnR5
TGlzdE5vZGUqIG1faW5zdGFuY2VNZXRob2RzOwogICAgICAgICBQcm9wZXJ0eUxpc3ROb2RlKiBt
X3N0YXRpY01ldGhvZHM7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAJKHJldmlzaW9uIDE4MTE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1NSw3ICsxMjU1LDcgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRm9ybWFsUAogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgTGV4ZXJUeXBlPgotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rp
b25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRlciYg
Y29udGV4dCkKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImIGNvbnRleHQs
IENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQpCiB7CiAgICAgSlNUb2tlbkxvY2F0aW9u
IHN0YXJ0TG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICB1bnNpZ25lZCBzdGFydENvbHVt
biA9IHRva2VuQ29sdW1uKCk7CkBAIC0xMjYzLDE0ICsxMjYzLDE0IEBAIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW8KIAogICAgIGlmIChtYXRjaChDTE9TRUJSQUNFKSkg
ewogICAgICAgICB1bnNpZ25lZCBlbmRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOwotICAgICAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2Nh
dGlvbigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCkpOworICAgICAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5Mb2Nh
dGlvbigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCksIGNvbnN0cnVjdG9y
S2luZCk7CiAgICAgfQogICAgIERlcHRoTWFuYWdlciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1l
bnREZXB0aCk7CiAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDA7CiAgICAgdHlwZW5hbWUgVHJlZUJ1
aWxkZXI6OkZ1bmN0aW9uQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIoY29uc3RfY2FzdDxWTSo+KG1f
dm0pLCBtX2xleGVyLmdldCgpKTsKICAgICBmYWlsSWZGYWxzZShwYXJzZVNvdXJjZUVsZW1lbnRz
KGJvZHlCdWlsZGVyLCBDaGVja0ZvclN0cmljdE1vZGUpLCAiQ2Fubm90IHBhcnNlIGJvZHkgb2Yg
dGhpcyBmdW5jdGlvbiIpOwogICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29sdW1uKCk7
Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIHRv
a2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgc3RyaWN0TW9kZSgpKTsKKyAg
ICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgdG9rZW5M
b2NhdGlvbigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RNb2RlKCksIGNvbnN0cnVj
dG9yS2luZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdGb3JGdW5jdGlvbk1vZGUo
RnVuY3Rpb25QYXJzZU1vZGUgbW9kZSkKQEAgLTEyOTAsNyArMTI5MCw4IEBAIHN0YXRpYyBjb25z
dCBjaGFyKiBzdHJpbmdGb3JGdW5jdGlvbk1vZGUKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExl
eGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVx
dWlyZW1lbnRzIHJlcXVpcmVtZW50cywgRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSwgYm9vbCBuYW1l
SXNJbkNvbnRhaW5pbmdTY29wZSwgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiYgaW5m
bykKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uUmVxdWlyZW1l
bnRzIHJlcXVpcmVtZW50cywgRnVuY3Rpb25QYXJzZU1vZGUgbW9kZSwKKyAgICBib29sIG5hbWVJ
c0luQ29udGFpbmluZ1Njb3BlLCBDb25zdHJ1Y3RvcktpbmQgY29uc3RydWN0b3JLaW5kLCBQYXJz
ZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+JiBpbmZvKQogewogICAgIEF1dG9Qb3BTY29wZVJl
ZiBmdW5jdGlvblNjb3BlKHRoaXMsIHB1c2hTY29wZSgpKTsKICAgICBmdW5jdGlvblNjb3BlLT5z
ZXRJc0Z1bmN0aW9uKCk7CkBAIC0xMzQzLDcgKzEzNDQsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgICAgICAgICBlbmRMb2NhdGlvbi5zdGFydE9mZnNl
dCAtIGVuZExvY2F0aW9uLmxpbmVTdGFydE9mZnNldDsKICAgICAgICAgdW5zaWduZWQgY3VycmVu
dExpbmVTdGFydE9mZnNldCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQ7CiAK
LSAgICAgICAgaW5mby5ib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRMb2Nh
dGlvbiwgZW5kTG9jYXRpb24sIGluZm8uYm9keVN0YXJ0Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBj
YWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKKyAgICAgICAgaW5mby5ib2R5ID0gY29udGV4dC5jcmVh
dGVGdW5jdGlvbkJvZHkoc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluZm8uYm9keVN0YXJ0
Q29sdW1uLCBib2R5RW5kQ29sdW1uLCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlLCBjb25zdHJ1Y3Rv
cktpbmQpOwogICAgICAgICAKICAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZyb21Tb3Vy
Y2VQcm92aWRlckNhY2hlKGNhY2hlZEluZm8pOwogICAgICAgICBmYWlsSWZGYWxzZShwb3BTY29w
ZShmdW5jdGlvblNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKSwgIlBh
cnNlciBlcnJvciIpOwpAQCAtMTM2NiwxNSArMTM2NywyNSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgfQogICAgIG1fbGFzdEZ1bmN0aW9uTmFtZSA9IGxh
c3RGdW5jdGlvbk5hbWU7CiAgICAgUGFyc2VyU3RhdGUgb2xkU3RhdGUgPSBzYXZlU3RhdGUoKTsK
LSAgICBpbmZvLmJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0KTsKKyAgICBpbmZvLmJv
ZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0LCBjb25zdHJ1Y3RvcktpbmQpOwogICAgIHJl
c3RvcmVTdGF0ZShvbGRTdGF0ZSk7CiAgICAgZmFpbElmRmFsc2UoaW5mby5ib2R5LCAiQ2Fubm90
IHBhcnNlIHRoZSBib2R5IG9mIHRoaXMgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpKTsK
ICAgICBjb250ZXh0LnNldEVuZE9mZnNldChpbmZvLmJvZHksIG1fbGV4ZXItPmN1cnJlbnRPZmZz
ZXQoKSk7CiAgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1vZGUoKSAmJiBpbmZvLm5hbWUp
IHsKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bW9kZSA9PSBGdW5jdGlvbk1vZGUgfHwgbW9kZSA9PSBNZXRob2RNb2RlKTsKKyNlbHNlCiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1vZGUgPT0gRnVuY3Rpb25Nb2RlKTsKKyNlbmRpZgogICAgICAg
ICBzZW1hbnRpY0ZhaWxJZlRydWUobV92bS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpp
bmZvLm5hbWUsICInIiwgaW5mby5uYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0
aW9uIG5hbWUgaW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1f
dm0tPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKmluZm8ubmFtZSwgIiciLCBpbmZvLm5hbWUtPmlt
cGwoKSwgIicgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwog
ICAgIH0KKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBpZiAoZnVuY3Rpb25TY29w
ZS0+aGFzRGlyZWN0U3VwZXIoKSkgeworICAgICAgICBib29sIG5hbWVJc0NvbnN0cnVjdG9yID0g
aW5mby5uYW1lICYmICppbmZvLm5hbWUgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0
b3I7CisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShtb2RlICE9IE1ldGhvZE1vZGUgfHwgIW5h
bWVJc0NvbnN0cnVjdG9yLCAiQ2Fubm90IGNhbGwgc3VwZXIoKSBvdXRzaWRlIG9mIGEgY2xhc3Mg
Y29uc3RydWN0b3IiKTsKKyAgICB9CisjZW5kaWYKICAgICBpbmZvLmNsb3NlQnJhY2VPZmZzZXQg
PSBtX3Rva2VuLm1fZGF0YS5vZmZzZXQ7CiAgICAgdW5zaWduZWQgY2xvc2VCcmFjZUxpbmUgPSBt
X3Rva2VuLm1fZGF0YS5saW5lOwogICAgIHVuc2lnbmVkIGNsb3NlQnJhY2VMaW5lU3RhcnRPZmZz
ZXQgPSBtX3Rva2VuLm1fZGF0YS5saW5lU3RhcnRPZmZzZXQ7CkBAIC0xNDE1LDcgKzE0MjYsNyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgdW5zaWduZWQg
ZnVuY3Rpb25LZXl3b3JkU3RhcnQgPSB0b2tlblN0YXJ0KCk7CiAgICAgbmV4dCgpOwogICAgIFBh
cnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKLSAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0aW9uTW9kZSwg
dHJ1ZSwgaW5mbykpLCAiQ2Fubm90IHBhcnNlIHRoaXMgZnVuY3Rpb24iKTsKKyAgICBmYWlsSWZG
YWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0
aW9uTW9kZSwgdHJ1ZSwgQ29uc3RydWN0b3JLaW5kOjpCYXNlLCBpbmZvKSksICJDYW5ub3QgcGFy
c2UgdGhpcyBmdW5jdGlvbiIpOwogICAgIGZhaWxJZkZhbHNlKGluZm8ubmFtZSwgIkZ1bmN0aW9u
IHN0YXRlbWVudHMgbXVzdCBoYXZlIGEgbmFtZSIpOwogICAgIGZhaWxJZkZhbHNlSWZTdHJpY3Qo
ZGVjbGFyZVZhcmlhYmxlKGluZm8ubmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIGZ1bmN0aW9uIG5h
bWVkICciLCBpbmZvLm5hbWUtPmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKICAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVGdW5jRGVjbFN0YXRlbWVudChsb2NhdGlvbiwgaW5mbywgZnVuY3Rp
b25LZXl3b3JkU3RhcnQpOwpAQCAtMTQ2NSw4ICsxNDc2LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeAogICAgIGlmIChjb25zdW1lKEVYVEVORFMpKSB7CiAgICAg
ICAgIHBhcmVudENsYXNzID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAg
ICAgZmFpbElmRmFsc2UocGFyZW50Q2xhc3MsICJDYW5ub3QgcGFyc2UgdGhlIHBhcmVudCBjbGFz
cyBuYW1lIik7Ci0gICAgICAgIGZhaWxXaXRoTWVzc2FnZSgiSW5oZXJpdGFuY2UgaXMgbm90IHN1
cHBvcnRlZCB5ZXQiKTsKICAgICB9CisgICAgY29uc3QgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVj
dG9yS2luZCA9IHBhcmVudENsYXNzID8gQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkIDogQ29uc3Ry
dWN0b3JLaW5kOjpCYXNlOwogCiAgICAgY29uc3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOQlJBQ0Us
IFRyZWVCdWlsZGVyOjpEb250QnVpbGRTdHJpbmdzLCAiRXhwZWN0ZWQgb3BlbmluZyAneycgYXQg
dGhlIHN0YXJ0IG9mIGEgY2xhc3MgYm9keSIpOwogCkBAIC0xNDk4LDExICsxNTA5LDExIEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXgKICAgICAgICAgaWYgKGlzR2V0
dGVyIHx8IGlzU2V0dGVyKSB7CiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNTdGF0
aWNNZXRob2QsICJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9k
ZShpc0dldHRlciA/IEdldHRlck1vZGUgOiBTZXR0ZXJNb2RlKSk7CiAgICAgICAgICAgICBuZXh0
RXhwZWN0SWRlbnRpZmllcihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3Jkcyk7Ci0gICAgICAg
ICAgICBwcm9wZXJ0eSA9IHBhcnNlR2V0dGVyU2V0dGVyKGNvbnRleHQsIGFsd2F5c1N0cmljdElu
c2lkZUNsYXNzLCBpc0dldHRlciA/IFByb3BlcnR5Tm9kZTo6R2V0dGVyIDogUHJvcGVydHlOb2Rl
OjpTZXR0ZXIsIG1ldGhvZFN0YXJ0KTsKKyAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VHZXR0
ZXJTZXR0ZXIoY29udGV4dCwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xhc3MsIGlzR2V0dGVyID8gUHJv
cGVydHlOb2RlOjpHZXR0ZXIgOiBQcm9wZXJ0eU5vZGU6OlNldHRlciwgbWV0aG9kU3RhcnQsIFN1
cGVyQmluZGluZzo6TmVlZGVkKTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAi
Q2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IG1ldGhvZEluZm87Ci0gICAgICAgICAg
ICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05h
bWUsIEZ1bmN0aW9uTW9kZSwgZmFsc2UsIG1ldGhvZEluZm8pKSwgIkNhbm5vdCBwYXJzZSB0aGlz
IG1ldGhvZCIpOworICAgICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNv
bnRleHQsIEZ1bmN0aW9uTmVlZHNOYW1lLCBNZXRob2RNb2RlLCBmYWxzZSwgY29uc3RydWN0b3JL
aW5kLCBtZXRob2RJbmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKICAgICAgICAg
ICAgIGZhaWxJZkZhbHNlKG1ldGhvZEluZm8ubmFtZSwgIm1ldGhvZCBtdXN0IGhhdmUgYSBuYW1l
Iik7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShkZWNsYXJlVmFyaWFibGUobWV0aG9kSW5mby5u
YW1lKSwgIkNhbm5vdCBkZWNsYXJlIGEgbWV0aG9kIG5hbWVkICciLCBtZXRob2RJbmZvLm5hbWUt
PmltcGwoKSwgIiciKTsKIApAQCAtMTUyMCw3ICsxNTMxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeAogICAgICAgICAgICAgLy8gRklYTUU6IFN5bnRheCBlcnJv
ciB3aGVuIHN1cGVyKCkgaXMgY2FsbGVkCiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUo
aXNTdGF0aWNNZXRob2QgJiYgKm1ldGhvZEluZm8ubmFtZSA9PSBwcm9wZXJ0eU5hbWVzLnByb3Rv
dHlwZSwKICAgICAgICAgICAgICAgICAiQ2Fubm90IGRlY2xhcmUgYSBzdGF0aWMgbWV0aG9kIG5h
bWVkICdwcm90b3R5cGUnIik7Ci0gICAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQuY3JlYXRl
UHJvcGVydHkobWV0aG9kSW5mby5uYW1lLCBtZXRob2QsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQs
IFByb3BlcnR5Tm9kZTo6VW5rbm93biwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xhc3MpOworICAgICAg
ICAgICAgcHJvcGVydHkgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KG1ldGhvZEluZm8ubmFtZSwg
bWV0aG9kLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50LCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIGFs
d2F5c1N0cmljdEluc2lkZUNsYXNzLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCk7CiAgICAgICAgIH0K
IAogICAgICAgICBUcmVlUHJvcGVydHlMaXN0JiB0YWlsID0gaXNTdGF0aWNNZXRob2QgPyBzdGF0
aWNNZXRob2RzVGFpbCA6IGluc3RhbmNlTWV0aG9kc1RhaWw7CkBAIC0yMDA3LDEzICsyMDE4LDEz
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICBKU1Rva2Vu
TG9jYXRpb24gbWV0aG9kTG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICB1bnNpZ25lZCBt
ZXRob2RTdGFydCA9IHRva2VuU3RhcnQoKTsKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1
aWxkZXI+IG1ldGhvZEluZm87Ci0gICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNv
bnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIE1ldGhvZE1vZGUsIGZhbHNlLCBtZXRob2RJ
bmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKKyAgICBmYWlsSWZGYWxzZSgocGFy
c2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgTWV0aG9kTW9k
ZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6QmFzZSwgbWV0aG9kSW5mbykpLCAiQ2Fubm90IHBh
cnNlIHRoaXMgbWV0aG9kIik7CiAgICAgbWV0aG9kSW5mby5uYW1lID0gbWV0aG9kTmFtZTsKICAg
ICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkV4cHIobWV0aG9kTG9jYXRpb24sIG1ldGhv
ZEluZm8sIG1ldGhvZFN0YXJ0KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4K
LXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUdldHRlclNldHRlcihUcmVlQnVpbGRlciYgY29udGV4dCwgYm9vbCBzdHJpY3Qs
IFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zm
c2V0KQordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlR2V0dGVyU2V0dGVyKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBib29sIHN0
cmljdCwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3Rh
cnRPZmZzZXQsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcpCiB7CiAgICAgY29uc3QgSWRlbnRp
Zmllciogc3RyaW5nUHJvcGVydHlOYW1lID0gMDsKICAgICBkb3VibGUgbnVtZXJpY1Byb3BlcnR5
TmFtZSA9IDA7CkBAIC0yMDI4LDE0ICsyMDM5LDE0IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gVHJlZVByb3BlcnQKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGlu
Zm87CiAgICAgaWYgKHR5cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIpIHsKICAgICAgICAgZmFp
bElmRmFsc2UobWF0Y2goT1BFTlBBUkVOKSwgIkV4cGVjdGVkIGEgcGFyYW1ldGVyIGxpc3QgZm9y
IGdldHRlciBkZWZpbml0aW9uIik7Ci0gICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9u
SW5mbyhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBHZXR0ZXJNb2RlLCBmYWxzZSwg
aW5mbykpLCAiQ2Fubm90IHBhcnNlIGdldHRlciBkZWZpbml0aW9uIik7CisgICAgICAgIGZhaWxJ
ZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRz
LCBHZXR0ZXJNb2RlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpCYXNlLCBpbmZvKSksICJDYW5u
b3QgcGFyc2UgZ2V0dGVyIGRlZmluaXRpb24iKTsKICAgICB9IGVsc2UgewogICAgICAgICBmYWls
SWZGYWxzZShtYXRjaChPUEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIgbGlzdCBmb3Ig
c2V0dGVyIGRlZmluaXRpb24iKTsKLSAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25J
bmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNldHRlck1vZGUsIGZhbHNlLCBp
bmZvKSksICJDYW5ub3QgcGFyc2Ugc2V0dGVyIGRlZmluaXRpb24iKTsKKyAgICAgICAgZmFpbElm
RmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMs
IFNldHRlck1vZGUsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5v
dCBwYXJzZSBzZXR0ZXIgZGVmaW5pdGlvbiIpOwogICAgIH0KICAgICBpZiAoc3RyaW5nUHJvcGVy
dHlOYW1lKQotICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3Bl
cnR5KGxvY2F0aW9uLCB0eXBlLCBzdHJpY3QsIHN0cmluZ1Byb3BlcnR5TmFtZSwgaW5mbywgZ2V0
dGVyT3JTZXR0ZXJTdGFydE9mZnNldCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlR2V0dGVy
T3JTZXR0ZXJQcm9wZXJ0eShjb25zdF9jYXN0PFZNKj4obV92bSksIG1fcGFyc2VyQXJlbmEsIGxv
Y2F0aW9uLCB0eXBlLCBzdHJpY3QsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIGluZm8sIGdldHRlck9y
U2V0dGVyU3RhcnRPZmZzZXQpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJP
clNldHRlclByb3BlcnR5KGxvY2F0aW9uLCB0eXBlLCBzdHJpY3QsIHN0cmluZ1Byb3BlcnR5TmFt
ZSwgaW5mbywgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgc3VwZXJCaW5kaW5nKTsKKyAgICBy
ZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0X2Nhc3Q8Vk0q
PihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgbG9jYXRpb24sIHR5cGUsIHN0cmljdCwgbnVtZXJpY1By
b3BlcnR5TmFtZSwgaW5mbywgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgc3VwZXJCaW5kaW5n
KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTIyMjAsNyArMjIzMSw3
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgbmV4
dCgpOwogICAgICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87CiAgICAg
ICAgIGluZm8ubmFtZSA9ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKLSAg
ICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9S
ZXF1aXJlbWVudHMsIEZ1bmN0aW9uTW9kZSwgZmFsc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBm
dW5jdGlvbiBleHByZXNzaW9uIik7CisgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9u
SW5mbyhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBGdW5jdGlvbk1vZGUsIGZhbHNl
LCBDb25zdHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBl
eHByZXNzaW9uIik7CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihs
b2NhdGlvbiwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwogICAgIH0KICNpZiBFTkFCTEUo
RVM2X0NMQVNTX1NZTlRBWCkKQEAgLTIzNzAsNyArMjM4MSwxNiBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgIG5ld0NvdW50Kys7CiAgICAgfQogCisj
aWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1hdGNo
KFNVUEVSKTsKKyAgICBpZiAoYmFzZUlzU3VwZXIpIHsKKyAgICAgICAgYmFzZSA9IGNvbnRleHQu
c3VwZXJFeHByKGxvY2F0aW9uKTsKKyAgICAgICAgbmV4dCgpOworICAgIH0gZWxzZQorICAgICAg
ICBiYXNlID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKKyNlbHNlCiAgICAgYmFz
ZSA9IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oY29udGV4dCk7CisjZW5kaWYKICAgICAKICAgICBm
YWlsSWZGYWxzZShiYXNlLCAiQ2Fubm90IHBhcnNlIGJhc2UgZXhwcmVzc2lvbiIpOwogICAgIHdo
aWxlICh0cnVlKSB7CkBAIC0yNDAyLDYgKzI0MjIsMTAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGV4cHJl
c3Npb25FbmQgPSBsYXN0VG9rZW5FbmRQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgIFRyZWVB
cmd1bWVudHMgYXJndW1lbnRzID0gcGFyc2VBcmd1bWVudHMoY29udGV4dCwgQWxsb3dTcHJlYWQp
OwogICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGFyZ3VtZW50cywgIkNhbm5vdCBwYXJzZSBj
YWxsIGFyZ3VtZW50cyIpOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICAg
ICAgICAgIGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3Bl
KCktPnNldEhhc0RpcmVjdFN1cGVyKCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBiYXNlID0g
Y29udGV4dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShzdGFydExvY2F0aW9uLCBiYXNlLCBhcmd1bWVu
dHMsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFzdFRva2VuRW5kUG9zaXRpb24o
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX25vbkxIU0NvdW50ID0gbm9uTEhTQ291
bnQ7CkBAIC0yNDE5LDggKzI0NDMsMTQgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRXhwcmVzcwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgZ290byBlbmRNZW1iZXJF
eHByZXNzaW9uOwogICAgICAgICB9CisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAg
ICAgIGJhc2VJc1N1cGVyID0gZmFsc2U7CisjZW5kaWYKICAgICB9CiBlbmRNZW1iZXJFeHByZXNz
aW9uOgorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIHNlbWFudGljRmFpbElmVHJ1
ZShiYXNlSXNTdXBlciAmJiAhbmV3Q291bnQsICJDYW5ub3QgcmVmZXJlbmNlIHN1cGVyIik7Cisj
ZW5kaWYKICAgICB3aGlsZSAobmV3Q291bnQtLSkKICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3Jl
YXRlTmV3RXhwcihsb2NhdGlvbiwgYmFzZSwgZXhwcmVzc2lvblN0YXJ0LCBsYXN0VG9rZW5FbmRQ
b3NpdGlvbigpKTsKICAgICByZXR1cm4gYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaAkocmV2aXNpb24gMTgxMTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMyw5IEBAIHN0cnVj
dCBTY29wZSB7CiAgICAgICAgICwgbV9zaGFkb3dzQXJndW1lbnRzKGZhbHNlKQogICAgICAgICAs
IG1fdXNlc0V2YWwoZmFsc2UpCiAgICAgICAgICwgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uKGZhbHNl
KQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICAsIG1faGFzRGlyZWN0U3Vw
ZXIoZmFsc2UpCisjZW5kaWYKICAgICAgICAgLCBtX2FsbG93c05ld0RlY2xzKHRydWUpCiAgICAg
ICAgICwgbV9zdHJpY3RNb2RlKHN0cmljdE1vZGUpCiAgICAgICAgICwgbV9pc0Z1bmN0aW9uKGlz
RnVuY3Rpb24pCkBAIC0xMjgsNiArMTMxLDkgQEAgc3RydWN0IFNjb3BlIHsKICAgICAgICAgLCBt
X3NoYWRvd3NBcmd1bWVudHMocmhzLm1fc2hhZG93c0FyZ3VtZW50cykKICAgICAgICAgLCBtX3Vz
ZXNFdmFsKHJocy5tX3VzZXNFdmFsKQogICAgICAgICAsIG1fbmVlZHNGdWxsQWN0aXZhdGlvbihy
aHMubV9uZWVkc0Z1bGxBY3RpdmF0aW9uKQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQor
ICAgICAgICAsIG1faGFzRGlyZWN0U3VwZXIocmhzLm1faGFzRGlyZWN0U3VwZXIpCisjZW5kaWYK
ICAgICAgICAgLCBtX2FsbG93c05ld0RlY2xzKHJocy5tX2FsbG93c05ld0RlY2xzKQogICAgICAg
ICAsIG1fc3RyaWN0TW9kZShyaHMubV9zdHJpY3RNb2RlKQogICAgICAgICAsIG1faXNGdW5jdGlv
bihyaHMubV9pc0Z1bmN0aW9uKQpAQCAtMjYzLDYgKzI2OSwxMSBAQCBzdHJ1Y3QgU2NvcGUgewog
CiAgICAgdm9pZCBzZXROZWVkc0Z1bGxBY3RpdmF0aW9uKCkgeyBtX25lZWRzRnVsbEFjdGl2YXRp
b24gPSB0cnVlOyB9CiAKKyNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRBWCkKKyAgICBib29sIGhh
c0RpcmVjdFN1cGVyKCkgeyByZXR1cm4gbV9oYXNEaXJlY3RTdXBlcjsgfQorICAgIHZvaWQgc2V0
SGFzRGlyZWN0U3VwZXIoKSB7IG1faGFzRGlyZWN0U3VwZXIgPSB0cnVlOyB9CisjZW5kaWYKKwog
ICAgIGJvb2wgY29sbGVjdEZyZWVWYXJpYWJsZXMoU2NvcGUqIG5lc3RlZFNjb3BlLCBib29sIHNo
b3VsZFRyYWNrQ2xvc2VkVmFyaWFibGVzKQogICAgIHsKICAgICAgICAgaWYgKG5lc3RlZFNjb3Bl
LT5tX3VzZXNFdmFsKQpAQCAtMzU2LDYgKzM2Nyw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3No
YWRvd3NBcmd1bWVudHMgOiAxOwogICAgIGJvb2wgbV91c2VzRXZhbCA6IDE7CiAgICAgYm9vbCBt
X25lZWRzRnVsbEFjdGl2YXRpb24gOiAxOworI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQor
ICAgIGJvb2wgbV9oYXNEaXJlY3RTdXBlciA6IDE7CisjZW5kaWYKICAgICBib29sIG1fYWxsb3dz
TmV3RGVjbHMgOiAxOwogICAgIGJvb2wgbV9zdHJpY3RNb2RlIDogMTsKICAgICBib29sIG1faXNG
dW5jdGlvbiA6IDE7CkBAIC03MzgsOCArNzUyLDggQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUFyZ3VtZW50cyBwYXJzZUFyZ3Vt
ZW50cyhUcmVlQnVpbGRlciYsIFNwcmVhZE1vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVByb3BlcnR5IHBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXImLCBib29sIHN0
cmljdCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBw
YXJzZVByb3BlcnR5TWV0aG9kKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVy
KiBtZXRob2ROYW1lKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9w
ZXJ0eSBwYXJzZUdldHRlclNldHRlcihUcmVlQnVpbGRlciYsIGJvb2wgc3RyaWN0LCBQcm9wZXJ0
eU5vZGU6OlR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOwotICAgIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5
IHBhcnNlRnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgcGFyc2VHZXR0ZXJTZXR0ZXIoVHJlZUJ1aWxkZXImLCBi
b29sIHN0cmljdCwgUHJvcGVydHlOb2RlOjpUeXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0
YXJ0T2Zmc2V0LCBTdXBlckJpbmRpbmcgPSBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCk7CisgICAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5jdGlvbkJv
ZHkgcGFyc2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImLCBDb25zdHJ1Y3RvcktpbmQpOwogICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRm9ybWFsUGFy
YW1ldGVyTGlzdCBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXImKTsKICAgICBlbnVt
IFZhckRlY2xhcmF0aW9uTGlzdENvbnRleHQgeyBGb3JMb29wQ29udGV4dCwgVmFyRGVjbGFyYXRp
b25Db250ZXh0IH07CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVz
c2lvbiBwYXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFyYXRp
b25zLCBUcmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuJiBsYXN0UGF0dGVybiwgVHJlZUV4cHJlc3Np
b24mIGxhc3RJbml0aWFsaXplciwgSlNUZXh0UG9zaXRpb24mIGlkZW50U3RhcnQsIEpTVGV4dFBv
c2l0aW9uJiBpbml0U3RhcnQsIEpTVGV4dFBvc2l0aW9uJiBpbml0RW5kLCBWYXJEZWNsYXJhdGlv
bkxpc3RDb250ZXh0KTsKQEAgLTc0OSw3ICs3NjMsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRl
cm4gcGFyc2VEZWNvbnN0cnVjdGlvblBhdHRlcm4oVHJlZUJ1aWxkZXImLCBEZWNvbnN0cnVjdGlv
bktpbmQsIGludCBkZXB0aCA9IDApOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
TkVWRVJfSU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gdHJ5UGFyc2VEZWNvbnN0cnVj
dGlvblBhdHRlcm5FeHByZXNzaW9uKFRyZWVCdWlsZGVyJik7CiAKLSAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVC
dWlsZGVyJiwgRnVuY3Rpb25SZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlLCBib29sIG5h
bWVJc0luQ29udGFpbmluZ1Njb3BlLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+Jik7
CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJz
ZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBGdW5jdGlv
blBhcnNlTW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgQ29uc3RydWN0b3JLaW5k
LCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+Jik7CiAjaWYgRU5BQkxFKEVTNl9DTEFT
U19TWU5UQVgpCiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUg
VHJlZUNsYXNzRXhwcmVzc2lvbiBwYXJzZUNsYXNzKFRyZWVCdWlsZGVyJiwgRnVuY3Rpb25SZXF1
aXJlbWVudHMpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlck1vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXJNb2Rlcy5oCShyZXZpc2lvbiAxODExOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlck1vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiBlbnVtIEpTUGFyc2VyU3RyaWN0bmVzcyB7IEpTUGFyc2VOb3JtYWwsIEpT
UGFyc2VCdWlsdGluLCBKU1BhcnNlU3RyaWN0IH07CiBlbnVtIEpTUGFyc2VyTW9kZSB7IEpTUGFy
c2VQcm9ncmFtQ29kZSwgSlNQYXJzZUZ1bmN0aW9uQ29kZSB9OwogCitlbnVtIGNsYXNzIENvbnN0
cnVjdG9yS2luZCB7IEJhc2UsIERlcml2ZWQgfTsKK2VudW0gY2xhc3MgU3VwZXJCaW5kaW5nIHsg
TmVlZGVkLCBOb3ROZWVkZWQgfTsKKwogZW51bSBQcm9maWxlck1vZGUgeyBQcm9maWxlck9mZiwg
UHJvZmlsZXJPbiB9OwogZW51bSBEZWJ1Z2dlck1vZGUgeyBEZWJ1Z2dlck9mZiwgRGVidWdnZXJP
biB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNr
ZXIuaAkocmV2aXNpb24gMTgxMTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
eW50YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDEwIEBAIHB1YmxpYzoK
ICAgICBlbnVtIHsgTm9uZUV4cHIgPSAwLAogICAgICAgICBSZXNvbHZlRXZhbEV4cHIsIFJlc29s
dmVFeHByLCBJbnRlZ2VyRXhwciwgRG91YmxlRXhwciwgU3RyaW5nRXhwciwKICAgICAgICAgVGhp
c0V4cHIsIE51bGxFeHByLCBCb29sRXhwciwgUmVnRXhwRXhwciwgT2JqZWN0TGl0ZXJhbEV4cHIs
Ci0gICAgICAgIEZ1bmN0aW9uRXhwciwgQ2xhc3NFeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwg
Q2FsbEV4cHIsCisjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgICAgIENsYXNzRXhw
ciwgU3VwZXJFeHByLCBTdXBlckJyYWNrZXRFeHByLCBTdXBlckRvdEV4cHIsCisjZW5kaWYKKyAg
ICAgICAgRnVuY3Rpb25FeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwgQ2FsbEV4cHIsCiAgICAg
ICAgIE5ld0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4cHIsCiAg
ICAgICAgIENvbmRpdGlvbmFsRXhwciwgQXNzaWdubWVudEV4cHIsIFR5cGVvZkV4cHIsCiAgICAg
ICAgIERlbGV0ZUV4cHIsIEFycmF5TGl0ZXJhbEV4cHIsIEJpbmRpbmdEZWNvbnN0cnVjdGlvbiwK
QEAgLTE0Niw2ICsxNDksOSBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlVW5h
cnlQbHVzKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBV
bmFyeUV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVWb2lkKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0KICAgICBFeHBy
ZXNzaW9uVHlwZSB0aGlzRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBUaGlz
RXhwcjsgfQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgIEV4cHJlc3Npb25UeXBl
IHN1cGVyRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mKSB7IHJldHVybiBTdXBlckV4cHI7IH0K
KyNlbmRpZgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCkgeyByZXR1cm4gUmVzb2x2ZUV4cHI7IH0K
ICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYpIHsgcmV0dXJuIE9iamVjdExpdGVyYWxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUg
Y3JlYXRlT2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQpIHsgcmV0dXJu
IE9iamVjdExpdGVyYWxFeHByOyB9CkBAIC0xNjgsMTQgKzE3NCwxNCBAQCBwdWJsaWM6CiAgICAg
Q2xhc3NFeHByZXNzaW9uIGNyZWF0ZUNsYXNzRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBj
b25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBQcm9wZXJ0
eUxpc3QsIFByb3BlcnR5TGlzdCkgeyByZXR1cm4gQ2xhc3NFeHByOyB9CiAjZW5kaWYKICAgICBF
eHByZXNzaW9uVHlwZSBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
Y29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgaW50KSB7IHJldHVybiBG
dW5jdGlvbkV4cHI7IH0KLSAgICBpbnQgY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBib29sKSB7IHJldHVy
biBGdW5jdGlvbkJvZHlSZXN1bHQ7IH0KKyAgICBpbnQgY3JlYXRlRnVuY3Rpb25Cb2R5KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50LCBib29s
LCBDb25zdHJ1Y3RvcktpbmQpIHsgcmV0dXJuIEZ1bmN0aW9uQm9keVJlc3VsdDsgfQogICAgIHZv
aWQgc2V0RnVuY3Rpb25OYW1lU3RhcnQoaW50LCBpbnQpIHsgfQogICAgIGludCBjcmVhdGVBcmd1
bWVudHMoKSB7IHJldHVybiBBcmd1bWVudHNSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlQXJndW1l
bnRzKGludCkgeyByZXR1cm4gQXJndW1lbnRzUmVzdWx0OyB9CiAgICAgRXhwcmVzc2lvblR5cGUg
Y3JlYXRlU3ByZWFkRXhwcmVzc2lvbihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9u
VHlwZSwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gU3ByZWFkRXhwcjsgfQogICAgIGludCBjcmVh
dGVBcmd1bWVudHNMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4gQXJn
dW1lbnRzTGlzdFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHNMaXN0KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIGludCwgaW50KSB7IHJldHVybiBBcmd1bWVudHNMaXN0UmVzdWx0OyB9
Ci0gICAgUHJvcGVydHkgY3JlYXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciogbmFtZSwgaW50
LCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgUHJvcGVydHlOb2RlOjpQdXRUeXBlLCBib29sIGNv
bXBsZXRlKQorICAgIFByb3BlcnR5IGNyZWF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXIqIG5h
bWUsIGludCwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFByb3BlcnR5Tm9kZTo6UHV0VHlwZSwg
Ym9vbCBjb21wbGV0ZSwgU3VwZXJCaW5kaW5nID0gU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQpCiAg
ICAgewogICAgICAgICBpZiAoIWNvbXBsZXRlKQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5
KHR5cGUpOwpAQCAtMjMwLDE0ICsyMzYsMTQgQEAgcHVibGljOgogICAgIGludCBjcmVhdGVEZWJ1
Z2dlcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50
UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUNvbnN0U3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQogICAgIGlu
dCBhcHBlbmRDb25zdERlY2woY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBjb25zdCBJZGVu
dGlmaWVyKiwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KLSAgICBQcm9wZXJ0eSBj
cmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3Bl
cnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sIHN0cmljdCwgY29uc3QgSWRlbnRpZmllciogbmFtZSwg
Y29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgdW5zaWduZWQpCisgICAg
UHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCBzdHJpY3QsIGNvbnN0IElkZW50aWZp
ZXIqIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIHVuc2ln
bmVkLCBTdXBlckJpbmRpbmcpCiAgICAgewogICAgICAgICBBU1NFUlQobmFtZSk7CiAgICAgICAg
IGlmICghc3RyaWN0KQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwogICAgICAg
ICByZXR1cm4gUHJvcGVydHkobmFtZSwgdHlwZSk7CiAgICAgfQotICAgIFByb3BlcnR5IGNyZWF0
ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoVk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEs
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sIHN0
cmljdCwgZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2Vy
PiYsIHVuc2lnbmVkKQorICAgIFByb3BlcnR5IGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHko
Vk0qIHZtLCBQYXJzZXJBcmVuYSYgcGFyc2VyQXJlbmEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sIHN0cmljdCwgZG91YmxlIG5hbWUsIGNvbnN0
IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYsIHVuc2lnbmVkLCBTdXBlckJpbmRp
bmcpCiAgICAgewogICAgICAgICBpZiAoIXN0cmljdCkKICAgICAgICAgICAgIHJldHVybiBQcm9w
ZXJ0eSh0eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklk
ZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTgxMTkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYx
LDcgKzI2MSw4IEBACiAgICAgbWFjcm8oaXNGaW5pdGUpIFwKICAgICBtYWNybyhUeXBlRXJyb3Ip
IFwKICAgICBtYWNybyh1bmRlZmluZWQpIFwKLSAgICBtYWNybyhCdWlsdGluTG9nKQorICAgIG1h
Y3JvKEJ1aWx0aW5Mb2cpIFwKKyAgICBtYWNybyhob21lT2JqZWN0KQogCiBuYW1lc3BhY2UgSlND
IHsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDE4MTE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDY3LDcgKzQ2Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgY2xlYXJDb2RlKCk7CiAKLSAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5m
bygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2Vz
RXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlKTsgfQorICAgIEV4ZWN1dGFibGVJ
bmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNB
Y3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UsIGZh
bHNlKTsgfQogCiAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gbV91bmxpbmtl
ZEV2YWxDb2RlQmxvY2stPm51bVZhcmlhYmxlcygpOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZG
dW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV91bmxpbmtlZEV2YWxDb2RlQmxvY2stPm51bWJlck9m
RnVuY3Rpb25EZWNscygpOyB9CkBAIC01MjIsNyArNTIyLDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBjbGVhckNvZGUoKTsKIAotICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29u
c3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCks
IGlzU3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UpOyB9CisgICAgRXhlY3V0YWJsZUluZm8gZXhl
Y3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRp
b24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSwgZmFsc2UpOyB9
CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODExOTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyMCBAQAorMjAxNS0wMy0wNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBTdXBwb3J0IGV4dGVuZHMgYW5kIHN1cGVyIGtleXdvcmRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIyMDAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0
cyBmb3IgImV4dGVuZHMiIGFuZCAic3VwZXIiIGtleXdvcmRzLgorCisgICAgICAgICogVGVzdEV4
cGVjdGF0aW9uczoKKyAgICAgICAgKiBqcy9jbGFzcy1zeW50YXgtZXh0ZW5kcy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL2NsYXNzLXN5bnRheC1leHRlbmRzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGpzL2NsYXNzLXN5bnRheC1zdXBlci1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGpzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBq
cy9zY3JpcHQtdGVzdHMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuanM6IEFkZGVkLgorICAgICAgICAq
IGpzL3NjcmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtc3VwZXIuanM6IEFkZGVkLgorCiAyMDE1LTAz
LTA2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBTdXBwb3J0ICJw
bHVzLWxpZ2h0ZXIiIGluIG1peC1ibGVuZCBtb2RlCkluZGV4OiBMYXlvdXRUZXN0cy9UZXN0RXhw
ZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMJKHJl
dmlzaW9uIDE4MTE5MykKKysrIExheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDYgKzY5LDggQEAgd2Via2l0Lm9yZy9iLzEyNzg2MCBbIERlYnVnIF0ganMv
ZnVuY3RpbwogIyBFUzYgY2xhc3Mgc3ludGF4IGhhc24ndCBiZWVuIGVuYWJsZWQgeWV0Lgogd2Vi
a2l0Lm9yZy9iLzE0MDQ5MSBqcy9jbGFzcy1zeW50YXgtZGVjbGFyYXRpb24uaHRtbCBbIEZhaWx1
cmUgXQogd2Via2l0Lm9yZy9iLzE0MDQ5MSBqcy9jbGFzcy1zeW50YXgtZXhwcmVzc2lvbi5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTQwNDkxIGpzL2NsYXNzLXN5bnRheC1leHRlbmRz
Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xNDA0OTEganMvY2xhc3Mtc3ludGF4LXN1
cGVyLmh0bWwgWyBGYWlsdXJlIF0KIAogIyBUaGlzIHRlc3QgdmVyaWZpZXMgZHluYW1pYyBtYW5p
cHVsYXRpb24gb2YgdGhlIG1yb290IGFuZCBtc3FydCBlbGVtZW50cy4KIG1hdGhtbC9yb290cy1y
ZW1vdmVDaGlsZC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvY2xhc3Mtc3ludGF4LWV4dGVuZHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LWV4dGVuZHMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAKK1Rlc3RzIGZvciBFUzYgY2xhc3Mgc3ludGF4ICJl
eHRlbmRzIgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyAobmV3IEJhc2Up
IGluc3RhbmNlb2YgQmFzZSBpcyB0cnVlCitQQVNTIChuZXcgRGVyaXZlZCkgaW5zdGFuY2VvZiBE
ZXJpdmVkIGlzIHRydWUKK1BBU1MgKG5ldyBEZXJpdmVkKS5iYXNlTWV0aG9kKCkgaXMgImJhc2Ui
CitQQVNTIChuZXcgRGVyaXZlZCkub3ZlcnJpZGVuTWV0aG9kKCkgaXMgImRlcml2ZWQiCitQQVNT
IERlcml2ZWQuc3RhdGljQmFzZU1ldGhvZCgpIGlzICJiYXNlIgorUEFTUyBEZXJpdmVkLnN0YXRp
Y092ZXJyaWRlbk1ldGhvZCgpIGlzICJkZXJpdmVkIgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyB0
aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgZW5kIG9mIHNjcmlwdC4KK1BB
U1MgeCA9IGNsYXNzIGV4dGVuZHMgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmV4cGVj
dGVkIGVuZCBvZiBzY3JpcHQuCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyB0aHJldyBl
eGNlcHRpb24gU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgZW5kIG9mIHNjcmlwdC4KK1BBU1MgeCA9
IGNsYXNzIGV4dGVuZHMgQmFzZSB7fSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IENsYXNz
IGRlY2xhcmF0aW9uIHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBpcyBub3Qgc3VwcG9ydGVkIHlldC4u
CitQQVNTIHggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgfSB9IGRpZCBu
b3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyB4Ll9fcHJvdG9fXyBpcyBCYXNlCitQQVNTIHgucHJv
dG90eXBlLl9fcHJvdG9fXyBpcyBCYXNlLnByb3RvdHlwZQorUEFTUyB4ID0gY2xhc3MgZXh0ZW5k
cyBudWxsIHsgY29uc3RydWN0b3IoKSB7IH0gfTsgeC5fX3Byb3RvX18gaXMgRnVuY3Rpb24ucHJv
dG90eXBlCitQQVNTIHguX19wcm90b19fIGlzIEZ1bmN0aW9uLnByb3RvdHlwZQorUEFTUyB4ID0g
Y2xhc3MgZXh0ZW5kcyAzIHsgY29uc3RydWN0b3IoKSB7IH0gfTsgeC5fX3Byb3RvX18gdGhyZXcg
ZXhjZXB0aW9uIFR5cGVFcnJvcjogVGhlIHN1cGVyY2xhc3MgaXMgbm90IGFuIG9iamVjdC4uCitQ
QVNTIHggPSBjbGFzcyBleHRlbmRzICJhYmMiIHsgY29uc3RydWN0b3IoKSB7IH0gfTsgeC5fX3By
b3RvX18gdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVGhlIHN1cGVyY2xhc3MgaXMgbm90IGFu
IG9iamVjdC4uCitiYXNlV2l0aEJhZFByb3RvdHlwZSA9IGNsYXNzIHsgY29uc3RydWN0b3IoKSB7
IH0gfTsgYmFzZVdpdGhCYWRQcm90b3R5cGUucHJvdG90eXBlID0gMworUEFTUyB4ID0gY2xhc3Mg
ZXh0ZW5kcyBiYXNlV2l0aEJhZFByb3RvdHlwZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0gdGhyZXcg
ZXhjZXB0aW9uIFR5cGVFcnJvcjogVGhlIHN1cGVyY2xhc3MncyBwcm90b3R5cGUgaXMgbm90IGFu
IG9iamVjdC4uCitiYXNlV2l0aEJhZFByb3RvdHlwZS5wcm90b3R5cGUgPSAiYWJjIgorUEFTUyB4
ID0gY2xhc3MgZXh0ZW5kcyBiYXNlV2l0aEJhZFByb3RvdHlwZSB7IGNvbnN0cnVjdG9yKCkgeyB9
IH0gdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVGhlIHN1cGVyY2xhc3MncyBwcm90b3R5cGUg
aXMgbm90IGFuIG9iamVjdC4uCitQQVNTIGJhc2VXaXRoQmFkUHJvdG90eXBlLnByb3RvdHlwZSA9
IG51bGw7IHggPSBjbGFzcyBleHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29uc3RydWN0
b3IoKSB7IH0gfSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9jbGFz
cy1zeW50YXgtZXh0ZW5kcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2NsYXNz
LXN5bnRheC1leHRlbmRzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9jbGFz
cy1zeW50YXgtZXh0ZW5kcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NsYXNz
LXN5bnRheC1leHRlbmRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LXN1cGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorVGVzdHMgZm9yIEVTNiBjbGFzcyBzeW50YXgg
InN1cGVyIgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyAobmV3IEJhc2Up
IGluc3RhbmNlb2YgQmFzZSBpcyB0cnVlCitQQVNTIChuZXcgRGVyaXZlZCkgaW5zdGFuY2VvZiBE
ZXJpdmVkIGlzIHRydWUKK1BBU1MgKG5ldyBEZXJpdmVkKS5jYWxsQmFzZU1ldGhvZCgpIGlzIGJh
c2VNZXRob2RWYWx1ZQorUEFTUyB4ID0gKG5ldyBEZXJpdmVkKS5jYWxsQmFzZU1ldGhvZDsgeCgp
IGlzIGJhc2VNZXRob2RWYWx1ZQorUEFTUyAobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kSW5H
ZXR0ZXIgaXMgYmFzZU1ldGhvZFZhbHVlCitQQVNTIChuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRo
b2RJblNldHRlciA9IDE7IHZhbHVlSW5TZXR0ZXIgaXMgYmFzZU1ldGhvZFZhbHVlCitQQVNTIChu
ZXcgRGVyaXZlZCkuYmFzZU1ldGhvZEluR2V0dGVyU2V0dGVyIGlzIChuZXcgQmFzZSkuYmFzZU1l
dGhvZAorUEFTUyAobmV3IERlcml2ZWQpLmJhc2VNZXRob2RJbkdldHRlclNldHRlciA9IDE7IHZh
bHVlSW5TZXR0ZXIgaXMgKG5ldyBCYXNlKS5iYXNlTWV0aG9kCitQQVNTIERlcml2ZWQuc3RhdGlj
TWV0aG9kKCkgaXMgImJhc2UzIgorUEFTUyAobmV3IFNlY29uZERlcml2ZWQpLmNoYWluTWV0aG9k
KCkgaXMgWyJiYXNlIiwgImRlcml2ZWQiLCAic2Vjb25kRGVyaXZlZCJdCitQQVNTIHggPSBjbGFz
cyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBzdXBlcigpIHt9IH0g
dGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmV4cGVjdGVkIGtleXdvcmQgJ3N1cGVyJy4g
RXhwZWN0ZWQgYW4gaW5kZW50aWZpZXIuLgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsg
Y29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyBzdXBlcigpIH0gfSB0aHJldyBl
eGNlcHRpb24gU3ludGF4RXJyb3I6IENhbm5vdCBjYWxsIHN1cGVyKCkgb3V0c2lkZSBvZiBhIGNs
YXNzIGNvbnN0cnVjdG9yLi4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVj
dG9yKCkgeyBzdXBlcigpOyB9IG1ldGhvZCgpIHsgc3VwZXIgfSB9IHRocmV3IGV4Y2VwdGlvbiBT
eW50YXhFcnJvcjogQ2Fubm90IHJlZmVyZW5jZSBzdXBlci4uCitQQVNTIHggPSBjbGFzcyBleHRl
bmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBtZXRob2QoKSB7IHJldHVybiBu
ZXcgc3VwZXIgfSB9IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyAobmV3IHgpLm1ldGhv
ZCgpIGluc3RhbmNlb2YgQmFzZSBpcyB0cnVlCitQQVNTIChuZXcgeCkubWV0aG9kKCkgaW5zdGFu
Y2VvZiB4IGlzIGZhbHNlCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3Rv
cigpIHsgc3VwZXIoKTsgfSBtZXRob2QxKCkgeyBkZWxldGUgKHN1cGVyLmZvbykgfSBtZXRob2Qy
KCkgeyBkZWxldGUgc3VwZXJbImZvbyJdIH0gfSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BB
U1MgKG5ldyB4KS5tZXRob2QxKCkgdGhyZXcgZXhjZXB0aW9uIFJlZmVyZW5jZUVycm9yOiBDYW5u
b3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVydHkuCitQQVNTIChuZXcgeCkubWV0aG9kMigpIHRocmV3
IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5
LgorUEFTUyBuZXcgKGNsYXNzIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiB1bmRlZmluZWQ7IH0g
fSkgaW5zdGFuY2VvZiBPYmplY3QgaXMgdHJ1ZQorUEFTUyBuZXcgKGNsYXNzIHsgY29uc3RydWN0
b3IoKSB7IHJldHVybiAxOyB9IH0pIGluc3RhbmNlb2YgT2JqZWN0IGlzIHRydWUKK1BBU1MgbmV3
IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHVuZGVmaW5lZCB9
IH0pIGlzIHVuZGVmaW5lZAorUEFTUyB4ID0geyB9OyBuZXcgKGNsYXNzIGV4dGVuZHMgQmFzZSB7
IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4geCB9IH0pOyBpcyB4CitQQVNTIHggaW5zdGFuY2VvZiBC
YXNlIGlzIGZhbHNlCitQQVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3Io
KSB7IH0gfSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5vbi1v
YmplY3QgdHlwZSBpbiB0aGUgY29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLi4KK1BBU1Mg
bmV3IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIDE7IH0gfSkg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5vbi1vYmplY3QgdHlw
ZSBpbiB0aGUgY29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLi4KK1BBU1MgbmV3IChjbGFz
cyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHVuZGVmaW5lZCB9IH0pIGlz
IHVuZGVmaW5lZAorUEFTUyB4ID0geyB9OyBuZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0
cnVjdG9yKCkgeyByZXR1cm4geCB9IH0pOyBpcyB4CitQQVNTIHggaW5zdGFuY2VvZiBPYmplY3Qg
aXMgdHJ1ZQorUEFTUyBuZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyB9
IH0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0
IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4uCitQQVNTIG5ldyAo
Y2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiAxOyB9IH0pIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0IHR5cGUgaW4g
dGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4uCitQQVNTIG5ldyAoY2xhc3MgZXh0
ZW5kcyBudWxsIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCkgfSB9KSBkaWQgbm90IHRocm93IGV4
Y2VwdGlvbi4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtc3VwZXIuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtc3VwZXIuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2NsYXNzLXN5bnRheC1zdXBlci5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2xhc3Mtc3ludGF4
LWV4dGVuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2Ns
YXNzLXN5bnRheC1leHRlbmRzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvc2Ny
aXB0LXRlc3RzL2NsYXNzLXN5bnRheC1leHRlbmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDMgQEAKKy8vQCBza2lwCisKK2Rlc2NyaXB0aW9uKCdUZXN0cyBmb3IgRVM2IGNsYXNzIHN5
bnRheCAiZXh0ZW5kcyInKTsKKworY2xhc3MgQmFzZSB7CisgICAgY29uc3RydWN0b3IoKSB7IH0K
KyAgICBiYXNlTWV0aG9kKCkgeyByZXR1cm4gJ2Jhc2UnOyB9CisgICAgb3ZlcnJpZGVuTWV0aG9k
KCkgeyByZXR1cm4gJ2Jhc2UnOyB9CisgICAgc3RhdGljIHN0YXRpY0Jhc2VNZXRob2QoKSB7IHJl
dHVybiAnYmFzZSc7IH0KKyAgICBzdGF0aWMgc3RhdGljT3ZlcnJpZGVuTWV0aG9kKCkgeyByZXR1
cm4gJ2Jhc2UnOyB9Cit9CisKK2NsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHsKKyAgICBjb25z
dHJ1Y3RvcigpIHsgc3VwZXIoKTsgfQorICAgIG92ZXJyaWRlbk1ldGhvZCgpIHsgcmV0dXJuICdk
ZXJpdmVkJzsgfQorICAgIHN0YXRpYyBzdGF0aWNPdmVycmlkZW5NZXRob2QoKSB7IHJldHVybiAn
ZGVyaXZlZCc7IH0KK30KKworc2hvdWxkQmVUcnVlKCcobmV3IEJhc2UpIGluc3RhbmNlb2YgQmFz
ZScpOworc2hvdWxkQmVUcnVlKCcobmV3IERlcml2ZWQpIGluc3RhbmNlb2YgRGVyaXZlZCcpOwor
c2hvdWxkQmUoJyhuZXcgRGVyaXZlZCkuYmFzZU1ldGhvZCgpJywgJyJiYXNlIicpOworc2hvdWxk
QmUoJyhuZXcgRGVyaXZlZCkub3ZlcnJpZGVuTWV0aG9kKCknLCAnImRlcml2ZWQiJyk7CitzaG91
bGRCZSgnRGVyaXZlZC5zdGF0aWNCYXNlTWV0aG9kKCknLCAnImJhc2UiJyk7CitzaG91bGRCZSgn
RGVyaXZlZC5zdGF0aWNPdmVycmlkZW5NZXRob2QoKScsICciZGVyaXZlZCInKTsKKworc2hvdWxk
VGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzJywgJyJTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQg
b2Ygc2NyaXB0IicpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzJywgJyJTeW50YXhF
cnJvcjogVW5leHBlY3RlZCBlbmQgb2Ygc2NyaXB0IicpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFz
cyBleHRlbmRzIEJhc2UgeycsICciU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgZW5kIG9mIHNjcmlw
dCInKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHt9JywgJyJTeW50YXhF
cnJvcjogQ2xhc3MgZGVjbGFyYXRpb24gd2l0aG91dCBhIGNvbnN0cnVjdG9yIGlzIG5vdCBzdXBw
b3J0ZWQgeWV0LiInKTsKK3Nob3VsZE5vdFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsg
Y29uc3RydWN0b3IoKSB7IH0gfScpOworc2hvdWxkQmUoJ3guX19wcm90b19fJywgJ0Jhc2UnKTsK
K3Nob3VsZEJlKCd4LnByb3RvdHlwZS5fX3Byb3RvX18nLCAnQmFzZS5wcm90b3R5cGUnKTsKK3No
b3VsZEJlKCd4ID0gY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0b3IoKSB7IH0gfTsgeC5f
X3Byb3RvX18nLCAnRnVuY3Rpb24ucHJvdG90eXBlJyk7CitzaG91bGRCZSgneC5fX3Byb3RvX18n
LCAnRnVuY3Rpb24ucHJvdG90eXBlJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMg
MyB7IGNvbnN0cnVjdG9yKCkgeyB9IH07IHguX19wcm90b19fJywgJyJUeXBlRXJyb3I6IFRoZSBz
dXBlcmNsYXNzIGlzIG5vdCBhbiBvYmplY3QuIicpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBl
eHRlbmRzICJhYmMiIHsgY29uc3RydWN0b3IoKSB7IH0gfTsgeC5fX3Byb3RvX18nLCAnIlR5cGVF
cnJvcjogVGhlIHN1cGVyY2xhc3MgaXMgbm90IGFuIG9iamVjdC4iJyk7CitldmFsQW5kTG9nKCdi
YXNlV2l0aEJhZFByb3RvdHlwZSA9IGNsYXNzIHsgY29uc3RydWN0b3IoKSB7IH0gfTsgYmFzZVdp
dGhCYWRQcm90b3R5cGUucHJvdG90eXBlID0gMycpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBl
eHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3IoKSB7IH0gfScsICciVHlw
ZUVycm9yOiBUaGUgc3VwZXJjbGFzc1wncyBwcm90b3R5cGUgaXMgbm90IGFuIG9iamVjdC4iJyk7
CitldmFsQW5kTG9nKCdiYXNlV2l0aEJhZFByb3RvdHlwZS5wcm90b3R5cGUgPSAiYWJjIicpOwor
c2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29u
c3RydWN0b3IoKSB7IH0gfScsICciVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzc1wncyBwcm90b3R5
cGUgaXMgbm90IGFuIG9iamVjdC4iJyk7CitzaG91bGROb3RUaHJvdygnYmFzZVdpdGhCYWRQcm90
b3R5cGUucHJvdG90eXBlID0gbnVsbDsgeCA9IGNsYXNzIGV4dGVuZHMgYmFzZVdpdGhCYWRQcm90
b3R5cGUgeyBjb25zdHJ1Y3RvcigpIHsgfSB9Jyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2NsYXNzLXN5bnRheC1z
dXBlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2xhc3Mt
c3ludGF4LXN1cGVyLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRl
c3RzL2NsYXNzLXN5bnRheC1zdXBlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBA
CisvL0Agc2tpcAorCitkZXNjcmlwdGlvbignVGVzdHMgZm9yIEVTNiBjbGFzcyBzeW50YXggInN1
cGVyIicpOworCit2YXIgYmFzZU1ldGhvZFZhbHVlID0ge307Cit2YXIgdmFsdWVJblNldHRlciA9
IG51bGw7CisKK2NsYXNzIEJhc2UgeworICAgIGNvbnN0cnVjdG9yKCkgeyB9CisgICAgYmFzZU1l
dGhvZCgpIHsgcmV0dXJuIGJhc2VNZXRob2RWYWx1ZTsgfQorICAgIGNoYWluTWV0aG9kKCkgeyBy
ZXR1cm4gJ2Jhc2UnOyB9CisgICAgc3RhdGljIHN0YXRpY01ldGhvZCgpIHsgcmV0dXJuICdiYXNl
Myc7IH0KK30KKworY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2UgeworICAgIGNvbnN0cnVjdG9y
KCkgeyBzdXBlcigpOyB9CisgICAgY2hhaW5NZXRob2QoKSB7IHJldHVybiBbc3VwZXIuY2hhaW5N
ZXRob2QoKSwgJ2Rlcml2ZWQnXTsgfQorICAgIGNhbGxCYXNlTWV0aG9kKCkgeyByZXR1cm4gc3Vw
ZXIuYmFzZU1ldGhvZCgpOyB9CisgICAgZ2V0IGNhbGxCYXNlTWV0aG9kSW5HZXR0ZXIoKSB7IHJl
dHVybiBzdXBlclsnYmFzZU1ldGhvZCddKCk7IH0KKyAgICBzZXQgY2FsbEJhc2VNZXRob2RJblNl
dHRlcigpIHsgd2luZG93LnZhbHVlSW5TZXR0ZXIgPSBzdXBlci5iYXNlTWV0aG9kKCk7IH0KKyAg
ICBnZXQgYmFzZU1ldGhvZEluR2V0dGVyU2V0dGVyKCkgeyByZXR1cm4gc3VwZXIuYmFzZU1ldGhv
ZDsgfQorICAgIHNldCBiYXNlTWV0aG9kSW5HZXR0ZXJTZXR0ZXIoKSB7IHdpbmRvdy52YWx1ZUlu
U2V0dGVyID0gc3VwZXJbJ2Jhc2VNZXRob2QnXTsgfQorICAgIHN0YXRpYyBzdGF0aWNNZXRob2Qo
KSB7IHJldHVybiBzdXBlci5zdGF0aWNNZXRob2QoKTsgfQorfQorCitjbGFzcyBTZWNvbmREZXJp
dmVkIGV4dGVuZHMgRGVyaXZlZCB7CisgICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0KKyAg
ICBjaGFpbk1ldGhvZCgpIHsgcmV0dXJuIHN1cGVyLmNoYWluTWV0aG9kKCkuY29uY2F0KFsnc2Vj
b25kRGVyaXZlZCddKTsgfQorfQorCitzaG91bGRCZVRydWUoJyhuZXcgQmFzZSkgaW5zdGFuY2Vv
ZiBCYXNlJyk7CitzaG91bGRCZVRydWUoJyhuZXcgRGVyaXZlZCkgaW5zdGFuY2VvZiBEZXJpdmVk
Jyk7CitzaG91bGRCZSgnKG5ldyBEZXJpdmVkKS5jYWxsQmFzZU1ldGhvZCgpJywgJ2Jhc2VNZXRo
b2RWYWx1ZScpOworc2hvdWxkQmUoJ3ggPSAobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kOyB4
KCknLCAnYmFzZU1ldGhvZFZhbHVlJyk7CitzaG91bGRCZSgnKG5ldyBEZXJpdmVkKS5jYWxsQmFz
ZU1ldGhvZEluR2V0dGVyJywgJ2Jhc2VNZXRob2RWYWx1ZScpOworc2hvdWxkQmUoJyhuZXcgRGVy
aXZlZCkuY2FsbEJhc2VNZXRob2RJblNldHRlciA9IDE7IHZhbHVlSW5TZXR0ZXInLCAnYmFzZU1l
dGhvZFZhbHVlJyk7CitzaG91bGRCZSgnKG5ldyBEZXJpdmVkKS5iYXNlTWV0aG9kSW5HZXR0ZXJT
ZXR0ZXInLCAnKG5ldyBCYXNlKS5iYXNlTWV0aG9kJyk7CitzaG91bGRCZSgnKG5ldyBEZXJpdmVk
KS5iYXNlTWV0aG9kSW5HZXR0ZXJTZXR0ZXIgPSAxOyB2YWx1ZUluU2V0dGVyJywgJyhuZXcgQmFz
ZSkuYmFzZU1ldGhvZCcpOworc2hvdWxkQmUoJ0Rlcml2ZWQuc3RhdGljTWV0aG9kKCknLCAnImJh
c2UzIicpOworc2hvdWxkQmUoJyhuZXcgU2Vjb25kRGVyaXZlZCkuY2hhaW5NZXRob2QoKScsICdb
ImJhc2UiLCAiZGVyaXZlZCIsICJzZWNvbmREZXJpdmVkIl0nKTsKK3Nob3VsZFRocm93KCd4ID0g
Y2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gc3VwZXIoKSB7
fSB9JywgJyJTeW50YXhFcnJvcjogVW5leHBlY3RlZCBrZXl3b3JkIFwnc3VwZXJcJy4gRXhwZWN0
ZWQgYW4gaW5kZW50aWZpZXIuIicpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJh
c2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBtZXRob2QoKSB7IHN1cGVyKCkgfSB9JywK
KyAgICAnIlN5bnRheEVycm9yOiBDYW5ub3QgY2FsbCBzdXBlcigpIG91dHNpZGUgb2YgYSBjbGFz
cyBjb25zdHJ1Y3Rvci4iJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7
IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IG1ldGhvZCgpIHsgc3VwZXIgfSB9JywgJyJTeW50
YXhFcnJvcjogQ2Fubm90IHJlZmVyZW5jZSBzdXBlci4iJyk7CitzaG91bGROb3RUaHJvdygneCA9
IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IG1ldGhvZCgp
IHsgcmV0dXJuIG5ldyBzdXBlciB9IH0nKTsKK3Nob3VsZEJlVHJ1ZSgnKG5ldyB4KS5tZXRob2Qo
KSBpbnN0YW5jZW9mIEJhc2UnKTsKK3Nob3VsZEJlRmFsc2UoJyhuZXcgeCkubWV0aG9kKCkgaW5z
dGFuY2VvZiB4Jyk7CitzaG91bGROb3RUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNv
bnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IG1ldGhvZDEoKSB7IGRlbGV0ZSAoc3VwZXIuZm9vKSB9
IG1ldGhvZDIoKSB7IGRlbGV0ZSBzdXBlclsiZm9vIl0gfSB9Jyk7CitzaG91bGRUaHJvdygnKG5l
dyB4KS5tZXRob2QxKCknLCAnIlJlZmVyZW5jZUVycm9yOiBDYW5ub3QgZGVsZXRlIGEgc3VwZXIg
cHJvcGVydHkiJyk7CitzaG91bGRUaHJvdygnKG5ldyB4KS5tZXRob2QyKCknLCAnIlJlZmVyZW5j
ZUVycm9yOiBDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVydHkiJyk7CitzaG91bGRCZVRydWUo
J25ldyAoY2xhc3MgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSB9KSBpbnN0
YW5jZW9mIE9iamVjdCcpOworc2hvdWxkQmVUcnVlKCduZXcgKGNsYXNzIHsgY29uc3RydWN0b3Io
KSB7IHJldHVybiAxOyB9IH0pIGluc3RhbmNlb2YgT2JqZWN0Jyk7CitzaG91bGRCZSgnbmV3IChj
bGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHVuZGVmaW5lZCB9IH0p
JywgJ3VuZGVmaW5lZCcpOworc2hvdWxkQmUoJ3ggPSB7IH07IG5ldyAoY2xhc3MgZXh0ZW5kcyBC
YXNlIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiB4IH0gfSk7JywgJ3gnKTsKK3Nob3VsZEJlRmFs
c2UoJ3ggaW5zdGFuY2VvZiBCYXNlJyk7CitzaG91bGRUaHJvdygnbmV3IChjbGFzcyBleHRlbmRz
IEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgfSB9KScsICciVHlwZUVycm9yOiBDYW5ub3QgcmV0dXJu
IGEgbm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xhc3Mu
IicpOworc2hvdWxkVGhyb3coJ25ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3Io
KSB7IHJldHVybiAxOyB9IH0pJywgJyJUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4gYSBub24tb2Jq
ZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4iJyk7CitzaG91
bGRCZSgnbmV3IChjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHVu
ZGVmaW5lZCB9IH0pJywgJ3VuZGVmaW5lZCcpOworc2hvdWxkQmUoJ3ggPSB7IH07IG5ldyAoY2xh
c3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0b3IoKSB7IHJldHVybiB4IH0gfSk7JywgJ3gnKTsK
K3Nob3VsZEJlVHJ1ZSgneCBpbnN0YW5jZW9mIE9iamVjdCcpOworc2hvdWxkVGhyb3coJ25ldyAo
Y2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0b3IoKSB7IH0gfSknLCAnIlR5cGVFcnJvcjog
Q2Fubm90IHJldHVybiBhIG5vbi1vYmplY3QgdHlwZSBpbiB0aGUgY29uc3RydWN0b3Igb2YgYSBk
ZXJpdmVkIGNsYXNzLiInKTsKK3Nob3VsZFRocm93KCduZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7
IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gMTsgfSB9KScsICciVHlwZUVycm9yOiBDYW5ub3QgcmV0
dXJuIGEgbm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xh
c3MuIicpOworc2hvdWxkTm90VGhyb3coJ25ldyAoY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3Ry
dWN0b3IoKSB7IHN1cGVyKCkgfSB9KScpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248284</attachid>
            <date>2015-03-09 15:50:21 -0700</date>
            <delta_ts>2015-03-09 16:02:21 -0700</delta_ts>
            <desc>Fixed per pizlo&apos;s comment</desc>
            <filename>bug-142200-20150309154958.patch</filename>
            <type>text/plain</type>
            <size>77291</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxNS0wMy0wOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBTdXBwb3J0IGV4dGVuZHMgYW5kIHN1cGVyIGtleXdvcmRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDIyMDAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgRVM2IGNs
YXNzIHN5bnRheCBpbmhlcml0YW5jZS4KKworICAgICAgICBBZGRlZCBDb25zdHJ1Y3RvcktpbmQg
YXMgd2VsbCBhcyBib29sZWFuIGZsYWdzIGluZGljYXRpbmcgdGhlIGNvbnN0cnVjdG9yIGtpbmQg
dG8KKyAgICAgICAgdmFyaW91cyBjbGFzc2VzIGluIFVubGlua2VkQ29kZUJsb2NrIGFzIHdlbGwg
YXMgQVNUIG5vZGVzLgorCisgICAgICAgIEVhY2ggbWV0aG9kIHN0b3JlcyB0aGUgYXNzb2NpYXRl
ZCBjbGFzcyBhcyBpdHMgaG9tZU9iamVjdFByaXZhdGVOYW1lLiBUaGlzIHZhbHVlIGlzIHVzZWQg
dG8KKyAgICAgICAgbWFrZSBzdXBlciBjYWxscy4KKworICAgICAgICAqIGJ5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpVbmxp
bmtlZENvZGVCbG9jayk6CisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
OgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlSW5mbzo6RXhlY3V0YWJsZUluZm8pOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29uc3RydWN0b3JLaW5kSXNEZXJp
dmVkKTogQWRkZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpjb25zdHJ1Y3Rv
cktpbmRJc0Rlcml2ZWQpOiBBZGRlZC4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcik6IERvbid0IGVtaXQgb3BfY3JlYXRlX3RoaXMgaW4gYSBkZXJpdmVkIGNsYXNz
CisgICAgICAgIGFzIHRoZSBvYmplY3QgaXMgYWxsb2NhdGVkIGJ5IHRoZSBoaWdoZXN0IGJhc2Ug
Y2xhc3MncyBjb25zdHJ1Y3Rvci4gQWxzbyBzZXQgInRoaXMiIHRvIG51bGwKKyAgICAgICAgYW5k
IHN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbiBtX25ld1RhcmdldFJlZ2lzdGVyLiAidGhpcyIg
aXMgc3VwcG9zZWQgdG8gYmUgaW4gVERaIGJ1dAorICAgICAgICB0aGF0IHdpbGwgYmUgaW1wbGVt
ZW50ZWQgaW4gYSBzZXBhcmF0ZSBwYXRjaC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRSZXR1cm4pOiBBbGxvdyAidW5kZWZpbmVkIiB0byBiZSByZXR1cm5lZCBmcm9tIGEg
ZGVyaXZlZCBjbGFzcy4KKyAgICAgICAgSW4gYSBkZXJpdmVkIGNsYXNzJ3MgY29uc3RydWN0b3Is
IG5vdCByZXR1cm5pbmcgInVuZGVmaW5lZCIgb3IgYW4gb2JqZWN0IHJlc3VsdHMgaW4gYSB0eXBl
CisgICAgICAgIGVycm9yIGluc3RlYWQgb2YgInRoaXMiIGJlaW5nIHJldHVybmVkLgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93VHlwZUVycm9yKTogQWRkZWQuCisK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCk6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6bmV3VGFyZ2V0KTogQWRkZWQuCisKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vw
ZXJOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZC4gRW1pdHMgdGhlIGNvZGUgdG8gb2J0YWluIHRo
ZSBjYWxsZWUncyBwYXJlbnQgY2xhc3MuCisgICAgICAgIChKU0M6OmVtaXRTdXBlckJhc2VGb3JD
YWxsZWUpOiBBZGRlZC4gRW1pdHMgdGhlIGNvZGUgdG8gb2J0YWluIHRoZSBwYXJlbnQgY2xhc3Mn
cyBwcm90b3R5cGUuCisgICAgICAgIChKU0M6OmVtaXRQdXRIb21lT2JqZWN0KTogQWRkZWQuCisg
ICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZSk6IFN0b3JlcyB0aGUg
aG9tZSBvYmplY3Qgd2hlbiBhZGRpbmcgbWV0aG9kcy4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlM
aXN0Tm9kZTo6ZW1pdFB1dENvbnN0YW50UHJvcGVydHkpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6
QnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKTogQWRkZWQgdGhlIHN1cHBvcnQgZm9y
IHN1cGVyWydmb28nXS4KKyAgICAgICAgKEpTQzo6RG90QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNv
ZGUpOiBBZGRlZCB0aGUgc3VwcG9ydCBmb3Igc3VwZXIuZm9vLgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6IEFkZGVkIHRoZSBzdXBwb3J0IGZvciBz
dXBlcigpLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pdEJ5dGVj
b2RlKTogQWRkZWQgdGhlIHN1cHBvcnQgZm9yIHN1cGVyWydmb28nXSgpLgorICAgICAgICAoSlND
OjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZCB0aGUgc3VwcG9ydCBm
b3Igc3VwZXIuZm9vKCkuCisgICAgICAgIChKU0M6OkRlbGV0ZUJyYWNrZXROb2RlOjplbWl0Qnl0
ZWNvZGUpOiBGb3JiaWQgImRlbGV0ZSBzdXBlci5mb28iLgorICAgICAgICAoSlNDOjpEZWxldGVE
b3ROb2RlOjplbWl0Qnl0ZWNvZGUpOiBGb3JiaWQgImRlbGV0ZSBzdXBlclsnZm9vJ10iLgorICAg
ICAgICAoSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOiBBZGRlZCB0aGUgc3VwcG9y
dCBmb3IgImNsYXNzSGVyaXRhZ2UiLiBUaGlzIGlzIHRoZSBtYWluCisgICAgICAgIGxvZ2ljIGZv
ciBpbmhlcml0YW5jZS4gV2hlbiBhIGNsYXNzIEIgaW5oZXJpdHMgZnJvbSBhIGNsYXNzIEEsIHNl
dCBCLl9fcHJvdG9fXyB0byBBIGFuZCBzZXQKKyAgICAgICAgQi5wcm90b3R5cGUuX19wcm90b19f
IHRvIEEucHJvdG90eXBlLiBUaHJvdyBleGNlcHRpb25zIHdoZW4gZWl0aGVyIEEgb3IgQS5fX3By
b3RvX18gaXMgbm90CisgICAgICAgIGFuIG9iamVjdC4KKworICAgICAgICAqIHBhcnNlci9BU1RC
dWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OnN1cGVyRXhwcik6IEFkZGVkLgor
CisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6U3Vw
ZXJOb2RlOjpTdXBlck5vZGUpOiBBZGRlZC4KKworICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUpOgorCisg
ICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjpp
c1N1cGVyTm9kZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Tm9kZTo6dHlwZSk6CisgICAgICAg
IChKU0M6OlByb3BlcnR5Tm9kZTo6bmVlZHNTdXBlckJpbmRpbmcpOgorCisgICAgICAgICogcGFy
c2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1
bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0
aW9uSW5mbyk6IFRocm93IGEgcGFyc2VyIGVycm9yIGlmIHN1cGVyKCkgaXMgdXNlZCBvdXRzaWRl
CisgICAgICAgIG9mIGNsYXNzIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgKEpTQzo6UGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKTogQ29uc3RydWN0b3JLaW5kIGlzICJkZXJpdmVkIiBp
ZiBhbmQgb25seSBpZiB0aGUgcGFyZW50CisgICAgICAgIGNsYXNzIGlzIHNwZWNpZmllZCBpbiB0
aGUgZGVjbGFyYXRpb24gLyBleHByZXNzaW9uLgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOiBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgInN1cGVy
KCkiLCAic3VwZXIuZm9vIiwKKyAgICAgICAgYW5kICJzdXBlclsnZm9vJ10iLiBUaHJvdyBhIHNl
bWFudGljIGVycm9yIGlmICJzdXBlciIgYXBwZWFycyBieSBpdHNlbGYuCisKKyAgICAgICAgKiBw
YXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3BlOjpTY29wZSk6IEFkZGVkIG1faGFz
RGlyZWN0U3VwZXIuIFRoaXMgdmFyaWFibGUga2VlcHMgdHJhY2sgb2YgdGhlIHVzZSBvZiAic3Vw
ZXIoKSIKKyAgICAgICAgc28gdGhhdCBwYXJzZUZ1bmN0aW9uSW5mbyBjYW4gc3BpdCBhbiBlcnJv
ciBpZiBpdCdzIHVzZWQgb3V0c2lkZSBvZiBjbGFzcyBjb25zdHJ1Y3RvcnMuCisgICAgICAgIChK
U0M6OlNjb3BlOjpoYXNEaXJlY3RTdXBlcik6IEFkZGVkLgorICAgICAgICAoSlNDOjpTY29wZTo6
c2V0SGFzRGlyZWN0U3VwZXIpOiBBZGRlZC4KKworICAgICAgICAqIHBhcnNlci9QYXJzZXJNb2Rl
cy5oOgorICAgICAgICAoSlNDOjpDb25zdHJ1Y3RvcktpbmQpOiBBZGRlZC4KKworICAgICAgICAq
IHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OnN1
cGVyRXhwcik6IEFkZGVkLgorCisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
OiBBZGRlZCBob21lT2JqZWN0UHJpdmF0ZU5hbWUuCisKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1
dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmV4ZWN1dGFibGVJbmZvKTog
CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpleGVjdXRhYmxlSW5mbyk6CisKIDIw
MTUtMDMtMDggIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEpJ
VFRodW5rcyBrZWVwcyBmaW5hbGl6ZWQgV2Vha3MgYXJvdW5kLCBwaW5uaW5nIFdlYWtCbG9ja3Mu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4MTI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcg
KzYxLDggQEAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGdlbmVyYQogICAgIGZ1
bmN0aW9uLT5maW5pc2hQYXJzaW5nKGV4ZWN1dGFibGUtPnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJs
ZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5mdW5jdGlvbk1vZGUoKSk7CiAgICAgZXhlY3V0YWJsZS0+
cmVjb3JkUGFyc2UoZnVuY3Rpb24tPmZlYXR1cmVzKCksIGZ1bmN0aW9uLT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpKTsKICAgICAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQg
PSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUsIEV4
ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT5uZWVkc0FjdGl2YXRpb24oKSwgZnVuY3Rpb24tPnVzZXNF
dmFsKCksIGZ1bmN0aW9uLT5pc1N0cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0
LCBmdW5jdGlvbktpbmQgPT0gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24pKTsKKyAgICBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpj
cmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUsCisgICAgICAgIEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9u
LT5uZWVkc0FjdGl2YXRpb24oKSwgZnVuY3Rpb24tPnVzZXNFdmFsKCksIGZ1bmN0aW9uLT5pc1N0
cmljdE1vZGUoKSwga2luZCA9PSBDb2RlRm9yQ29uc3RydWN0LCBmdW5jdGlvbktpbmQgPT0gVW5s
aW5rZWRCdWlsdGluRnVuY3Rpb24sIGV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yS2luZElzRGVyaXZl
ZCgpKSk7CiAgICAgYXV0byBnZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxCeXRlY29kZUdlbmVy
YXRvcj4odm0sIGZ1bmN0aW9uLmdldCgpLCByZXN1bHQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJN
b2RlKSk7CiAgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAgICAgaWYgKGVycm9y
LmlzVmFsaWQoKSkKQEAgLTg0LDYgKzg1LDcgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OlVubGlua2VkRnVuYwogICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChub2RlLT5pc0luU3RyaWN0
Q29udGV4dCgpKQogICAgICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKICAgICAsIG1f
aXNCdWlsdGluRnVuY3Rpb24oa2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbikKKyAgICAs
IG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKG5vZGUtPmNvbnN0cnVjdG9yS2luZElzRGVyaXZl
ZCgpKQogICAgICwgbV9uYW1lKG5vZGUtPmlkZW50KCkpCiAgICAgLCBtX2luZmVycmVkTmFtZShu
b2RlLT5pbmZlcnJlZE5hbWUoKSkKICAgICAsIG1fcGFyYW1ldGVycyhub2RlLT5wYXJhbWV0ZXJz
KCkpCkBAIC0yMjksNiArMjMxLDcgQEAgVW5saW5rZWRDb2RlQmxvY2s6OlVubGlua2VkQ29kZUJs
b2NrKFZNKgogICAgICwgbV9pc0NvbnN0cnVjdG9yKGluZm8ubV9pc0NvbnN0cnVjdG9yKQogICAg
ICwgbV9oYXNDYXB0dXJlZFZhcmlhYmxlcyhmYWxzZSkKICAgICAsIG1faXNCdWlsdGluRnVuY3Rp
b24oaW5mby5tX2lzQnVpbHRpbkZ1bmN0aW9uKQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmRJc0Rl
cml2ZWQoaW5mby5tX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZCkKICAgICAsIG1fZmlyc3RMaW5l
KDApCiAgICAgLCBtX2xpbmVDb3VudCgwKQogICAgICwgbV9lbmRDb2x1bW4oVUlOVF9NQVgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suaAkocmV2aXNpb24gMTgxMjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEyICs2NSwxMyBA
QCB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkT2JqZWN0QWxsb2NhdGlvCiB0eXBlZGVmIHVuc2ln
bmVkIFVubGlua2VkTExJbnRDYWxsTGlua0luZm87CiAKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbyB7
Ci0gICAgRXhlY3V0YWJsZUluZm8oYm9vbCBuZWVkc0FjdGl2YXRpb24sIGJvb2wgdXNlc0V2YWws
IGJvb2wgaXNTdHJpY3RNb2RlLCBib29sIGlzQ29uc3RydWN0b3IsIGJvb2wgaXNCdWlsdGluRnVu
Y3Rpb24pCisgICAgRXhlY3V0YWJsZUluZm8oYm9vbCBuZWVkc0FjdGl2YXRpb24sIGJvb2wgdXNl
c0V2YWwsIGJvb2wgaXNTdHJpY3RNb2RlLCBib29sIGlzQ29uc3RydWN0b3IsIGJvb2wgaXNCdWls
dGluRnVuY3Rpb24sIGJvb2wgY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKQogICAgICAgICA6IG1f
bmVlZHNBY3RpdmF0aW9uKG5lZWRzQWN0aXZhdGlvbikKICAgICAgICAgLCBtX3VzZXNFdmFsKHVz
ZXNFdmFsKQogICAgICAgICAsIG1faXNTdHJpY3RNb2RlKGlzU3RyaWN0TW9kZSkKICAgICAgICAg
LCBtX2lzQ29uc3RydWN0b3IoaXNDb25zdHJ1Y3RvcikKICAgICAgICAgLCBtX2lzQnVpbHRpbkZ1
bmN0aW9uKGlzQnVpbHRpbkZ1bmN0aW9uKQorICAgICAgICAsIG1fY29uc3RydWN0b3JLaW5kSXNE
ZXJpdmVkKGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCkKICAgICB7CiAgICAgfQogICAgIGJvb2wg
bV9uZWVkc0FjdGl2YXRpb24gOiAxOwpAQCAtNzgsNiArNzksNyBAQCBzdHJ1Y3QgRXhlY3V0YWJs
ZUluZm8gewogICAgIGJvb2wgbV9pc1N0cmljdE1vZGUgOiAxOwogICAgIGJvb2wgbV9pc0NvbnN0
cnVjdG9yIDogMTsKICAgICBib29sIG1faXNCdWlsdGluRnVuY3Rpb24gOiAxOworICAgIGJvb2wg
bV9jb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQgOiAxOwogfTsKIAogZW51bSBVbmxpbmtlZEZ1bmN0
aW9uS2luZCB7CkBAIC0xMTYsNiArMTE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IEpTUGFyc2VTdHJpY3Q7CiAgICAgICAgIHJldHVybiBKU1BhcnNlTm9ybWFsOwogICAgIH0KKyAg
ICBib29sIGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3Ry
dWN0b3JLaW5kSXNEZXJpdmVkOyB9CiAKICAgICB1bnNpZ25lZCB1bmxpbmtlZEZ1bmN0aW9uTmFt
ZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0OyB9CiAg
ICAgdW5zaWduZWQgdW5saW5rZWRCb2R5U3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3Vu
bGlua2VkQm9keVN0YXJ0Q29sdW1uOyB9CkBAIC0xNjcsNiArMTcwLDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1faXNJblN0cmljdENvbnRleHQgOiAxOwogICAgIGJvb2wgbV9oYXNDYXB0dXJlZFZh
cmlhYmxlcyA6IDE7CiAgICAgYm9vbCBtX2lzQnVpbHRpbkZ1bmN0aW9uIDogMTsKKyAgICBib29s
IG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkIDogMTsKIAogICAgIElkZW50aWZpZXIgbV9uYW1l
OwogICAgIElkZW50aWZpZXIgbV9pbmZlcnJlZE5hbWU7CkBAIC0zNDEsNyArMzQ1LDkgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb247IH0KIAogICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rp
b24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRpbkZ1bmN0aW9uOyB9Ci0gICAgCisKKyAgICBi
b29sIGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0
b3JLaW5kSXNEZXJpdmVkOyB9CisKICAgICB2b2lkIHNocmlua1RvRml0KCkKICAgICB7CiAgICAg
ICAgIG1fanVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKQEAgLTUzMyw2ICs1MzksNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9yIDogMTsKICAgICBib29sIG1faGFzQ2FwdHVy
ZWRWYXJpYWJsZXMgOiAxOwogICAgIGJvb2wgbV9pc0J1aWx0aW5GdW5jdGlvbiA6IDE7CisgICAg
Ym9vbCBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZCA6IDE7CiAgICAgdW5zaWduZWQgbV9maXJz
dExpbmU7CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CiAgICAgdW5zaWduZWQgbV9lbmRDb2x1
bW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTgxMjgxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwMSw3ICs0MDEsMTIgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKFZNJgogICAgIGFkZENhbGxlZShmdW5jdGlvbk5vZGUsIGNhbGxlZVJlZ2lzdGVyKTsK
IAogICAgIGlmIChpc0NvbnN0cnVjdG9yKCkpIHsKLSAgICAgICAgZW1pdENyZWF0ZVRoaXMoJm1f
dGhpc1JlZ2lzdGVyKTsKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpKSB7
CisgICAgICAgICAgICBtX25ld1RhcmdldFJlZ2lzdGVyID0gYWRkVmFyKCk7CisgICAgICAgICAg
ICBlbWl0TW92ZShtX25ld1RhcmdldFJlZ2lzdGVyLCAmbV90aGlzUmVnaXN0ZXIpOworICAgICAg
ICAgICAgZW1pdExvYWQoJm1fdGhpc1JlZ2lzdGVyLCBqc051bGwoKSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgZW1pdENyZWF0ZVRoaXMoJm1fdGhpc1JlZ2lzdGVyKTsKICAgICB9IGVs
c2UgaWYgKGZ1bmN0aW9uTm9kZS0+dXNlc1RoaXMoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkp
IHsKICAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICAgICAgZW1pdE9wY29kZShvcF90b190aGlzKTsKQEAg
LTE5MDEsMTQgKzE5MDYsMTkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRS
ZXR1cgogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9sZXhpY2FsRW52aXJvbm1lbnRS
ZWdpc3RlciA/IG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXItPmluZGV4KCkgOiBlbWl0TG9h
ZCgwLCBKU1ZhbHVlKCkpLT5pbmRleCgpKTsKICAgICB9CiAKLSAgICBpZiAoaXNDb25zdHJ1Y3Rv
cigpICYmIHNyYy0+aW5kZXgoKSAhPSBtX3RoaXNSZWdpc3Rlci5pbmRleCgpKSB7Ci0gICAgICAg
IFJlZlB0cjxMYWJlbD4gaXNPYmplY3RMYWJlbCA9IG5ld0xhYmVsKCk7CisgICAgYm9vbCB0aGlz
TWlnaHRCZVVuaW5pdGlhbGl6ZWQgPSBjb25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKTsKKyAgICBp
ZiAoaXNDb25zdHJ1Y3RvcigpICYmIChzcmMtPmluZGV4KCkgIT0gbV90aGlzUmVnaXN0ZXIuaW5k
ZXgoKSB8fCB0aGlzTWlnaHRCZVVuaW5pdGlhbGl6ZWQpKSB7CisgICAgICAgIFJlZlB0cjxMYWJl
bD4gaXNPYmplY3RPclVuZGVmaW5lZExhYmVsID0gbmV3TGFiZWwoKTsKKworICAgICAgICBlbWl0
SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCksIHNyYyksIGlzT2JqZWN0T3JV
bmRlZmluZWRMYWJlbC5nZXQoKSk7CisKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2luZElzRGVy
aXZlZCgpKSB7CisgICAgICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWQobmV3
VGVtcG9yYXJ5KCksIHNyYyksIGlzT2JqZWN0T3JVbmRlZmluZWRMYWJlbC5nZXQoKSk7CisgICAg
ICAgICAgICBlbWl0VGhyb3dUeXBlRXJyb3IoIkNhbm5vdCByZXR1cm4gYSBub24tb2JqZWN0IHR5
cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4iKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBlbWl0VW5hcnlOb0RzdE9wKG9wX3JldCwgJm1fdGhpc1JlZ2lzdGVy
KTsKIAotICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCks
IHNyYyksIGlzT2JqZWN0TGFiZWwuZ2V0KCkpOwotCi0gICAgICAgIGVtaXRVbmFyeU5vRHN0T3Ao
b3BfcmV0LCAmbV90aGlzUmVnaXN0ZXIpOwotCi0gICAgICAgIGVtaXRMYWJlbChpc09iamVjdExh
YmVsLmdldCgpKTsKKyAgICAgICAgZW1pdExhYmVsKGlzT2JqZWN0T3JVbmRlZmluZWRMYWJlbC5n
ZXQoKSk7CiAgICAgfQogICAgIHJldHVybiBlbWl0VW5hcnlOb0RzdE9wKG9wX3JldCwgc3JjKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE4MTI4MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjY5LDcgKzI2OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUGFyc2VyQXJlbmEm
IHBhcnNlckFyZW5hKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZU5vZGUtPnBhcnNlckFyZW5hKCk7
IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25z
dCB7IHJldHVybiAqbV92bS0+cHJvcGVydHlOYW1lczsgfQogCi0gICAgICAgIGJvb2wgaXNDb25z
dHJ1Y3RvcigpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCk7IH0KKyAgICAg
ICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29u
c3RydWN0b3IoKTsgfQorI2lmIEVOQUJMRShFUzZfQ0xBU1NfU1lOVEFYKQorICAgICAgICBib29s
IGNvbnN0cnVjdG9yS2luZElzRGVyaXZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5j
b25zdHJ1Y3RvcktpbmRJc0Rlcml2ZWQoKTsgfQorI2Vsc2UKKyAgICAgICAgYm9vbCBjb25zdHJ1
Y3RvcktpbmRJc0Rlcml2ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCiAKICAg
ICAgICAgUGFyc2VyRXJyb3IgZ2VuZXJhdGUoKTsKIApAQCAtMjkwLDcgKzI5NSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRo
aXMiCiAgICAgICAgIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNS
ZWdpc3RlcjsgfQotICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCogbmV3VGFyZ2V0KCkgeyBy
ZXR1cm4gbV9uZXdUYXJnZXRSZWdpc3RlcjsgfQorCiAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3Bl
UmVnaXN0ZXIoKSB7IHJldHVybiBtX3Njb3BlUmVnaXN0ZXI7IH0KIAogICAgICAgICAvLyBSZXR1
cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXIuIFJlZ2lzdGVycyByZXR1
cm5lZCBieQpAQCAtNzYzLDYgKzc2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdp
c3RlcklEKiBtX2VtcHR5VmFsdWVSZWdpc3RlciB7IG51bGxwdHIgfTsKICAgICAgICAgUmVnaXN0
ZXJJRCogbV9nbG9iYWxPYmplY3RSZWdpc3RlciB7IG51bGxwdHIgfTsKICAgICAgICAgUmVnaXN0
ZXJJRCogbV9sb2NhbEFyZ3VtZW50c1JlZ2lzdGVyIHsgbnVsbHB0ciB9OworICAgICAgICBSZWdp
c3RlcklEKiBtX25ld1RhcmdldFJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogCiAgICAgICAgIFZlY3Rv
cjxJZGVudGlmaWVyLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRl
ZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdpc3RlcnM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCShyZXZpc2lvbiAxODEyODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMzAgQEAg
UmVnaXN0ZXJJRCogVGhpc05vZGU6OmVtaXRCeXRlY29kZShCeXRlYwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdXBlck5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlcklEKiBTdXBlck5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCit7CisgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNhbGxlZS5zZXRJ
bmRleChKU1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhvbWVPYmpl
Y3QgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAmY2Fs
bGVlLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSk7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvUGFyZW50ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlk
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaG9tZU9iamVjdC5nZXQoKSwgZ2VuZXJhdG9yLnBy
b3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcHJvdG9QYXJlbnQuZ2V0
KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOworfQorCitzdGF0aWMg
UmVnaXN0ZXJJRCogZW1pdFN1cGVyQmFzZUZvckNhbGxlZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yKQoreworICAgIFJlZ2lzdGVySUQgY2FsbGVlOworICAgIGNhbGxlZS5zZXRJbmRleChK
U1N0YWNrOjpDYWxsZWUpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGhvbWVPYmplY3QgPSBn
ZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAmY2FsbGVlLCBn
ZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmhvbWVPYmplY3RQcml2YXRlTmFtZSk7CisgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGhvbWVP
YmplY3QuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKTsK
K30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc29sdmVOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogYm9vbCBSZXNvbHZlTm9kZTo6aXNQdXJl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpIGNvbnN0CkBAIC0yOTQsNiArMzE4LDExIEBA
IFJlZ2lzdGVySUQqIE9iamVjdExpdGVyYWxOb2RlOjplbWl0Qnl0ZWMKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByb3BlcnR5TGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAorc3RhdGljIGlubGluZSB2b2lkIGVtaXRQdXRIb21lT2JqZWN0KEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGZ1bmN0aW9uLCBSZWdpc3RlcklE
KiBob21lT2JqZWN0KQoreworICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChmdW5jdGlvbiwgZ2Vu
ZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5ob21lT2JqZWN0UHJpdmF0ZU5hbWUsIGhvbWVPYmplY3Qp
OworfQorCiBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIC8vIEZhc3Qg
Y2FzZTogdGhpcyBsb29wIGp1c3QgaGFuZGxlcyByZWd1bGFyIHZhbHVlIHByb3BlcnRpZXMuCkBA
IC0zMzAsNiArMzU5LDggQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVj
bwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShub2RlLT5tX2Fzc2lnbik7CisgICAgICAgICAgICBpZiAobm9kZS0+bmVl
ZHNTdXBlckJpbmRpbmcoKSkKKyAgICAgICAgICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5l
cmF0b3IsIHZhbHVlLCBkc3QpOwogCiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgZ2V0L3NldCBw
cm9wZXJ0eSwgZmluZCBpdHMgZW50cnkgaW4gdGhlIG1hcC4KICAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIgfHwgbm9kZS0+bV90eXBlID09IFBy
b3BlcnR5Tm9kZTo6U2V0dGVyKTsKQEAgLTM0NCwxMiArMzc1LDE0IEBAIFJlZ2lzdGVySUQqIFBy
b3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY28KICAgICAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBw
YWlyZWQgbm9kZSBub3cuCiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZ2V0dGVyUmVn
OwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNldHRlclJlZzsKKyAgICAgICAgICAg
IFJlZ2lzdGVySUQqIHNlY29uZFJlZyA9IG51bGxwdHI7CiAKICAgICAgICAgICAgIGlmIChub2Rl
LT5tX3R5cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIpIHsKICAgICAgICAgICAgICAgICBnZXR0
ZXJSZWcgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICBpZiAocGFpci5zZWNvbmQpIHsKICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHBhaXIuc2Vjb25kLT5tX3R5cGUgPT0gUHJvcGVydHlOb2Rl
OjpTZXR0ZXIpOwogICAgICAgICAgICAgICAgICAgICBzZXR0ZXJSZWcgPSBnZW5lcmF0b3IuZW1p
dE5vZGUocGFpci5zZWNvbmQtPm1fYXNzaWduKTsKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25k
UmVnID0gc2V0dGVyUmVnLmdldCgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIHNldHRlclJlZyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICAg
ICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKHNldHRlclJlZy5nZXQoKSwganNVbmRl
ZmluZWQoKSk7CkBAIC0zNjAsMTIgKzM5MywxNiBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3RO
b2RlOjplbWl0Qnl0ZWNvCiAgICAgICAgICAgICAgICAgaWYgKHBhaXIuc2Vjb25kKSB7CiAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChwYWlyLnNlY29uZC0+bV90eXBlID09IFByb3BlcnR5Tm9k
ZTo6R2V0dGVyKTsKICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyUmVnID0gZ2VuZXJhdG9yLmVt
aXROb2RlKHBhaXIuc2Vjb25kLT5tX2Fzc2lnbik7CisgICAgICAgICAgICAgICAgICAgIHNlY29u
ZFJlZyA9IGdldHRlclJlZy5nZXQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBnZXR0ZXJSZWcgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChnZXR0ZXJSZWcuZ2V0KCksIGpzVW5k
ZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgaWYgKHBhaXIuc2Vjb25kICYmIHBhaXIuc2Vjb25kLT5uZWVkc1N1cGVyQmluZGluZygpKQor
ICAgICAgICAgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgc2Vjb25kUmVnLCBk
c3QpOworCiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEdldHRlclNldHRlcihkc3QsICpu
b2RlLT5uYW1lKCksIGdldHRlclJlZy5nZXQoKSwgc2V0dGVyUmVnLmdldCgpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTM3NSwxOCArNDEyLDMwIEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5v
ZGU6OmVtaXRCeXRlY28KIAogdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0UHV0Q29uc3RhbnRQ
cm9wZXJ0eShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBuZXdPYmos
IFByb3BlcnR5Tm9kZSYgbm9kZSkKIHsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobm9kZS5tX2Fzc2lnbik7CisgICAgaWYgKG5vZGUubmVlZHNTdXBl
ckJpbmRpbmcoKSkKKyAgICAgICAgZW1pdFB1dEhvbWVPYmplY3QoZ2VuZXJhdG9yLCB2YWx1ZS5n
ZXQoKSwgbmV3T2JqKTsKICAgICBpZiAobm9kZS5uYW1lKCkpIHsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXREaXJlY3RQdXRCeUlkKG5ld09iaiwgKm5vZGUubmFtZSgpLCBnZW5lcmF0b3IuZW1pdE5v
ZGUobm9kZS5tX2Fzc2lnbiksIG5vZGUucHV0VHlwZSgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXREaXJlY3RQdXRCeUlkKG5ld09iaiwgKm5vZGUubmFtZSgpLCB2YWx1ZS5nZXQoKSwgbm9kZS5w
dXRUeXBlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS5tX2V4cHJlc3Npb24pOwot
ICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlWYWwobmV3T2JqLCBwcm9wZXJ0eU5hbWUuZ2V0
KCksIGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLm1fYXNzaWduKSk7CisgICAgZ2VuZXJhdG9yLmVt
aXREaXJlY3RQdXRCeVZhbChuZXdPYmosIHByb3BlcnR5TmFtZS5nZXQoKSwgdmFsdWUuZ2V0KCkp
OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJhY2tldEFjY2Vzc29y
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBCcmFj
a2V0QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIGlmIChtX2Jhc2UtPmlzU3VwZXJOb2RlKCkpIHsK
KyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBnZW5lcmF0ZSB0aGUgcHJvZmlsZXIgaW5mbz8K
KyAgICAgICAgaWYgKG1fc3Vic2NyaXB0LT5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBjb25z
dCBJZGVudGlmaWVyJiBpZCA9IHN0YXRpY19jYXN0PFN0cmluZ05vZGUqPihtX3N1YnNjcmlwdCkt
PnZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGVtaXRTdXBlckJhc2VGb3JDYWxsZWUoZ2VuZXJh
dG9yKSwgaWQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5
VmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGVtaXRTdXBlckJhc2VGb3JDYWxs
ZWUoZ2VuZXJhdG9yKSwgZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KSk7CisgICAgfQor
CiAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpIAogICAgICAgICAmJiBnZW5lcmF0b3Iu
d2lsbFJlc29sdmVUb0FyZ3VtZW50c1JlZ2lzdGVyKHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4o
bV9iYXNlKS0+aWRlbnRpZmllcigpKQogICAgICAgICAmJiAhZ2VuZXJhdG9yLnN5bWJvbFRhYmxl
KCkuc2xvd0FyZ3VtZW50cygpKSB7CkBAIC00MzEsNyArNDgwLDcgQEAgUmVnaXN0ZXJJRCogRG90
QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZAogICAgIH0KIAogbm9uQXJndW1lbnRzUGF0aDoKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwor
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpID8gZW1p
dFN1cGVyQmFzZUZvckNhbGxlZShnZW5lcmF0b3IpIDogZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFz
ZSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwogICAgIFJlZ2lzdGVySUQqIGZpbmFsRGVzdCA9IGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVt
aXRHZXRCeUlkKGZpbmFsRGVzdCwgYmFzZS5nZXQoKSwgbV9pZGVudCk7CkBAIC01MjEsNiArNTcw
LDEzIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEIKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCwgZnVuYy5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVy
YXRvciwgbV9hcmdzKTsKKyAgICBpZiAobV9leHByLT5pc1N1cGVyTm9kZSgpKSB7CisgICAgICAg
IEFTU0VSVChnZW5lcmF0b3IuY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9y
Lm5ld1RhcmdldCgpKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRD
b25zdHJ1Y3QocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSwgcmV0KTsK
KyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CiAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxB
cmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ2lzdGVySUQq
IHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwg
Tm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIGlmIChnZW5lcmF0b3Iudm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsK
QEAgLTU3NCwxMyArNjMwLDE3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2Rl
OjplbWkKIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKyAg
ICBib29sIGJhc2VJc1N1cGVyID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBiYXNlID0gYmFzZUlzU3VwZXIgPyBlbWl0U3VwZXJCYXNlRm9yQ2FsbGVlKGdl
bmVyYXRvcikgOiBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwogICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJl
c3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRlbXBEZXN0aW5h
dGlvbihkc3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5j
dGlvbi5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwg
bV9hcmdzKTsKLSAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0
ZXIoKSwgYmFzZS5nZXQoKSk7CisgICAgaWYgKGJhc2VJc1N1cGVyKQorICAgICAgICBnZW5lcmF0
b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLnRoaXNS
ZWdpc3RlcigpKTsKKyAgICBlbHNlCisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKICAgICBSZWdpc3RlcklEKiByZXQg
PSBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBO
b0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdlbmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewog
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBQcm9m
aWxlVHlwZUJ5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwgbnVsbHB0cik7CkBAIC01OTYsOSAr
NjU2LDEzIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXQKICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxs
QXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKLSAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2Fs
bEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9iYXNlKTsKKyAgICBib29sIGJhc2VJc1N1cGVy
ID0gbV9iYXNlLT5pc1N1cGVyTm9kZSgpOworICAgIGlmIChiYXNlSXNTdXBlcikKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdlbmVyYXRv
ci50aGlzUmVnaXN0ZXIoKSk7CisgICAgZWxzZQorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUo
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9iYXNlKTsKICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQo
KSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rp
b24uZ2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOworICAgIGdl
bmVyYXRvci5lbWl0R2V0QnlJZChmdW5jdGlvbi5nZXQoKSwgYmFzZUlzU3VwZXIgPyBlbWl0U3Vw
ZXJCYXNlRm9yQ2FsbGVlKGdlbmVyYXRvcikgOiBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LCBtX2lkZW50KTsKICAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0
dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxB
cmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgaWYgKGdl
bmVyYXRvci52bSgpLT50eXBlUHJvZmlsZXIoKSkgewogICAgICAgICBnZW5lcmF0b3IuZW1pdFBy
b2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZUJ5dGVjb2RlRG9lc05vdEhh
dmVHbG9iYWxJRCwgbnVsbHB0cik7CkBAIC05NDAsNiArMTAwNCw4IEBAIFJlZ2lzdGVySUQqIERl
bGV0ZUJyYWNrZXROb2RlOjplbWl0Qnl0ZWMKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgIGlmICht
X2Jhc2UtPmlzU3VwZXJOb2RlKCkpCisgICAgICAgIHJldHVybiBlbWl0VGhyb3dSZWZlcmVuY2VF
cnJvcihnZW5lcmF0b3IsICJDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVydHkiKTsKICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpLCByMC5nZXQoKSwgcjEuZ2V0KCkpOwogfQogCkBAIC05NTAsNiArMTAxNiw4IEBAIFJl
Z2lzdGVySUQqIERlbGV0ZURvdE5vZGU6OmVtaXRCeXRlY29kZSgKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKIAogICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAg
ICBpZiAobV9iYXNlLT5pc1N1cGVyTm9kZSgpKQorICAgICAgICByZXR1cm4gZW1pdFRocm93UmVm
ZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAiQ2Fubm90IGRlbGV0ZSBhIHN1cGVyIHByb3BlcnR5Iik7
CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJZChnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QpLCByMC5nZXQoKSwgbV9pZGVudCk7CiB9CiAKQEAgLTI4MDcsMTEgKzI4NzUs
NDIgQEAgdm9pZCBDbGFzc0RlY2xOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZAogCiBSZWdpc3Rl
cklEKiBDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIEFTU0VSVCghbV9wYXJlbnRDbGFzc0V4cHJl
c3Npb24pOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzdXBlcmNsYXNzOworICAgIGlmIChtX2Ns
YXNzSGVyaXRhZ2UpIHsKKyAgICAgICAgc3VwZXJjbGFzcyA9IGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKHN1cGVyY2xhc3MuZ2V0KCksIG1fY2xh
c3NIZXJpdGFnZSk7CisgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNvbnN0cnVjdG9y
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9jb25zdHJ1Y3RvckV4cHJlc3Npb24pOworICAg
IC8vIEZJWE1FOiBNYWtlIHRoZSBwcm90b3R5cGUgbm9uLWNvbmZpZ3VyYWJsZSAmIG5vbi13cml0
YWJsZS4KICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdG90eXBlID0gZ2VuZXJhdG9yLmVtaXRH
ZXRCeUlkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgY29uc3RydWN0b3IuZ2V0KCksIGdlbmVy
YXRvci5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKIAorICAgIGlmIChzdXBlcmNsYXNzKSB7
CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gc3VwZXJjbGFzc0lzTnVsbExhYmVs
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1
ZShnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3BfZXFfbnVsbCwgdGVtcFJlZ2lzdGVyLmdldCgpLCBz
dXBlcmNsYXNzLmdldCgpKSwgc3VwZXJjbGFzc0lzTnVsbExhYmVsLmdldCgpKTsKKworICAgICAg
ICAvLyBGSVhNRTogVGhyb3cgVHlwZUVycm9yIGlmIGl0J3MgYSBnZW5lcmF0b3IgZnVuY3Rpb24u
CisgICAgICAgIFJlZlB0cjxMYWJlbD4gc3VwZXJjbGFzc0lzT2JqZWN0TGFiZWwgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGdlbmVyYXRv
ci5lbWl0SXNPYmplY3QodGVtcFJlZ2lzdGVyLmdldCgpLCBzdXBlcmNsYXNzLmdldCgpKSwgc3Vw
ZXJjbGFzc0lzT2JqZWN0TGFiZWwuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFRocm93
VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiVGhlIHN1cGVyY2xhc3MgaXMgbm90IGFuIG9iamVjdC4i
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc3VwZXJjbGFzc0lzT2JqZWN0TGFiZWwu
Z2V0KCkpOworCisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90b1BhcmVudCA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHByb3Rv
UGFyZW50LmdldCgpLCBzdXBlcmNsYXNzLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygp
LnByb3RvdHlwZSk7CisKKyAgICAgICAgUmVmUHRyPExhYmVsPiBwcm90b1BhcmVudElzT2JqZWN0
T3JOdWxsTGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wSWZUcnVlKGdlbmVyYXRvci5lbWl0VW5hcnlPcChvcF9pc19vYmplY3Rfb3JfbnVsbCwg
dGVtcFJlZ2lzdGVyLmdldCgpLCBwcm90b1BhcmVudC5nZXQoKSksIHByb3RvUGFyZW50SXNPYmpl
Y3RPck51bGxMYWJlbC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3dUeXBlRXJy
b3IoQVNDSUlMaXRlcmFsKCJUaGUgc3VwZXJjbGFzcydzIHByb3RvdHlwZSBpcyBub3QgYW4gb2Jq
ZWN0LiIpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChwcm90b1BhcmVudElzT2JqZWN0
T3JOdWxsTGFiZWwuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJ
ZChjb25zdHJ1Y3Rvci5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3Jl
UHJvdG8sIHN1cGVyY2xhc3MuZ2V0KCksIFByb3BlcnR5Tm9kZTo6VW5rbm93bik7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlJZChwcm90b3R5cGUuZ2V0KCksIGdlbmVyYXRvci5w
cm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b1BhcmVudC5nZXQoKSwgUHJvcGVy
dHlOb2RlOjpVbmtub3duKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHN1cGVyY2xh
c3NJc051bGxMYWJlbC5nZXQoKSk7CisgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRv
ciwgY29uc3RydWN0b3IuZ2V0KCksIHByb3RvdHlwZS5nZXQoKSk7CisgICAgfQorCiAgICAgaWYg
KG1fc3RhdGljTWV0aG9kcykKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNvbnN0cnVjdG9y
LmdldCgpLCBtX3N0YXRpY01ldGhvZHMpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaAkocmV2aXNpb24gMTgxMjgxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjks
MTAgQEAgcHVibGljOgogICAgICAgICB1c2VzVGhpcygpOwogICAgICAgICByZXR1cm4gbmV3ICht
X3BhcnNlckFyZW5hKSBUaGlzTm9kZShsb2NhdGlvbik7CiAgICAgfQorICAgIEV4cHJlc3Npb25O
b2RlKiBzdXBlckV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFN1cGVyTm9kZShsb2NhdGlvbik7Cisg
ICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXIqIGlkZW50LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgc3RhcnQpCiAgICAgewogICAgICAgICBpZiAobV92bS0+cHJvcGVydHlOYW1lcy0+YXJn
dW1lbnRzID09ICppZGVudCkKQEAgLTI5OCw5ICszMDIsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rp
b25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVu
ZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQpCisgICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3Jl
YXRlRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVu
c2lnbmVkIGVuZENvbHVtbiwgYm9vbCBpblN0cmljdENvbnRleHQsIENvbnN0cnVjdG9yS2luZCBj
b25zdHJ1Y3RvcktpbmQpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
KSBGdW5jdGlvbkJvZHlOb2RlKG1fcGFyc2VyQXJlbmEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0
aW9uLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBpblN0cmljdENvbnRleHQpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jdGlvbkJvZHlOb2RlKG1fcGFyc2VyQXJlbmEs
IHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBpblN0
cmljdENvbnRleHQsIGNvbnN0cnVjdG9yS2luZCk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRGdW5j
dGlvbk5hbWVTdGFydChGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBpbnQgZnVuY3Rpb25OYW1lU3Rh
cnQpCkBAIC0zMDksMjMgKzMxMywyNiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIE5FVkVS
X0lOTElORSBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2ws
Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXIqIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5m
bzxBU1RCdWlsZGVyPiYgaW5mbywgdW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNldCkKKyAgICAg
ICAgY29uc3QgSWRlbnRpZmllciogbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1
aWxkZXI+JiBpbmZvLCB1bnNpZ25lZCBnZXRPclNldFN0YXJ0T2Zmc2V0LCBTdXBlckJpbmRpbmcg
c3VwZXJCaW5kaW5nKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5hbWUpOwogICAgICAgICBpbmZv
LmJvZHktPnNldExvYyhpbmZvLmJvZHlTdGFydExpbmUsIGluZm8uYm9keUVuZExpbmUsIGxvY2F0
aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAgICBpbmZv
LmJvZHktPnNldEluZmVycmVkTmFtZSgqbmFtZSk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0RnVu
Y3Rpb25LZXl3b3JkU3RhcnQoZ2V0T3JTZXRTdGFydE9mZnNldCk7Ci0gICAgICAgIHJldHVybiBu
ZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZSgqbmFtZSwgbmV3IChtX3BhcnNlckFyZW5h
KSBGdW5jRXhwck5vZGUobG9jYXRpb24sIG1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlm
aWVyLAotICAgICAgICAgICAgaW5mby5ib2R5LCBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24o
aW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNldCwgaW5mby5ib2R5U3Rh
cnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1ldGVycyksIHR5cGUsIFBy
b3BlcnR5Tm9kZTo6VW5rbm93bik7CisgICAgICAgIFNvdXJjZUNvZGUgc291cmNlID0gbV9zb3Vy
Y2VDb2RlLT5zdWJFeHByZXNzaW9uKGluZm8ub3BlbkJyYWNlT2Zmc2V0LCBpbmZvLmNsb3NlQnJh
Y2VPZmZzZXQsIGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5U3RhcnRDb2x1bW4pOworICAg
ICAgICBGdW5jRXhwck5vZGUqIGZ1bmNFeHByID0gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jRXhw
ck5vZGUobG9jYXRpb24sIG1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBpbmZv
LmJvZHksIHNvdXJjZSwgaW5mby5wYXJhbWV0ZXJzKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9w
YXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKCpuYW1lLCBmdW5jRXhwciwgdHlwZSwgUHJvcGVydHlO
b2RlOjpVbmtub3duLCBzdXBlckJpbmRpbmcpOwogICAgIH0KICAgICAKLSAgICBORVZFUl9JTkxJ
TkUgUHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KFZNKiB2bSwgUGFy
c2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBQ
cm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwgZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1
bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbywgdW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNl
dCkKKyAgICBORVZFUl9JTkxJTkUgUHJvcGVydHlOb2RlKiBjcmVhdGVHZXR0ZXJPclNldHRlclBy
b3BlcnR5KFZNKiB2bSwgUGFyc2VyQXJlbmEmIHBhcnNlckFyZW5hLCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgYm9vbCwKKyAgICAgICAg
ZG91YmxlIG5hbWUsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgaW5mbywg
dW5zaWduZWQgZ2V0T3JTZXRTdGFydE9mZnNldCwgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZykK
ICAgICB7CiAgICAgICAgIGluZm8uYm9keS0+c2V0TG9jKGluZm8uYm9keVN0YXJ0TGluZSwgaW5m
by5ib2R5RW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9m
ZnNldCk7CiAgICAgICAgIGluZm8uYm9keS0+c2V0RnVuY3Rpb25LZXl3b3JkU3RhcnQoZ2V0T3JT
ZXRTdGFydE9mZnNldCk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gcGFyc2Vy
QXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKHZtLCBuYW1lKTsK
LSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKGlkZW50LCBu
ZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgdm0tPnByb3BlcnR5TmFt
ZXMtPm51bGxJZGVudGlmaWVyLAotICAgICAgICAgICAgaW5mby5ib2R5LCBtX3NvdXJjZUNvZGUt
PnN1YkV4cHJlc3Npb24oaW5mby5vcGVuQnJhY2VPZmZzZXQsIGluZm8uY2xvc2VCcmFjZU9mZnNl
dCwgaW5mby5ib2R5U3RhcnRMaW5lLCBpbmZvLmJvZHlTdGFydENvbHVtbiksIGluZm8ucGFyYW1l
dGVycyksIHR5cGUsIFByb3BlcnR5Tm9kZTo6VW5rbm93bik7CisgICAgICAgIFNvdXJjZUNvZGUg
c291cmNlID0gbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGluZm8ub3BlbkJyYWNlT2Zmc2V0
LCBpbmZvLmNsb3NlQnJhY2VPZmZzZXQsIGluZm8uYm9keVN0YXJ0TGluZSwgaW5mby5ib2R5U3Rh
cnRDb2x1bW4pOworICAgICAgICBGdW5jRXhwck5vZGUqIGZ1bmNFeHByID0gbmV3IChtX3BhcnNl
ckFyZW5hKSBGdW5jRXhwck5vZGUobG9jYXRpb24sIHZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRl
bnRpZmllciwgaW5mby5ib2R5LCBzb3VyY2UsIGluZm8ucGFyYW1ldGVycyk7CisgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZShpZGVudCwgZnVuY0V4cHIsIHR5
cGUsIFByb3BlcnR5Tm9kZTo6VW5rbm93biwgc3VwZXJCaW5kaW5nKTsKICAgICB9CiAKICAgICBB
cmd1bWVudHNOb2RlKiBjcmVhdGVBcmd1bWVudHMoKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJl
bmEpIEFyZ3VtZW50c05vZGUoKTsgfQpAQCAtMzMzLDExICszNDAsMTEgQEAgcHVibGljOgogICAg
IEFyZ3VtZW50TGlzdE5vZGUqIGNyZWF0ZUFyZ3VtZW50c0xpc3QoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGFyZykgeyByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBBcmd1bWVudExpc3ROb2RlKGxvY2F0aW9uLCBhcmcpOyB9CiAgICAgQXJndW1lbnRM
aXN0Tm9kZSogY3JlYXRlQXJndW1lbnRzTGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0
aW9uLCBBcmd1bWVudExpc3ROb2RlKiBhcmdzLCBFeHByZXNzaW9uTm9kZSogYXJnKSB7IHJldHVy
biBuZXcgKG1fcGFyc2VyQXJlbmEpIEFyZ3VtZW50TGlzdE5vZGUobG9jYXRpb24sIGFyZ3MsIGFy
Zyk7IH0KIAotICAgIFByb3BlcnR5Tm9kZSogY3JlYXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmll
ciogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBl
IHR5cGUsIFByb3BlcnR5Tm9kZTo6UHV0VHlwZSBwdXRUeXBlLCBib29sKQorICAgIFByb3BlcnR5
Tm9kZSogY3JlYXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciogcHJvcGVydHlOYW1lLCBFeHBy
ZXNzaW9uTm9kZSogbm9kZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFByb3BlcnR5Tm9kZTo6
UHV0VHlwZSBwdXRUeXBlLCBib29sLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nID0gU3VwZXJC
aW5kaW5nOjpOb3ROZWVkZWQpCiAgICAgewogICAgICAgICBpZiAobm9kZS0+aXNGdW5jRXhwck5v
ZGUoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KG5vZGUpLT5ib2R5
KCktPnNldEluZmVycmVkTmFtZSgqcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgUHJvcGVydHlOb2RlKCpwcm9wZXJ0eU5hbWUsIG5vZGUsIHR5cGUsIHB1
dFR5cGUpOworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUo
KnByb3BlcnR5TmFtZSwgbm9kZSwgdHlwZSwgcHV0VHlwZSwgc3VwZXJCaW5kaW5nKTsKICAgICB9
CiAgICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShWTSogdm0sIFBhcnNlckFyZW5hJiBw
YXJzZXJBcmVuYSwgZG91YmxlIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIFBy
b3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBQcm9wZXJ0eU5vZGU6OlB1dFR5cGUgcHV0VHlwZSwgYm9v
bCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1
Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVD
b25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMTgxMjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAotaW5saW5lIFJlc29sdmVOb2Rl
OjpSZXNvbHZlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQorICAgIGlubGluZSBT
dXBlck5vZGU6OlN1cGVyTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKQorICAg
ICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBpbmxp
bmUgUmVzb2x2ZU5vZGU6OlJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQp
CiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9pZGVudChp
ZGVudCkKICAgICAgICAgLCBtX3N0YXJ0KHN0YXJ0KQpAQCAtMTU5LDEwICsxNjQsMTEgQEAgaW5s
aW5lIFJlc29sdmVOb2RlOjpSZXNvbHZlTm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAg
ICBpbmxpbmUgUHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYgbmFt
ZSwgRXhwcmVzc2lvbk5vZGUqIGFzc2lnbiwgVHlwZSB0eXBlLCBQdXRUeXBlIHB1dFR5cGUpCisg
ICAgaW5saW5lIFByb3BlcnR5Tm9kZTo6UHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImIG5h
bWUsIEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24sIFR5cGUgdHlwZSwgUHV0VHlwZSBwdXRUeXBlLCBT
dXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nID0gU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQpCiAgICAg
ICAgIDogbV9uYW1lKCZuYW1lKQogICAgICAgICAsIG1fYXNzaWduKGFzc2lnbikKICAgICAgICAg
LCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX25lZWRzU3VwZXJCaW5kaW5nKHN1cGVyQmluZGlu
ZyA9PSBTdXBlckJpbmRpbmc6Ok5lZWRlZCkKICAgICAgICAgLCBtX3B1dFR5cGUocHV0VHlwZSkK
ICAgICB7CiAgICAgfQpAQCAtMTcyLDYgKzE3OCw3IEBAIGlubGluZSBSZXNvbHZlTm9kZTo6UmVz
b2x2ZU5vZGUoY29uc3QgSlMKICAgICAgICAgLCBtX2V4cHJlc3Npb24obmFtZSkKICAgICAgICAg
LCBtX2Fzc2lnbihhc3NpZ24pCiAgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9u
ZWVkc1N1cGVyQmluZGluZyhmYWxzZSkKICAgICAgICAgLCBtX3B1dFR5cGUocHV0VHlwZSkKICAg
ICB7CiAgICAgfQpAQCAtNzg3LDExICs3OTQsMTEgQEAgaW5saW5lIFJlc29sdmVOb2RlOjpSZXNv
bHZlTm9kZShjb25zdCBKUwogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQ2xhc3NFeHByTm9k
ZTo6Q2xhc3NFeHByTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBFeHByZXNzaW9uTm9kZSogY29uc3RydWN0b3JFeHByZXNzaW9uLCBF
eHByZXNzaW9uTm9kZSogcGFyZW50Q2xhc3NFeHByZXNzaW9uLCBQcm9wZXJ0eUxpc3ROb2RlKiBp
bnN0YW5jZU1ldGhvZHMsIFByb3BlcnR5TGlzdE5vZGUqIHN0YXRpY01ldGhvZHMpCisgICAgaW5s
aW5lIENsYXNzRXhwck5vZGU6OkNsYXNzRXhwck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGNvbnN0cnVj
dG9yRXhwcmVzc2lvbiwgRXhwcmVzc2lvbk5vZGUqIGNsYXNzSGVyaXRhZ2UsIFByb3BlcnR5TGlz
dE5vZGUqIGluc3RhbmNlTWV0aG9kcywgUHJvcGVydHlMaXN0Tm9kZSogc3RhdGljTWV0aG9kcykK
ICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKICAgICAgICAgLCBtX25hbWUobmFt
ZSkKICAgICAgICAgLCBtX2NvbnN0cnVjdG9yRXhwcmVzc2lvbihjb25zdHJ1Y3RvckV4cHJlc3Np
b24pCi0gICAgICAgICwgbV9wYXJlbnRDbGFzc0V4cHJlc3Npb24ocGFyZW50Q2xhc3NFeHByZXNz
aW9uKQorICAgICAgICAsIG1fY2xhc3NIZXJpdGFnZShjbGFzc0hlcml0YWdlKQogICAgICAgICAs
IG1faW5zdGFuY2VNZXRob2RzKGluc3RhbmNlTWV0aG9kcykKICAgICAgICAgLCBtX3N0YXRpY01l
dGhvZHMoc3RhdGljTWV0aG9kcykKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmNwcAkocmV2aXNpb24gMTgxMjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NywxMyArMTY3LDE1IEBAIEZ1
bmN0aW9uUGFyYW1ldGVyczo6fkZ1bmN0aW9uUGFyYW1ldGVycygKICAgICAgICAgcGF0dGVybnMo
KVtpXS0+ZGVyZWYoKTsKIH0KIAotRnVuY3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShQ
YXJzZXJBcmVuYSYsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2ln
bmVkIGVuZENvbHVtbiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKK0Z1bmN0aW9uQm9keU5vZGU6
OkZ1bmN0aW9uQm9keU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIHVuc2lnbmVk
IHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4sIGJvb2wgaXNJblN0cmljdENvbnRleHQs
IENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQpCiAgICAgOiBTdGF0ZW1lbnROb2RlKGVu
ZExvY2F0aW9uKQogICAgICwgbV9zdGFydENvbHVtbihzdGFydENvbHVtbikKICAgICAsIG1fZW5k
Q29sdW1uKGVuZENvbHVtbikKICAgICAsIG1fc3RhcnRTdGFydE9mZnNldChzdGFydExvY2F0aW9u
LnN0YXJ0T2Zmc2V0KQogICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChpc0luU3RyaWN0Q29udGV4
dCkKKyAgICAsIG1fY29uc3RydWN0b3JLaW5kSXNEZXJpdmVkKGNvbnN0cnVjdG9yS2luZCA9PSBD
b25zdHJ1Y3RvcktpbmQ6OkRlcml2ZWQpCiB7CisgICAgVU5VU0VEX1BBUkFNKGNvbnN0cnVjdG9y
S2luZCk7CiB9CiAKIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIFBhcmFtZXRlck5vZGUqIGZpcnN0UGFyYW1ldGVyLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgZW51bSBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTgxMjgxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQs
NiArMTY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1YnRy
YWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzQm9v
bGVhbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Nw
cmVhZEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNTdXBlck5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0
b3ImLCBMYWJlbCosIExhYmVsKiwgRmFsbFRocm91Z2hNb2RlKTsKIApAQCAtNDQ1LDYgKzQ0Niwx
NSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwogICAg
IH07CiAKKyAgICBjbGFzcyBTdXBlck5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgU3VwZXJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYp
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGlzU3VwZXJOb2RlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJp
ZGU7CisgICAgfTsKKwogICAgIGNsYXNzIFJlc29sdmVOb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlc29sdmVOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQpOwpA
QCAtNTAxLDEzICs1MTEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0gVHlwZSB7
IENvbnN0YW50ID0gMSwgR2V0dGVyID0gMiwgU2V0dGVyID0gNCB9OwogICAgICAgICBlbnVtIFB1
dFR5cGUgeyBVbmtub3duLCBLbm93bkRpcmVjdCB9OwogCi0gICAgICAgIFByb3BlcnR5Tm9kZShj
b25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBUeXBlLCBQdXRUeXBlKTsKKyAgICAg
ICAgUHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSosIFR5cGUs
IFB1dFR5cGUsIFN1cGVyQmluZGluZyk7CiAgICAgICAgIFByb3BlcnR5Tm9kZShFeHByZXNzaW9u
Tm9kZSogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSosIFR5cGUsIFB1dFR5cGUpOwotICAg
ICAgICAKKwogICAgICAgICBFeHByZXNzaW9uTm9kZSogZXhwcmVzc2lvbk5hbWUoKSBjb25zdCB7
IHJldHVybiBtX2V4cHJlc3Npb247IH0KICAgICAgICAgY29uc3QgSWRlbnRpZmllciogbmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCi0gICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQorICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9CisgICAgICAgIGJvb2wgbmVlZHNTdXBlckJpbmRpbmco
KSBjb25zdCB7IHJldHVybiBtX25lZWRzU3VwZXJCaW5kaW5nOyB9CiAgICAgICAgIFB1dFR5cGUg
cHV0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHV0VHlwZTsgfQogCiAgICAgcHJpdmF0ZToKQEAg
LTUxNSw3ICs1MjYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmll
ciogbV9uYW1lOwogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9leHByZXNzaW9uOwogICAgICAg
ICBFeHByZXNzaW9uTm9kZSogbV9hc3NpZ247Ci0gICAgICAgIFR5cGUgbV90eXBlOworICAgICAg
ICB1bnNpZ25lZCBtX3R5cGUgOiAzOworICAgICAgICB1bnNpZ25lZCBtX25lZWRzU3VwZXJCaW5k
aW5nIDogMTsKICAgICAgICAgUHV0VHlwZSBtX3B1dFR5cGU7CiAgICAgfTsKIApAQCAtMTU0Nyw3
ICsxNTU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB1c2luZyBQ
YXJzZXJBcmVuYURlbGV0YWJsZTo6b3BlcmF0b3IgbmV3OwogCi0gICAgICAgIEZ1bmN0aW9uQm9k
eU5vZGUoUGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENv
bHVtbiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCk7CisgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUo
UGFyc2VyQXJlbmEmLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZCwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbiwg
Ym9vbCBpc0luU3RyaWN0Q29udGV4dCwgQ29uc3RydWN0b3JLaW5kKTsKIAogICAgICAgICBGdW5j
dGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMu
Z2V0KCk7IH0KIApAQCAtMTU3NSw2ICsxNTg3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgaW50IHN0YXJ0U3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0U3RhcnRPZmZz
ZXQ7IH0KICAgICAgICAgYm9vbCBpc0luU3RyaWN0Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNJblN0cmljdENvbnRleHQ7IH0KKyAgICAgICAgYm9vbCBjb25zdHJ1Y3RvcktpbmRJc0Rlcml2
ZWQoKSB7IHJldHVybiBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZDsgfQogCiAgICAgcHJvdGVj
dGVkOgogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CkBAIC0xNTg3LDcgKzE2MDAsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiAgICAgICAgIFNv
dXJjZUNvZGUgbV9zb3VyY2U7CiAgICAgICAgIGludCBtX3N0YXJ0U3RhcnRPZmZzZXQ7Ci0gICAg
ICAgIGJvb2wgbV9pc0luU3RyaWN0Q29udGV4dDsKKyAgICAgICAgYm9vbCBtX2lzSW5TdHJpY3RD
b250ZXh0IDogMTsKKyAgICAgICAgYm9vbCBtX2NvbnN0cnVjdG9yS2luZElzRGVyaXZlZCA6IDE7
CiAgICAgfTsKIAogICAgIGNsYXNzIEZ1bmN0aW9uTm9kZSBmaW5hbCA6IHB1YmxpYyBTY29wZU5v
ZGUgewpAQCAtMTY0NCw3ICsxNjU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgbV9uYW1lOwogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9jb25zdHJ1
Y3RvckV4cHJlc3Npb247Ci0gICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX3BhcmVudENsYXNzRXhw
cmVzc2lvbjsKKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fY2xhc3NIZXJpdGFnZTsKICAgICAg
ICAgUHJvcGVydHlMaXN0Tm9kZSogbV9pbnN0YW5jZU1ldGhvZHM7CiAgICAgICAgIFByb3BlcnR5
TGlzdE5vZGUqIG1fc3RhdGljTWV0aG9kczsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTgxMjgxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU1LDcgKzEy
NTUsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVGb3JtYWxQCiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVGdW5jdGlvbkJvZHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRnVuY3Rpb25Cb2R5KFRy
ZWVCdWlsZGVyJiBjb250ZXh0KQordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVu
Y3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uQm9keShUcmVlQnVpbGRl
ciYgY29udGV4dCwgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCkKIHsKICAgICBKU1Rv
a2VuTG9jYXRpb24gc3RhcnRMb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIHVuc2lnbmVk
IHN0YXJ0Q29sdW1uID0gdG9rZW5Db2x1bW4oKTsKQEAgLTEyNjMsMTQgKzEyNjMsMTQgQEAgdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRnVuY3RpbwogCiAgICAgaWYgKG1hdGNoKENM
T1NFQlJBQ0UpKSB7CiAgICAgICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IHRva2VuQ29sdW1uKCk7
Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9u
LCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIHN0cmljdE1vZGUoKSk7
CisgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9u
LCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIHN0cmljdE1vZGUoKSwg
Y29uc3RydWN0b3JLaW5kKTsKICAgICB9CiAgICAgRGVwdGhNYW5hZ2VyIHN0YXRlbWVudERlcHRo
KCZtX3N0YXRlbWVudERlcHRoKTsKICAgICBtX3N0YXRlbWVudERlcHRoID0gMDsKICAgICB0eXBl
bmFtZSBUcmVlQnVpbGRlcjo6RnVuY3Rpb25Cb2R5QnVpbGRlciBib2R5QnVpbGRlcihjb25zdF9j
YXN0PFZNKj4obV92bSksIG1fbGV4ZXIuZ2V0KCkpOwogICAgIGZhaWxJZkZhbHNlKHBhcnNlU291
cmNlRWxlbWVudHMoYm9keUJ1aWxkZXIsIENoZWNrRm9yU3RyaWN0TW9kZSksICJDYW5ub3QgcGFy
c2UgYm9keSBvZiB0aGlzIGZ1bmN0aW9uIik7CiAgICAgdW5zaWduZWQgZW5kQ29sdW1uID0gdG9r
ZW5Db2x1bW4oKTsKLSAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbkJvZHkoc3RhcnRM
b2NhdGlvbiwgdG9rZW5Mb2NhdGlvbigpLCBzdGFydENvbHVtbiwgZW5kQ29sdW1uLCBzdHJpY3RN
b2RlKCkpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0
aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIHN0cmljdE1vZGUo
KSwgY29uc3RydWN0b3JLaW5kKTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIqIHN0cmluZ0ZvckZ1
bmN0aW9uTW9kZShGdW5jdGlvblBhcnNlTW9kZSBtb2RlKQpAQCAtMTI5MCw3ICsxMjkwLDggQEAg
c3RhdGljIGNvbnN0IGNoYXIqIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZQogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTGV4ZXJUeXBlPgotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYgY29udGV4dCwg
RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9kZSBtb2Rl
LCBib29sIG5hbWVJc0luQ29udGFpbmluZ1Njb3BlLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1
aWxkZXI+JiBpbmZvKQordGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGRlciYgY29udGV4dCwgRnVuY3Rp
b25SZXF1aXJlbWVudHMgcmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNlTW9kZSBtb2RlLAorICAg
IGJvb2wgbmFtZUlzSW5Db250YWluaW5nU2NvcGUsIENvbnN0cnVjdG9yS2luZCBjb25zdHJ1Y3Rv
cktpbmQsIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4mIGluZm8pCiB7CiAgICAgQXV0
b1BvcFNjb3BlUmVmIGZ1bmN0aW9uU2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOwogICAgIGZ1bmN0
aW9uU2NvcGUtPnNldElzRnVuY3Rpb24oKTsKQEAgLTEzNDMsNyArMTM0NCw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKICAgICAgICAgICAgIGVuZExvY2F0aW9u
LnN0YXJ0T2Zmc2V0IC0gZW5kTG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0OwogICAgICAgICB1bnNp
Z25lZCBjdXJyZW50TGluZVN0YXJ0T2Zmc2V0ID0gbV90b2tlbi5tX2xvY2F0aW9uLmxpbmVTdGFy
dE9mZnNldDsKIAotICAgICAgICBpbmZvLmJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9k
eShzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgaW5mby5ib2R5U3RhcnRDb2x1bW4sIGJvZHlF
bmRDb2x1bW4sIGNhY2hlZEluZm8tPnN0cmljdE1vZGUpOworICAgICAgICBpbmZvLmJvZHkgPSBj
b250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgaW5m
by5ib2R5U3RhcnRDb2x1bW4sIGJvZHlFbmRDb2x1bW4sIGNhY2hlZEluZm8tPnN0cmljdE1vZGUs
IGNvbnN0cnVjdG9yS2luZCk7CiAgICAgICAgIAogICAgICAgICBmdW5jdGlvblNjb3BlLT5yZXN0
b3JlRnJvbVNvdXJjZVByb3ZpZGVyQ2FjaGUoY2FjaGVkSW5mbyk7CiAgICAgICAgIGZhaWxJZkZh
bHNlKHBvcFNjb3BlKGZ1bmN0aW9uU2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJs
ZUluZm8pLCAiUGFyc2VyIGVycm9yIik7CkBAIC0xMzY2LDE1ICsxMzY3LDE5IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXIKICAgICB9CiAgICAgbV9sYXN0RnVuY3Rp
b25OYW1lID0gbGFzdEZ1bmN0aW9uTmFtZTsKICAgICBQYXJzZXJTdGF0ZSBvbGRTdGF0ZSA9IHNh
dmVTdGF0ZSgpOwotICAgIGluZm8uYm9keSA9IHBhcnNlRnVuY3Rpb25Cb2R5KGNvbnRleHQpOwor
ICAgIGluZm8uYm9keSA9IHBhcnNlRnVuY3Rpb25Cb2R5KGNvbnRleHQsIGNvbnN0cnVjdG9yS2lu
ZCk7CiAgICAgcmVzdG9yZVN0YXRlKG9sZFN0YXRlKTsKICAgICBmYWlsSWZGYWxzZShpbmZvLmJv
ZHksICJDYW5ub3QgcGFyc2UgdGhlIGJvZHkgb2YgdGhpcyAiLCBzdHJpbmdGb3JGdW5jdGlvbk1v
ZGUobW9kZSkpOwogICAgIGNvbnRleHQuc2V0RW5kT2Zmc2V0KGluZm8uYm9keSwgbV9sZXhlci0+
Y3VycmVudE9mZnNldCgpKTsKICAgICBpZiAoZnVuY3Rpb25TY29wZS0+c3RyaWN0TW9kZSgpICYm
IGluZm8ubmFtZSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChtb2RlID09IEZ1bmN0aW9uTW9k
ZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1vZGUgPT0gRnVuY3Rpb25Nb2RlIHx8IG1vZGUg
PT0gTWV0aG9kTW9kZSk7CiAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShtX3ZtLT5wcm9wZXJ0
eU5hbWVzLT5hcmd1bWVudHMgPT0gKmluZm8ubmFtZSwgIiciLCBpbmZvLm5hbWUtPmltcGwoKSwg
IicgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwogICAgICAg
ICBzZW1hbnRpY0ZhaWxJZlRydWUobV92bS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqaW5mby5u
YW1lLCAiJyIsIGluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBu
YW1lIGluIHN0cmljdCBtb2RlIik7CiAgICAgfQorICAgIGlmIChmdW5jdGlvblNjb3BlLT5oYXNE
aXJlY3RTdXBlcigpKSB7CisgICAgICAgIGJvb2wgbmFtZUlzQ29uc3RydWN0b3IgPSBpbmZvLm5h
bWUgJiYgKmluZm8ubmFtZSA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvcjsKKyAg
ICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1vZGUgIT0gTWV0aG9kTW9kZSB8fCAhbmFtZUlzQ29u
c3RydWN0b3IsICJDYW5ub3QgY2FsbCBzdXBlcigpIG91dHNpZGUgb2YgYSBjbGFzcyBjb25zdHJ1
Y3RvciIpOworICAgIH0KICAgICBpbmZvLmNsb3NlQnJhY2VPZmZzZXQgPSBtX3Rva2VuLm1fZGF0
YS5vZmZzZXQ7CiAgICAgdW5zaWduZWQgY2xvc2VCcmFjZUxpbmUgPSBtX3Rva2VuLm1fZGF0YS5s
aW5lOwogICAgIHVuc2lnbmVkIGNsb3NlQnJhY2VMaW5lU3RhcnRPZmZzZXQgPSBtX3Rva2VuLm1f
ZGF0YS5saW5lU3RhcnRPZmZzZXQ7CkBAIC0xNDE1LDcgKzE0MjAsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiAgICAgdW5zaWduZWQgZnVuY3Rpb25LZXl3b3Jk
U3RhcnQgPSB0b2tlblN0YXJ0KCk7CiAgICAgbmV4dCgpOwogICAgIFBhcnNlckZ1bmN0aW9uSW5m
bzxUcmVlQnVpbGRlcj4gaW5mbzsKLSAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8o
Y29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0aW9uTW9kZSwgdHJ1ZSwgaW5mbykpLCAi
Q2Fubm90IHBhcnNlIHRoaXMgZnVuY3Rpb24iKTsKKyAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5j
dGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0aW9uTW9kZSwgdHJ1ZSwg
Q29uc3RydWN0b3JLaW5kOjpCYXNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgdGhpcyBmdW5jdGlv
biIpOwogICAgIGZhaWxJZkZhbHNlKGluZm8ubmFtZSwgIkZ1bmN0aW9uIHN0YXRlbWVudHMgbXVz
dCBoYXZlIGEgbmFtZSIpOwogICAgIGZhaWxJZkZhbHNlSWZTdHJpY3QoZGVjbGFyZVZhcmlhYmxl
KGluZm8ubmFtZSksICJDYW5ub3QgZGVjbGFyZSBhIGZ1bmN0aW9uIG5hbWVkICciLCBpbmZvLm5h
bWUtPmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKICAgICByZXR1cm4gY29udGV4dC5jcmVh
dGVGdW5jRGVjbFN0YXRlbWVudChsb2NhdGlvbiwgaW5mbywgZnVuY3Rpb25LZXl3b3JkU3RhcnQp
OwpAQCAtMTQ2NSw4ICsxNDcwLDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
Q2xhc3NFeAogICAgIGlmIChjb25zdW1lKEVYVEVORFMpKSB7CiAgICAgICAgIHBhcmVudENsYXNz
ID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAgICAgZmFpbElmRmFsc2Uo
cGFyZW50Q2xhc3MsICJDYW5ub3QgcGFyc2UgdGhlIHBhcmVudCBjbGFzcyBuYW1lIik7Ci0gICAg
ICAgIGZhaWxXaXRoTWVzc2FnZSgiSW5oZXJpdGFuY2UgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTsK
ICAgICB9CisgICAgY29uc3QgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9yS2luZCA9IHBhcmVu
dENsYXNzID8gQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkIDogQ29uc3RydWN0b3JLaW5kOjpCYXNl
OwogCiAgICAgY29uc3VtZU9yRmFpbFdpdGhGbGFncyhPUEVOQlJBQ0UsIFRyZWVCdWlsZGVyOjpE
b250QnVpbGRTdHJpbmdzLCAiRXhwZWN0ZWQgb3BlbmluZyAneycgYXQgdGhlIHN0YXJ0IG9mIGEg
Y2xhc3MgYm9keSIpOwogCkBAIC0xNDk4LDExICsxNTAzLDExIEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUNsYXNzRXgKICAgICAgICAgaWYgKGlzR2V0dGVyIHx8IGlzU2V0dGVy
KSB7CiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNTdGF0aWNNZXRob2QsICJDYW5u
b3QgZGVjbGFyZSBhIHN0YXRpYyIsIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShpc0dldHRlciA/IEdl
dHRlck1vZGUgOiBTZXR0ZXJNb2RlKSk7CiAgICAgICAgICAgICBuZXh0RXhwZWN0SWRlbnRpZmll
cihMZXhlckZsYWdzSWdub3JlUmVzZXJ2ZWRXb3Jkcyk7Ci0gICAgICAgICAgICBwcm9wZXJ0eSA9
IHBhcnNlR2V0dGVyU2V0dGVyKGNvbnRleHQsIGFsd2F5c1N0cmljdEluc2lkZUNsYXNzLCBpc0dl
dHRlciA/IFByb3BlcnR5Tm9kZTo6R2V0dGVyIDogUHJvcGVydHlOb2RlOjpTZXR0ZXIsIG1ldGhv
ZFN0YXJ0KTsKKyAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VHZXR0ZXJTZXR0ZXIoY29udGV4
dCwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xhc3MsIGlzR2V0dGVyID8gUHJvcGVydHlOb2RlOjpHZXR0
ZXIgOiBQcm9wZXJ0eU5vZGU6OlNldHRlciwgbWV0aG9kU3RhcnQsIFN1cGVyQmluZGluZzo6TmVl
ZGVkKTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIHRo
aXMgbWV0aG9kIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQYXJzZXJGdW5jdGlv
bkluZm88VHJlZUJ1aWxkZXI+IG1ldGhvZEluZm87Ci0gICAgICAgICAgICBmYWlsSWZGYWxzZSgo
cGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OZWVkc05hbWUsIEZ1bmN0aW9uTW9k
ZSwgZmFsc2UsIG1ldGhvZEluZm8pKSwgIkNhbm5vdCBwYXJzZSB0aGlzIG1ldGhvZCIpOworICAg
ICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9u
TmVlZHNOYW1lLCBNZXRob2RNb2RlLCBmYWxzZSwgY29uc3RydWN0b3JLaW5kLCBtZXRob2RJbmZv
KSksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNl
KG1ldGhvZEluZm8ubmFtZSwgIm1ldGhvZCBtdXN0IGhhdmUgYSBuYW1lIik7CiAgICAgICAgICAg
ICBmYWlsSWZGYWxzZShkZWNsYXJlVmFyaWFibGUobWV0aG9kSW5mby5uYW1lKSwgIkNhbm5vdCBk
ZWNsYXJlIGEgbWV0aG9kIG5hbWVkICciLCBtZXRob2RJbmZvLm5hbWUtPmltcGwoKSwgIiciKTsK
IApAQCAtMTUyMCw3ICsxNTI1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
Q2xhc3NFeAogICAgICAgICAgICAgLy8gRklYTUU6IFN5bnRheCBlcnJvciB3aGVuIHN1cGVyKCkg
aXMgY2FsbGVkCiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNTdGF0aWNNZXRob2Qg
JiYgKm1ldGhvZEluZm8ubmFtZSA9PSBwcm9wZXJ0eU5hbWVzLnByb3RvdHlwZSwKICAgICAgICAg
ICAgICAgICAiQ2Fubm90IGRlY2xhcmUgYSBzdGF0aWMgbWV0aG9kIG5hbWVkICdwcm90b3R5cGUn
Iik7Ci0gICAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHkobWV0aG9k
SW5mby5uYW1lLCBtZXRob2QsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQsIFByb3BlcnR5Tm9kZTo6
VW5rbm93biwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xhc3MpOworICAgICAgICAgICAgcHJvcGVydHkg
PSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KG1ldGhvZEluZm8ubmFtZSwgbWV0aG9kLCBQcm9wZXJ0
eU5vZGU6OkNvbnN0YW50LCBQcm9wZXJ0eU5vZGU6OlVua25vd24sIGFsd2F5c1N0cmljdEluc2lk
ZUNsYXNzLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCk7CiAgICAgICAgIH0KIAogICAgICAgICBUcmVl
UHJvcGVydHlMaXN0JiB0YWlsID0gaXNTdGF0aWNNZXRob2QgPyBzdGF0aWNNZXRob2RzVGFpbCA6
IGluc3RhbmNlTWV0aG9kc1RhaWw7CkBAIC0yMDA3LDEzICsyMDEyLDEzIEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICBKU1Rva2VuTG9jYXRpb24gbWV0aG9k
TG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICB1bnNpZ25lZCBtZXRob2RTdGFydCA9IHRv
a2VuU3RhcnQoKTsKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IG1ldGhvZElu
Zm87Ci0gICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9u
Tm9SZXF1aXJlbWVudHMsIE1ldGhvZE1vZGUsIGZhbHNlLCBtZXRob2RJbmZvKSksICJDYW5ub3Qg
cGFyc2UgdGhpcyBtZXRob2QiKTsKKyAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8o
Y29udGV4dCwgRnVuY3Rpb25Ob1JlcXVpcmVtZW50cywgTWV0aG9kTW9kZSwgZmFsc2UsIENvbnN0
cnVjdG9yS2luZDo6QmFzZSwgbWV0aG9kSW5mbykpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9k
Iik7CiAgICAgbWV0aG9kSW5mby5uYW1lID0gbWV0aG9kTmFtZTsKICAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVGdW5jdGlvbkV4cHIobWV0aG9kTG9jYXRpb24sIG1ldGhvZEluZm8sIG1ldGhvZFN0
YXJ0KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUdldHRl
clNldHRlcihUcmVlQnVpbGRlciYgY29udGV4dCwgYm9vbCBzdHJpY3QsIFByb3BlcnR5Tm9kZTo6
VHlwZSB0eXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0KQordGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
R2V0dGVyU2V0dGVyKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBib29sIHN0cmljdCwgUHJvcGVydHlO
b2RlOjpUeXBlIHR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQsIFN1cGVy
QmluZGluZyBzdXBlckJpbmRpbmcpCiB7CiAgICAgY29uc3QgSWRlbnRpZmllciogc3RyaW5nUHJv
cGVydHlOYW1lID0gMDsKICAgICBkb3VibGUgbnVtZXJpY1Byb3BlcnR5TmFtZSA9IDA7CkBAIC0y
MDI4LDE0ICsyMDMzLDE0IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3Bl
cnQKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87CiAgICAgaWYgKHR5
cGUgPT0gUHJvcGVydHlOb2RlOjpHZXR0ZXIpIHsKICAgICAgICAgZmFpbElmRmFsc2UobWF0Y2go
T1BFTlBBUkVOKSwgIkV4cGVjdGVkIGEgcGFyYW1ldGVyIGxpc3QgZm9yIGdldHRlciBkZWZpbml0
aW9uIik7Ci0gICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBG
dW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBHZXR0ZXJNb2RlLCBmYWxzZSwgaW5mbykpLCAiQ2Fubm90
IHBhcnNlIGdldHRlciBkZWZpbml0aW9uIik7CisgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1
bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBHZXR0ZXJNb2RlLCBm
YWxzZSwgQ29uc3RydWN0b3JLaW5kOjpCYXNlLCBpbmZvKSksICJDYW5ub3QgcGFyc2UgZ2V0dGVy
IGRlZmluaXRpb24iKTsKICAgICB9IGVsc2UgewogICAgICAgICBmYWlsSWZGYWxzZShtYXRjaChP
UEVOUEFSRU4pLCAiRXhwZWN0ZWQgYSBwYXJhbWV0ZXIgbGlzdCBmb3Igc2V0dGVyIGRlZmluaXRp
b24iKTsKLSAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1
bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNldHRlck1vZGUsIGZhbHNlLCBpbmZvKSksICJDYW5ub3Qg
cGFyc2Ugc2V0dGVyIGRlZmluaXRpb24iKTsKKyAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVu
Y3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIFNldHRlck1vZGUsIGZh
bHNlLCBDb25zdHJ1Y3RvcktpbmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBzZXR0ZXIg
ZGVmaW5pdGlvbiIpOwogICAgIH0KICAgICBpZiAoc3RyaW5nUHJvcGVydHlOYW1lKQotICAgICAg
ICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGxvY2F0aW9uLCB0
eXBlLCBzdHJpY3QsIHN0cmluZ1Byb3BlcnR5TmFtZSwgaW5mbywgZ2V0dGVyT3JTZXR0ZXJTdGFy
dE9mZnNldCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0
eShjb25zdF9jYXN0PFZNKj4obV92bSksIG1fcGFyc2VyQXJlbmEsIGxvY2F0aW9uLCB0eXBlLCBz
dHJpY3QsIG51bWVyaWNQcm9wZXJ0eU5hbWUsIGluZm8sIGdldHRlck9yU2V0dGVyU3RhcnRPZmZz
ZXQpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5
KGxvY2F0aW9uLCB0eXBlLCBzdHJpY3QsIHN0cmluZ1Byb3BlcnR5TmFtZSwgaW5mbywgZ2V0dGVy
T3JTZXR0ZXJTdGFydE9mZnNldCwgc3VwZXJCaW5kaW5nKTsKKyAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0X2Nhc3Q8Vk0qPihtX3ZtKSwgbV9wYXJz
ZXJBcmVuYSwgbG9jYXRpb24sIHR5cGUsIHN0cmljdCwgbnVtZXJpY1Byb3BlcnR5TmFtZSwgaW5m
bywgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgc3VwZXJCaW5kaW5nKTsKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KQEAgLTIyMjAsNyArMjIyNSw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKICAgICAgICAgbmV4dCgpOwogICAgICAgICBQ
YXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGluZm87CiAgICAgICAgIGluZm8ubmFtZSA9
ICZtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKLSAgICAgICAgZmFpbElmRmFs
c2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTm9SZXF1aXJlbWVudHMsIEZ1
bmN0aW9uTW9kZSwgZmFsc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBleHByZXNz
aW9uIik7CisgICAgICAgIGZhaWxJZkZhbHNlKChwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBG
dW5jdGlvbk5vUmVxdWlyZW1lbnRzLCBGdW5jdGlvbk1vZGUsIGZhbHNlLCBDb25zdHJ1Y3Rvcktp
bmQ6OkJhc2UsIGluZm8pKSwgIkNhbm5vdCBwYXJzZSBmdW5jdGlvbiBleHByZXNzaW9uIik7CiAg
ICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihsb2NhdGlvbiwgaW5mbywg
ZnVuY3Rpb25LZXl3b3JkU3RhcnQpOwogICAgIH0KICNpZiBFTkFCTEUoRVM2X0NMQVNTX1NZTlRB
WCkKQEAgLTIzNzAsOCArMjM3NSwxOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVFeHByZXNzCiAgICAgICAgIG5ld0NvdW50Kys7CiAgICAgfQogCi0gICAgYmFzZSA9IHBhcnNl
UHJpbWFyeUV4cHJlc3Npb24oY29udGV4dCk7Ci0gICAgCisjaWYgRU5BQkxFKEVTNl9DTEFTU19T
WU5UQVgpCisgICAgYm9vbCBiYXNlSXNTdXBlciA9IG1hdGNoKFNVUEVSKTsKKyNlbHNlCisgICAg
Ym9vbCBiYXNlSXNTdXBlciA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAoYmFzZUlzU3VwZXIp
IHsKKyAgICAgICAgYmFzZSA9IGNvbnRleHQuc3VwZXJFeHByKGxvY2F0aW9uKTsKKyAgICAgICAg
bmV4dCgpOworICAgIH0gZWxzZQorICAgICAgICBiYXNlID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lv
bihjb250ZXh0KTsKKwogICAgIGZhaWxJZkZhbHNlKGJhc2UsICJDYW5ub3QgcGFyc2UgYmFzZSBl
eHByZXNzaW9uIik7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgbG9jYXRpb24gPSB0b2tl
bkxvY2F0aW9uKCk7CkBAIC0yNDAyLDYgKzI0MTcsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVFeHByZXNzCiAgICAgICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZXhwcmVz
c2lvbkVuZCA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgVHJlZUFy
Z3VtZW50cyBhcmd1bWVudHMgPSBwYXJzZUFyZ3VtZW50cyhjb250ZXh0LCBBbGxvd1NwcmVhZCk7
CiAgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UoYXJndW1lbnRzLCAiQ2Fubm90IHBhcnNlIGNh
bGwgYXJndW1lbnRzIik7CisgICAgICAgICAgICAgICAgaWYgKGJhc2VJc1N1cGVyKQorICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0SGFzRGlyZWN0U3VwZXIoKTsKICAgICAg
ICAgICAgICAgICBiYXNlID0gY29udGV4dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShzdGFydExvY2F0
aW9uLCBiYXNlLCBhcmd1bWVudHMsIGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvbkVuZCwgbGFz
dFRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX25vbkxI
U0NvdW50ID0gbm9uTEhTQ291bnQ7CkBAIC0yNDE5LDggKzI0MzYsMTAgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgZ290byBlbmRNZW1iZXJFeHByZXNzaW9uOwogICAgICAgICB9CisgICAgICAgIGJhc2VJc1N1
cGVyID0gZmFsc2U7CiAgICAgfQogZW5kTWVtYmVyRXhwcmVzc2lvbjoKKyAgICBzZW1hbnRpY0Zh
aWxJZlRydWUoYmFzZUlzU3VwZXIgJiYgIW5ld0NvdW50LCAiQ2Fubm90IHJlZmVyZW5jZSBzdXBl
ciIpOwogICAgIHdoaWxlIChuZXdDb3VudC0tKQogICAgICAgICBiYXNlID0gY29udGV4dC5jcmVh
dGVOZXdFeHByKGxvY2F0aW9uLCBiYXNlLCBleHByZXNzaW9uU3RhcnQsIGxhc3RUb2tlbkVuZFBv
c2l0aW9uKCkpOwogICAgIHJldHVybiBiYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oCShyZXZpc2lvbiAxODEyODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDcgQEAgc3RydWN0
IFNjb3BlIHsKICAgICAgICAgLCBtX3NoYWRvd3NBcmd1bWVudHMoZmFsc2UpCiAgICAgICAgICwg
bV91c2VzRXZhbChmYWxzZSkKICAgICAgICAgLCBtX25lZWRzRnVsbEFjdGl2YXRpb24oZmFsc2Up
CisgICAgICAgICwgbV9oYXNEaXJlY3RTdXBlcihmYWxzZSkKICAgICAgICAgLCBtX2FsbG93c05l
d0RlY2xzKHRydWUpCiAgICAgICAgICwgbV9zdHJpY3RNb2RlKHN0cmljdE1vZGUpCiAgICAgICAg
ICwgbV9pc0Z1bmN0aW9uKGlzRnVuY3Rpb24pCkBAIC0xMjgsNiArMTI5LDcgQEAgc3RydWN0IFNj
b3BlIHsKICAgICAgICAgLCBtX3NoYWRvd3NBcmd1bWVudHMocmhzLm1fc2hhZG93c0FyZ3VtZW50
cykKICAgICAgICAgLCBtX3VzZXNFdmFsKHJocy5tX3VzZXNFdmFsKQogICAgICAgICAsIG1fbmVl
ZHNGdWxsQWN0aXZhdGlvbihyaHMubV9uZWVkc0Z1bGxBY3RpdmF0aW9uKQorICAgICAgICAsIG1f
aGFzRGlyZWN0U3VwZXIocmhzLm1faGFzRGlyZWN0U3VwZXIpCiAgICAgICAgICwgbV9hbGxvd3NO
ZXdEZWNscyhyaHMubV9hbGxvd3NOZXdEZWNscykKICAgICAgICAgLCBtX3N0cmljdE1vZGUocmhz
Lm1fc3RyaWN0TW9kZSkKICAgICAgICAgLCBtX2lzRnVuY3Rpb24ocmhzLm1faXNGdW5jdGlvbikK
QEAgLTI2Myw2ICsyNjUsMTMgQEAgc3RydWN0IFNjb3BlIHsKIAogICAgIHZvaWQgc2V0TmVlZHNG
dWxsQWN0aXZhdGlvbigpIHsgbV9uZWVkc0Z1bGxBY3RpdmF0aW9uID0gdHJ1ZTsgfQogCisjaWYg
RU5BQkxFKEVTNl9DTEFTU19TWU5UQVgpCisgICAgYm9vbCBoYXNEaXJlY3RTdXBlcigpIHsgcmV0
dXJuIG1faGFzRGlyZWN0U3VwZXI7IH0KKyNlbHNlCisgICAgYm9vbCBoYXNEaXJlY3RTdXBlcigp
IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKyAgICB2b2lkIHNldEhhc0RpcmVjdFN1cGVyKCkg
eyBtX2hhc0RpcmVjdFN1cGVyID0gdHJ1ZTsgfQorCiAgICAgYm9vbCBjb2xsZWN0RnJlZVZhcmlh
YmxlcyhTY29wZSogbmVzdGVkU2NvcGUsIGJvb2wgc2hvdWxkVHJhY2tDbG9zZWRWYXJpYWJsZXMp
CiAgICAgewogICAgICAgICBpZiAobmVzdGVkU2NvcGUtPm1fdXNlc0V2YWwpCkBAIC0zNTYsNiAr
MzY1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hhZG93c0FyZ3VtZW50cyA6IDE7CiAgICAg
Ym9vbCBtX3VzZXNFdmFsIDogMTsKICAgICBib29sIG1fbmVlZHNGdWxsQWN0aXZhdGlvbiA6IDE7
CisgICAgYm9vbCBtX2hhc0RpcmVjdFN1cGVyIDogMTsKICAgICBib29sIG1fYWxsb3dzTmV3RGVj
bHMgOiAxOwogICAgIGJvb2wgbV9zdHJpY3RNb2RlIDogMTsKICAgICBib29sIG1faXNGdW5jdGlv
biA6IDE7CkBAIC03MzgsOCArNzQ4LDggQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUFyZ3VtZW50cyBwYXJzZUFyZ3VtZW50cyhU
cmVlQnVpbGRlciYsIFNwcmVhZE1vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVByb3BlcnR5IHBhcnNlUHJvcGVydHkoVHJlZUJ1aWxkZXImLCBib29sIHN0cmljdCk7
CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBwYXJzZVBy
b3BlcnR5TWV0aG9kKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiBtZXRo
b2ROYW1lKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVQcm9wZXJ0eSBw
YXJzZUdldHRlclNldHRlcihUcmVlQnVpbGRlciYsIGJvb2wgc3RyaWN0LCBQcm9wZXJ0eU5vZGU6
OlR5cGUsIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQpOwotICAgIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRnVuY3Rpb25Cb2R5IHBhcnNl
RnVuY3Rpb25Cb2R5KFRyZWVCdWlsZGVyJik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlUHJvcGVydHkgcGFyc2VHZXR0ZXJTZXR0ZXIoVHJlZUJ1aWxkZXImLCBib29sIHN0
cmljdCwgUHJvcGVydHlOb2RlOjpUeXBlLCB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zm
c2V0LCBTdXBlckJpbmRpbmcgPSBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCk7CisgICAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5jdGlvbkJvZHkgcGFy
c2VGdW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImLCBDb25zdHJ1Y3RvcktpbmQpOwogICAgIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBUcmVlRm9ybWFsUGFyYW1ldGVy
TGlzdCBwYXJzZUZvcm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXImKTsKICAgICBlbnVtIFZhckRl
Y2xhcmF0aW9uTGlzdENvbnRleHQgeyBGb3JMb29wQ29udGV4dCwgVmFyRGVjbGFyYXRpb25Db250
ZXh0IH07CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBw
YXJzZVZhckRlY2xhcmF0aW9uTGlzdChUcmVlQnVpbGRlciYsIGludCYgZGVjbGFyYXRpb25zLCBU
cmVlRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuJiBsYXN0UGF0dGVybiwgVHJlZUV4cHJlc3Npb24mIGxh
c3RJbml0aWFsaXplciwgSlNUZXh0UG9zaXRpb24mIGlkZW50U3RhcnQsIEpTVGV4dFBvc2l0aW9u
JiBpbml0U3RhcnQsIEpTVGV4dFBvc2l0aW9uJiBpbml0RW5kLCBWYXJEZWNsYXJhdGlvbkxpc3RD
b250ZXh0KTsKQEAgLTc0OSw3ICs3NTksNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gTkVWRVJfSU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gcGFy
c2VEZWNvbnN0cnVjdGlvblBhdHRlcm4oVHJlZUJ1aWxkZXImLCBEZWNvbnN0cnVjdGlvbktpbmQs
IGludCBkZXB0aCA9IDApOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gTkVWRVJf
SU5MSU5FIFRyZWVEZWNvbnN0cnVjdGlvblBhdHRlcm4gdHJ5UGFyc2VEZWNvbnN0cnVjdGlvblBh
dHRlcm5FeHByZXNzaW9uKFRyZWVCdWlsZGVyJik7CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IE5FVkVSX0lOTElORSBib29sIHBhcnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZGVy
JiwgRnVuY3Rpb25SZXF1aXJlbWVudHMsIEZ1bmN0aW9uUGFyc2VNb2RlLCBib29sIG5hbWVJc0lu
Q29udGFpbmluZ1Njb3BlLCBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+Jik7CisgICAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgYm9vbCBwYXJzZUZ1bmN0
aW9uSW5mbyhUcmVlQnVpbGRlciYsIEZ1bmN0aW9uUmVxdWlyZW1lbnRzLCBGdW5jdGlvblBhcnNl
TW9kZSwgYm9vbCBuYW1lSXNJbkNvbnRhaW5pbmdTY29wZSwgQ29uc3RydWN0b3JLaW5kLCBQYXJz
ZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+Jik7CiAjaWYgRU5BQkxFKEVTNl9DTEFTU19TWU5U
QVgpCiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBORVZFUl9JTkxJTkUgVHJlZUNs
YXNzRXhwcmVzc2lvbiBwYXJzZUNsYXNzKFRyZWVCdWlsZGVyJiwgRnVuY3Rpb25SZXF1aXJlbWVu
dHMpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1v
ZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJN
b2Rlcy5oCShyZXZpc2lvbiAxODEyODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlck1vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiBlbnVtIEpTUGFyc2VyU3RyaWN0bmVzcyB7IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VC
dWlsdGluLCBKU1BhcnNlU3RyaWN0IH07CiBlbnVtIEpTUGFyc2VyTW9kZSB7IEpTUGFyc2VQcm9n
cmFtQ29kZSwgSlNQYXJzZUZ1bmN0aW9uQ29kZSB9OwogCitlbnVtIGNsYXNzIENvbnN0cnVjdG9y
S2luZCB7IEJhc2UsIERlcml2ZWQgfTsKK2VudW0gY2xhc3MgU3VwZXJCaW5kaW5nIHsgTmVlZGVk
LCBOb3ROZWVkZWQgfTsKKwogZW51bSBQcm9maWxlck1vZGUgeyBQcm9maWxlck9mZiwgUHJvZmls
ZXJPbiB9OwogZW51bSBEZWJ1Z2dlck1vZGUgeyBEZWJ1Z2dlck9mZiwgRGVidWdnZXJPbiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAko
cmV2aXNpb24gMTgxMjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhD
aGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIGVu
dW0geyBOb25lRXhwciA9IDAsCiAgICAgICAgIFJlc29sdmVFdmFsRXhwciwgUmVzb2x2ZUV4cHIs
IEludGVnZXJFeHByLCBEb3VibGVFeHByLCBTdHJpbmdFeHByLAogICAgICAgICBUaGlzRXhwciwg
TnVsbEV4cHIsIEJvb2xFeHByLCBSZWdFeHBFeHByLCBPYmplY3RMaXRlcmFsRXhwciwKLSAgICAg
ICAgRnVuY3Rpb25FeHByLCBDbGFzc0V4cHIsIEJyYWNrZXRFeHByLCBEb3RFeHByLCBDYWxsRXhw
ciwKKyAgICAgICAgRnVuY3Rpb25FeHByLCBDbGFzc0V4cHIsIFN1cGVyRXhwciwgQnJhY2tldEV4
cHIsIERvdEV4cHIsIENhbGxFeHByLAogICAgICAgICBOZXdFeHByLCBQcmVFeHByLCBQb3N0RXhw
ciwgVW5hcnlFeHByLCBCaW5hcnlFeHByLAogICAgICAgICBDb25kaXRpb25hbEV4cHIsIEFzc2ln
bm1lbnRFeHByLCBUeXBlb2ZFeHByLAogICAgICAgICBEZWxldGVFeHByLCBBcnJheUxpdGVyYWxF
eHByLCBCaW5kaW5nRGVjb25zdHJ1Y3Rpb24sCkBAIC0xNDYsNiArMTQ2LDcgQEAgcHVibGljOgog
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVVuYXJ5UGx1cyhjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlVm9pZChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyBy
ZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgdGhpc0V4cHIoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJikgeyByZXR1cm4gVGhpc0V4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBz
dXBlckV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gU3VwZXJFeHByOyB9CiAg
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlUmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBj
b25zdCBJZGVudGlmaWVyKiwgaW50KSB7IHJldHVybiBSZXNvbHZlRXhwcjsgfQogICAgIEV4cHJl
c3Npb25UeXBlIGNyZWF0ZU9iamVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyBy
ZXR1cm4gT2JqZWN0TGl0ZXJhbEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVPYmpl
Y3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCkgeyByZXR1cm4gT2JqZWN0TGl0
ZXJhbEV4cHI7IH0KQEAgLTE2OCwxNCArMTY5LDE0IEBAIHB1YmxpYzoKICAgICBDbGFzc0V4cHJl
c3Npb24gY3JlYXRlQ2xhc3NFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50
aWZpZXImLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIFByb3BlcnR5TGlzdCwgUHJv
cGVydHlMaXN0KSB7IHJldHVybiBDbGFzc0V4cHI7IH0KICNlbmRpZgogICAgIEV4cHJlc3Npb25U
eXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBQYXJz
ZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCBpbnQpIHsgcmV0dXJuIEZ1bmN0aW9uRXhw
cjsgfQotICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGJvb2wpIHsgcmV0dXJuIEZ1bmN0aW9u
Qm9keVJlc3VsdDsgfQorICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50LCBpbnQsIGJvb2wsIENvbnN0cnVj
dG9yS2luZCkgeyByZXR1cm4gRnVuY3Rpb25Cb2R5UmVzdWx0OyB9CiAgICAgdm9pZCBzZXRGdW5j
dGlvbk5hbWVTdGFydChpbnQsIGludCkgeyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50cygpIHsg
cmV0dXJuIEFyZ3VtZW50c1Jlc3VsdDsgfQogICAgIGludCBjcmVhdGVBcmd1bWVudHMoaW50KSB7
IHJldHVybiBBcmd1bWVudHNSZXN1bHQ7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVTcHJl
YWRFeHByZXNzaW9uKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBpbnQs
IGludCwgaW50KSB7IHJldHVybiBTcHJlYWRFeHByOyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50
c0xpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50KSB7IHJldHVybiBBcmd1bWVudHNMaXN0
UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50c0xpc3QoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgaW50LCBpbnQpIHsgcmV0dXJuIEFyZ3VtZW50c0xpc3RSZXN1bHQ7IH0KLSAgICBQcm9w
ZXJ0eSBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBpbnQsIFByb3BlcnR5
Tm9kZTo6VHlwZSB0eXBlLCBQcm9wZXJ0eU5vZGU6OlB1dFR5cGUsIGJvb2wgY29tcGxldGUpCisg
ICAgUHJvcGVydHkgY3JlYXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciogbmFtZSwgaW50LCBQ
cm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwgUHJvcGVydHlOb2RlOjpQdXRUeXBlLCBib29sIGNvbXBs
ZXRlLCBTdXBlckJpbmRpbmcgPSBTdXBlckJpbmRpbmc6Ok5vdE5lZWRlZCkKICAgICB7CiAgICAg
ICAgIGlmICghY29tcGxldGUpCiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkodHlwZSk7CkBA
IC0yMzAsMTQgKzIzMSwxNCBAQCBwdWJsaWM6CiAgICAgaW50IGNyZWF0ZURlYnVnZ2VyKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwgaW50KSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0K
ICAgICBpbnQgY3JlYXRlQ29uc3RTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50
LCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAgICAgaW50IGFwcGVuZENv
bnN0RGVjbChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQsIGNvbnN0IElkZW50aWZpZXIqLCBp
bnQpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQotICAgIFByb3BlcnR5IGNyZWF0ZUdldHRl
ck9yU2V0dGVyUHJvcGVydHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2RlOjpU
eXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBjb25zdCBQYXJz
ZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCB1bnNpZ25lZCkKKyAgICBQcm9wZXJ0eSBj
cmVhdGVHZXR0ZXJPclNldHRlclByb3BlcnR5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3Bl
cnR5Tm9kZTo6VHlwZSB0eXBlLCBib29sIHN0cmljdCwgY29uc3QgSWRlbnRpZmllciogbmFtZSwg
Y29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgdW5zaWduZWQsIFN1cGVy
QmluZGluZykKICAgICB7CiAgICAgICAgIEFTU0VSVChuYW1lKTsKICAgICAgICAgaWYgKCFzdHJp
Y3QpCiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkodHlwZSk7CiAgICAgICAgIHJldHVybiBQ
cm9wZXJ0eShuYW1lLCB0eXBlKTsKICAgICB9Ci0gICAgUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JT
ZXR0ZXJQcm9wZXJ0eShWTSogdm0sIFBhcnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBkb3Vi
bGUgbmFtZSwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgdW5zaWdu
ZWQpCisgICAgUHJvcGVydHkgY3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eShWTSogdm0sIFBh
cnNlckFyZW5hJiBwYXJzZXJBcmVuYSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVydHlO
b2RlOjpUeXBlIHR5cGUsIGJvb2wgc3RyaWN0LCBkb3VibGUgbmFtZSwgY29uc3QgUGFyc2VyRnVu
Y3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgdW5zaWduZWQsIFN1cGVyQmluZGluZykKICAgICB7
CiAgICAgICAgIGlmICghc3RyaWN0KQogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVu
dGlmaWVycy5oCShyZXZpc2lvbiAxODEyODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25JZGVudGlmaWVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDgg
QEAKICAgICBtYWNybyhpc0Zpbml0ZSkgXAogICAgIG1hY3JvKFR5cGVFcnJvcikgXAogICAgIG1h
Y3JvKHVuZGVmaW5lZCkgXAotICAgIG1hY3JvKEJ1aWx0aW5Mb2cpCisgICAgbWFjcm8oQnVpbHRp
bkxvZykgXAorICAgIG1hY3JvKGhvbWVPYmplY3QpCiAKIG5hbWVzcGFjZSBKU0MgewogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNp
b24gMTgxMjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNyArNDY3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBj
bGVhckNvZGUoKTsKIAotICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3Qg
eyByZXR1cm4gRXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlz
U3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFsc2UpOyB9CisgICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0
YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24o
KSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSwgZmFsc2UpOyB9CiAK
ICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMoKSB7IHJldHVybiBtX3VubGlua2VkRXZhbENvZGVC
bG9jay0+bnVtVmFyaWFibGVzKCk7IH0KICAgICB1bnNpZ25lZCBudW1iZXJPZkZ1bmN0aW9uRGVj
bHMoKSB7IHJldHVybiBtX3VubGlua2VkRXZhbENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRl
Y2xzKCk7IH0KQEAgLTUyMiw3ICs1MjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyQ29k
ZSgpOwogCi0gICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVy
biBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RN
b2RlKCksIGZhbHNlLCBmYWxzZSk7IH0KKyAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5m
bygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2Vz
RXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7IH0KIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE4MTI4MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIwIEBACisyMDE1LTAzLTA5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFN1cHBvcnQgZXh0ZW5kcyBhbmQgc3VwZXIga2V5d29yZHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjIwMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRlc3RzIGZvciAiZXh0
ZW5kcyIgYW5kICJzdXBlciIga2V5d29yZHMuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25z
OgorICAgICAgICAqIGpzL2NsYXNzLXN5bnRheC1leHRlbmRzLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICoganMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuaHRtbDogQWRkZWQuCisgICAgICAg
ICoganMvY2xhc3Mtc3ludGF4LXN1cGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
anMvY2xhc3Mtc3ludGF4LXN1cGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3NjcmlwdC10
ZXN0cy9jbGFzcy1zeW50YXgtZXh0ZW5kcy5qczogQWRkZWQuCisgICAgICAgICoganMvc2NyaXB0
LXRlc3RzL2NsYXNzLXN5bnRheC1zdXBlci5qczogQWRkZWQuCisKIDIwMTUtMDMtMDkgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBXb3JrIGFyb3Vu
ZCBhIENvY29hIGZvbnQgcGFyc2luZyBidWcKSW5kZXg6IExheW91dFRlc3RzL1Rlc3RFeHBlY3Rh
dGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNp
b24gMTgxMjgxKQorKysgTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5
KQpAQCAtNjksNiArNjksOCBAQCB3ZWJraXQub3JnL2IvMTI3ODYwIFsgRGVidWcgXSBqcy9mdW5j
dGlvCiAjIEVTNiBjbGFzcyBzeW50YXggaGFzbid0IGJlZW4gZW5hYmxlZCB5ZXQuCiB3ZWJraXQu
b3JnL2IvMTQwNDkxIGpzL2NsYXNzLXN5bnRheC1kZWNsYXJhdGlvbi5odG1sIFsgRmFpbHVyZSBd
CiB3ZWJraXQub3JnL2IvMTQwNDkxIGpzL2NsYXNzLXN5bnRheC1leHByZXNzaW9uLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xNDA0OTEganMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzE0MDQ5MSBqcy9jbGFzcy1zeW50YXgtc3VwZXIu
aHRtbCBbIEZhaWx1cmUgXQogCiAjIFRoaXMgdGVzdCB2ZXJpZmllcyBkeW5hbWljIG1hbmlwdWxh
dGlvbiBvZiB0aGUgbXJvb3QgYW5kIG1zcXJ0IGVsZW1lbnRzLgogbWF0aG1sL3Jvb3RzLXJlbW92
ZUNoaWxkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KSW5kZXg6IExheW91dFRlc3RzL2pzL2Ns
YXNzLXN5bnRheC1leHRlbmRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9jbGFzcy1zeW50YXgtZXh0ZW5kcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtZXh0ZW5kcy1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMSBAQAorVGVzdHMgZm9yIEVTNiBjbGFzcyBzeW50YXggImV4dGVu
ZHMiCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIChuZXcgQmFzZSkgaW5z
dGFuY2VvZiBCYXNlIGlzIHRydWUKK1BBU1MgKG5ldyBEZXJpdmVkKSBpbnN0YW5jZW9mIERlcml2
ZWQgaXMgdHJ1ZQorUEFTUyAobmV3IERlcml2ZWQpLmJhc2VNZXRob2QoKSBpcyAiYmFzZSIKK1BB
U1MgKG5ldyBEZXJpdmVkKS5vdmVycmlkZW5NZXRob2QoKSBpcyAiZGVyaXZlZCIKK1BBU1MgRGVy
aXZlZC5zdGF0aWNCYXNlTWV0aG9kKCkgaXMgImJhc2UiCitQQVNTIERlcml2ZWQuc3RhdGljT3Zl
cnJpZGVuTWV0aG9kKCkgaXMgImRlcml2ZWQiCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIHRocmV3
IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQgb2Ygc2NyaXB0LgorUEFTUyB4
ID0gY2xhc3MgZXh0ZW5kcyB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQg
ZW5kIG9mIHNjcmlwdC4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IHRocmV3IGV4Y2Vw
dGlvbiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQgb2Ygc2NyaXB0LgorUEFTUyB4ID0gY2xh
c3MgZXh0ZW5kcyBCYXNlIHt9IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogQ2xhc3MgZGVj
bGFyYXRpb24gd2l0aG91dCBhIGNvbnN0cnVjdG9yIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Li4KK1BB
U1MgeCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0gZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24uCitQQVNTIHguX19wcm90b19fIGlzIEJhc2UKK1BBU1MgeC5wcm90b3R5
cGUuX19wcm90b19fIGlzIEJhc2UucHJvdG90eXBlCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIG51
bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXyBpcyBGdW5jdGlvbi5wcm90b3R5
cGUKK1BBU1MgeC5fX3Byb3RvX18gaXMgRnVuY3Rpb24ucHJvdG90eXBlCitQQVNTIHggPSBjbGFz
cyBleHRlbmRzIDMgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXyB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcyBpcyBub3QgYW4gb2JqZWN0Li4KK1BBU1Mg
eCA9IGNsYXNzIGV4dGVuZHMgImFiYyIgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9f
XyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcyBpcyBub3QgYW4gb2Jq
ZWN0Li4KK2Jhc2VXaXRoQmFkUHJvdG90eXBlID0gY2xhc3MgeyBjb25zdHJ1Y3RvcigpIHsgfSB9
OyBiYXNlV2l0aEJhZFByb3RvdHlwZS5wcm90b3R5cGUgPSAzCitQQVNTIHggPSBjbGFzcyBleHRl
bmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3IoKSB7IH0gfSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcydzIHByb3RvdHlwZSBpcyBub3QgYW4gb2Jq
ZWN0Li4KK2Jhc2VXaXRoQmFkUHJvdG90eXBlLnByb3RvdHlwZSA9ICJhYmMiCitQQVNTIHggPSBj
bGFzcyBleHRlbmRzIGJhc2VXaXRoQmFkUHJvdG90eXBlIHsgY29uc3RydWN0b3IoKSB7IH0gfSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUaGUgc3VwZXJjbGFzcydzIHByb3RvdHlwZSBpcyBu
b3QgYW4gb2JqZWN0Li4KK1BBU1MgYmFzZVdpdGhCYWRQcm90b3R5cGUucHJvdG90eXBlID0gbnVs
bDsgeCA9IGNsYXNzIGV4dGVuZHMgYmFzZVdpdGhCYWRQcm90b3R5cGUgeyBjb25zdHJ1Y3Rvcigp
IHsgfSB9IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL2NsYXNzLXN5
bnRheC1leHRlbmRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3lu
dGF4LWV4dGVuZHMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL2NsYXNzLXN5
bnRheC1leHRlbmRzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvY2xhc3Mtc3lu
dGF4LWV4dGVuZHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvanMvY2xhc3Mtc3ludGF4LXN1cGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9jbGFzcy1zeW50YXgtc3VwZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LXN1cGVyLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACitUZXN0cyBmb3IgRVM2IGNsYXNzIHN5bnRheCAic3Vw
ZXIiCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIChuZXcgQmFzZSkgaW5z
dGFuY2VvZiBCYXNlIGlzIHRydWUKK1BBU1MgKG5ldyBEZXJpdmVkKSBpbnN0YW5jZW9mIERlcml2
ZWQgaXMgdHJ1ZQorUEFTUyAobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kKCkgaXMgYmFzZU1l
dGhvZFZhbHVlCitQQVNTIHggPSAobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kOyB4KCkgaXMg
YmFzZU1ldGhvZFZhbHVlCitQQVNTIChuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRob2RJbkdldHRl
ciBpcyBiYXNlTWV0aG9kVmFsdWUKK1BBU1MgKG5ldyBEZXJpdmVkKS5jYWxsQmFzZU1ldGhvZElu
U2V0dGVyID0gMTsgdmFsdWVJblNldHRlciBpcyBiYXNlTWV0aG9kVmFsdWUKK1BBU1MgKG5ldyBE
ZXJpdmVkKS5iYXNlTWV0aG9kSW5HZXR0ZXJTZXR0ZXIgaXMgKG5ldyBCYXNlKS5iYXNlTWV0aG9k
CitQQVNTIChuZXcgRGVyaXZlZCkuYmFzZU1ldGhvZEluR2V0dGVyU2V0dGVyID0gMTsgdmFsdWVJ
blNldHRlciBpcyAobmV3IEJhc2UpLmJhc2VNZXRob2QKK1BBU1MgRGVyaXZlZC5zdGF0aWNNZXRo
b2QoKSBpcyAiYmFzZTMiCitQQVNTIChuZXcgU2Vjb25kRGVyaXZlZCkuY2hhaW5NZXRob2QoKSBp
cyBbImJhc2UiLCAiZGVyaXZlZCIsICJzZWNvbmREZXJpdmVkIl0KK1BBU1MgeCA9IGNsYXNzIGV4
dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IHN1cGVyKCkge30gfSB0aHJl
dyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQga2V5d29yZCAnc3VwZXInLiBFeHBl
Y3RlZCBhbiBpbmRlbnRpZmllci4uCitQQVNTIHggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25z
dHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBtZXRob2QoKSB7IHN1cGVyKCkgfSB9IHRocmV3IGV4Y2Vw
dGlvbiBTeW50YXhFcnJvcjogQ2Fubm90IGNhbGwgc3VwZXIoKSBvdXRzaWRlIG9mIGEgY2xhc3Mg
Y29uc3RydWN0b3IuLgorUEFTUyB4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3Io
KSB7IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyBzdXBlciB9IH0gdGhyZXcgZXhjZXB0aW9uIFN5bnRh
eEVycm9yOiBDYW5ub3QgcmVmZXJlbmNlIHN1cGVyLi4KK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMg
QmFzZSB7IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IG1ldGhvZCgpIHsgcmV0dXJuIG5ldyBz
dXBlciB9IH0gZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIChuZXcgeCkubWV0aG9kKCkg
aW5zdGFuY2VvZiBCYXNlIGlzIHRydWUKK1BBU1MgKG5ldyB4KS5tZXRob2QoKSBpbnN0YW5jZW9m
IHggaXMgZmFsc2UKK1BBU1MgeCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkg
eyBzdXBlcigpOyB9IG1ldGhvZDEoKSB7IGRlbGV0ZSAoc3VwZXIuZm9vKSB9IG1ldGhvZDIoKSB7
IGRlbGV0ZSBzdXBlclsiZm9vIl0gfSB9IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyAo
bmV3IHgpLm1ldGhvZDEoKSB0aHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENhbm5vdCBk
ZWxldGUgYSBzdXBlciBwcm9wZXJ0eS4KK1BBU1MgKG5ldyB4KS5tZXRob2QyKCkgdGhyZXcgZXhj
ZXB0aW9uIFJlZmVyZW5jZUVycm9yOiBDYW5ub3QgZGVsZXRlIGEgc3VwZXIgcHJvcGVydHkuCitQ
QVNTIG5ldyAoY2xhc3MgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSB9KSBp
bnN0YW5jZW9mIE9iamVjdCBpcyB0cnVlCitQQVNTIG5ldyAoY2xhc3MgeyBjb25zdHJ1Y3Rvcigp
IHsgcmV0dXJuIDE7IH0gfSkgaW5zdGFuY2VvZiBPYmplY3QgaXMgdHJ1ZQorUEFTUyBuZXcgKGNs
YXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkIH0gfSkg
aXMgdW5kZWZpbmVkCitQQVNTIHggPSB7IH07IG5ldyAoY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29u
c3RydWN0b3IoKSB7IHJldHVybiB4IH0gfSk7IGlzIHgKK1BBU1MgeCBpbnN0YW5jZW9mIEJhc2Ug
aXMgZmFsc2UKK1BBU1MgbmV3IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsg
fSB9KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW5ub3QgcmV0dXJuIGEgbm9uLW9iamVj
dCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xhc3MuLgorUEFTUyBuZXcg
KGNsYXNzIGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gMTsgfSB9KSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW5ub3QgcmV0dXJuIGEgbm9uLW9iamVjdCB0eXBlIGlu
IHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2ZWQgY2xhc3MuLgorUEFTUyBuZXcgKGNsYXNzIGV4
dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkIH0gfSkgaXMgdW5k
ZWZpbmVkCitQQVNTIHggPSB7IH07IG5ldyAoY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0
b3IoKSB7IHJldHVybiB4IH0gfSk7IGlzIHgKK1BBU1MgeCBpbnN0YW5jZW9mIE9iamVjdCBpcyB0
cnVlCitQQVNTIG5ldyAoY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29uc3RydWN0b3IoKSB7IH0gfSkg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5vbi1vYmplY3QgdHlw
ZSBpbiB0aGUgY29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLi4KK1BBU1MgbmV3IChjbGFz
cyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIDE7IH0gfSkgdGhyZXcgZXhj
ZXB0aW9uIFR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5vbi1vYmplY3QgdHlwZSBpbiB0aGUg
Y29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLi4KK1BBU1MgbmV3IChjbGFzcyBleHRlbmRz
IG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKSB9IH0pIGRpZCBub3QgdGhyb3cgZXhjZXB0
aW9uLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL2NsYXNzLXN5bnRheC1zdXBlci5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvY2xhc3Mtc3ludGF4LXN1cGVyLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvY2xhc3Mtc3ludGF4LXN1cGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jbGFzcy1zeW50YXgtZXh0
ZW5kcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2xhc3Mt
c3ludGF4LWV4dGVuZHMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQt
dGVzdHMvY2xhc3Mtc3ludGF4LWV4dGVuZHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MyBAQAorLy9AIHNraXAKKworZGVzY3JpcHRpb24oJ1Rlc3RzIGZvciBFUzYgY2xhc3Mgc3ludGF4
ICJleHRlbmRzIicpOworCitjbGFzcyBCYXNlIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsgfQorICAg
IGJhc2VNZXRob2QoKSB7IHJldHVybiAnYmFzZSc7IH0KKyAgICBvdmVycmlkZW5NZXRob2QoKSB7
IHJldHVybiAnYmFzZSc7IH0KKyAgICBzdGF0aWMgc3RhdGljQmFzZU1ldGhvZCgpIHsgcmV0dXJu
ICdiYXNlJzsgfQorICAgIHN0YXRpYyBzdGF0aWNPdmVycmlkZW5NZXRob2QoKSB7IHJldHVybiAn
YmFzZSc7IH0KK30KKworY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2UgeworICAgIGNvbnN0cnVj
dG9yKCkgeyBzdXBlcigpOyB9CisgICAgb3ZlcnJpZGVuTWV0aG9kKCkgeyByZXR1cm4gJ2Rlcml2
ZWQnOyB9CisgICAgc3RhdGljIHN0YXRpY092ZXJyaWRlbk1ldGhvZCgpIHsgcmV0dXJuICdkZXJp
dmVkJzsgfQorfQorCitzaG91bGRCZVRydWUoJyhuZXcgQmFzZSkgaW5zdGFuY2VvZiBCYXNlJyk7
CitzaG91bGRCZVRydWUoJyhuZXcgRGVyaXZlZCkgaW5zdGFuY2VvZiBEZXJpdmVkJyk7CitzaG91
bGRCZSgnKG5ldyBEZXJpdmVkKS5iYXNlTWV0aG9kKCknLCAnImJhc2UiJyk7CitzaG91bGRCZSgn
KG5ldyBEZXJpdmVkKS5vdmVycmlkZW5NZXRob2QoKScsICciZGVyaXZlZCInKTsKK3Nob3VsZEJl
KCdEZXJpdmVkLnN0YXRpY0Jhc2VNZXRob2QoKScsICciYmFzZSInKTsKK3Nob3VsZEJlKCdEZXJp
dmVkLnN0YXRpY092ZXJyaWRlbk1ldGhvZCgpJywgJyJkZXJpdmVkIicpOworCitzaG91bGRUaHJv
dygneCA9IGNsYXNzIGV4dGVuZHMnLCAnIlN5bnRheEVycm9yOiBVbmV4cGVjdGVkIGVuZCBvZiBz
Y3JpcHQiJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMnLCAnIlN5bnRheEVycm9y
OiBVbmV4cGVjdGVkIGVuZCBvZiBzY3JpcHQiJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4
dGVuZHMgQmFzZSB7JywgJyJTeW50YXhFcnJvcjogVW5leHBlY3RlZCBlbmQgb2Ygc2NyaXB0Iicp
Oworc2hvdWxkVGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJhc2Uge30nLCAnIlN5bnRheEVycm9y
OiBDbGFzcyBkZWNsYXJhdGlvbiB3aXRob3V0IGEgY29uc3RydWN0b3IgaXMgbm90IHN1cHBvcnRl
ZCB5ZXQuIicpOworc2hvdWxkTm90VGhyb3coJ3ggPSBjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25z
dHJ1Y3RvcigpIHsgfSB9Jyk7CitzaG91bGRCZSgneC5fX3Byb3RvX18nLCAnQmFzZScpOworc2hv
dWxkQmUoJ3gucHJvdG90eXBlLl9fcHJvdG9fXycsICdCYXNlLnByb3RvdHlwZScpOworc2hvdWxk
QmUoJ3ggPSBjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJv
dG9fXycsICdGdW5jdGlvbi5wcm90b3R5cGUnKTsKK3Nob3VsZEJlKCd4Ll9fcHJvdG9fXycsICdG
dW5jdGlvbi5wcm90b3R5cGUnKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyAzIHsg
Y29uc3RydWN0b3IoKSB7IH0gfTsgeC5fX3Byb3RvX18nLCAnIlR5cGVFcnJvcjogVGhlIHN1cGVy
Y2xhc3MgaXMgbm90IGFuIG9iamVjdC4iJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVu
ZHMgImFiYyIgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyB4Ll9fcHJvdG9fXycsICciVHlwZUVycm9y
OiBUaGUgc3VwZXJjbGFzcyBpcyBub3QgYW4gb2JqZWN0LiInKTsKK2V2YWxBbmRMb2coJ2Jhc2VX
aXRoQmFkUHJvdG90eXBlID0gY2xhc3MgeyBjb25zdHJ1Y3RvcigpIHsgfSB9OyBiYXNlV2l0aEJh
ZFByb3RvdHlwZS5wcm90b3R5cGUgPSAzJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVu
ZHMgYmFzZVdpdGhCYWRQcm90b3R5cGUgeyBjb25zdHJ1Y3RvcigpIHsgfSB9JywgJyJUeXBlRXJy
b3I6IFRoZSBzdXBlcmNsYXNzXCdzIHByb3RvdHlwZSBpcyBub3QgYW4gb2JqZWN0LiInKTsKK2V2
YWxBbmRMb2coJ2Jhc2VXaXRoQmFkUHJvdG90eXBlLnByb3RvdHlwZSA9ICJhYmMiJyk7CitzaG91
bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMgYmFzZVdpdGhCYWRQcm90b3R5cGUgeyBjb25zdHJ1
Y3RvcigpIHsgfSB9JywgJyJUeXBlRXJyb3I6IFRoZSBzdXBlcmNsYXNzXCdzIHByb3RvdHlwZSBp
cyBub3QgYW4gb2JqZWN0LiInKTsKK3Nob3VsZE5vdFRocm93KCdiYXNlV2l0aEJhZFByb3RvdHlw
ZS5wcm90b3R5cGUgPSBudWxsOyB4ID0gY2xhc3MgZXh0ZW5kcyBiYXNlV2l0aEJhZFByb3RvdHlw
ZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0nKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2xhc3Mtc3ludGF4LXN1cGVy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jbGFzcy1zeW50
YXgtc3VwZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMv
Y2xhc3Mtc3ludGF4LXN1cGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8v
QCBza2lwCisKK2Rlc2NyaXB0aW9uKCdUZXN0cyBmb3IgRVM2IGNsYXNzIHN5bnRheCAic3VwZXIi
Jyk7CisKK3ZhciBiYXNlTWV0aG9kVmFsdWUgPSB7fTsKK3ZhciB2YWx1ZUluU2V0dGVyID0gbnVs
bDsKKworY2xhc3MgQmFzZSB7CisgICAgY29uc3RydWN0b3IoKSB7IH0KKyAgICBiYXNlTWV0aG9k
KCkgeyByZXR1cm4gYmFzZU1ldGhvZFZhbHVlOyB9CisgICAgY2hhaW5NZXRob2QoKSB7IHJldHVy
biAnYmFzZSc7IH0KKyAgICBzdGF0aWMgc3RhdGljTWV0aG9kKCkgeyByZXR1cm4gJ2Jhc2UzJzsg
fQorfQorCitjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7CisgICAgY29uc3RydWN0b3IoKSB7
IHN1cGVyKCk7IH0KKyAgICBjaGFpbk1ldGhvZCgpIHsgcmV0dXJuIFtzdXBlci5jaGFpbk1ldGhv
ZCgpLCAnZGVyaXZlZCddOyB9CisgICAgY2FsbEJhc2VNZXRob2QoKSB7IHJldHVybiBzdXBlci5i
YXNlTWV0aG9kKCk7IH0KKyAgICBnZXQgY2FsbEJhc2VNZXRob2RJbkdldHRlcigpIHsgcmV0dXJu
IHN1cGVyWydiYXNlTWV0aG9kJ10oKTsgfQorICAgIHNldCBjYWxsQmFzZU1ldGhvZEluU2V0dGVy
KCkgeyB3aW5kb3cudmFsdWVJblNldHRlciA9IHN1cGVyLmJhc2VNZXRob2QoKTsgfQorICAgIGdl
dCBiYXNlTWV0aG9kSW5HZXR0ZXJTZXR0ZXIoKSB7IHJldHVybiBzdXBlci5iYXNlTWV0aG9kOyB9
CisgICAgc2V0IGJhc2VNZXRob2RJbkdldHRlclNldHRlcigpIHsgd2luZG93LnZhbHVlSW5TZXR0
ZXIgPSBzdXBlclsnYmFzZU1ldGhvZCddOyB9CisgICAgc3RhdGljIHN0YXRpY01ldGhvZCgpIHsg
cmV0dXJuIHN1cGVyLnN0YXRpY01ldGhvZCgpOyB9Cit9CisKK2NsYXNzIFNlY29uZERlcml2ZWQg
ZXh0ZW5kcyBEZXJpdmVkIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfQorICAgIGNo
YWluTWV0aG9kKCkgeyByZXR1cm4gc3VwZXIuY2hhaW5NZXRob2QoKS5jb25jYXQoWydzZWNvbmRE
ZXJpdmVkJ10pOyB9Cit9CisKK3Nob3VsZEJlVHJ1ZSgnKG5ldyBCYXNlKSBpbnN0YW5jZW9mIEJh
c2UnKTsKK3Nob3VsZEJlVHJ1ZSgnKG5ldyBEZXJpdmVkKSBpbnN0YW5jZW9mIERlcml2ZWQnKTsK
K3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0aG9kKCknLCAnYmFzZU1ldGhvZFZh
bHVlJyk7CitzaG91bGRCZSgneCA9IChuZXcgRGVyaXZlZCkuY2FsbEJhc2VNZXRob2Q7IHgoKScs
ICdiYXNlTWV0aG9kVmFsdWUnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmNhbGxCYXNlTWV0
aG9kSW5HZXR0ZXInLCAnYmFzZU1ldGhvZFZhbHVlJyk7CitzaG91bGRCZSgnKG5ldyBEZXJpdmVk
KS5jYWxsQmFzZU1ldGhvZEluU2V0dGVyID0gMTsgdmFsdWVJblNldHRlcicsICdiYXNlTWV0aG9k
VmFsdWUnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmJhc2VNZXRob2RJbkdldHRlclNldHRl
cicsICcobmV3IEJhc2UpLmJhc2VNZXRob2QnKTsKK3Nob3VsZEJlKCcobmV3IERlcml2ZWQpLmJh
c2VNZXRob2RJbkdldHRlclNldHRlciA9IDE7IHZhbHVlSW5TZXR0ZXInLCAnKG5ldyBCYXNlKS5i
YXNlTWV0aG9kJyk7CitzaG91bGRCZSgnRGVyaXZlZC5zdGF0aWNNZXRob2QoKScsICciYmFzZTMi
Jyk7CitzaG91bGRCZSgnKG5ldyBTZWNvbmREZXJpdmVkKS5jaGFpbk1ldGhvZCgpJywgJ1siYmFz
ZSIsICJkZXJpdmVkIiwgInNlY29uZERlcml2ZWQiXScpOworc2hvdWxkVGhyb3coJ3ggPSBjbGFz
cyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfSBzdXBlcigpIHt9IH0n
LCAnIlN5bnRheEVycm9yOiBVbmV4cGVjdGVkIGtleXdvcmQgXCdzdXBlclwnLiBFeHBlY3RlZCBh
biBpbmRlbnRpZmllci4iJyk7CitzaG91bGRUaHJvdygneCA9IGNsYXNzIGV4dGVuZHMgQmFzZSB7
IGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9IG1ldGhvZCgpIHsgc3VwZXIoKSB9IH0nLAorICAg
ICciU3ludGF4RXJyb3I6IENhbm5vdCBjYWxsIHN1cGVyKCkgb3V0c2lkZSBvZiBhIGNsYXNzIGNv
bnN0cnVjdG9yLiInKTsKK3Nob3VsZFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29u
c3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyBzdXBlciB9IH0nLCAnIlN5bnRheEVy
cm9yOiBDYW5ub3QgcmVmZXJlbmNlIHN1cGVyLiInKTsKK3Nob3VsZE5vdFRocm93KCd4ID0gY2xh
c3MgZXh0ZW5kcyBCYXNlIHsgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kKCkgeyBy
ZXR1cm4gbmV3IHN1cGVyIH0gfScpOworc2hvdWxkQmVUcnVlKCcobmV3IHgpLm1ldGhvZCgpIGlu
c3RhbmNlb2YgQmFzZScpOworc2hvdWxkQmVGYWxzZSgnKG5ldyB4KS5tZXRob2QoKSBpbnN0YW5j
ZW9mIHgnKTsKK3Nob3VsZE5vdFRocm93KCd4ID0gY2xhc3MgZXh0ZW5kcyBCYXNlIHsgY29uc3Ry
dWN0b3IoKSB7IHN1cGVyKCk7IH0gbWV0aG9kMSgpIHsgZGVsZXRlIChzdXBlci5mb28pIH0gbWV0
aG9kMigpIHsgZGVsZXRlIHN1cGVyWyJmb28iXSB9IH0nKTsKK3Nob3VsZFRocm93KCcobmV3IHgp
Lm1ldGhvZDEoKScsICciUmVmZXJlbmNlRXJyb3I6IENhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9w
ZXJ0eSInKTsKK3Nob3VsZFRocm93KCcobmV3IHgpLm1ldGhvZDIoKScsICciUmVmZXJlbmNlRXJy
b3I6IENhbm5vdCBkZWxldGUgYSBzdXBlciBwcm9wZXJ0eSInKTsKK3Nob3VsZEJlVHJ1ZSgnbmV3
IChjbGFzcyB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IH0pIGluc3RhbmNl
b2YgT2JqZWN0Jyk7CitzaG91bGRCZVRydWUoJ25ldyAoY2xhc3MgeyBjb25zdHJ1Y3RvcigpIHsg
cmV0dXJuIDE7IH0gfSkgaW5zdGFuY2VvZiBPYmplY3QnKTsKK3Nob3VsZEJlKCduZXcgKGNsYXNz
IGV4dGVuZHMgQmFzZSB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZpbmVkIH0gfSknLCAn
dW5kZWZpbmVkJyk7CitzaG91bGRCZSgneCA9IHsgfTsgbmV3IChjbGFzcyBleHRlbmRzIEJhc2Ug
eyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9KTsnLCAneCcpOworc2hvdWxkQmVGYWxzZSgn
eCBpbnN0YW5jZW9mIEJhc2UnKTsKK3Nob3VsZFRocm93KCduZXcgKGNsYXNzIGV4dGVuZHMgQmFz
ZSB7IGNvbnN0cnVjdG9yKCkgeyB9IH0pJywgJyJUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4gYSBu
b24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4iJyk7
CitzaG91bGRUaHJvdygnbmV3IChjbGFzcyBleHRlbmRzIEJhc2UgeyBjb25zdHJ1Y3RvcigpIHsg
cmV0dXJuIDE7IH0gfSknLCAnIlR5cGVFcnJvcjogQ2Fubm90IHJldHVybiBhIG5vbi1vYmplY3Qg
dHlwZSBpbiB0aGUgY29uc3RydWN0b3Igb2YgYSBkZXJpdmVkIGNsYXNzLiInKTsKK3Nob3VsZEJl
KCduZXcgKGNsYXNzIGV4dGVuZHMgbnVsbCB7IGNvbnN0cnVjdG9yKCkgeyByZXR1cm4gdW5kZWZp
bmVkIH0gfSknLCAndW5kZWZpbmVkJyk7CitzaG91bGRCZSgneCA9IHsgfTsgbmV3IChjbGFzcyBl
eHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgcmV0dXJuIHggfSB9KTsnLCAneCcpOworc2hv
dWxkQmVUcnVlKCd4IGluc3RhbmNlb2YgT2JqZWN0Jyk7CitzaG91bGRUaHJvdygnbmV3IChjbGFz
cyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3RvcigpIHsgfSB9KScsICciVHlwZUVycm9yOiBDYW5u
b3QgcmV0dXJuIGEgbm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlcml2
ZWQgY2xhc3MuIicpOworc2hvdWxkVGhyb3coJ25ldyAoY2xhc3MgZXh0ZW5kcyBudWxsIHsgY29u
c3RydWN0b3IoKSB7IHJldHVybiAxOyB9IH0pJywgJyJUeXBlRXJyb3I6IENhbm5vdCByZXR1cm4g
YSBub24tb2JqZWN0IHR5cGUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGEgZGVyaXZlZCBjbGFzcy4i
Jyk7CitzaG91bGROb3RUaHJvdygnbmV3IChjbGFzcyBleHRlbmRzIG51bGwgeyBjb25zdHJ1Y3Rv
cigpIHsgc3VwZXIoKSB9IH0pJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>
<flag name="review"
          id="273188"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>