<?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>194095</bug_id>
          
          <creation_ts>2019-01-31 10:24:34 -0800</creation_ts>
          <short_desc>[JSC] Add support for static public class fields</short_desc>
          <delta_ts>2021-04-30 09:49:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>174212</dependson>
    
    <dependson>194098</dependson>
    
    <dependson>216172</dependson>
          <blocked>214297</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xan Lopez">xan.lopez</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>709922234</cc>
    
    <cc>caitp</cc>
    
    <cc>chi187</cc>
    
    <cc>cory</cc>
    
    <cc>cwachal</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mike</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tobiasuhlig78</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1500630</commentid>
    <comment_count>0</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2019-01-31 10:24:34 -0800</bug_when>
    <thetext>Proposal (currently at stage 3): https://tc39.github.io/proposal-static-class-features/

This would land after bug #174212 lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548799</commentid>
    <comment_count>1</comment_count>
      <attachid>373113</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2019-06-28 06:47:54 -0700</bug_when>
    <thetext>Created attachment 373113
Class fields static (private and public)

WIP in patch.

This is enough to pass all current test262 tests, so it should be good for an early review if someone feels like it. It needs the code in bug #174212.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655342</commentid>
    <comment_count>2</comment_count>
      <attachid>400054</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2020-05-22 09:49:07 -0700</bug_when>
    <thetext>Created attachment 400054
Add support for static public fields</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655869</commentid>
    <comment_count>3</comment_count>
      <attachid>400054</attachid>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2020-05-25 08:56:32 -0700</bug_when>
    <thetext>Comment on attachment 400054
Add support for static public fields

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

I think it is necesssary to have some stress test cases included in this patch, since most of our bots don&apos;t run Test262. It is also important to have a test case asserting that the case listed on https://bugs.webkit.org/show_bug.cgi?id=209675 can pass.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:796
&gt; +    generator.emitJumpIfFalse(generator.emitBinaryOp&lt;OpEq&gt;(generator.newTemporary(), generator.emitLoad(nullptr, JSValue(generator.addStringConstant(generator.propertyNames().prototype))), propertyName, OperandTypes(ResultType::stringType(), ResultType::stringType())), validPropertyNameLabel.get());

I personally think this is very hard to read. Also, I&apos;m not 100% sure if this quite safe if we don&apos;t use `RefPtr&lt;&gt;`. Do you mind making it something like:

```
RefPtr&lt;RegisterID&gt; prototypeString = generator.emitLoad(nullptr, generator.propertyNames().prototype);
RefPtr&lt;RegisterID&gt; isValidPropertyName = generator.emitBinaryOp&lt;OpEq&gt;(generator.newTemporary(), prototypeString, propertyName, OperandTypes(ResultType::stringType(), ResultType::stringType()))
generator.emitJumpIfFalse(isValidPropertyName, validPropertyNameLabel.get());
```

&gt; Source/JavaScriptCore/parser/ASTBuilder.h:408
&gt; +    DefineFieldNode* createDefineField(const JSTokenLocation&amp; location, const Identifier* ident, ExpressionNode* initializer, DefineFieldNode::Type type, bool isStatic)

Could you turn `bool isStatic` into an enum?

&gt; Source/JavaScriptCore/parser/Nodes.h:2295
&gt; +        DefineFieldNode(const JSTokenLocation&amp;, const Identifier*, ExpressionNode*, Type, bool);

Ditto

&gt; Source/JavaScriptCore/parser/Parser.cpp:259
&gt;          else if (parseMode == SourceParseMode::InstanceFieldInitializerMode) {

This is not accurate anymore, since it is also being used for static fields. I think I would prefer create a new `SourceParseMode::StaticFieldInitializerMode` with reason described bellow.

&gt; Source/JavaScriptCore/parser/Parser.cpp:2872
&gt; +    unsigned numInstanceComputedFields = 0, numStaticComputedFields = 1;

I think that a comment here to explain why `numStaticComputedFields` starts with 1 would help a lot. Also, WDYT if we call them as `nextInstanceComputedFieldID` and `nextStaticComputedFieldID`?

&gt; Source/JavaScriptCore/parser/Parser.cpp:2978
&gt; +                unsigned* fieldID = tag == ClassElementTag::Instance ? &amp;numInstanceComputedFields : &amp;numStaticComputedFields;

I&apos;m also in favor of using:

```
if (tag == ClassElementTag::Instance)
    ident = &amp;m_parserArena.identifierArena().makeNumericIdentifier(m_vm, nextInstanceComputedFieldID++);
else
    ident = &amp;m_parserArena.identifierArena().makeNumericIdentifier(m_vm, nextStaticComputedFieldID++);
```

&gt; Source/JavaScriptCore/parser/Parser.cpp:3047
&gt; +template &lt;class TreeBuilder&gt; TreeSourceElements Parser&lt;LexerType&gt;::parseInstanceFieldInitializerSourceElements(TreeBuilder&amp; context, const Vector&lt;JSTextPosition&gt;&amp; classFieldLocations)

This function is also being used to initialize static fields. I think we should rename it to `parseFieldInitializerSourceElements`.

&gt; Source/JavaScriptCore/parser/Parser.cpp:3053
&gt; +    // fields, at 1 for static fields. We&apos;ll bump the counter by one

Instead of having this check down there, we could use the `parseMode` to properly initialize `numComputedFields`. I would also rename it as `nextComputedFieldID`.

&gt; Source/JavaScriptCore/runtime/JSFunction.cpp:-759
&gt; -    ASSERT(jsExecutable()-&gt;ecmaName().isNull());

Is there a reason to remove this ASSERT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659528</commentid>
    <comment_count>4</comment_count>
      <attachid>401133</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2020-06-05 02:57:46 -0700</bug_when>
    <thetext>Created attachment 401133
Add support for static public fields, v3.

v3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659529</commentid>
    <comment_count>5</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2020-06-05 03:00:52 -0700</bug_when>
    <thetext>Addressed most of these, commenting inline.

Additional comments:

- There are three failures in the new V8 tests, will look into them now.
- As we discussed I think it would be better to store the computed field keys in something like a list. Will also try to look into this.

(In reply to Caio Lima from comment #3)
&gt; Comment on attachment 400054 [details]
&gt; Add support for static public fields
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=400054&amp;action=review
&gt; 
&gt; I think it is necesssary to have some stress test cases included in this
&gt; patch, since most of our bots don&apos;t run Test262. It is also important to
&gt; have a test case asserting that the case listed on
&gt; https://bugs.webkit.org/show_bug.cgi?id=209675 can pass.

I imported the V8 tests, like I did with the instance fields. Also refactored a bit both files so they can share the support code.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:796
&gt; &gt; +    generator.emitJumpIfFalse(generator.emitBinaryOp&lt;OpEq&gt;(generator.newTemporary(), generator.emitLoad(nullptr, JSValue(generator.addStringConstant(generator.propertyNames().prototype))), propertyName, OperandTypes(ResultType::stringType(), ResultType::stringType())), validPropertyNameLabel.get());
&gt; 
&gt; I personally think this is very hard to read. Also, I&apos;m not 100% sure if
&gt; this quite safe if we don&apos;t use `RefPtr&lt;&gt;`. Do you mind making it something
&gt; like:
&gt; 
&gt; ```
&gt; RefPtr&lt;RegisterID&gt; prototypeString = generator.emitLoad(nullptr,
&gt; generator.propertyNames().prototype);
&gt; RefPtr&lt;RegisterID&gt; isValidPropertyName =
&gt; generator.emitBinaryOp&lt;OpEq&gt;(generator.newTemporary(), prototypeString,
&gt; propertyName, OperandTypes(ResultType::stringType(),
&gt; ResultType::stringType()))
&gt; generator.emitJumpIfFalse(isValidPropertyName, validPropertyNameLabel.get());
&gt; ```

Done, although the exact code you suggested does not work as we discussed offline. Will look into this.

&gt; 
&gt; &gt; Source/JavaScriptCore/parser/ASTBuilder.h:408
&gt; &gt; +    DefineFieldNode* createDefineField(const JSTokenLocation&amp; location, const Identifier* ident, ExpressionNode* initializer, DefineFieldNode::Type type, bool isStatic)
&gt; 
&gt; Could you turn `bool isStatic` into an enum?
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/Nodes.h:2295
&gt; &gt; +        DefineFieldNode(const JSTokenLocation&amp;, const Identifier*, ExpressionNode*, Type, bool);
&gt; 
&gt; Ditto
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/Parser.cpp:259
&gt; &gt;          else if (parseMode == SourceParseMode::InstanceFieldInitializerMode) {

Turns out this was not needed, because the parser code just reparses the fields and figures out which &apos;mode&apos; it&apos;s in (static or instance). We could tell it explicitly, but since it needs to reparse the fields anyway it seemed redundant.

&gt; 
&gt; This is not accurate anymore, since it is also being used for static fields.
&gt; I think I would prefer create a new
&gt; `SourceParseMode::StaticFieldInitializerMode` with reason described bellow.
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/Parser.cpp:2872
&gt; &gt; +    unsigned numInstanceComputedFields = 0, numStaticComputedFields = 1;
&gt; 
&gt; I think that a comment here to explain why `numStaticComputedFields` starts
&gt; with 1 would help a lot. Also, WDYT if we call them as
&gt; `nextInstanceComputedFieldID` and `nextStaticComputedFieldID`?
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/Parser.cpp:2978
&gt; &gt; +                unsigned* fieldID = tag == ClassElementTag::Instance ? &amp;numInstanceComputedFields : &amp;numStaticComputedFields;
&gt; 
&gt; I&apos;m also in favor of using:
&gt; 
&gt; ```
&gt; if (tag == ClassElementTag::Instance)
&gt;     ident = &amp;m_parserArena.identifierArena().makeNumericIdentifier(m_vm,
&gt; nextInstanceComputedFieldID++);
&gt; else
&gt;     ident = &amp;m_parserArena.identifierArena().makeNumericIdentifier(m_vm,
&gt; nextStaticComputedFieldID++);
&gt; ```
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/Parser.cpp:3047
&gt; &gt; +template &lt;class TreeBuilder&gt; TreeSourceElements Parser&lt;LexerType&gt;::parseInstanceFieldInitializerSourceElements(TreeBuilder&amp; context, const Vector&lt;JSTextPosition&gt;&amp; classFieldLocations)
&gt; 
&gt; This function is also being used to initialize static fields. I think we
&gt; should rename it to `parseFieldInitializerSourceElements`.

All done.

&gt; 
&gt; &gt; Source/JavaScriptCore/parser/Parser.cpp:3053
&gt; &gt; +    // fields, at 1 for static fields. We&apos;ll bump the counter by one
&gt; 
&gt; Instead of having this check down there, we could use the `parseMode` to
&gt; properly initialize `numComputedFields`. I would also rename it as
&gt; `nextComputedFieldID`.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSFunction.cpp:-759
&gt; &gt; -    ASSERT(jsExecutable()-&gt;ecmaName().isNull());
&gt; 
&gt; Is there a reason to remove this ASSERT?

This was a leftover from a previous way of doing things! Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670842</commentid>
    <comment_count>6</comment_count>
      <attachid>404092</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2020-07-12 02:46:55 -0700</bug_when>
    <thetext>Created attachment 404092
Add support for static public fields, v4

New version.

Fixed two of the failing V8 tests, a few other naming fixes, rebased against master.

There is one remaining V8 failure, but I think this is not a field bug per se, just the new code finding an old issue. Basically:

 let q = { [&quot;z&quot;]: class { static y = this.name } }
 assertEquals(q.z.y, &apos;z&apos;);

This will fail (the value of q.z.y is &apos;&apos;). The reason is that the existing code sets the function name for the class *after* the whole class is generated. The spec says it should happen within the class definition evaluation (see 14.6.14 Runtime Semantics: ClassDefinitionEvaluation). This was perhaps mostly harmless until now, but with static fields the initializer runs before the class evaluation is over, so it finds &apos;this.name&apos; to be unitialized. This would work for a non-computed property name (z: class { ... }) because in that case the parser itself will already set the proper function name, but for computed property names that does not happen. I will open a follow-up for this issue if we agree it should be fixed in parallel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673435</commentid>
    <comment_count>7</comment_count>
      <attachid>404819</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2020-07-21 06:52:24 -0700</bug_when>
    <thetext>Created attachment 404819
Add support for static public fields, v5

v5, rebased against master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673731</commentid>
    <comment_count>8</comment_count>
      <attachid>404819</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-21 20:13:50 -0700</bug_when>
    <thetext>Comment on attachment 404819
Add support for static public fields, v5

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

&gt; Source/JavaScriptCore/ChangeLog:43
&gt; +        following order: b, c, a, d. Since each group of fields is
&gt; +        initialized independently we can trivially retrieve the property
&gt; +        keys for each group just by getting the odd property keys for
&gt; +        static fields (indexes 1 and 3) and the even ones for instance
&gt; +        fields (indexes 0 and 2).

I don&apos;t get this. Why do we need property keys of numbers ever? Are we looking up in an array or something?

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:823
&gt; +    RefPtr&lt;RegisterID&gt; propertyExpr = generator.emitNode(node.m_expression);
&gt; +    RefPtr&lt;RegisterID&gt; propertyName = generator.emitToPropertyKey(generator.newTemporary(), propertyExpr.get());
&gt; +
&gt; +    Ref&lt;Label&gt; validPropertyNameLabel = generator.newLabel();
&gt; +    RefPtr&lt;RegisterID&gt; prototypeString = generator.emitLoad(nullptr, JSValue(generator.addStringConstant(generator.propertyNames().prototype)));
&gt; +    generator.emitJumpIfFalse(generator.emitBinaryOp&lt;OpEq&gt;(generator.newTemporary(), prototypeString.get(), propertyName.get(), OperandTypes(ResultType::stringType(), ResultType::stringType())), validPropertyNameLabel.get());
&gt; +    generator.emitThrowTypeError(&quot;Cannot declare a static field named &apos;prototype&apos;&quot;);
&gt;  
&gt; +    generator.emitLabel(validPropertyNameLabel.get());

this code in emitSaveComputedFieldName is only called for static fields?

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4822
&gt; +

nit: revert

&gt; Source/JavaScriptCore/parser/Parser.cpp:2885
&gt; +    unsigned nextInstanceComputedFieldID = 0, nextStaticComputedFieldID = 1;

nit: separate declarations on individual lines..

&gt; Source/JavaScriptCore/parser/Parser.cpp:3087
&gt; +    // Property keys for computed fields start at 0 for instance

this is a confusing model to me. Why do we have numeric identifiers for each field?

&gt; Source/JavaScriptCore/parser/Parser.cpp:3110
&gt; +            if (!nextComputedFieldID)
&gt; +                nextComputedFieldID++;

so the first field dictates if all other fields are static or not static?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675568</commentid>
    <comment_count>9</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2020-07-28 04:25:31 -0700</bug_when>
    <thetext>Hi,

thanks for the review.

(In reply to Saam Barati from comment #8)
&gt; Comment on attachment 404819 [details]
&gt; Add support for static public fields, v5
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=404819&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:43
&gt; &gt; +        following order: b, c, a, d. Since each group of fields is
&gt; &gt; +        initialized independently we can trivially retrieve the property
&gt; &gt; +        keys for each group just by getting the odd property keys for
&gt; &gt; +        static fields (indexes 1 and 3) and the even ones for instance
&gt; &gt; +        fields (indexes 0 and 2).
&gt; 
&gt; I don&apos;t get this. Why do we need property keys of numbers ever? Are we
&gt; looking up in an array or something?

Most questions are about this in one way or another, so I&apos;ll try to answer them all here.

Computed properties need to be evaluated (and transformed into property keys) during the first class evaluation. *Instance* class fields are initialized later. That means we need some place to store the property keys meanwhile. In the already landed instance class fields patch (https://bugs.webkit.org/show_bug.cgi?id=174212) those property keys were stored in the class scope and could be retrieved through numerical indexes, essentially a poor man&apos;s array.

What this patch does is build up on that, splitting the property keys for static and instance fields in even/odd indexes because they need to be read separately. Again, this is a poor man&apos;s way of doing two arrays. Also, strictly speaking, we could do without this for static fields, but since we are also using a field initializer it&apos;s much easier to reuse the whole infrastructure in place.

At the very least all this could be changed to use proper arrays, I think I mentioned that possibility in an earlier comment. Maybe we could first improve the way this is done for instance fields, and when we are happy with it change this patch to use the same mechanism. Or something else! Open to any suggestion here, hopefully it&apos;s easier to iterate the right solution now that this patch passes all tests.
 
&gt; &gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:823
&gt; &gt; +    RefPtr&lt;RegisterID&gt; propertyExpr = generator.emitNode(node.m_expression);
&gt; &gt; +    RefPtr&lt;RegisterID&gt; propertyName = generator.emitToPropertyKey(generator.newTemporary(), propertyExpr.get());
&gt; &gt; +
&gt; &gt; +    Ref&lt;Label&gt; validPropertyNameLabel = generator.newLabel();
&gt; &gt; +    RefPtr&lt;RegisterID&gt; prototypeString = generator.emitLoad(nullptr, JSValue(generator.addStringConstant(generator.propertyNames().prototype)));
&gt; &gt; +    generator.emitJumpIfFalse(generator.emitBinaryOp&lt;OpEq&gt;(generator.newTemporary(), prototypeString.get(), propertyName.get(), OperandTypes(ResultType::stringType(), ResultType::stringType())), validPropertyNameLabel.get());
&gt; &gt; +    generator.emitThrowTypeError(&quot;Cannot declare a static field named &apos;prototype&apos;&quot;);
&gt; &gt;  
&gt; &gt; +    generator.emitLabel(validPropertyNameLabel.get());
&gt; 
&gt; this code in emitSaveComputedFieldName is only called for static fields?
&gt; 

Good catch, the code used to be like that but this is a mistake, should be guarded for static fields only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675570</commentid>
    <comment_count>10</comment_count>
      <attachid>405349</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2020-07-28 04:34:17 -0700</bug_when>
    <thetext>Created attachment 405349
Add support for static public fields, v6

v6, fixing the issues mentioned in the review except the ad-hoc array thing for property keys, which needs more discussion. Uploading this to have an up to date &quot;reference patch&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701832</commentid>
    <comment_count>11</comment_count>
      <attachid>412412</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2020-10-27 05:20:56 -0700</bug_when>
    <thetext>Created attachment 412412
Add support for static public fields, v7

v7,
rebased on top of the symbol-as-id patch (still to land), which allows us to remove all the stuff about even/odd ids for computed property keys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707582</commentid>
    <comment_count>12</comment_count>
      <attachid>414161</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2020-11-15 01:02:16 -0800</bug_when>
    <thetext>Created attachment 414161
Add support for static public fields, v8

v8,
use new makePrivateIdentifier method when parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707583</commentid>
    <comment_count>13</comment_count>
      <attachid>414161</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-11-15 01:24:43 -0800</bug_when>
    <thetext>Comment on attachment 414161
Add support for static public fields, v8

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

I&apos;ll comment about some quick things. I&apos;ll review it tomorrow or Monday.
Can you put `r?` when requesting a review?

&gt; JSTests/ChangeLog:1
&gt; +2020-06-05  Xan LÃ³pez  &lt;xan@igalia.com&gt;

Let&apos;s update the date.

&gt; JSTests/stress/class-fields-harmony.js:34
&gt; +load(&quot;./harmony-support.js&quot;);

Let&apos;s put JSTests/stress/resources/harmony-support.js under resources. Otherwise, harmony-support.js is executed as one test.

&gt; JSTests/stress/class-fields-static-harmony.js:1
&gt; +//@ requireOptions(&quot;--usePublicClassFields=1&quot;)

Use &apos;usePublicStaticClassFields&apos;

&gt; JSTests/stress/class-fields-static-harmony.js:36
&gt; +load(&quot;./harmony-support.js&quot;);

Ditto.

&gt; Source/JavaScriptCore/ChangeLog:1
&gt; +2020-06-05  Xan LÃ³pez  &lt;xan@igalia.com&gt;

Let&apos;s update the date.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:186
&gt;  

Hmm, I cannot expand the diff in this file.
Can you rebase the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707605</commentid>
    <comment_count>14</comment_count>
      <attachid>414165</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2020-11-15 08:37:24 -0800</bug_when>
    <thetext>Created attachment 414165
Add support for static public fields, v9

v9,
move harmony support file to resources/
add flag to enable/disable only static public fields, use it in the parser and in the tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708144</commentid>
    <comment_count>15</comment_count>
      <attachid>414165</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-11-17 00:20:57 -0800</bug_when>
    <thetext>Comment on attachment 414165
Add support for static public fields, v9

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

Overall looks good. But I put r- since I have several questions about possible bugs.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:827
&gt; +        generator.emitJumpIfFalse(generator.emitBinaryOp&lt;OpEq&gt;(generator.newTemporary(), prototypeString.get(), propertyName.get(), OperandTypes(ResultType::stringType(), ResultType::stringType())), validPropertyNameLabel.get());

Use OpStrictEq.

&gt; Source/JavaScriptCore/parser/Parser.cpp:2885
&gt; +    unsigned nextInstanceComputedFieldID = 0, nextStaticComputedFieldID = 0;

Use
unsigned nextInstanceComputedFieldID = 0;
unsigned nextStaticComputedFieldID = 0;

we do not use comma typically here.

&gt; Source/JavaScriptCore/parser/Parser.cpp:3080
&gt; +    bool isStaticField = false;

Why is it defined outside of for loop? What happens if the first field is static and next field is not static (I think in that case, isStaticField boolean becomes wrong).
Can you add a test about this case?

&gt; Source/JavaScriptCore/parser/Parser.cpp:3098
&gt; +        if (match(RESERVED_IF_STRICT) &amp;&amp; *m_token.m_data.ident == m_vm.propertyNames-&gt;staticKeyword) {
&gt; +            ident = m_token.m_data.ident;
&gt; +            ASSERT(ident);
&gt; +            next();
&gt; +            if (match(SEMICOLON) || match (EQUAL) || match(CLOSEBRACE) || m_lexer-&gt;hasLineTerminatorBeforeToken())
&gt; +                goto validField;
&gt; +            isStaticField = true;
&gt; +        }

Let&apos;s set ident only when it is valid field, and check ident with nullptr. And then, avoid using goto.
Like

if () {
    auto* staticIdentifier =  m_token.m_data.ident;
    ASSERT(staticIdent);
    next();
    if (match(SEMICOLON) || match (EQUAL) || match(CLOSEBRACE) || m_lexer-&gt;hasLineTerminatorBeforeToken())
        ident = staticIdentifier;
    else
        isStaticField = true;
}

if (!ident) {
    switch (...) {
   ...
}

&gt; Source/JavaScriptCore/parser/Parser.cpp:3139
&gt; +    validField:

Let&apos;s avoid using goto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708149</commentid>
    <comment_count>16</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2020-11-17 01:00:27 -0800</bug_when>
    <thetext>ACK to everything, save for one comment:

(In reply to Yusuke Suzuki from comment #15)

&gt; we do not use comma typically here.
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/Parser.cpp:3080
&gt; &gt; +    bool isStaticField = false;
&gt; 
&gt; Why is it defined outside of for loop? What happens if the first field is
&gt; static and next field is not static (I think in that case, isStaticField
&gt; boolean becomes wrong).
&gt; Can you add a test about this case?

This method will only parse either a vector of static fields or a vector of instance fields, never a mix. So the case you mention cannot happen (there&apos;s all sorts of tests with fields in every possible order and combinations). I have added a comment and added the boolean inside the loop, so this is more clear already within the method itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708150</commentid>
    <comment_count>17</comment_count>
      <attachid>414315</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2020-11-17 01:01:06 -0800</bug_when>
    <thetext>Created attachment 414315
Add support for static public fields, v10

v10,
address review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708362</commentid>
    <comment_count>18</comment_count>
      <attachid>414315</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-11-17 13:19:24 -0800</bug_when>
    <thetext>Comment on attachment 414315
Add support for static public fields, v10

r=me, awesome!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708370</commentid>
    <comment_count>19</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-17 13:38:01 -0800</bug_when>
    <thetext>Committed r269922: &lt;https://trac.webkit.org/changeset/269922&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 414315.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708372</commentid>
    <comment_count>20</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-17 13:38:42 -0800</bug_when>
    <thetext>&lt;rdar://problem/71501769&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711159</commentid>
    <comment_count>21</comment_count>
    <who name="Smoley">smoley</who>
    <bug_when>2020-12-01 13:59:58 -0800</bug_when>
    <thetext>*** Bug 219397 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373113</attachid>
            <date>2019-06-28 06:47:54 -0700</date>
            <delta_ts>2020-05-22 09:49:07 -0700</delta_ts>
            <desc>Class fields static (private and public)</desc>
            <filename>class-fields-static-2806.diff</filename>
            <type>text/plain</type>
            <size>18338</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSAwMTRkYjc2YTRmMzkxNTExZjBkN2JjZmQ4NTIyYjk5MWNlNWYwOGFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/WGFuPTIwTD1DMz1CM3Blej89IDx4YW5AaWdh
bGlhLmNvbT4KRGF0ZTogRnJpLCAxIEZlYiAyMDE5IDEwOjA4OjIzICswMTAwClN1YmplY3Q6IFtQ
QVRDSF0gc3RhdGljIGZpZWxkczogaW1wbGVtZW50IHN0YXRpYyBwdWJsaWMgYW5kIHByaXZhdGUg
ZmllbGRzCgpUT0RPOgoKLSBUaGUgc2VtYW50aWMgZG9jdW1lbnRzIGZvciBzdGF0aWMgZmllbGRz
IHJlcXVpcmUgdGhhdCB0aGUKICBjb25zdHJ1Y3RvciBiZSBhdmFpbGFibGUgYXMgJ3RoaXMnIGR1
cmluZyB0aGUgc3RhdGljIGZpZWxkCiAgZXZhbHVhdGlvbi4gV2UgYXJlIGRvaW5nIHRoaXMgdGhy
b3VnaCBhCiAgc2V0Rm9yU2NvcGU8UmVnaXN0ZXJJRD5zZXRUaGlzVG9DdG9yKHRoaXMsIGN0cikg
Y2FsbCwgd2hpY2ggcmVxdWlyZXMKICBtYXJraW5nIFJlZ2lzdGVySUQgYXMgY29weWFibGUuIFVu
Y2xlYXIgaWYgaXQncyBhIGdvb2QgaWRlYS4KCi0gTWF5YmUgcmVmYWN0b3IgdGhlIHBhcnNlciBz
byB0aGF0IG1ldGhvZHMgYW5kIGZpZWxkcyBhcmUgaW4gdHdvCiAgc2VwYXJhdGUgbGlzdHMgYXQg
Y29kZSBnZW5lcmF0aW9uLiBUaGlzIG1pZ2h0IHNpbXBsaWZ5IHNvbWUgbmFzdHkKICBjb2RlLgot
LS0KIEpTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbCAgICAgICAgICAgICAgICAgICB8ICAgMiAt
CiAuLi4vYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgICAgICAgICAgICAgfCAxMzcgKysr
KysrKysrKysrLS0tLS0tCiAuLi4vSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVy
SUQuaCAgfCAgIDIgLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oICAgICAg
ICAgIHwgICA5ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAgICAg
ICAgfCAgIDUgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
ICB8ICAgMSAtCiA2IGZpbGVzIGNoYW5nZWQsIDEwOCBpbnNlcnRpb25zKCspLCA0OCBkZWxldGlv
bnMoLSkKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwgYi9KU1Rlc3Rz
L3Rlc3QyNjIvY29uZmlnLnlhbWwKaW5kZXggOGE1YTk5YjIwNzguLjgwYTQyNGFkOGRlIDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwKKysrIGIvSlNUZXN0cy90ZXN0MjYy
L2NvbmZpZy55YW1sCkBAIC0xNSw4ICsxNSw2IEBAIHNraXA6CiAgICAgIyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTMxCiAgICAgLSByZWdleHAtbG9va2JlaGlu
ZAogICAgIC0gY2xhc3MtbWV0aG9kcy1wcml2YXRlCi0gICAgLSBjbGFzcy1zdGF0aWMtZmllbGRz
LXB1YmxpYwotICAgIC0gY2xhc3Mtc3RhdGljLWZpZWxkcy1wcml2YXRlCiAgICAgLSBjbGFzcy1z
dGF0aWMtbWV0aG9kcy1wcml2YXRlCiAgICAgLSBJbnRsLkRhdGVUaW1lRm9ybWF0LWRhdGV0aW1l
c3R5bGUKICAgICAtIEludGwuRGF0ZVRpbWVGb3JtYXQtZm9ybWF0UmFuZ2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCBk
Y2U1ODhjOTVkNi4uMzhiNWQxYjIzMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTUzOCwxNSArNTM4LDkwIEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBlbWl0UHV0SG9tZU9iamVjdChCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBmCiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGZ1bmN0aW9u
LCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmhvbWVPYmplY3RQcml2
YXRlTmFtZSgpLCBob21lT2JqZWN0KTsKIH0KIAorc3RhdGljIHZvaWQgZW1pdENsYXNzRmllbGQo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0LCBFeHByZXNzaW9u
Tm9kZSogYXNzaWduTm9kZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHJlc3Npb25Ob2RlLCBjb25zdCBJ
ZGVudGlmaWVyKiBuYW1lLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgcG9zaXRpb24sIERlZmluZUZp
ZWxkTm9kZTo6VHlwZSBmaWVsZFR5cGUsIENsYXNzRWxlbWVudFRhZyBlbGVtZW50VHlwZSkKK3sK
KyAgICBBU1NFUlQgKGVsZW1lbnRUeXBlID09IENsYXNzRWxlbWVudFRhZzo6SW5zdGFuY2UgfHwg
ZWxlbWVudFR5cGUgPT0gQ2xhc3NFbGVtZW50VGFnOjpTdGF0aWMpOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKworICAgIGlmICghYXNz
aWduTm9kZSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKHZhbHVlLmdldCgpLCBqc1VuZGVm
aW5lZCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGVsZW1lbnRUeXBlID09IENsYXNzRWxl
bWVudFRhZzo6U3RhdGljKSB7CisgICAgICAgICAgICBTZXRGb3JTY29wZTxSZWdpc3RlcklEPnNl
dFRoaXNUb0NvbnN0cnVjdG9yKCpnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCksICpkc3QpOworICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKHZhbHVlLmdldCgpLCBhc3NpZ25Ob2RlKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUodmFsdWUuZ2V0KCks
IGFzc2lnbk5vZGUpOworICAgICAgICBpZiAobmFtZSAmJiBnZW5lcmF0b3Iuc2hvdWxkRW1pdFNl
dEZ1bmN0aW9uTmFtZShhc3NpZ25Ob2RlKSkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0U2V0
RnVuY3Rpb25OYW1lKHZhbHVlLmdldCgpLCAqbmFtZSk7CisgICAgfQorCisgICAgc3dpdGNoIChm
aWVsZFR5cGUpIHsKKyAgICBjYXNlIERlZmluZUZpZWxkTm9kZTo6TmFtZTogeworICAgICAgICAv
LyBGSVhNRTogSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBwdWJsaWMgY2xhc3MgZmllbGRzCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgzMzAKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0TG9h
ZChudWxscHRyLCAqbmFtZSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbERlZmluZVByb3Bl
cnR5KGRzdCwgcHJvcGVydHlOYW1lLmdldCgpLCB2YWx1ZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0
ciwgQnl0ZWNvZGVHZW5lcmF0b3I6OlByb3BlcnR5Q29uZmlndXJhYmxlIHwgQnl0ZWNvZGVHZW5l
cmF0b3I6OlByb3BlcnR5V3JpdGFibGUgfCBCeXRlY29kZUdlbmVyYXRvcjo6UHJvcGVydHlFbnVt
ZXJhYmxlLCBwb3NpdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIERlZmlu
ZUZpZWxkTm9kZTo6UHJpdmF0ZU5hbWU6CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8ocG9zaXRpb24sIHBvc2l0aW9uLCBwb3NpdGlvbiArIG5hbWUtPmxlbmd0aCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQcml2YXRlRmllbGRBZGQoZHN0LCAqbmFtZSwgdmFsdWUuZ2V0
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERlZmluZUZpZWxkTm9kZTo6Q29tcHV0ZWRO
YW1lOiB7CisgICAgICAgIC8vIEZJWE1FOiBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIHB1YmxpYyBj
bGFzcyBmaWVsZHMKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5ODMzMAorICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJpdmF0ZU5hbWUgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGlmIChlbGVtZW50VHlwZSA9PSBDbGFz
c0VsZW1lbnRUYWc6Okluc3RhbmNlKSB7CisgICAgICAgICAgICBWYXJpYWJsZSB2YXIgPSBnZW5l
cmF0b3IudmFyaWFibGUoKm5hbWUpOworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSgh
dmFyLmxvY2FsKCksICJDb21wdXRlZCBuYW1lcyBmb3IgaW5zdGFuY2UgZmllbGRzIG11c3QgYmUg
c3RvcmVkIGluIGNhcHR1cmVkIHZhcmlhYmxlcyIpOworCisgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKHBvc2l0aW9uLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAxKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2
ZVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdmFyKTsKKyAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0R2V0RnJvbVNjb3BlKHByaXZhdGVOYW1lLmdldCgpLCBzY29wZS5nZXQoKSwgdmFy
LCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlw
ZShwcml2YXRlTmFtZS5nZXQoKSwgdmFyLCBwb3NpdGlvbiwgSlNUZXh0UG9zaXRpb24oLTEsIHBv
c2l0aW9uLm9mZnNldCArIG5hbWUtPmxlbmd0aCgpLCAtMSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUKGV4cHJlc3Npb25Ob2RlKTsKKyAgICAgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPnByb3BlcnR5RXhwciA9IGdlbmVyYXRvci5lbWl0Tm9kZShleHByZXNzaW9uTm9k
ZSk7CisgICAgICAgICAgICBwcml2YXRlTmFtZSA9IGdlbmVyYXRvci5lbWl0VG9Qcm9wZXJ0eUtl
eShwcm9wZXJ0eUV4cHIuZ2V0KCksIHByb3BlcnR5RXhwci5nZXQoKSk7CisgICAgICAgICAgICBS
ZWY8TGFiZWw+IHZhbGlkUHJvcGVydHlOYW1lTGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsK
KyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UoZ2VuZXJhdG9yLmVtaXRCaW5h
cnlPcDxPcEVxPihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGdlbmVyYXRvci5lbWl0TG9hZChu
dWxscHRyLCBKU1ZhbHVlKGdlbmVyYXRvci5hZGRTdHJpbmdDb25zdGFudChnZW5lcmF0b3IucHJv
cGVydHlOYW1lcygpLnByb3RvdHlwZSkpKSwgcHJpdmF0ZU5hbWUuZ2V0KCksIE9wZXJhbmRUeXBl
cyhSZXN1bHRUeXBlOjpzdHJpbmdUeXBlKCksIFJlc3VsdFR5cGU6OnN0cmluZ1R5cGUoKSkpLCB2
YWxpZFByb3BlcnR5TmFtZUxhYmVsLmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
VGhyb3dUeXBlRXJyb3IoIkNhbm5vdCBkZWNsYXJlIGEgc3RhdGljIGZpZWxkIG5hbWVkICdwcm90
b3R5cGUnIik7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHZhbGlkUHJvcGVydHlO
YW1lTGFiZWwuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbERl
ZmluZVByb3BlcnR5KGRzdCwgcHJpdmF0ZU5hbWUuZ2V0KCksIHZhbHVlLmdldCgpLCBudWxscHRy
LCBudWxscHRyLCBCeXRlY29kZUdlbmVyYXRvcjo6UHJvcGVydHlDb25maWd1cmFibGUgfCBCeXRl
Y29kZUdlbmVyYXRvcjo6UHJvcGVydHlXcml0YWJsZSB8IEJ5dGVjb2RlR2VuZXJhdG9yOjpQcm9w
ZXJ0eUVudW1lcmFibGUsIHBvc2l0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworc3RhdGlj
IERlZmluZUZpZWxkTm9kZTo6VHlwZSBmaWVsZFR5cGVGcm9tTm9kZVR5cGUoUHJvcGVydHlOb2Rl
OjpUeXBlIG5vZGVUeXBlKQoreworICAgIERlZmluZUZpZWxkTm9kZTo6VHlwZSBmaWVsZFR5cGU7
CisKKyAgICAvLyBGSVhNRTogdGhpcyBpbiBub3QgZXhhY3RseSBlbGVnYW50LCBpZGVhbGx5IHdl
J2Qgb25seSBkZWFsIHdpdGggRGVmaW5lRmllbGROb2Rlcy4KKyAgICBpZiAobm9kZVR5cGUgPT0g
UHJvcGVydHlOb2RlOjpDb25zdGFudCkKKyAgICAgICAgZmllbGRUeXBlID0gRGVmaW5lRmllbGRO
b2RlOjpOYW1lOworICAgIGVsc2UgaWYgKG5vZGVUeXBlID09IFByb3BlcnR5Tm9kZTo6Q29uc3Rh
bnQgKyBQcm9wZXJ0eU5vZGU6OlByaXZhdGUpCisgICAgICAgIGZpZWxkVHlwZSA9IERlZmluZUZp
ZWxkTm9kZTo6UHJpdmF0ZU5hbWU7CisgICAgZWxzZSBpZiAobm9kZVR5cGUgPT0gUHJvcGVydHlO
b2RlOjpDb25zdGFudCArIFByb3BlcnR5Tm9kZTo6Q29tcHV0ZWQpCisgICAgICAgIGZpZWxkVHlw
ZSA9IERlZmluZUZpZWxkTm9kZTo6Q29tcHV0ZWROYW1lOworICAgIGVsc2UKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gZmllbGRUeXBlOworfQogUmVnaXN0ZXJJ
RCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdE9yQ29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3RvdHlw
ZSwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogaW5zdGFuY2VGaWVsZExvY2F0aW9ucykKIHsKICAg
ICAvLyBGYXN0IGNhc2U6IHRoaXMgbG9vcCBqdXN0IGhhbmRsZXMgcmVndWxhciB2YWx1ZSBwcm9w
ZXJ0aWVzLgorICAgIFZlY3RvcjxQcm9wZXJ0eU5vZGUqPiBzdGF0aWNGaWVsZHM7CiAgICAgUHJv
cGVydHlMaXN0Tm9kZSogcCA9IHRoaXM7CiAgICAgUmVnaXN0ZXJJRCogZHN0ID0gbnVsbHB0cjsK
ICAgICBmb3IgKDsgcCAmJiAocC0+bV9ub2RlLT5tX3R5cGUgJiBQcm9wZXJ0eU5vZGU6OkNvbnN0
YW50KTsgcCA9IHAtPm1fbmV4dCkgewogICAgICAgICBkc3QgPSBwLT5tX25vZGUtPmlzSW5zdGFu
Y2VDbGFzc1Byb3BlcnR5KCkgPyBwcm90b3R5cGUgOiBkc3RPckNvbnN0cnVjdG9yOwogCi0gICAg
ICAgIGlmIChwLT5pc0NvbXB1dGVkQ2xhc3NGaWVsZCgpKQorICAgICAgICBpZiAocC0+aXNDb21w
dXRlZENsYXNzRmllbGQoKSAmJiAhcC0+aXNTdGF0aWNDbGFzc0ZpZWxkKCkpCiAgICAgICAgICAg
ICBlbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1lKGdlbmVyYXRvciwgKnAtPm1fbm9kZSk7CiAKICAg
ICAgICAgaWYgKHAtPmlzSW5zdGFuY2VDbGFzc0ZpZWxkKCkpIHsKQEAgLTU1NSw2ICs2MzAsMTEg
QEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKKyAgICAgICAgaWYgKHAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAgICAgICAg
ICBzdGF0aWNGaWVsZHMuYXBwZW5kKHAtPm1fbm9kZSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCiAgICAgICAgIGVtaXRQdXRDb25zdGFudFByb3BlcnR5KGdlbmVyYXRvciwg
ZHN0LCAqcC0+bV9ub2RlKTsKICAgICB9CiAKQEAgLTYwMiw3ICs2ODIsNyBAQCBSZWdpc3RlcklE
KiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZQogICAgICAgICAgICAgUHJvcGVydHlOb2RlKiBub2RlID0gcC0+bV9ub2Rl
OwogICAgICAgICAgICAgZHN0ID0gbm9kZS0+aXNJbnN0YW5jZUNsYXNzUHJvcGVydHkoKSA/IHBy
b3RvdHlwZSA6IGRzdE9yQ29uc3RydWN0b3I7CiAKLSAgICAgICAgICAgIGlmIChwLT5pc0NvbXB1
dGVkQ2xhc3NGaWVsZCgpKQorICAgICAgICAgICAgaWYgKHAtPmlzQ29tcHV0ZWRDbGFzc0ZpZWxk
KCkgJiYgIXAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKQogICAgICAgICAgICAgICAgIGVtaXRTYXZl
Q29tcHV0ZWRGaWVsZE5hbWUoZ2VuZXJhdG9yLCAqcC0+bV9ub2RlKTsKIAogICAgICAgICAgICAg
aWYgKHAtPmlzSW5zdGFuY2VDbGFzc0ZpZWxkKCkpIHsKQEAgLTYxMSw2ICs2OTEsMTEgQEAgUmVn
aXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KIAorICAgICAgICAgICAgaWYgKHAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAg
ICAgICAgICAgICAgc3RhdGljRmllbGRzLmFwcGVuZChwLT5tX25vZGUpOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBIYW5kbGUgcmVn
dWxhciB2YWx1ZXMuCiAgICAgICAgICAgICBpZiAobm9kZS0+bV90eXBlICYgUHJvcGVydHlOb2Rl
OjpDb25zdGFudCkgewogICAgICAgICAgICAgICAgIGVtaXRQdXRDb25zdGFudFByb3BlcnR5KGdl
bmVyYXRvciwgZHN0LCAqbm9kZSk7CkBAIC02OTUsNiArNzgwLDkgQEAgUmVnaXN0ZXJJRCogUHJv
cGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGUKICAgICAgICAgfQogICAgIH0KIAorICAgIGZvciAoYXV0byBzdGF0aWNGaWVsZCA6
IHN0YXRpY0ZpZWxkcykKKyAgICAgICAgZW1pdENsYXNzRmllbGQoZ2VuZXJhdG9yLCBkc3QsIHN0
YXRpY0ZpZWxkLT5hc3NpZ25Ob2RlKCksIHN0YXRpY0ZpZWxkLT5leHByZXNzaW9uTmFtZSgpLCBz
dGF0aWNGaWVsZC0+bmFtZSgpLCBwb3NpdGlvbigpLCBmaWVsZFR5cGVGcm9tTm9kZVR5cGUoc3Rh
dGljX2Nhc3Q8UHJvcGVydHlOb2RlOjpUeXBlPihzdGF0aWNGaWVsZC0+bV90eXBlKSksIENsYXNz
RWxlbWVudFRhZzo6U3RhdGljKTsKKwogICAgIHJldHVybiBkc3RPckNvbnN0cnVjdG9yOwogfQog
CkBAIC03MDUsNyArNzkzLDYgQEAgdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0UHV0Q29uc3Rh
bnRQcm9wZXJ0eShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWcKICAgICAgICAgZW1p
dFB1dEhvbWVPYmplY3QoZ2VuZXJhdG9yLCB2YWx1ZS5nZXQoKSwgbmV3T2JqKTsKIAogICAgIGlm
IChub2RlLmlzQ2xhc3NQcm9wZXJ0eSgpKSB7Ci0gICAgICAgIEFTU0VSVChub2RlLm5lZWRzU3Vw
ZXJCaW5kaW5nKCkpOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lUmVn
aXN0ZXI7CiAgICAgICAgIGlmIChub2RlLm5hbWUoKSkKICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIsICpub2RlLm5hbWUoKSk7CkBA
IC03MzUsNiArODIyLDcgQEAgdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0UHV0Q29uc3RhbnRQ
cm9wZXJ0eShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWcKIHZvaWQgUHJvcGVydHlM
aXN0Tm9kZTo6ZW1pdFNhdmVDb21wdXRlZEZpZWxkTmFtZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBQcm9wZXJ0eU5vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUuaXNDb21wdXRl
ZENsYXNzRmllbGQoKSk7CisgICAgQVNTRVJUKCFub2RlLmlzU3RhdGljQ2xhc3NGaWVsZCgpKTsK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlFeHByOwogICAgIGNvbnN0IElkZW50aWZp
ZXImIGRlc2NyaXB0aW9uID0gKm5vZGUubmFtZSgpOwogICAgIGF1dG8gbGVuZ3RoID0gbm9kZS5p
c1ByaXZhdGUoKSA/IGRlc2NyaXB0aW9uLmxlbmd0aCgpIDogMTsKQEAgLTc0Myw3ICs4MzEsMTEg
QEAgdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1lKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFAKIAogICAgIHByb3BlcnR5RXhwciA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShub2RlLm1fZXhwcmVzc2lvbik7CiAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHlO
YW1lID0gZ2VuZXJhdG9yLmVtaXRUb1Byb3BlcnR5S2V5KHByb3BlcnR5RXhwci5nZXQoKSwgcHJv
cGVydHlFeHByLmdldCgpKTsKKyAgICBSZWY8TGFiZWw+IHZhbGlkUHJvcGVydHlOYW1lTGFiZWwg
PSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGdl
bmVyYXRvci5lbWl0QmluYXJ5T3A8T3BFcT4oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBnZW5l
cmF0b3IuZW1pdExvYWQobnVsbHB0ciwgSlNWYWx1ZShnZW5lcmF0b3IuYWRkU3RyaW5nQ29uc3Rh
bnQoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpKSksIHByb3BlcnR5TmFtZSwg
T3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnN0cmluZ1R5cGUoKSwgUmVzdWx0VHlwZTo6c3RyaW5n
VHlwZSgpKSksIHZhbGlkUHJvcGVydHlOYW1lTGFiZWwuZ2V0KCkpOworICAgIGdlbmVyYXRvci5l
bWl0VGhyb3dUeXBlRXJyb3IoIkNhbm5vdCBkZWNsYXJlIGEgc3RhdGljIGZpZWxkIG5hbWVkICdw
cm90b3R5cGUnIik7CiAKKyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHZhbGlkUHJvcGVydHlOYW1l
TGFiZWwuZ2V0KCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5l
bWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Nj
b3BlKHNjb3BlLmdldCgpLCB2YXIsIHByb3BlcnR5TmFtZSwgVGhyb3dJZk5vdEZvdW5kLCBJbml0
aWFsaXphdGlvbk1vZGU6OkNvbnN0SW5pdGlhbGl6YXRpb24pOwogICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZVR5cGUocHJvcGVydHlOYW1lLCB2YXIsIHBvc2l0aW9uKCksIEpTVGV4dFBvc2l0aW9u
KC0xLCBwb3NpdGlvbigpLm9mZnNldCArIGxlbmd0aCwgLTEpKTsKQEAgLTQwMjgsNDQgKzQxMjAs
NyBAQCBSZWdpc3RlcklEKiBBd2FpdEV4cHJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRAogCiB2b2lkIERlZmluZUZpZWxkTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogewot
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsK
LQotICAgIGlmICghbV9hc3NpZ24pCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZCh2YWx1ZS5n
ZXQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
Tm9kZSh2YWx1ZS5nZXQoKSwgbV9hc3NpZ24pOwotICAgICAgICBpZiAobV9pZGVudCAmJiBnZW5l
cmF0b3Iuc2hvdWxkRW1pdFNldEZ1bmN0aW9uTmFtZShtX2Fzc2lnbikpCi0gICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdFNldEZ1bmN0aW9uTmFtZSh2YWx1ZS5nZXQoKSwgKm1faWRlbnQpOwotICAg
IH0KLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBEZWZpbmVGaWVsZE5vZGU6Ok5h
bWU6IHsKLSAgICAgICAgLy8gRklYTUU6IEltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgcHVibGljIGNs
YXNzIGZpZWxkcwotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MzMwCi0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBn
ZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0ciwgKm1faWRlbnQpOwotICAgICAgICBnZW5lcmF0b3Iu
ZW1pdENhbGxEZWZpbmVQcm9wZXJ0eShnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCksIHByb3BlcnR5
TmFtZS5nZXQoKSwgdmFsdWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIEJ5dGVjb2RlR2VuZXJh
dG9yOjpQcm9wZXJ0eUNvbmZpZ3VyYWJsZSB8IEJ5dGVjb2RlR2VuZXJhdG9yOjpQcm9wZXJ0eVdy
aXRhYmxlIHwgQnl0ZWNvZGVHZW5lcmF0b3I6OlByb3BlcnR5RW51bWVyYWJsZSwgbV9wb3NpdGlv
bik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIERlZmluZUZpZWxkTm9kZTo6UHJp
dmF0ZU5hbWU6IHsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhwb3NpdGlv
bigpLCBwb3NpdGlvbigpLCBwb3NpdGlvbigpICsgbV9pZGVudC0+bGVuZ3RoKCkpOwotICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByaXZhdGVGaWVsZEFkZChnZW5lcmF0b3IudGhpc1JlZ2lzdGVyKCks
ICptX2lkZW50LCB2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IERlZmluZUZpZWxkTm9kZTo6Q29tcHV0ZWROYW1lOiB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBy
b3ZlIHBlcmZvcm1hbmNlIG9mIHB1YmxpYyBjbGFzcyBmaWVsZHMKLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODMzMAotICAgICAgICBWYXJpYWJs
ZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoKm1faWRlbnQpOwotICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKCF2YXIubG9jYWwoKSwgIkNvbXB1dGVkIG5hbWVzIG11c3QgYmUgc3RvcmVkIGlu
IGNhcHR1cmVkIHZhcmlhYmxlcyIpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8ocG9zaXRpb24oKSwgcG9zaXRpb24oKSwgcG9zaXRpb24oKSArIDEpOwotICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIHZhcik7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBw
cml2YXRlTmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRHZXRGcm9tU2NvcGUocHJpdmF0ZU5hbWUuZ2V0KCksIHNjb3BlLmdldCgpLCB2YXIsIFRo
cm93SWZOb3RGb3VuZCk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocHJpdmF0
ZU5hbWUuZ2V0KCksIHZhciwgbV9wb3NpdGlvbiwgSlNUZXh0UG9zaXRpb24oLTEsIG1fcG9zaXRp
b24ub2Zmc2V0ICsgbV9pZGVudC0+bGVuZ3RoKCksIC0xKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0Q2FsbERlZmluZVByb3BlcnR5KGdlbmVyYXRvci50aGlzUmVnaXN0ZXIoKSwgcHJpdmF0ZU5h
bWUuZ2V0KCksIHZhbHVlLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBCeXRlY29kZUdlbmVyYXRv
cjo6UHJvcGVydHlDb25maWd1cmFibGUgfCBCeXRlY29kZUdlbmVyYXRvcjo6UHJvcGVydHlXcml0
YWJsZSB8IEJ5dGVjb2RlR2VuZXJhdG9yOjpQcm9wZXJ0eUVudW1lcmFibGUsIG1fcG9zaXRpb24p
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQorICAgIGVtaXRDbGFzc0ZpZWxkKGdlbmVy
YXRvciwgZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpLCBtX2Fzc2lnbiwgbnVsbHB0ciwgbV9pZGVu
dCwgbV9wb3NpdGlvbiwgbV90eXBlLCBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlKTsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENsYXNzRGVjbE5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL1JlZ2lzdGVySUQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvUmVnaXN0ZXJJRC5oCmluZGV4IGQ5YWRmZmNlNGQ4Li44ZDI2MTA4NjkxMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9SZWdpc3RlcklELmgKQEAg
LTM2LDggKzM2LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVnaXN0ZXJJRCB7
Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlZ2lzdGVySUQpOwotCiAgICAgICAgIGZy
aWVuZCBjbGFzcyBWaXJ0dWFsUmVnaXN0ZXI7CiAgICAgcHVibGljOgogICAgICAgICBSZWdpc3Rl
cklEKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCAzY2E0MmY4YmJhYS4u
N2U0YWZiYTRhOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTcxNiw2
ICs3MTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUHJvcGVydHlOb2RlKGNvbnN0IElk
ZW50aWZpZXImLCBFeHByZXNzaW9uTm9kZSogcHJvcGVydHlOYW1lLCBFeHByZXNzaW9uTm9kZSos
IFR5cGUsIFB1dFR5cGUsIFN1cGVyQmluZGluZywgQ2xhc3NFbGVtZW50VGFnKTsKIAogICAgICAg
ICBFeHByZXNzaW9uTm9kZSogZXhwcmVzc2lvbk5hbWUoKSBjb25zdCB7IHJldHVybiBtX2V4cHJl
c3Npb247IH0KKyAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGFzc2lnbk5vZGUoKSBjb25zdCB7IHJl
dHVybiBtX2Fzc2lnbjsgfQogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CiAKICAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQpAQCAtNzI1LDYgKzcyNiw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIGlzSW5zdGFuY2VDbGFzc1Byb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q2xhc3NFbGVtZW50VGFnPihtX2NsYXNzRWxlbWVudFRhZykgPT0g
Q2xhc3NFbGVtZW50VGFnOjpJbnN0YW5jZTsgfQogICAgICAgICBib29sIGlzQ2xhc3NGaWVsZCgp
IGNvbnN0IHsgcmV0dXJuIGlzQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGluZygp
OyB9CiAgICAgICAgIGJvb2wgaXNJbnN0YW5jZUNsYXNzRmllbGQoKSBjb25zdCB7IHJldHVybiBp
c0luc3RhbmNlQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGluZygpOyB9CisgICAg
ICAgIGJvb2wgaXNTdGF0aWNDbGFzc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gaXNTdGF0aWNDbGFz
c1Byb3BlcnR5KCkgJiYgIW5lZWRzU3VwZXJCaW5kaW5nKCk7IH0KICAgICAgICAgYm9vbCBpc092
ZXJyaWRkZW5CeUR1cGxpY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNPdmVycmlkZGVuQnlEdXBs
aWNhdGU7IH0KICAgICAgICAgYm9vbCBpc1ByaXZhdGUoKSBjb25zdCB7IHJldHVybiBtX2lzUHJp
dmF0ZTsgfQogICAgICAgICBib29sIGhhc0NvbXB1dGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwcmVzc2lvbjsgfQpAQCAtNzYyLDE3ICs3NjQsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KICAgICAgICAgYm9vbCBoYXNJbnN0YW5jZUZpZWxkcygpIGNvbnN0OwogCisgICAgICAg
IGJvb2wgaXNTdGF0aWNDbGFzc0ZpZWxkKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fbm9kZS0+aXNTdGF0aWNDbGFzc0ZpZWxkKCk7CisgICAgICAgIH0KKwogICAgICAg
ICBzdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVMZXhpY2FsU2NvcGVGb3JDbGFzcyhQcm9wZXJ0eUxp
c3ROb2RlKik7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+
Kik7CiAKICAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlOb2RlOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0ID0gbnVsbHB0cikgb3ZlcnJpZGUKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuIGVtaXRCeXRlY29kZShnZW5lcmF0b3IsIGRzdCwgbnVsbHB0ciwgbnVs
bHB0cik7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCBlbWl0UHV0Q29uc3RhbnRQcm9wZXJ0eShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqLCBQcm9wZXJ0eU5vZGUmKTsKICAgICAgICAg
dm9pZCBlbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1lKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUHJvcGVy
dHlOb2RlJik7CisgICAgICAgIHZvaWQgZW1pdFN0YXRpY0ZpZWxkKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCosIFByb3BlcnR5Tm9kZSYpOwogCiAgICAgICAgIFByb3BlcnR5Tm9kZSog
bV9ub2RlOwogICAgICAgICBQcm9wZXJ0eUxpc3ROb2RlKiBtX25leHQgeyBudWxscHRyIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5kZXggN2RlMWRjMTc0NmYuLjAz
ZWIxMDk0MjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC0y
OTUyLDcgKzI5NTIsNiBAQCBwYXJzZU1ldGhvZDoKICAgICAgICAgICAgIEFTU0VSVChPcHRpb25z
Ojp1c2VDbGFzc0ZpZWxkcygpKTsKICAgICAgICAgICAgIEpTVG9rZW4gdG9rZW4gPSBtX3Rva2Vu
OwogICAgICAgICAgICAgaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKLSAgICAgICAgICAg
IGZhaWxJZlRydWUodGFnID09IENsYXNzRWxlbWVudFRhZzo6U3RhdGljLCAiU3RhdGljIGNsYXNz
IGVsZW1lbnQgY2Fubm90IGJlIHByaXZhdGUiKTsKICAgICAgICAgICAgIGZhaWxJZlRydWUoaXNH
ZXR0ZXIgfHwgaXNTZXR0ZXIsICJDYW5ub3QgcGFyc2UgY2xhc3MgbWV0aG9kIHdpdGggcHJpdmF0
ZSBuYW1lIik7CiAgICAgICAgICAgICBBU1NFUlQoaWRlbnQpOwogICAgICAgICAgICAgbmV4dCgp
OwpAQCAtMjk3NCwxMCArMjk3MywxMiBAQCBwYXJzZU1ldGhvZDoKICAgICAgICAgICAgIHR5cGUg
PSBzdGF0aWNfY2FzdDxQcm9wZXJ0eU5vZGU6OlR5cGU+KHR5cGUgfCAoaXNHZXR0ZXIgPyBQcm9w
ZXJ0eU5vZGU6OkdldHRlciA6IFByb3BlcnR5Tm9kZTo6U2V0dGVyKSk7CiAgICAgICAgICAgICBw
cm9wZXJ0eSA9IHBhcnNlR2V0dGVyU2V0dGVyKGNvbnRleHQsIGFsd2F5c1N0cmljdEluc2lkZUNs
YXNzLCB0eXBlLCBtZXRob2RTdGFydCwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCB0YWcpOwogICAg
ICAgICAgICAgZmFpbElmRmFsc2UocHJvcGVydHksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2Qi
KTsKLSAgICAgICAgfSBlbHNlIGlmIChPcHRpb25zOjp1c2VDbGFzc0ZpZWxkcygpICYmICFtYXRj
aChPUEVOUEFSRU4pICYmIHRhZyA9PSBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlICYmIHBhcnNl
TW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGUgJiYgIWlzR2V0dGVyICYmICFpc1Nl
dHRlcikgeworICAgICAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVzZUNsYXNzRmllbGRzKCkgJiYg
IW1hdGNoKE9QRU5QQVJFTikgJiYgcGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9k
TW9kZSAmJiAhaXNHZXR0ZXIgJiYgIWlzU2V0dGVyKSB7CiAgICAgICAgICAgICBpZiAoaWRlbnQp
IHsKICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50ID09IHByb3BlcnR5
TmFtZXMuY29uc3RydWN0b3IsICJDYW5ub3QgZGVjbGFyZSBjbGFzcyBmaWVsZCBuYW1lZCAnY29u
c3RydWN0b3InIik7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKCppZGVudCA9
PSBwcm9wZXJ0eU5hbWVzLmNvbnN0cnVjdG9yUHJpdmF0ZUZpZWxkLCAiQ2Fubm90IGRlY2xhcmUg
cHJpdmF0ZSBjbGFzcyBmaWVsZCBuYW1lZCAnI2NvbnN0cnVjdG9yJyIpOworICAgICAgICAgICAg
ICAgIGlmICh0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpTdGF0aWMpCisgICAgICAgICAgICAgICAg
ICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gcHJvcGVydHlOYW1lcy5wcm90b3R5cGUs
ICJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyBmaWVsZCBuYW1lZCAncHJvdG90eXBlJyIpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY29tcHV0ZWRQcm9wZXJ0eU5hbWUpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKaW5kZXggMjBlZGNj
ZmJjZTQuLjJmM2QyNjg5OGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcApAQCAtNjg1LDcgKzY4NSw2IEBAIHZvaWQgSlNGdW5jdGlvbjo6c2V0RnVu
Y3Rpb25OYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlvbigpKTsKLSAgICBBU1NFUlQoanNFeGVjdXRh
YmxlKCktPmVjbWFOYW1lKCkuaXNOdWxsKCkpOwogICAgIFN0cmluZyBuYW1lOwogICAgIGlmICh2
YWx1ZS5pc1N5bWJvbCgpKSB7CiAgICAgICAgIFByaXZhdGVOYW1lIHByaXZhdGVOYW1lID0gYXNT
eW1ib2wodmFsdWUpLT5wcml2YXRlTmFtZSgpOwotLSAKMi4yMS4wCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400054</attachid>
            <date>2020-05-22 09:49:07 -0700</date>
            <delta_ts>2020-06-05 02:57:46 -0700</delta_ts>
            <desc>Add support for static public fields</desc>
            <filename>0001-JSC-Add-support-for-static-public-class-fields.patch</filename>
            <type>text/plain</type>
            <size>36179</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBmNDY3ODEwY2QzNDhhNjAzNWRjZTU4MGRhOTcxMDZmN2Q0YjVhYTM0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/WGFuPTIwTD1DMz1CM3Blej89IDx4YW5AaWdh
bGlhLmNvbT4KRGF0ZTogVGh1LCAxNiBBcHIgMjAyMCAxODoyMToxMyArMDIwMApTdWJqZWN0OiBb
UEFUQ0hdIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcwog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5NQoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpKU1Rlc3RzOgoKKiB0ZXN0MjYyL2NvbmZpZy55YW1sOiBlbmFi
bGUgc3RhdGljIHB1YmxpYyBmaWVsZHMuCgpTb3VyY2UvSmF2YVNjcmlwdENvcmU6CgpBZGQgc3Vw
cG9ydCBmb3Igc3RhdGljIHB1YmxpYyBjbGFzcyBmaWVsZHMuIFdlIGNhbiByZXVzZSBtb3N0IG9m
CnRoZSBleGlzdGluZyBtYWNoaW5lcnkgYXZhaWxhYmxlIGZvciBpbnN0YW5jZSBmaWVsZHMsIHdp
dGggYQpjb3VwbGUgb2YgaXNzdWVzIHRoYXQgbWVyaXQgc3BlY2lhbCBjb21tZW50OgoKU3RhdGlj
IGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIGxpa2UgaW5zdGFuY2UgZmllbGRzLCB3aXRoIGEKc3lu
dGhldGljIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUgdG8gYWxsb3cgdXMgdG8gdHJpdmlhbGx5IGZv
bGxvdwp0aGUgc2NvcGluZyBydWxlcyBpbiB0aGUgc3BlYy4gQXMgaXQgaGFwcGVucyB3aXRoIGlu
c3RhbmNlIGZpZWxkcwp0aGlzIGNvdWxkIGJlIGlubGluZWQgaW4gYSBmdXR1cmUgcGF0Y2guCgpU
aGUgd2F5IHdlIHN0b3JlIGNvbXB1dGVkIHByb3BlcnR5IGtleXMgbmVlZHMgdG8gYmUKbW9kaWZp
ZWQuIEJlZm9yZSB3ZSBhc3N1bWVkIHRoZSBzb3VyY2UgY29kZSBvcmRlciB3b3VsZCBiZQppZGVu
dGljYWwgdG8gdGhlIGV2YWx1YXRpb24gb3JkZXIgKHdoaWNoIHdhcyB0cnVlIGZvciBpbnN0YW5j
ZQpmaWVsZHMpLiBXaXRoIHN0YXRpYyBmaWVsZHMgdGhpcyBjYW4gbm90IGJlIHRoZSBjYXNlLCBz
aW5jZSBzdGF0aWMKZmllbGRzIGFyZSBhbHdheXMgaW5pdGlhbGl6ZWQgZmlyc3QuIFRvIGFsbG93
IGZvciB0aGlzIG1pc21hdGNoCnRoZSBjb21wdXRlZCBwcm9wZXJ0eSBrZXlzIGZvciBpbnN0YW5j
ZSBmaWVsZHMgYXJlIHN0b3JlZCB3aXRoIGFuCmV2ZW4gaWRlbnRpZmllciwgYW5kIHRob3NlIGZv
ciBzdGF0aWMgZmllbGRzIGFyZSBzdG9yZWQgd2l0aCBhbgpvZGQgaWRlbnRpZmllci4gVGhlIGZp
ZWxkIHBhcnNlciwgdXBvbiBmaWd1cmluZyBvdXQgd2hldGhlciBpdCdzCmluaXRpYWxpemluZyB0
aGUgc3RhdGljIG9yIHRoZSBpbnN0YW5jZSBmaWVsZHMsIHdpbGwga25vdyB3aGVyZSB0bwpsb29r
IHVwIHRoZSBrZXkuCgoqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcDoK
KEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKiBieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgoqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHA6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxp
emVyRnVuY3Rpb24pOgoqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgoqIGJ5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0
ZWNvZGUpOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1l
KToKKEpTQzo6RGVmaW5lRmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpDbGFzc0V4cHJO
b2RlOjplbWl0Qnl0ZWNvZGUpOgoqIHBhcnNlci9BU1RCdWlsZGVyLmg6CihKU0M6OkFTVEJ1aWxk
ZXI6OmNyZWF0ZURlZmluZUZpZWxkKToKKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgooSlND
OjpEZWZpbmVGaWVsZE5vZGU6OkRlZmluZUZpZWxkTm9kZSk6CiogcGFyc2VyL05vZGVzLmg6Ciog
cGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKToK
KEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MpOgooSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyk6CiogcGFy
c2VyL1BhcnNlci5oOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UpOgooSlNDOjpwYXJz
ZSk6CiogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRl
RGVmaW5lRmllbGQpOgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpTRnVuY3Rpb246
OnNldEZ1bmN0aW9uTmFtZSk6Ci0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDkgKysrCiBKU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwgICAgICAg
ICAgICAgICAgICAgfCAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgIHwgNTUgKysrKysrKysrKysrKysrKysrKwogLi4uL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmNwcCAgIHwgIDQgKy0KIC4uLi9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5oICAgICB8IDEyICsrLS0KIC4uLi9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwICAgICAgICB8ICA0ICstCiAuLi4vYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmggICAgICAgICAgfCAgMiArLQogLi4uL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwICAgICAgICAgICAgIHwgMzUgKysrKysrKysrKystCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0FTVEJ1aWxkZXIuaCAgICAgfCAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2RlQ29uc3RydWN0b3JzLmggIHwgIDMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaCAgICAgICAgICB8ICA5ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwICAgICAgIHwgNDYgKysrKysrKysrKysrLS0tLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCAgICAgICAgIHwgMTAgKystLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmggIHwgIDIgKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwICB8ICAxIC0KIDE1IGZpbGVzIGNoYW5nZWQs
IDE2MiBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBmY2U4NWQ3MWI5OS4uMzFmOTEw
YTVjNzk4IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIwLTA1LTIyICBYYW4gTMOzcGV6ICA8eGFuQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0pTQ10gQWRkIHN1cHBvcnQgZm9yIHN0YXRpYyBwdWJsaWMgY2xh
c3MgZmllbGRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTQwOTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHRlc3QyNjIvY29uZmlnLnlhbWw6IGVuYWJsZSBzdGF0aWMgcHVibGljIGZpZWxkcy4KKwog
MjAyMC0wNS0yMSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAg
ICAgICAgVXNlIEBpc1VuZGVmaW5lZE9yTnVsbCBpbnN0ZWFkIG9mIGFic3RyYWN0IGVxdWFsaXR5
IHdpdGggbnVsbApkaWZmIC0tZ2l0IGEvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sIGIvSlNU
ZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sCmluZGV4IDdiZWQwNjQ0YWIyNS4uMmVlNTFmZjgyZjQx
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwKKysrIGIvSlNUZXN0cy90
ZXN0MjYyL2NvbmZpZy55YW1sCkBAIC02LDYgKzYsNyBAQCBmbGFnczoKICAgSW50bC5SZWxhdGl2
ZVRpbWVGb3JtYXQ6IHVzZUludGxSZWxhdGl2ZVRpbWVGb3JtYXQKICAgV2Vha1JlZjogdXNlV2Vh
a1JlZnMKICAgY2xhc3MtZmllbGRzLXB1YmxpYzogdXNlUHVibGljQ2xhc3NGaWVsZHMKKyAgY2xh
c3Mtc3RhdGljLWZpZWxkcy1wdWJsaWM6IHVzZVB1YmxpY0NsYXNzRmllbGRzCiBza2lwOgogICBm
ZWF0dXJlczoKICAgICAtIFNoYXJlZEFycmF5QnVmZmVyCkBAIC0xNiw3ICsxNyw2IEBAIHNraXA6
CiAKICAgICAtIGNsYXNzLWZpZWxkcy1wcml2YXRlCiAgICAgLSBjbGFzcy1tZXRob2RzLXByaXZh
dGUKLSAgICAtIGNsYXNzLXN0YXRpYy1maWVsZHMtcHVibGljCiAgICAgLSBjbGFzcy1zdGF0aWMt
ZmllbGRzLXByaXZhdGUKICAgICAtIGNsYXNzLXN0YXRpYy1tZXRob2RzLXByaXZhdGUKICAgICAt
IGhvc3QtZ2MtcmVxdWlyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGNjOTI1MWJmZWRi
YS4uZjY0YTZhMTk2NWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBA
QAorMjAyMC0wNS0yMiAgWGFuIEzDs3BleiAgPHhhbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtK
U0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDk1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHN0
YXRpYyBwdWJsaWMgY2xhc3MgZmllbGRzLiBXZSBjYW4gcmV1c2UgbW9zdCBvZgorICAgICAgICB0
aGUgZXhpc3RpbmcgbWFjaGluZXJ5IGF2YWlsYWJsZSBmb3IgaW5zdGFuY2UgZmllbGRzLCB3aXRo
IGEKKyAgICAgICAgY291cGxlIG9mIGlzc3VlcyB0aGF0IG1lcml0IHNwZWNpYWwgY29tbWVudDoK
KworICAgICAgICBTdGF0aWMgZmllbGRzIGFyZSBpbml0aWFsaXplZCwgbGlrZSBpbnN0YW5jZSBm
aWVsZHMsIHdpdGggYQorICAgICAgICBzeW50aGV0aWMgZnVuY3Rpb24uIFRoaXMgaXMgZG9uZSB0
byBhbGxvdyB1cyB0byB0cml2aWFsbHkgZm9sbG93CisgICAgICAgIHRoZSBzY29waW5nIHJ1bGVz
IGluIHRoZSBzcGVjLiBBcyBpdCBoYXBwZW5zIHdpdGggaW5zdGFuY2UgZmllbGRzCisgICAgICAg
IHRoaXMgY291bGQgYmUgaW5saW5lZCBpbiBhIGZ1dHVyZSBwYXRjaC4KKworICAgICAgICBUaGUg
d2F5IHdlIHN0b3JlIGNvbXB1dGVkIHByb3BlcnR5IGtleXMgbmVlZHMgdG8gYmUKKyAgICAgICAg
bW9kaWZpZWQuIEJlZm9yZSB3ZSBhc3N1bWVkIHRoZSBzb3VyY2UgY29kZSBvcmRlciB3b3VsZCBi
ZQorICAgICAgICBpZGVudGljYWwgdG8gdGhlIGV2YWx1YXRpb24gb3JkZXIgKHdoaWNoIHdhcyB0
cnVlIGZvciBpbnN0YW5jZQorICAgICAgICBmaWVsZHMpLiBXaXRoIHN0YXRpYyBmaWVsZHMgdGhp
cyBjYW4gbm90IGJlIHRoZSBjYXNlLCBzaW5jZSBzdGF0aWMKKyAgICAgICAgZmllbGRzIGFyZSBh
bHdheXMgaW5pdGlhbGl6ZWQgZmlyc3QuIFRvIGFsbG93IGZvciB0aGlzIG1pc21hdGNoCisgICAg
ICAgIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSBrZXlzIGZvciBpbnN0YW5jZSBmaWVsZHMgYXJlIHN0
b3JlZCB3aXRoIGFuCisgICAgICAgIGV2ZW4gaWRlbnRpZmllciwgYW5kIHRob3NlIGZvciBzdGF0
aWMgZmllbGRzIGFyZSBzdG9yZWQgd2l0aCBhbgorICAgICAgICBvZGQgaWRlbnRpZmllci4gVGhl
IGZpZWxkIHBhcnNlciwgdXBvbiBmaWd1cmluZyBvdXQgd2hldGhlciBpdCdzCisgICAgICAgIGlu
aXRpYWxpemluZyB0aGUgc3RhdGljIG9yIHRoZSBpbnN0YW5jZSBmaWVsZHMsIHdpbGwga25vdyB3
aGVyZSB0bworICAgICAgICBsb29rIHVwIHRoZSBrZXkuCisKKyAgICAgICAgKiBieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0NsYXNzRmll
bGRJbml0aWFsaXplckZ1bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFNhdmVDb21wdXRlZEZpZWxkTmFtZSk6CisgICAgICAg
IChKU0M6OkRlZmluZUZpZWxkTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2xh
c3NFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5o
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEZWZpbmVGaWVsZCk6CisgICAgICAg
ICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6RGVmaW5lRmllbGRO
b2RlOjpEZWZpbmVGaWVsZE5vZGUpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAg
ICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VJbm5lcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNz
KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5zdGFuY2VGaWVsZElu
aXRpYWxpemVyU291cmNlRWxlbWVudHMpOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAg
ICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlKToKKyAgICAgICAgKEpTQzo6cGFy
c2UpOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5
bnRheENoZWNrZXI6OmNyZWF0ZURlZmluZUZpZWxkKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVu
Y3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUpOgor
CiAyMDIwLTA1LTIxICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CiAKICAg
ICAgICAgVmFyaW91cyBjb21waWxlLXRpbWUgYm9vbGVhbiBmbGFncyBjb3VsZC9zaG91bGQgYmUg
bWFya2VkIGNvbnN0ZXhwcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKaW5kZXggYmNmN2QzYWQ4
NWViLi4wMWRiNTA1Y2YzODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcApAQCAtNTYsOSAr
NTYsOSBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhdGVVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKAogICAgIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlID0g
ZXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSA/IEpTUGFyc2VyU3RyaWN0TW9kZTo6U3Ry
aWN0IDogSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3Q7CiAgICAgSlNQYXJzZXJTY3JpcHRN
b2RlIHNjcmlwdE1vZGUgPSBleGVjdXRhYmxlLT5zY3JpcHRNb2RlKCk7CiAgICAgQVNTRVJUKGlz
RnVuY3Rpb25QYXJzZU1vZGUoZXhlY3V0YWJsZS0+cGFyc2VNb2RlKCkpKTsKLSAgICBWZWN0b3I8
SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zID0gZXhlY3V0YWJsZS0+aW5z
dGFuY2VGaWVsZExvY2F0aW9ucygpOworICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGNsYXNz
RmllbGRMb2NhdGlvbnMgPSBleGVjdXRhYmxlLT5jbGFzc0ZpZWxkTG9jYXRpb25zKCk7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uTm9kZT4gZnVuY3Rpb24gPSBwYXJzZTxGdW5jdGlvbk5v
ZGU+KAotICAgICAgICB2bSwgc291cmNlLCBleGVjdXRhYmxlLT5uYW1lKCksIGJ1aWx0aW5Nb2Rl
LCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBleGVjdXRhYmxlLT5wYXJzZU1vZGUoKSwgZXhlY3V0
YWJsZS0+c3VwZXJCaW5kaW5nKCksIGVycm9yLCBudWxscHRyLCBDb25zdHJ1Y3RvcktpbmQ6Ok5v
bmUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBudWxs
cHRyLCBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgdm0sIHNvdXJjZSwgZXhlY3V0
YWJsZS0+bmFtZSgpLCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZXhlY3V0
YWJsZS0+cGFyc2VNb2RlKCksIGV4ZWN1dGFibGUtPnN1cGVyQmluZGluZygpLCBlcnJvciwgbnVs
bHB0ciwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIEV2
YWxDb250ZXh0VHlwZTo6Tm9uZSwgbnVsbHB0ciwgY2xhc3NGaWVsZExvY2F0aW9ucyk7CiAKICAg
ICBpZiAoIWZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VSVChlcnJvci5pc1ZhbGlkKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuaAppbmRleCA4ZmZlMzAwZDg0NDIuLjU4MDMyYWQ1ZWRkNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmgKQEAgLTIwOSwyMyArMjA5LDIzIEBAIHB1YmxpYzoKICAgICAgICAg
U3RyaW5nIG1fc291cmNlVVJMRGlyZWN0aXZlOwogICAgICAgICBTdHJpbmcgbV9zb3VyY2VNYXBw
aW5nVVJMRGlyZWN0aXZlOwogICAgICAgICBDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZSBtX3Bh
cmVudFNjb3BlVERaVmFyaWFibGVzOwotICAgICAgICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+IG1f
aW5zdGFuY2VGaWVsZExvY2F0aW9uczsKKyAgICAgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiBt
X2NsYXNzRmllbGRMb2NhdGlvbnM7CiAgICAgfTsKIAogICAgIE5lZWRzQ2xhc3NGaWVsZEluaXRp
YWxpemVyIG5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8TmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXI+KG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlh
bGl6ZXIpOyB9CiAKLSAgICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9j
YXRpb25zKCkgY29uc3QKKyAgICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBjbGFzc0ZpZWxkTG9j
YXRpb25zKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX3JhcmVEYXRhKQotICAgICAgICAg
ICAgcmV0dXJuICZtX3JhcmVEYXRhLT5tX2luc3RhbmNlRmllbGRMb2NhdGlvbnM7CisgICAgICAg
ICAgICByZXR1cm4gJm1fcmFyZURhdGEtPm1fY2xhc3NGaWVsZExvY2F0aW9uczsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgdm9pZCBzZXRJbnN0YW5jZUZpZWxkTG9jYXRp
b25zKFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mJiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQorICAg
IHZvaWQgc2V0Q2xhc3NGaWVsZExvY2F0aW9ucyhWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiYgY2xh
c3NGaWVsZExvY2F0aW9ucykKICAgICB7Ci0gICAgICAgIGlmIChpbnN0YW5jZUZpZWxkTG9jYXRp
b25zLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKGNsYXNzRmllbGRMb2NhdGlvbnMuaXNFbXB0eSgp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbnN1cmVSYXJlRGF0YSgpLm1faW5zdGFu
Y2VGaWVsZExvY2F0aW9ucyA9IFdURk1vdmUoaW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7CisgICAg
ICAgIGVuc3VyZVJhcmVEYXRhKCkubV9jbGFzc0ZpZWxkTG9jYXRpb25zID0gV1RGTW92ZShjbGFz
c0ZpZWxkTG9jYXRpb25zKTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4
IDQ5ZGY5OTE3NGUxOC4uNzUxYmYzNDEzYmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMzA2NCw3
ICszMDY0LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdEZWZhdWx0
Q29uc3RydWN0b3IoUmVnaXN0ZXJJRCogZHN0LCBDb25zdHIKICAgICByZXR1cm4gZHN0OwogfQog
Ci1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0luc3RhbmNlRmllbGRJbml0
aWFsaXplckZ1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYm
IGluc3RhbmNlRmllbGRMb2NhdGlvbnMsIGJvb2wgaXNEZXJpdmVkKQorUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdp
c3RlcklEKiBkc3QsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mJiBjbGFzc0ZpZWxkTG9jYXRpb25z
LCBib29sIGlzRGVyaXZlZCkKIHsKICAgICBEZXJpdmVkQ29udGV4dFR5cGUgbmV3RGVyaXZlZENv
bnRleHRUeXBlOwogICAgIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmc7CkBAIC0zMDg0LDcgKzMw
ODQsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0luc3RhbmNlRmll
bGRJbml0aWFsaXplckZ1bmN0aW9uKFJlZ2lzdGVySQogICAgIEZ1bmN0aW9uTWV0YWRhdGFOb2Rl
IG1ldGFkYXRhKHBhcnNlckFyZW5hKCksIEpTVG9rZW5Mb2NhdGlvbigpLCBKU1Rva2VuTG9jYXRp
b24oKSwgMCwgMCwgMCwgMCwgMCwgYWx3YXlzU3RyaWN0SW5DbGFzcywgQ29uc3RydWN0b3JLaW5k
OjpOb25lLCBzdXBlckJpbmRpbmcsIDAsIHBhcnNlTW9kZSwgZmFsc2UpOwogICAgIG1ldGFkYXRh
LmZpbmlzaFBhcnNpbmcobV9zY29wZU5vZGUtPnNvdXJjZSgpLCBJZGVudGlmaWVyKCksIEZ1bmN0
aW9uTW9kZTo6TWV0aG9kRGVmaW5pdGlvbik7CiAgICAgYXV0byBpbml0aWFsaXplciA9IFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUobV92bSwgbV9zY29wZU5vZGUtPnNvdXJjZSgp
LCAmbWV0YWRhdGEsIGlzQnVpbHRpbkZ1bmN0aW9uKCkgPyBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlv
biA6IFVubGlua2VkTm9ybWFsRnVuY3Rpb24sIGNvbnN0cnVjdEFiaWxpdHksIHNjcmlwdE1vZGUo
KSwgV1RGTW92ZSh2YXJpYWJsZXNVbmRlclREWiksIG5ld0Rlcml2ZWRDb250ZXh0VHlwZSwgTmVl
ZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXI6Ok5vKTsKLSAgICBpbml0aWFsaXplci0+c2V0SW5zdGFu
Y2VGaWVsZExvY2F0aW9ucyhXVEZNb3ZlKGluc3RhbmNlRmllbGRMb2NhdGlvbnMpKTsKKyAgICBp
bml0aWFsaXplci0+c2V0Q2xhc3NGaWVsZExvY2F0aW9ucyhXVEZNb3ZlKGNsYXNzRmllbGRMb2Nh
dGlvbnMpKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9u
RXhwcihpbml0aWFsaXplcik7CiAgICAgT3BOZXdGdW5jRXhwOjplbWl0KHRoaXMsIGRzdCwgc2Nv
cGVSZWdpc3RlcigpLCBpbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggMTJlYzVlMTMzM2YxLi45NTcx
MzUwMTE3NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTc0OSw3ICs3NDksNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwg
RnVuY3Rpb25NZXRhZGF0YU5vZGUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0
aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmNFeHByTm9kZSopOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TmV3RGVmYXVsdENvbnN0cnVjdG9yKFJlZ2lzdGVySUQqIGRzdCwgQ29u
c3RydWN0b3JLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBJZGVudGlmaWVyJiBl
Y21hTmFtZSwgY29uc3QgU291cmNlQ29kZSYgY2xhc3NTb3VyY2UsIE5lZWRzQ2xhc3NGaWVsZElu
aXRpYWxpemVyKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0luc3RhbmNlRmllbGRJbml0
aWFsaXplckZ1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYm
IGluc3RhbmNlRmllbGRMb2NhdGlvbnMsIGJvb2wgaXNEZXJpdmVkKTsKKyAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdE5ld0NsYXNzRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKFJlZ2lzdGVySUQqIGRz
dCwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYmIGNsYXNzRmllbGRMb2NhdGlvbnMsIGJvb2wgaXNE
ZXJpdmVkKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Fycm93RnVuY3Rpb25FeHByZXNz
aW9uKFJlZ2lzdGVySUQqLCBBcnJvd0Z1bmNFeHByTm9kZSopOwogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0TmV3TWV0aG9kRGVmaW5pdGlvbihSZWdpc3RlcklEKiBkc3QsIE1ldGhvZERlZmluaXRp
b25Ob2RlKik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdSZWdFeHAoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdFeHAqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCBhZTExYzRiNTkwOTQuLjU5ZjVhM2E0NTljNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcApAQCAtNTQ5LDYgKzU0OSw5IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgLy8g
RmFzdCBjYXNlOiB0aGlzIGxvb3AganVzdCBoYW5kbGVzIHJlZ3VsYXIgdmFsdWUgcHJvcGVydGll
cy4KICAgICBQcm9wZXJ0eUxpc3ROb2RlKiBwID0gdGhpczsKICAgICBSZWdpc3RlcklEKiBkc3Qg
PSBudWxscHRyOworCisgICAgLy8gRmFzdCBjYXNlOiB0aGlzIGxvb3AganVzdCBoYW5kbGVzIHJl
Z3VsYXIgdmFsdWUgcHJvcGVydGllcy4KKyAgICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+IHN0YXRp
Y0ZpZWxkTG9jYXRpb25zOwogICAgIGZvciAoOyBwICYmIChwLT5tX25vZGUtPm1fdHlwZSAmIFBy
b3BlcnR5Tm9kZTo6Q29uc3RhbnQpOyBwID0gcC0+bV9uZXh0KSB7CiAgICAgICAgIGRzdCA9IHAt
Pm1fbm9kZS0+aXNJbnN0YW5jZUNsYXNzUHJvcGVydHkoKSA/IHByb3RvdHlwZSA6IGRzdE9yQ29u
c3RydWN0b3I7CiAKQEAgLTU2MSw2ICs1NjQsMTEgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHAtPmlzU3Rh
dGljQ2xhc3NGaWVsZCgpKSB7CisgICAgICAgICAgICBzdGF0aWNGaWVsZExvY2F0aW9ucy5hcHBl
bmQocC0+cG9zaXRpb24oKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCiAg
ICAgICAgIGVtaXRQdXRDb25zdGFudFByb3BlcnR5KGdlbmVyYXRvciwgZHN0LCAqcC0+bV9ub2Rl
KTsKICAgICB9CiAKQEAgLTYxOCw2ICs2MjYsMTEgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAg
aWYgKHAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAgICAgICAgICAgICAgc3RhdGljRmll
bGRMb2NhdGlvbnMuYXBwZW5kKHAtPnBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBIYW5kbGUgcmVndWxhciB2YWx1
ZXMuCiAgICAgICAgICAgICBpZiAobm9kZS0+bV90eXBlICYgUHJvcGVydHlOb2RlOjpDb25zdGFu
dCkgewogICAgICAgICAgICAgICAgIGVtaXRQdXRDb25zdGFudFByb3BlcnR5KGdlbmVyYXRvciwg
ZHN0LCAqbm9kZSk7CkBAIC03MDUsNiArNzE4LDE3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlz
dE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIXN0YXRpY0ZpZWxkTG9jYXRpb25zLmlzRW1w
dHkoKSkgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3RhdGljRmllbGRJbml0aWFsaXpl
ciA9IGdlbmVyYXRvci5lbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24oZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpLCBXVEZNb3ZlKHN0YXRpY0ZpZWxkTG9jYXRpb25zKSwgZmFsc2Ug
LypGSVhNRTogaXMgdGhlIGNsYXNzIGhlcml0YWdlIGV2ZW4gbmVlZGVkIGhlcmU/Ki8pOworICAg
ICAgICAvLyBGSVhNRTogU2tpcCB0aGlzIGlmIHRoZSBpbml0aWFsaXplciBmdW5jdGlvbiBpc24n
dCBnb2luZyB0byBuZWVkIGEgaG9tZSBvYmplY3QgKG5vIGV2YWwgb3Igc3VwZXIgcHJvcGVydGll
cykKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
Njg2NworICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIHN0YXRpY0ZpZWxkSW5p
dGlhbGl6ZXIuZ2V0KCksIGRzdE9yQ29uc3RydWN0b3IpOworCisgICAgICAgIENhbGxBcmd1bWVu
dHMgYXJncyhnZW5lcmF0b3IsIG51bGxwdHIpOworICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdz
LnRoaXNSZWdpc3RlcigpLCBkc3RPckNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRDYWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc3RhdGljRmllbGRJbml0aWFsaXplci5n
ZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdzLCBwb3NpdGlvbigpLCBwb3NpdGlvbigpLCBw
b3NpdGlvbigpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOworICAgIH0KKwogICAgIHJldHVybiBkc3RP
ckNvbnN0cnVjdG9yOwogfQogCkBAIC03NTcsNiArNzgxLDcgQEAgdm9pZCBQcm9wZXJ0eUxpc3RO
b2RlOjplbWl0UHV0Q29uc3RhbnRQcm9wZXJ0eShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWcKIHZvaWQgUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFNhdmVDb21wdXRlZEZpZWxkTmFtZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBQcm9wZXJ0eU5vZGUmIG5vZGUpCiB7CiAgICAg
QVNTRVJUKG5vZGUuaXNDb21wdXRlZENsYXNzRmllbGQoKSk7CisKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcHJvcGVydHlFeHByOwogCiAgICAgLy8gVGhlICduYW1lJyByZWZlcnMgdG8gYSBzeW50
aGV0aWMgbnVtZXJpYyB2YXJpYWJsZSBuYW1lIGluIHRoZSBwcml2YXRlIG5hbWUgc2NvcGUsIHdo
ZXJlIHRoZSBwcm9wZXJ0eSBrZXkgaXMgc2F2ZWQgZm9yIGxhdGVyIHVzZS4KQEAgLTc2Nyw2ICs3
OTIsMTEgQEAgdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1l
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFAKICAgICBwcm9wZXJ0eUV4cHIgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobm9kZS5tX2V4cHJlc3Npb24pOwogICAgIFJlZ2lzdGVySUQqIHByb3Bl
cnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0VG9Qcm9wZXJ0eUtleShnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIHByb3BlcnR5RXhwci5nZXQoKSk7CiAKKyAgICBSZWY8TGFiZWw+IHZhbGlkUHJvcGVy
dHlOYW1lTGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICBnZW5lcmF0b3IuZW1pdEp1
bXBJZkZhbHNlKGdlbmVyYXRvci5lbWl0QmluYXJ5T3A8T3BFcT4oZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBnZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0ciwgSlNWYWx1ZShnZW5lcmF0b3IuYWRk
U3RyaW5nQ29uc3RhbnQoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpKSksIHBy
b3BlcnR5TmFtZSwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnN0cmluZ1R5cGUoKSwgUmVzdWx0
VHlwZTo6c3RyaW5nVHlwZSgpKSksIHZhbGlkUHJvcGVydHlOYW1lTGFiZWwuZ2V0KCkpOworICAg
IGdlbmVyYXRvci5lbWl0VGhyb3dUeXBlRXJyb3IoIkNhbm5vdCBkZWNsYXJlIGEgc3RhdGljIGZp
ZWxkIG5hbWVkICdwcm90b3R5cGUnIik7CisKKyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHZhbGlk
UHJvcGVydHlOYW1lTGFiZWwuZ2V0KCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9
IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7CiAgICAgZ2VuZXJhdG9y
LmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCB2YXIsIHByb3BlcnR5TmFtZSwgVGhyb3dJZk5v
dEZvdW5kLCBJbml0aWFsaXphdGlvbk1vZGU6OkNvbnN0SW5pdGlhbGl6YXRpb24pOwogfQpAQCAt
NDYwOCw2ICs0NjM4LDcgQEAgdm9pZCBEZWZpbmVGaWVsZE5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRMb2FkKHZhbHVlLmdldCgpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBlbHNlIHsKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXROb2RlKHZhbHVlLmdldCgpLCBtX2Fzc2lnbik7CisKICAgICAgICAg
aWYgKG1faWRlbnQgJiYgZ2VuZXJhdG9yLnNob3VsZFNldEZ1bmN0aW9uTmFtZShtX2Fzc2lnbikp
CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFNldEZ1bmN0aW9uTmFtZSh2YWx1ZS5nZXQoKSwg
Km1faWRlbnQpOwogICAgIH0KQEAgLTQ2MjksNyArNDY2MCw3IEBAIHZvaWQgRGVmaW5lRmllbGRO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCopCiAgICAgICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZSgqbV9pZGVudCk7
CiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXZhci5sb2NhbCgpLCAiQ29tcHV0ZWQgbmFt
ZXMgbXVzdCBiZSBzdG9yZWQgaW4gY2FwdHVyZWQgdmFyaWFibGVzIik7CiAKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhwb3NpdGlvbigpLCBwb3NpdGlvbigpLCBwb3NpdGlv
bigpICsgMSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9wb3NpdGlv
biwgbV9wb3NpdGlvbiwgbV9wb3NpdGlvbiArIDEpOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIHZhcik7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcml2YXRlTmFtZSA9IGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2Nv
cGUocHJpdmF0ZU5hbWUuZ2V0KCksIHNjb3BlLmdldCgpLCB2YXIsIFRocm93SWZOb3RGb3VuZCk7
CkBAIC00NzI1LDcgKzQ3NTYsNyBAQCBSZWdpc3RlcklEKiBDbGFzc0V4cHJOb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRAogICAgICAgICBW
ZWN0b3I8SlNUZXh0UG9zaXRpb24+IGluc3RhbmNlRmllbGRMb2NhdGlvbnM7CiAgICAgICAgIGdl
bmVyYXRvci5lbWl0RGVmaW5lQ2xhc3NFbGVtZW50cyhtX2NsYXNzRWxlbWVudHMsIGNvbnN0cnVj
dG9yLmdldCgpLCBwcm90b3R5cGUuZ2V0KCksIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOwogICAg
ICAgICBpZiAoIWluc3RhbmNlRmllbGRMb2NhdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gaW5zdGFuY2VGaWVsZEluaXRpYWxpemVyID0gZ2VuZXJhdG9y
LmVtaXROZXdJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIFdURk1vdmUoaW5zdGFuY2VGaWVsZExvY2F0aW9ucyksIG1fY2xhc3NIZXJpdGFn
ZSk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaW5zdGFuY2VGaWVsZEluaXRpYWxp
emVyID0gZ2VuZXJhdG9yLmVtaXROZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIFdURk1vdmUoaW5zdGFuY2VGaWVsZExvY2F0aW9ucyksIG1f
Y2xhc3NIZXJpdGFnZSk7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBTa2lwIHRoaXMgaWYgdGhl
IGluaXRpYWxpemVyIGZ1bmN0aW9uIGlzbid0IGdvaW5nIHRvIG5lZWQgYSBob21lIG9iamVjdCAo
bm8gZXZhbCBvciBzdXBlciBwcm9wZXJ0aWVzKQogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Njg2NwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaAppbmRleCAxMGExNDUzZjhiZTIuLjExNzRmNGExM2M2MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAgLTQwNSw5ICs0MDUs
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAotICAgIERlZmluZUZp
ZWxkTm9kZSogY3JlYXRlRGVmaW5lRmllbGQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwg
RGVmaW5lRmllbGROb2RlOjpUeXBlIHR5cGUpCisgICAgRGVmaW5lRmllbGROb2RlKiBjcmVhdGVE
ZWZpbmVGaWVsZChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCwgRXhwcmVzc2lvbk5vZGUqIGluaXRpYWxpemVyLCBEZWZpbmVGaWVsZE5vZGU6
OlR5cGUgdHlwZSwgYm9vbCBpc1N0YXRpYykKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKG1f
cGFyc2VyQXJlbmEpIERlZmluZUZpZWxkTm9kZShsb2NhdGlvbiwgaWRlbnQsIGluaXRpYWxpemVy
LCB0eXBlKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRGVmaW5lRmllbGRO
b2RlKGxvY2F0aW9uLCBpZGVudCwgaW5pdGlhbGl6ZXIsIHR5cGUsIGlzU3RhdGljKTsKICAgICB9
CiAKICAgICBDbGFzc0V4cHJOb2RlKiBjcmVhdGVDbGFzc0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgY29uc3QgUGFyc2VyQ2xhc3NJbmZvPEFTVEJ1aWxkZXI+JiBjbGFzc0lu
Zm8sIFZhcmlhYmxlRW52aXJvbm1lbnQmIGNsYXNzRW52aXJvbm1lbnQsIEV4cHJlc3Npb25Ob2Rl
KiBjb25zdHJ1Y3RvciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZUNvbnN0cnVjdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29u
c3RydWN0b3JzLmgKaW5kZXggMmNlZWMzOGI2NmVlLi5lMTdjY2M5YmRmMDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCkBAIC0xMDUyLDEx
ICsxMDUyLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUg
RGVmaW5lRmllbGROb2RlOjpEZWZpbmVGaWVsZE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQsIEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24s
IFR5cGUgdHlwZSkKKyAgICBpbmxpbmUgRGVmaW5lRmllbGROb2RlOjpEZWZpbmVGaWVsZE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciogaWRlbnQs
IEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24sIFR5cGUgdHlwZSwgYm9vbCBpc1N0YXRpYykKICAgICAg
ICAgOiBTdGF0ZW1lbnROb2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1faWRlbnQoaWRlbnQpCiAg
ICAgICAgICwgbV9hc3NpZ24oYXNzaWduKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAg
ICAsIG1faXNTdGF0aWMoaXNTdGF0aWMpCiAgICAgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCmluZGV4IGNhNGUwZTAyOGVkNS4uZDI4MDNkNWFjYjRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC03MzcsNiArNzM3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgaXNJbnN0YW5jZUNsYXNzUHJvcGVydHkoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxDbGFzc0VsZW1lbnRUYWc+KG1fY2xhc3NFbGVtZW50VGFnKSA9PSBD
bGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlOyB9CiAgICAgICAgIGJvb2wgaXNDbGFzc0ZpZWxkKCkg
Y29uc3QgeyByZXR1cm4gaXNDbGFzc1Byb3BlcnR5KCkgJiYgIW5lZWRzU3VwZXJCaW5kaW5nKCk7
IH0KICAgICAgICAgYm9vbCBpc0luc3RhbmNlQ2xhc3NGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGlz
SW5zdGFuY2VDbGFzc1Byb3BlcnR5KCkgJiYgIW5lZWRzU3VwZXJCaW5kaW5nKCk7IH0KKyAgICAg
ICAgYm9vbCBpc1N0YXRpY0NsYXNzRmllbGQoKSBjb25zdCB7IHJldHVybiBpc1N0YXRpY0NsYXNz
UHJvcGVydHkoKSAmJiAhbmVlZHNTdXBlckJpbmRpbmcoKTsgfQogICAgICAgICBib29sIGlzT3Zl
cnJpZGRlbkJ5RHVwbGljYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc092ZXJyaWRkZW5CeUR1cGxp
Y2F0ZTsgfQogICAgICAgICBib29sIGhhc0NvbXB1dGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwcmVzc2lvbjsgfQogICAgICAgICBib29sIGlzQ29tcHV0ZWRDbGFzc0ZpZWxkKCkgY29uc3Qg
eyByZXR1cm4gaXNDbGFzc0ZpZWxkKCkgJiYgaGFzQ29tcHV0ZWROYW1lKCk7IH0KQEAgLTc3Miw2
ICs3NzMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBoYXNJ
bnN0YW5jZUZpZWxkcygpIGNvbnN0OwogCisgICAgICAgIGJvb2wgaXNTdGF0aWNDbGFzc0ZpZWxk
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fbm9kZS0+aXNTdGF0aWND
bGFzc0ZpZWxkKCk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgYm9vbCBzaG91bGRDcmVh
dGVMZXhpY2FsU2NvcGVGb3JDbGFzcyhQcm9wZXJ0eUxpc3ROb2RlKik7CiAKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCosIFJl
Z2lzdGVySUQqLCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+Kik7CkBAIC0yMjg2LDcgKzIyOTIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBEZWZpbmVGaWVsZE5vZGUgZmluYWwgOiBwdWJs
aWMgU3RhdGVtZW50Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIGNsYXNzIFR5cGUg
eyBOYW1lLCBDb21wdXRlZE5hbWUgfTsKLSAgICAgICAgRGVmaW5lRmllbGROb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXIqLCBFeHByZXNzaW9uTm9kZSosIFR5cGUp
OworICAgICAgICBEZWZpbmVGaWVsZE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciosIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSwgYm9vbCk7CiAKICAgICBwcml2YXRl
OgogICAgICAgICB2b2lkIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqIGRlc3RpbmF0aW9uID0gbnVsbHB0cikgZmluYWw7CkBAIC0yMjk2LDYgKzIzMDIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogbV9pZGVudDsKICAgICAg
ICAgRXhwcmVzc2lvbk5vZGUqIG1fYXNzaWduOwogICAgICAgICBUeXBlIG1fdHlwZTsKKyAgICAg
ICAgYm9vbCBtX2lzU3RhdGljOwogICAgIH07CiAKICAgICBjbGFzcyBDbGFzc0V4cHJOb2RlIGZp
bmFsIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVmFyaWFibGVFbnZpcm9ubWVudE5v
ZGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IGQ0MmFhYzIy
ODk1My4uNDI5ODlkZDMwYmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
Y3BwCkBAIC0yMDksNyArMjA5LDcgQEAgUGFyc2VyPExleGVyVHlwZT46On5QYXJzZXIoKQogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2Vy
PExleGVyVHlwZT46OlBhcnNlSW5uZXJSZXN1bHQsIFN0cmluZz4gUGFyc2VyPExleGVyVHlwZT46
OnBhcnNlSW5uZXIoY29uc3QgSWRlbnRpZmllciYgY2FsbGVlTmFtZSwgU291cmNlUGFyc2VNb2Rl
IHBhcnNlTW9kZSwgUGFyc2luZ0NvbnRleHQgcGFyc2luZ0NvbnRleHQsIE9wdGlvbmFsPGludD4g
ZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgY29uc3QgVmVjdG9yPEpT
VGV4dFBvc2l0aW9uPiogaW5zdGFuY2VGaWVsZExvY2F0aW9ucykKK0V4cGVjdGVkPHR5cGVuYW1l
IFBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZUlubmVyUmVzdWx0LCBTdHJpbmc+IFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZUlubmVyKGNvbnN0IElkZW50aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBh
cnNlTW9kZSBwYXJzZU1vZGUsIFBhcnNpbmdDb250ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25h
bDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZl
Y3RvcjxKU1RleHRQb3NpdGlvbj4qIGNsYXNzRmllbGRMb2NhdGlvbnMpCiB7CiAgICAgQVNUQnVp
bGRlciBjb250ZXh0KGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgY29uc3Rf
Y2FzdDxTb3VyY2VDb2RlKj4obV9zb3VyY2UpKTsKICAgICBTY29wZVJlZiBzY29wZSA9IGN1cnJl
bnRTY29wZSgpOwpAQCAtMjU3LDggKzI1Nyw4IEBAIEV4cGVjdGVkPHR5cGVuYW1lIFBhcnNlcjxM
ZXhlclR5cGU+OjpQYXJzZUlubmVyUmVzdWx0LCBTdHJpbmc+IFBhcnNlcjxMZXhlclR5cGU+CiAg
ICAgICAgIGVsc2UgaWYgKHBhcnNpbmdDb250ZXh0ID09IFBhcnNpbmdDb250ZXh0OjpGdW5jdGlv
bkNvbnN0cnVjdG9yKQogICAgICAgICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZVNpbmdsZUZ1
bmN0aW9uKGNvbnRleHQsIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24p
OwogICAgICAgICBlbHNlIGlmIChwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5j
ZUZpZWxkSW5pdGlhbGl6ZXJNb2RlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5zdGFuY2VGaWVs
ZExvY2F0aW9ucyAmJiAhaW5zdGFuY2VGaWVsZExvY2F0aW9ucy0+aXNFbXB0eSgpKTsKLSAgICAg
ICAgICAgIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3Vy
Y2VFbGVtZW50cyhjb250ZXh0LCAqaW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7CisgICAgICAgICAg
ICBBU1NFUlQoY2xhc3NGaWVsZExvY2F0aW9ucyAmJiAhY2xhc3NGaWVsZExvY2F0aW9ucy0+aXNF
bXB0eSgpKTsKKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VJbnN0YW5jZUZpZWxk
SW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyhjb250ZXh0LCAqY2xhc3NGaWVsZExvY2F0aW9ucyk7
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZVNvdXJj
ZUVsZW1lbnRzKGNvbnRleHQsIENoZWNrRm9yU3RyaWN0TW9kZSk7CiAgICAgfQpAQCAtMjg2OSw3
ICsyODY5LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeHByZXNz
aW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKFQKICAgICBUcmVlRXhwcmVzc2lvbiBj
b25zdHJ1Y3RvciA9IDA7CiAgICAgVHJlZVByb3BlcnR5TGlzdCBjbGFzc0VsZW1lbnRzID0gMDsK
ICAgICBUcmVlUHJvcGVydHlMaXN0IGNsYXNzRWxlbWVudHNUYWlsID0gMDsKLSAgICB1bnNpZ25l
ZCBudW1Db21wdXRlZEZpZWxkcyA9IDA7CisgICAgdW5zaWduZWQgbnVtSW5zdGFuY2VDb21wdXRl
ZEZpZWxkcyA9IDAsIG51bVN0YXRpY0NvbXB1dGVkRmllbGRzID0gMTsKICAgICB3aGlsZSAoIW1h
dGNoKENMT1NFQlJBQ0UpKSB7CiAgICAgICAgIGlmIChtYXRjaChTRU1JQ09MT04pKSB7CiAgICAg
ICAgICAgICBuZXh0KCk7CkBAIC0yOTY2LDEzICsyOTY2LDE4IEBAIHBhcnNlTWV0aG9kOgogICAg
ICAgICAgICAgdHlwZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5Tm9kZTo6VHlwZT4odHlwZSB8IChp
c0dldHRlciA/IFByb3BlcnR5Tm9kZTo6R2V0dGVyIDogUHJvcGVydHlOb2RlOjpTZXR0ZXIpKTsK
ICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VHZXR0ZXJTZXR0ZXIoY29udGV4dCwgYWx3YXlz
U3RyaWN0SW5zaWRlQ2xhc3MsIHR5cGUsIG1ldGhvZFN0YXJ0LCBDb25zdHJ1Y3RvcktpbmQ6Ok5v
bmUsIHRhZyk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJz
ZSB0aGlzIG1ldGhvZCIpOwotICAgICAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVzZVB1YmxpY0Ns
YXNzRmllbGRzKCkgJiYgIW1hdGNoKE9QRU5QQVJFTikgJiYgdGFnID09IENsYXNzRWxlbWVudFRh
Zzo6SW5zdGFuY2UgJiYgcGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9kTW9kZSkg
eworICAgICAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVzZVB1YmxpY0NsYXNzRmllbGRzKCkgJiYg
IW1hdGNoKE9QRU5QQVJFTikgJiYgcGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9k
TW9kZSkgewogICAgICAgICAgICAgQVNTRVJUKCFpc0dldHRlciAmJiAhaXNTZXR0ZXIpOwotICAg
ICAgICAgICAgaWYgKGlkZW50KQorICAgICAgICAgICAgaWYgKGlkZW50KSB7CiAgICAgICAgICAg
ICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKCppZGVudCA9PSBwcm9wZXJ0eU5hbWVzLmNvbnN0cnVj
dG9yLCAiQ2Fubm90IGRlY2xhcmUgY2xhc3MgZmllbGQgbmFtZWQgJ2NvbnN0cnVjdG9yJyIpOwor
ICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpTdGF0aWMpCisgICAg
ICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gcHJvcGVydHlOYW1l
cy5wcm90b3R5cGUsICJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyBmaWVsZCBuYW1lZCAncHJvdG90
eXBlJyIpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY29tcHV0ZWRQcm9wZXJ0
eU5hbWUpIHsKLSAgICAgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZp
ZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihtX3ZtLCBudW1Db21wdXRlZEZpZWxkcysr
KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCogZmllbGRJRCA9IHRhZyA9PSBDbGFzc0VsZW1l
bnRUYWc6Okluc3RhbmNlID8gJm51bUluc3RhbmNlQ29tcHV0ZWRGaWVsZHMgOiAmbnVtU3RhdGlj
Q29tcHV0ZWRGaWVsZHM7CisgICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5p
ZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgKmZpZWxkSUQpOwor
ICAgICAgICAgICAgICAgICpmaWVsZElEICs9IDI7CiAgICAgICAgICAgICAgICAgRGVjbGFyYXRp
b25SZXN1bHRNYXNrIGRlY2xhcmF0aW9uUmVzdWx0ID0gY2xhc3NTY29wZS0+ZGVjbGFyZUxleGlj
YWxWYXJpYWJsZShpZGVudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChk
ZWNsYXJhdGlvblJlc3VsdCwgZGVjbGFyYXRpb25SZXN1bHQgPT0gRGVjbGFyYXRpb25SZXN1bHQ6
OlZhbGlkKTsKICAgICAgICAgICAgICAgICBjbGFzc1Njb3BlLT51c2VWYXJpYWJsZShpZGVudCwg
ZmFsc2UpOwpAQCAtMzAzOSwxMyArMzA0NCwxOCBAQCBwYXJzZU1ldGhvZDoKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlRmllbGRJbml0
aWFsaXplclNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBWZWN0b3I8
SlNUZXh0UG9zaXRpb24+JiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQordGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXImIGNvbnRl
eHQsIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIGNsYXNzRmllbGRMb2NhdGlvbnMpCiB7
CiAgICAgVHJlZVNvdXJjZUVsZW1lbnRzIHNvdXJjZUVsZW1lbnRzID0gY29udGV4dC5jcmVhdGVT
b3VyY2VFbGVtZW50cygpOwogICAgIGN1cnJlbnRTY29wZSgpLT5zZXRJc0NsYXNzU2NvcGUoKTsK
IAorICAgIC8vIFByb3BlcnR5IGtleXMgZm9yIGNvbXB1dGVkIGZpZWxkcyBzdGFydCBhdCAwIGZv
ciBpbnN0YW5jZQorICAgIC8vIGZpZWxkcywgYXQgMSBmb3Igc3RhdGljIGZpZWxkcy4gV2UnbGwg
YnVtcCB0aGUgY291bnRlciBieSBvbmUKKyAgICAvLyBpZiB3ZSBldmVyIGZpbmQgb25lIHN0YXRp
YyBmaWVsZCwgc2luY2UgdGhhdCBtZWFucyB0aGV5J2xsIGFsbAorICAgIC8vIGJlIHN0YXRpYyBm
aWVsZHMuCiAgICAgdW5zaWduZWQgbnVtQ29tcHV0ZWRGaWVsZHMgPSAwOwotICAgIGZvciAoYXV0
byBsb2NhdGlvbiA6IGluc3RhbmNlRmllbGRMb2NhdGlvbnMpIHsKKyAgICBib29sIGlzU3RhdGlj
RmllbGQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8gbG9jYXRpb24gOiBjbGFzc0ZpZWxkTG9jYXRp
b25zKSB7CiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGFzTGluZVRl
cm1pbmF0b3JCZWZvcmVUb2tlbgogICAgICAgICAvLyBvbiBjbGFzcyBmaWVsZHMsIHNvIHdlIHNl
dCB0aGlzIHZhbHVlIHRvIGZhbHNlLgogICAgICAgICBMZXhlclN0YXRlIGxleGVyU3RhdGUgeyBs
b2NhdGlvbi5vZmZzZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2NhdGlvbi5saW5lU3RhcnRP
ZmZzZXQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9jYXRpb24ubGluZSksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihsb2NhdGlvbi5saW5lKSwgZmFsc2UgfTsKQEAgLTMwNTUsNiArMzA2NSwxOCBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZQogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9IG51bGxwdHI7CiAgICAgICAgIFRyZWVFeHByZXNzaW9uIGNvbXB1dGVkUHJvcGVydHlOYW1l
ID0gMDsKICAgICAgICAgRGVmaW5lRmllbGROb2RlOjpUeXBlIHR5cGUgPSBEZWZpbmVGaWVsZE5v
ZGU6OlR5cGU6Ok5hbWU7CisKKyAgICAgICAgaWYgKG1hdGNoKFJFU0VSVkVEX0lGX1NUUklDVCkg
JiYgKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+c3RhdGljS2V5
d29yZCkgeworICAgICAgICAgICAgaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKKyAgICAg
ICAgICAgIEFTU0VSVChpZGVudCk7CisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICBp
ZiAobWF0Y2goU0VNSUNPTE9OKSB8fCBtYXRjaCAoRVFVQUwpIHx8IG1hdGNoKENMT1NFQlJBQ0Up
IHx8IG1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9rZW4oKSkKKyAgICAgICAgICAg
ICAgICBnb3RvIHZhbGlkRmllbGQ7CisgICAgICAgICAgICBpc1N0YXRpY0ZpZWxkID0gdHJ1ZTsK
KyAgICAgICAgICAgIGlmICghbnVtQ29tcHV0ZWRGaWVsZHMpCisgICAgICAgICAgICAgICAgbnVt
Q29tcHV0ZWRGaWVsZHMrKzsKKyAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAobV90b2tlbi5t
X3R5cGUpIHsKICAgICAgICAgY2FzZSBTVFJJTkc6CiAgICAgICAgIGNhc2UgSURFTlQ6CkBAIC0z
MDc5LDcgKzMxMDEsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VF
bGVtZW50cyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZQogICAgICAgICAgICAgY29t
cHV0ZWRQcm9wZXJ0eU5hbWUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwog
ICAgICAgICAgICAgZmFpbElmRmFsc2UoY29tcHV0ZWRQcm9wZXJ0eU5hbWUsICJDYW5ub3QgcGFy
c2UgY29tcHV0ZWQgcHJvcGVydHkgbmFtZSIpOwogICAgICAgICAgICAgaGFuZGxlUHJvZHVjdGlv
bk9yRmFpbChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIsICJjb21wdXRlZCBwcm9wZXJ0eSBuYW1l
Iik7Ci0gICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgp
Lm1ha2VOdW1lcmljSWRlbnRpZmllcihtX3ZtLCBudW1Db21wdXRlZEZpZWxkcysrKTsKKyAgICAg
ICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVy
aWNJZGVudGlmaWVyKG1fdm0sIG51bUNvbXB1dGVkRmllbGRzKTsKKyAgICAgICAgICAgIG51bUNv
bXB1dGVkRmllbGRzICs9IDI7CiAgICAgICAgICAgICB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpU
eXBlOjpDb21wdXRlZE5hbWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
QEAgLTMwODgsNiArMzExMSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNv
dXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlCiAgICAgICAgICAg
ICBmYWlsRHVlVG9VbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgfQogCisgICAgdmFsaWRGaWVs
ZDoKICAgICAgICAgLy8gT25seSB2YWxpZCBjbGFzcyBmaWVsZHMgYXJlIGhhbmRsZWQgaW4gdGhp
cyBmdW5jdGlvbi4KICAgICAgICAgQVNTRVJUKG1hdGNoKEVRVUFMKSB8fCBtYXRjaChTRU1JQ09M
T04pIHx8IG1hdGNoKENMT1NFQlJBQ0UpIHx8IG1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVm
b3JlVG9rZW4oKSk7CiAKQEAgLTMwOTUsNyArMzExOSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3Rh
bmNlCiAgICAgICAgIGlmIChjb25zdW1lKEVRVUFMKSkKICAgICAgICAgICAgIGluaXRpYWxpemVy
ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKIAotICAgICAgICBUcmVlU3Rh
dGVtZW50IGRlZmluZUZpZWxkID0gY29udGV4dC5jcmVhdGVEZWZpbmVGaWVsZChmaWVsZExvY2F0
aW9uLCBpZGVudCwgaW5pdGlhbGl6ZXIsIHR5cGUpOworICAgICAgICBUcmVlU3RhdGVtZW50IGRl
ZmluZUZpZWxkID0gY29udGV4dC5jcmVhdGVEZWZpbmVGaWVsZChmaWVsZExvY2F0aW9uLCBpZGVu
dCwgaW5pdGlhbGl6ZXIsIHR5cGUsIGlzU3RhdGljRmllbGQpOwogICAgICAgICBjb250ZXh0LmFw
cGVuZFN0YXRlbWVudChzb3VyY2VFbGVtZW50cywgZGVmaW5lRmllbGQpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKaW5kZXggNTRiMzk3MzA5ZWEyLi42MmE0OGU5
NDk1ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAtMTk1OSw3ICsx
OTU5LDcgQEAgcHJpdmF0ZToKIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBs
YXRlIDxjbGFzcyBQYXJzZWROb2RlPgotc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IFBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZShQYXJzZXJFcnJvciYgZXJyb3IsIGNvbnN0IElkZW50aWZpZXIm
IGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFBhcnNpbmdDb250ZXh0IHBh
cnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJz
RW5kUG9zaXRpb24sIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGluc3RhbmNlRmllbGRM
b2NhdGlvbnMpCitzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46
OnBhcnNlKFBhcnNlckVycm9yJiBlcnJvciwgY29uc3QgSWRlbnRpZmllciYgY2FsbGVlTmFtZSwg
U291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgUGFyc2luZ0NvbnRleHQgcGFyc2luZ0NvbnRleHQs
IE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiwg
Y29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogY2xhc3NGaWVsZExvY2F0aW9ucykKIHsKICAg
ICBpbnQgZXJyTGluZTsKICAgICBTdHJpbmcgZXJyTXNnOwpAQCAtMTk3NCw3ICsxOTc0LDcgQEAg
c3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShQYXJz
ZXJFcnJvciYgZXJyb3IsIGNvbnN0IEkKICAgICBBU1NFUlQobV9zb3VyY2UtPnN0YXJ0Q29sdW1u
KCkgPiBPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpKTsKICAgICB1bnNpZ25lZCBzdGFydENv
bHVtbiA9IG1fc291cmNlLT5zdGFydENvbHVtbigpLnplcm9CYXNlZEludCgpOwogCi0gICAgYXV0
byBwYXJzZVJlc3VsdCA9IHBhcnNlSW5uZXIoY2FsbGVlTmFtZSwgcGFyc2VNb2RlLCBwYXJzaW5n
Q29udGV4dCwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgaW5zdGFu
Y2VGaWVsZExvY2F0aW9ucyk7CisgICAgYXV0byBwYXJzZVJlc3VsdCA9IHBhcnNlSW5uZXIoY2Fs
bGVlTmFtZSwgcGFyc2VNb2RlLCBwYXJzaW5nQ29udGV4dCwgZnVuY3Rpb25Db25zdHJ1Y3RvclBh
cmFtZXRlcnNFbmRQb3NpdGlvbiwgY2xhc3NGaWVsZExvY2F0aW9ucyk7CiAKICAgICBpbnQgbGlu
ZU51bWJlciA9IG1fbGV4ZXItPmxpbmVOdW1iZXIoKTsKICAgICBib29sIGxleEVycm9yID0gbV9s
ZXhlci0+c2F3RXJyb3IoKTsKQEAgLTIwNTgsNyArMjA1OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQ
YXJzZWROb2RlPiBwYXJzZSgKICAgICBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRU
eXBlID0gRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLAogICAgIEV2YWxDb250ZXh0VHlwZSBldmFs
Q29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsCiAgICAgRGVidWdnZXJQYXJzZURh
dGEqIGRlYnVnZ2VyUGFyc2VEYXRhID0gbnVsbHB0ciwKLSAgICBjb25zdCBWZWN0b3I8SlNUZXh0
UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zID0gbnVsbHB0ciwKKyAgICBjb25zdCBW
ZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBjbGFzc0ZpZWxkTG9jYXRpb25zID0gbnVsbHB0ciwKICAg
ICBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbiA9IGZhbHNlKQogewogICAgIEFTU0VSVCgh
c291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlzTnVsbCgpKTsKQEAgLTIwNzAsNyArMjA3MCw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBwYXJzZSgKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UGFyc2VkTm9kZT4gcmVzdWx0OwogICAgIGlmIChzb3VyY2UucHJvdmlkZXIoKS0+c291cmNl
KCkuaXM4Qml0KCkpIHsKICAgICAgICAgUGFyc2VyPExleGVyPExDaGFyPj4gcGFyc2VyKHZtLCBz
b3VyY2UsIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBwYXJzZU1vZGUsIHN1
cGVyQmluZGluZywgZGVmYXVsdENvbnN0cnVjdG9yS2luZEZvclRvcExldmVsRnVuY3Rpb24sIGRl
cml2ZWRDb250ZXh0VHlwZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpLCBldmFsQ29udGV4dFR5
cGUsIGRlYnVnZ2VyUGFyc2VEYXRhLCBpc0luc2lkZU9yZGluYXJ5RnVuY3Rpb24pOwotICAgICAg
ICByZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IsIG5hbWUsIHBhcnNlTW9k
ZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpID8gUGFyc2luZ0NvbnRleHQ6OkV2YWwgOiBQYXJz
aW5nQ29udGV4dDo6UHJvZ3JhbSwgV1RGOjpudWxsb3B0LCBpbnN0YW5jZUZpZWxkTG9jYXRpb25z
KTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yLCBuYW1l
LCBwYXJzZU1vZGUsIGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4oKSA/IFBhcnNpbmdDb250ZXh0OjpF
dmFsIDogUGFyc2luZ0NvbnRleHQ6OlByb2dyYW0sIFdURjo6bnVsbG9wdCwgY2xhc3NGaWVsZExv
Y2F0aW9ucyk7CiAgICAgICAgIGlmIChwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKQogICAgICAg
ICAgICAgKnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUgPSBwYXJzZXIucG9zaXRpb25CZWZvcmVM
YXN0TmV3bGluZSgpOwogICAgICAgICBpZiAoYnVpbHRpbk1vZGUgPT0gSlNQYXJzZXJCdWlsdGlu
TW9kZTo6QnVpbHRpbikgewpAQCAtMjA4Myw3ICsyMDgzLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFBh
cnNlZE5vZGU+IHBhcnNlKAogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoZGVmYXVsdENvbnN0cnVjdG9yS2luZEZvclRvcExldmVsRnVuY3Rpb24gPT0gQ29uc3RydWN0
b3JLaW5kOjpOb25lLCAiQnVpbHRpbkV4ZWN1dGFibGVzJ3Mgc3BlY2lhbCBjb25zdHJ1Y3RvcnMg
c2hvdWxkIGFsd2F5cyB1c2UgYSA4LWJpdCBzdHJpbmciKTsKICAgICAgICAgUGFyc2VyPExleGVy
PFVDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3Jp
cHRNb2RlLCBwYXJzZU1vZGUsIHN1cGVyQmluZGluZywgZGVmYXVsdENvbnN0cnVjdG9yS2luZEZv
clRvcExldmVsRnVuY3Rpb24sIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNFdmFsTm9kZTxQYXJzZWRO
b2RlPigpLCBldmFsQ29udGV4dFR5cGUsIGRlYnVnZ2VyUGFyc2VEYXRhLCBpc0luc2lkZU9yZGlu
YXJ5RnVuY3Rpb24pOwotICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4o
ZXJyb3IsIG5hbWUsIHBhcnNlTW9kZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpID8gUGFyc2lu
Z0NvbnRleHQ6OkV2YWwgOiBQYXJzaW5nQ29udGV4dDo6UHJvZ3JhbSwgV1RGOjpudWxsb3B0LCBp
bnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlPFBh
cnNlZE5vZGU+KGVycm9yLCBuYW1lLCBwYXJzZU1vZGUsIGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4o
KSA/IFBhcnNpbmdDb250ZXh0OjpFdmFsIDogUGFyc2luZ0NvbnRleHQ6OlByb2dyYW0sIFdURjo6
bnVsbG9wdCwgY2xhc3NGaWVsZExvY2F0aW9ucyk7CiAgICAgICAgIGlmIChwb3NpdGlvbkJlZm9y
ZUxhc3ROZXdsaW5lKQogICAgICAgICAgICAgKnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUgPSBw
YXJzZXIucG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKaW5kZXggYWFiMGI3NGRhYTg5Li5mYTVm
ZWY5MGZhMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4
Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tl
ci5oCkBAIC0yNTEsNyArMjUxLDcgQEAgcHVibGljOgogICAgIGludCBjcmVhdGVDbGF1c2VMaXN0
KGludCkgeyByZXR1cm4gQ2xhdXNlTGlzdFJlc3VsdDsgfQogICAgIGludCBjcmVhdGVDbGF1c2VM
aXN0KGludCwgaW50KSB7IHJldHVybiBDbGF1c2VMaXN0UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0
ZUZ1bmNEZWNsU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IFBhcnNlckZ1
bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYpIHsgcmV0dXJuIFN0YXRlbWVudFJlc3VsdDsgfQot
ICAgIGludCBjcmVhdGVEZWZpbmVGaWVsZChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJ
ZGVudGlmaWVyKiwgaW50LCBEZWZpbmVGaWVsZE5vZGU6OlR5cGUpIHsgcmV0dXJuIDA7IH0KKyAg
ICBpbnQgY3JlYXRlRGVmaW5lRmllbGQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRl
bnRpZmllciosIGludCwgRGVmaW5lRmllbGROb2RlOjpUeXBlLCBib29sKSB7IHJldHVybiAwOyB9
CiAgICAgaW50IGNyZWF0ZUNsYXNzRGVjbFN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBDbGFzc0V4cHJlc3Npb24sCiAgICAgICAgIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mLCBpbnQsIGludCkgeyByZXR1cm4gU3RhdGVtZW50UmVzdWx0OyB9CiAg
ICAgaW50IGNyZWF0ZUJsb2NrU3RhdGVtZW50KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGludCwg
aW50LCBpbnQsIFZhcmlhYmxlRW52aXJvbm1lbnQmLCBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rp
b25TdGFjayYmKSB7IHJldHVybiBTdGF0ZW1lbnRSZXN1bHQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKaW5kZXggMGUzZjg1ODFkZmQ1Li4xYzdlODYx
OWFhOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
CkBAIC03NTYsNyArNzU2LDYgQEAgdm9pZCBKU0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlvbigpKTsKLSAgICBBU1NFUlQoanNFeGVjdXRh
YmxlKCktPmVjbWFOYW1lKCkuaXNOdWxsKCkpOwogICAgIFN0cmluZyBuYW1lOwogICAgIGlmICh2
YWx1ZS5pc1N5bWJvbCgpKSB7CiAgICAgICAgIFByaXZhdGVOYW1lIHByaXZhdGVOYW1lID0gYXNT
eW1ib2wodmFsdWUpLT5wcml2YXRlTmFtZSgpOwotLSAKMi4yNi4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401133</attachid>
            <date>2020-06-05 02:57:46 -0700</date>
            <delta_ts>2020-07-12 02:46:55 -0700</delta_ts>
            <desc>Add support for static public fields, v3.</desc>
            <filename>0001-JSC-Add-support-for-static-public-class-fields.patch</filename>
            <type>text/plain</type>
            <size>71166</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA3ZTdiNmM3NDVmNjQwNmZjYjMwYWVlYjFiMjNkZjRiMWQ1M2U2ZjBmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/WGFuPTIwTD1DMz1CM3Blej89IDx4YW5AaWdh
bGlhLmNvbT4KRGF0ZTogVGh1LCAxNiBBcHIgMjAyMCAxODoyMToxMyArMDIwMApTdWJqZWN0OiBb
UEFUQ0hdIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcwog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5NQoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpKU1Rlc3RzOgoKRW5hYmxlIHN0YXRpYyBwdWJsaWMgZmllbGRz
LCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJvbSB0aGUKVjggcHJvamVjdC4gQWxzbyBz
cGxpdCB0aGUgc3VwcG9ydCBjb2RlIGludG8gYSBzZXBhcmF0ZSBmaWxlCihoYXJtb255LXN1cHBv
cnQuanMpIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgoKKiB0ZXN0MjYyL2NvbmZpZy55YW1sOiBlbmFi
bGUgc3RhdGljIHB1YmxpYyBmaWVsZHMuCiogc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255Lmpz
OgoqIHN0cmVzcy9jbGFzcy1maWVsZHMtc3RhdGljLWhhcm1vbnkuanM6IEFkZGVkLgoobG9hZC5D
KToKKGxvYWQpOgooYXNzZXJ0RXF1YWxzLkMuaGFzT3duUHJvcGVydHkpOgooYXNzZXJ0RXF1YWxz
LkMpOgooYXNzZXJ0RXF1YWxzKToKKGFzc2VydEVxdWFscy5DLmQpOgooYXNzZXJ0RXF1YWxzLkMu
ZSk6Cihhc3NlcnRFcXVhbHMuQy5jKToKKGFzc2VydEVxdWFscy5sZXQuZCk6CihDKToKKEMuYy5B
KToKKEMuYyk6CihDLmMuQyk6Cihhc3NlcnRFcXVhbHMuQi5zZXQgZCk6Cihhc3NlcnRFcXVhbHMu
Qik6Cihhc3NlcnRFcXVhbHMuQy5ydW4pOgooeC4pOgooeC5DLnJ1bik6Cih4LkMpOgooeCk6Cihw
cm90b3R5cGUueCk6Cihwcm90b3R5cGUueC5DLnByb3RvdHlwZS5ydW4pOgoocHJvdG90eXBlLngu
Qy5ydW4pOgoocHJvdG90eXBlLnguQyk6Cih5Lik6Cih5LkMucHJvdG90eXBlLnJ1bik6Cih5LkMu
cnVuKToKKHkuQyk6Cih5KToKKHByb3RvdHlwZS55LkMpOgoocHJvdG90eXBlLnkuRCk6Cihhc3Nl
cnRFcXVhbHMuQy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpOgooYXNzZXJ0RXF1YWxzLlgucCk6
Cihhc3NlcnRFcXVhbHMuWCk6CihYLnQpOgooWCk6Ciogc3RyZXNzL2hhcm1vbnktc3VwcG9ydC5q
czogQWRkZWQuCihjbGFzc09mKToKKGRlZXBPYmplY3RFcXVhbHMpOgooZGVlcEVxdWFscyk6Cihm
YWlsKToKKGFzc2VydEluc3RhbmNlb2YpOgooYXNzZXJ0RXF1YWxzKToKKGFzc2VydE5vdEVxdWFs
cyk6Cihhc3NlcnRUcnVlKToKKGFzc2VydEZhbHNlKToKKGFzc2VydFRocm93cyk6CgpTb3VyY2Uv
SmF2YVNjcmlwdENvcmU6CgpBZGQgc3VwcG9ydCBmb3Igc3RhdGljIHB1YmxpYyBjbGFzcyBmaWVs
ZHMuIFdlIGNhbiByZXVzZSBtb3N0IG9mCnRoZSBleGlzdGluZyBtYWNoaW5lcnkgYXZhaWxhYmxl
IGZvciBpbnN0YW5jZSBmaWVsZHMsIHdpdGggYQpjb3VwbGUgb2YgaXNzdWVzIHRoYXQgbWVyaXQg
c3BlY2lhbCBjb21tZW50OgoKU3RhdGljIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIGxpa2UgaW5z
dGFuY2UgZmllbGRzLCB3aXRoIGEKc3ludGhldGljIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUgdG8g
YWxsb3cgdXMgdG8gdHJpdmlhbGx5IGZvbGxvdwp0aGUgc2NvcGluZyBydWxlcyBpbiB0aGUgc3Bl
Yy4gQXMgaXQgaGFwcGVucyB3aXRoIGluc3RhbmNlIGZpZWxkcwp0aGlzIGNvdWxkIGJlIGlubGlu
ZWQgaW4gYSBmdXR1cmUgcGF0Y2guCgpUaGUgd2F5IHdlIHN0b3JlIGNvbXB1dGVkIHByb3BlcnR5
IGtleXMgbmVlZHMgdG8gYmUKbW9kaWZpZWQuIEJlZm9yZSB3ZSBhc3N1bWVkIHRoZSBzb3VyY2Ug
Y29kZSBvcmRlciB3b3VsZCBiZQppZGVudGljYWwgdG8gdGhlIGV2YWx1YXRpb24gb3JkZXIgKHdo
aWNoIHdhcyB0cnVlIGZvciBpbnN0YW5jZQpmaWVsZHMpLiBXaXRoIHN0YXRpYyBmaWVsZHMgdGhp
cyBjYW4gbm90IGJlIHRoZSBjYXNlLCBzaW5jZSBzdGF0aWMKZmllbGRzIGFyZSBhbHdheXMgaW5p
dGlhbGl6ZWQgZmlyc3QuIFRvIGFsbG93IGZvciB0aGlzIG1pc21hdGNoCnRoZSBjb21wdXRlZCBw
cm9wZXJ0eSBrZXlzIGZvciBpbnN0YW5jZSBmaWVsZHMgYXJlIHN0b3JlZCB3aXRoIGFuCmV2ZW4g
aWRlbnRpZmllciwgYW5kIHRob3NlIGZvciBzdGF0aWMgZmllbGRzIGFyZSBzdG9yZWQgd2l0aCBh
bgpvZGQgaWRlbnRpZmllci4gVGhlIGZpZWxkIHBhcnNlciwgdXBvbiBmaWd1cmluZyBvdXQgd2hl
dGhlciBpdCdzCmluaXRpYWxpemluZyB0aGUgc3RhdGljIG9yIHRoZSBpbnN0YW5jZSBmaWVsZHMs
IHdpbGwga25vdyB3aGVyZSB0bwpsb29rIHVwIHRoZSBrZXkuCgpGb3IgZXhhbXBsZToKCmNsYXNz
IEZPTyB7CiAgWyJhIl0gPSAwOwogIHN0YXRpYyBbImIiXSA9IDE7CiAgc3RhdGljIFsiYyJdID0g
MjsKICBbImQiXSA9IDM7Cn0KCkhlcmUgd2Ugd2lsbCBldmFsdWF0ZSB0aGUgY29tcHV0ZWQgZmll
bGQgbmFtZXMgaW4gdGhlIGZvbGxvd2luZwpvcmRlcjogYSwgYiwgYywgZDsgYnV0IHdlIHdpbGwg
aW5pdGlhbGl6ZSB0aGUgZmllbGRzIGluIHRoZQpmb2xsb3dpbmcgb3JkZXI6IGIsIGMsIGEsIGQu
IFNpbmNlIGVhY2ggZ3JvdXAgb2YgZmllbGRzIGlzCmluaXRpYWxpemVkIGluZGVwZW5kZW50bHkg
d2UgY2FuIHRyaXZpYWxseSByZXRyaWV2ZSB0aGUgcHJvcGVydHkKa2V5cyBmb3IgZWFjaCBncm91
cCBqdXN0IGJ5IGdldHRpbmcgdGhlIG9kZCBwcm9wZXJ0eSBrZXlzIGZvcgpzdGF0aWMgZmllbGRz
IChpbmRleGVzIDEgYW5kIDMpIGFuZCB0aGUgZXZlbiBvbmVzIGZvciBpbnN0YW5jZQpmaWVsZHMg
KGluZGV4ZXMgMCBhbmQgMikuCgoqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmNwcDoKKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKiBieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgoqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHA6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZElu
aXRpYWxpemVyRnVuY3Rpb24pOgoqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgoq
IGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjpl
bWl0Qnl0ZWNvZGUpOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmll
bGROYW1lKToKKEpTQzo6RGVmaW5lRmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpDbGFz
c0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgoqIHBhcnNlci9BU1RCdWlsZGVyLmg6CihKU0M6OkFT
VEJ1aWxkZXI6OmNyZWF0ZURlZmluZUZpZWxkKToKKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5o
OgooSlNDOjpEZWZpbmVGaWVsZE5vZGU6OkRlZmluZUZpZWxkTm9kZSk6CiogcGFyc2VyL05vZGVz
Lmg6CiogcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlu
bmVyKToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MpOgooSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyk6
CiogcGFyc2VyL1BhcnNlci5oOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UpOgooSlND
OjpwYXJzZSk6CiogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKEpTQzo6U3ludGF4Q2hlY2tlcjo6
Y3JlYXRlRGVmaW5lRmllbGQpOgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpTRnVu
Y3Rpb246OnNldEZ1bmN0aW9uTmFtZSk6CgoqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcDoKKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKiBi
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgoqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHA6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcik6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxp
emVyRnVuY3Rpb24pOgooSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWRBcnJvd0Z1bmN0
aW9uTGV4aWNhbEVudmlyb25tZW50KToKKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aDoKKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKEpTQzo6ZW1pdEhvbWVPYmplY3RG
b3JDYWxsZWUpOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpQ
cm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1lKToKKEpTQzo6RGVmaW5l
RmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNv
ZGUpOgoqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKEpTQzo6ZXZhbCk6CiogcGFyc2Vy
L05vZGVzLmg6CiogcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUlubmVyKToKKEpTQzo6c3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZSk6CihKU0M6OnN0
cmluZ0ZvckZ1bmN0aW9uTW9kZSk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNz
KToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NGaWVsZEluaXRpYWxpemVyU291
cmNlRWxlbWVudHMpOgoqIHBhcnNlci9QYXJzZXIuaDoKKEpTQzo6U2NvcGU6OnNldFNvdXJjZVBh
cnNlTW9kZSk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZSk6CihKU0M6OnBhcnNlKToK
KiBwYXJzZXIvUGFyc2VyTW9kZXMuaDoKKEpTQzo6aXNGdW5jdGlvblBhcnNlTW9kZSk6CiogcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CihKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJp
bmcpOgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpTRnVuY3Rpb246OmNhbGxlckdl
dHRlcik6Ci0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDcxICsrKwogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanMgICAgICAg
IHwgMTY1ICstLS0tLQogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255
LmpzIHwgNTA3ICsrKysrKysrKysrKysrKysrKwogSlNUZXN0cy9zdHJlc3MvaGFybW9ueS1zdXBw
b3J0LmpzICAgICAgICAgICAgIHwgMTk2ICsrKysrKysKIEpTVGVzdHMvdGVzdDI2Mi9jb25maWcu
eWFtbCAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgIHwgMTA2ICsrKysKIC4uLi9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5jcHAgICB8ICAgNCArLQogLi4uL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmggICAgIHwgIDEyICstCiAuLi4vYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCAgICAgICAgfCAgMTIgKy0KIC4uLi9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaCAgICAgICAgICB8ICAgMiArLQogLi4uL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwICAgICAgICAgICAgIHwgIDQ0ICstCiAuLi4vaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwICAgICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuaCAgICAgICAgICB8ICAgNiArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5jcHAgICAgICAgfCAgNjUgKystCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5oICAgICAgICAgfCAgMTQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyTW9kZXMuaCAgICB8ICAgNCArLQogLi4uL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3Bw
ICAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcCAgfCAgIDIgKy0KIDE4IGZpbGVzIGNoYW5nZWQsIDEwMDIgaW5zZXJ0aW9ucygr
KSwgMjE0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IEpTVGVzdHMvc3RyZXNzL2Ns
YXNzLWZpZWxkcy1zdGF0aWMtaGFybW9ueS5qcwogY3JlYXRlIG1vZGUgMTAwNjQ0IEpTVGVzdHMv
c3RyZXNzL2hhcm1vbnktc3VwcG9ydC5qcwoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9n
IGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDg3OTE0NGZkNDJkLi44MTg2MTgyMDBkZDAgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNzQgQEAKKzIwMjAtMDYtMDUgIFhhbiBMw7NwZXogIDx4YW5AaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3Igc3RhdGljIHB1YmxpYyBjbGFzcyBmaWVsZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5NQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBz
dGF0aWMgcHVibGljIGZpZWxkcywgYW5kIGltcG9ydCBuZXcgc3RyZXNzIHRlc3RzIGZyb20gdGhl
CisgICAgICAgIFY4IHByb2plY3QuIEFsc28gc3BsaXQgdGhlIHN1cHBvcnQgY29kZSBpbnRvIGEg
c2VwYXJhdGUgZmlsZQorICAgICAgICAoaGFybW9ueS1zdXBwb3J0LmpzKSB0byBhdm9pZCBkdXBs
aWNhdGlvbi4KKworICAgICAgICAqIHRlc3QyNjIvY29uZmlnLnlhbWw6IGVuYWJsZSBzdGF0aWMg
cHVibGljIGZpZWxkcy4KKyAgICAgICAgKiBzdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanM6
CisgICAgICAgICogc3RyZXNzL2NsYXNzLWZpZWxkcy1zdGF0aWMtaGFybW9ueS5qczogQWRkZWQu
CisgICAgICAgIChsb2FkLkMpOgorICAgICAgICAobG9hZCk6CisgICAgICAgIChhc3NlcnRFcXVh
bHMuQy5oYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChhc3NlcnRFcXVhbHMuQyk6CisgICAgICAg
IChhc3NlcnRFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkMuZCk6CisgICAgICAgIChh
c3NlcnRFcXVhbHMuQy5lKToKKyAgICAgICAgKGFzc2VydEVxdWFscy5DLmMpOgorICAgICAgICAo
YXNzZXJ0RXF1YWxzLmxldC5kKToKKyAgICAgICAgKEMpOgorICAgICAgICAoQy5jLkEpOgorICAg
ICAgICAoQy5jKToKKyAgICAgICAgKEMuYy5DKToKKyAgICAgICAgKGFzc2VydEVxdWFscy5CLnNl
dCBkKToKKyAgICAgICAgKGFzc2VydEVxdWFscy5CKToKKyAgICAgICAgKGFzc2VydEVxdWFscy5D
LnJ1bik6CisgICAgICAgICh4Lik6CisgICAgICAgICh4LkMucnVuKToKKyAgICAgICAgKHguQyk6
CisgICAgICAgICh4KToKKyAgICAgICAgKHByb3RvdHlwZS54KToKKyAgICAgICAgKHByb3RvdHlw
ZS54LkMucHJvdG90eXBlLnJ1bik6CisgICAgICAgIChwcm90b3R5cGUueC5DLnJ1bik6CisgICAg
ICAgIChwcm90b3R5cGUueC5DKToKKyAgICAgICAgKHkuKToKKyAgICAgICAgKHkuQy5wcm90b3R5
cGUucnVuKToKKyAgICAgICAgKHkuQy5ydW4pOgorICAgICAgICAoeS5DKToKKyAgICAgICAgKHkp
OgorICAgICAgICAocHJvdG90eXBlLnkuQyk6CisgICAgICAgIChwcm90b3R5cGUueS5EKToKKyAg
ICAgICAgKGFzc2VydEVxdWFscy5DLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk6CisgICAgICAg
IChhc3NlcnRFcXVhbHMuWC5wKToKKyAgICAgICAgKGFzc2VydEVxdWFscy5YKToKKyAgICAgICAg
KFgudCk6CisgICAgICAgIChYKToKKyAgICAgICAgKiBzdHJlc3MvaGFybW9ueS1zdXBwb3J0Lmpz
OiBBZGRlZC4KKyAgICAgICAgKGNsYXNzT2YpOgorICAgICAgICAoZGVlcE9iamVjdEVxdWFscyk6
CisgICAgICAgIChkZWVwRXF1YWxzKToKKyAgICAgICAgKGZhaWwpOgorICAgICAgICAoYXNzZXJ0
SW5zdGFuY2VvZik6CisgICAgICAgIChhc3NlcnRFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0Tm90
RXF1YWxzKToKKyAgICAgICAgKGFzc2VydFRydWUpOgorICAgICAgICAoYXNzZXJ0RmFsc2UpOgor
ICAgICAgICAoYXNzZXJ0VGhyb3dzKToKKworMjAyMC0wNS0yMiAgWGFuIEzDs3BleiAgPHhhbkBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGlj
IGNsYXNzIGZpZWxkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk0MDk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB0ZXN0MjYyL2NvbmZpZy55YW1sOiBlbmFibGUgc3RhdGljIHB1YmxpYyBmaWVsZHMu
CisKIDIwMjAtMDYtMDQgIFBhdWxvIE1hdG9zICA8cG1hdG9zQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgU2tpcCBtaWNyb2JlbmNobWFya3MvaW50ZXJwcmV0ZXItd2FzbS5qcyBvbiBNSVBTL0FSTQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanMgYi9KU1Rl
c3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtaGFybW9ueS5qcwppbmRleCBkYmY0NmQ1MjdiMWUuLjA2
OTY4NDllZTZjZSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1v
bnkuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanMKQEAgLTMx
LDE3MCArMzEsNyBAQAogCiAidXNlIHN0cmljdCI7CiAKLWZ1bmN0aW9uIGNsYXNzT2Yob2JqZWN0
KSB7Ci0gICAvLyBBcmd1bWVudCBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4KLSAgIHZh
ciBzdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTsKLSAgIC8v
IFN0cmluZyBoYXMgZm9ybWF0IFtvYmplY3QgPENsYXNzTmFtZT5dLgotICAgcmV0dXJuIHN0cmlu
Zy5zdWJzdHJpbmcoOCwgc3RyaW5nLmxlbmd0aCAtIDEpOwotfQotCi0vKioKLSAqIENvbXBhcmVz
IHR3byBvYmplY3RzIGZvciBrZXkvdmFsdWUgZXF1YWxpdHkuCi0gKiBSZXR1cm5zIHRydWUgaWYg
dGhleSBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KLSAqLwotZnVuY3Rpb24gZGVlcE9iamVj
dEVxdWFscyhhLCBiKSB7Ci0gIHZhciBhUHJvcHMgPSBPYmplY3Qua2V5cyhhKTsKLSAgYVByb3Bz
LnNvcnQoKTsKLSAgdmFyIGJQcm9wcyA9IE9iamVjdC5rZXlzKGIpOwotICBiUHJvcHMuc29ydCgp
OwotICBpZiAoIWRlZXBFcXVhbHMoYVByb3BzLCBiUHJvcHMpKSB7Ci0gICAgcmV0dXJuIGZhbHNl
OwotICB9Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgYVByb3BzLmxlbmd0aDsgaSsrKSB7Ci0gICAg
aWYgKCFkZWVwRXF1YWxzKGFbYVByb3BzW2ldXSwgYlthUHJvcHNbaV1dKSkgewotICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLyoqCi0gKiBDb21w
YXJlcyB0d28gSmF2YVNjcmlwdCB2YWx1ZXMgZm9yIHR5cGUgYW5kIHZhbHVlIGVxdWFsaXR5Lgot
ICogSXQgY2hlY2tzIGludGVybmFscyBvZiBhcnJheXMgYW5kIG9iamVjdHMuCi0gKi8KLWZ1bmN0
aW9uIGRlZXBFcXVhbHMoYSwgYikgewotICBpZiAoYSA9PT0gYikgewotICAgIC8vIENoZWNrIGZv
ciAtMC4KLSAgICBpZiAoYSA9PT0gMCkgcmV0dXJuICgxIC8gYSkgPT09ICgxIC8gYik7Ci0gICAg
cmV0dXJuIHRydWU7Ci0gIH0KLSAgaWYgKHR5cGVvZiBhICE9IHR5cGVvZiBiKSByZXR1cm4gZmFs
c2U7Ci0gIGlmICh0eXBlb2YgYSA9PSAnbnVtYmVyJykgcmV0dXJuIGlzTmFOKGEpICYmIGlzTmFO
KGIpOwotICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnICYmIHR5cGVvZiBhICE9PSAnZnVuY3Rp
b24nKSByZXR1cm4gZmFsc2U7Ci0gIC8vIE5laXRoZXIgYSBub3IgYiBpcyBwcmltaXRpdmUuCi0g
IHZhciBvYmplY3RDbGFzcyA9IGNsYXNzT2YoYSk7Ci0gIGlmIChvYmplY3RDbGFzcyAhPT0gY2xh
c3NPZihiKSkgcmV0dXJuIGZhbHNlOwotICBpZiAob2JqZWN0Q2xhc3MgPT09ICdSZWdFeHAnKSB7
Ci0gICAgLy8gRm9yIFJlZ0V4cCwganVzdCBjb21wYXJlIHBhdHRlcm4gYW5kIGZsYWdzIHVzaW5n
IGl0cyB0b1N0cmluZy4KLSAgICByZXR1cm4gKGEudG9TdHJpbmcoKSA9PT0gYi50b1N0cmluZygp
KTsKLSAgfQotICAvLyBGdW5jdGlvbnMgYXJlIG9ubHkgaWRlbnRpY2FsIHRvIHRoZW1zZWx2ZXMu
Ci0gIGlmIChvYmplY3RDbGFzcyA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlOwotICBpZiAo
b2JqZWN0Q2xhc3MgPT09ICdBcnJheScpIHsKLSAgICB2YXIgZWxlbWVudENvdW50ID0gMDsKLSAg
ICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAoIWRl
ZXBFcXVhbHMoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci0gIH0KLSAgaWYgKG9iamVjdENsYXNzID09ICdTdHJpbmcnIHx8IG9iamVjdENsYXNzID09
ICdOdW1iZXInIHx8Ci0gICAgICBvYmplY3RDbGFzcyA9PSAnQm9vbGVhbicgfHwgb2JqZWN0Q2xh
c3MgPT0gJ0RhdGUnKSB7Ci0gICAgaWYgKGEudmFsdWVPZigpICE9PSBiLnZhbHVlT2YoKSkgcmV0
dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiBkZWVwT2JqZWN0RXF1YWxzKGEsIGIpOwotfQotCi0v
KioKLSAqIFRocm93cyBhbiBleGNlcHRpb24gY29udGFpbmluZyB0aGUgdXNlcl9tZXNzYWdlIChp
ZiBhbnkpIGFuZCB0aGUgdmFsdWVzLgotICovCi1mdW5jdGlvbiBmYWlsKGV4cGVjdGVkLCBmb3Vu
ZCwgdXNlcl9tZXNzYWdlID0gJycpIHsKLSAgLy8gVE9ETyhjaXJhKTogUmVwbGFjZSBTdHJpbmcg
d2l0aCBQcmV0dHlQcmludCBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzLgotICB2YXIgbWVzc2FnZSA9
ICdGYWlsdXJlJyArICh1c2VyX21lc3NhZ2UgPyAnICgnICsgdXNlcl9tZXNzYWdlICsgJyknIDog
JycpICsKLSAgICAgICc6IGV4cGVjdGVkIDwnICsgU3RyaW5nKGV4cGVjdGVkKSArICc+LCBmb3Vu
ZCA8JyArIFN0cmluZyhmb3VuZCkgKyAnPi4nOwotICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7
Ci19Ci0KLS8qKgotICogVGhyb3dzIGlmIG9iaiBpcyBub3Qgb2YgZ2l2ZW4gdHlwZS4KLSAqLwot
ZnVuY3Rpb24gYXNzZXJ0SW5zdGFuY2VvZihvYmosIHR5cGUpIHsKLSAgaWYgKCEob2JqIGluc3Rh
bmNlb2YgdHlwZSkpIHsKLSAgICB2YXIgYWN0dWFsVHlwZU5hbWUgPSBudWxsOwotICAgIHZhciBh
Y3R1YWxDb25zdHJ1Y3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopLmNvbnN0cnVjdG9y
OwotICAgIGlmICh0eXBlb2YgYWN0dWFsQ29uc3RydWN0b3IgPT0gImZ1bmN0aW9uIikgewotICAg
ICAgYWN0dWFsVHlwZU5hbWUgPSBhY3R1YWxDb25zdHJ1Y3Rvci5uYW1lIHx8IFN0cmluZyhhY3R1
YWxDb25zdHJ1Y3Rvcik7Ci0gICAgfQotICAgIHRocm93IG5ldyBFcnJvcignT2JqZWN0IDwnICsg
b2JqICsgJz4gaXMgbm90IGFuIGluc3RhbmNlIG9mIDwnICsKLSAgICAgICAgICAgICAgICAgICAg
KHR5cGUubmFtZSB8fCB0eXBlKSArICc+JyArCi0gICAgICAgICAgICAgICAgICAgIChhY3R1YWxU
eXBlTmFtZSA/ICcgYnV0IG9mIDwgJyArIGFjdHVhbFR5cGVOYW1lICsgJz4nIDogJycpKTsKLSAg
fQotfQotCi0vKioKLSAqIFRocm93cyBpZiBvYmogaXMgbm90IHRoZSBzYW1lIGFzIGV4cGVjdGVk
LgotICovCi1mdW5jdGlvbiBhc3NlcnRTYW1lKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsK
LSAgaWYgKGZvdW5kID09PSBleHBlY3RlZCkgewotICAgIGlmIChleHBlY3RlZCAhPT0gMCB8fCAo
MSAvIGV4cGVjdGVkKSA9PT0gKDEgLyBmb3VuZCkpCi0gICAgICByZXR1cm47Ci0gIH0gZWxzZSBp
ZiAoKGV4cGVjdGVkICE9PSBleHBlY3RlZCkgJiYgKGZvdW5kICE9PSBmb3VuZCkpIHsKLSAgICAg
IHJldHVybjsKLSAgfQotICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpOwotfQotCi0v
KioKLSAqIFRocm93cyBpZiB0d28gdmFyaWFibGVzIGhhdmUgZGlmZmVyZW50IHR5cGVzIG9yIHZh
bHVlcy4KLSAqLwotCi1mdW5jdGlvbiBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kLCB1c2Vy
X21lc3NhZ2UgPSAnJykgewotICBpZiAoIWRlZXBFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kKSkgewot
ICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2UpOwotICB9Ci19Ci0KLS8qKgot
ICogVGhyb3dzIGlmIHR3byB2YXJpYWJsZXMgaGF2ZSBlcXVhbCB0eXBlcyBvciB2YWx1ZXMuCi0g
Ki8KLQotZnVuY3Rpb24gYXNzZXJ0Tm90RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNz
YWdlID0gJycpIHsKLSAgaWYgKGRlZXBFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kKSkgewotICAgIGZh
aWwoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2UpOwotICB9Ci19Ci0KLS8qKgotICogVGhy
b3dzIGlmIHZhbHVlIGlzIGZhbHNlLgotICovCi1mdW5jdGlvbiBhc3NlcnRUcnVlKHZhbHVlLCB1
c2VyX21lc3NhZ2UgPSAnJykgewotICBhc3NlcnRFcXVhbHModHJ1ZSwgdmFsdWUsIHVzZXJfbWVz
c2FnZSk7Ci19Ci0KLQotLyoqCi0gKiBUaHJvd3MgaWYgdmFsdWUgaXMgdHJ1ZS4KLSAqLwotZnVu
Y3Rpb24gYXNzZXJ0RmFsc2UodmFsdWUsIHVzZXJfbWVzc2FnZSA9ICcnKSB7Ci0gIGFzc2VydEVx
dWFscyhmYWxzZSwgdmFsdWUsIHVzZXJfbWVzc2FnZSk7Ci19Ci0KLS8qKgotICogUnVucyBjb2Rl
KCkgYW5kIGFzc2VydHMgdGhhdCBpdCB0aHJvd3MgdGhlIHNwZWNpZmllZCBleGNlcHRpb24uCi0g
Ki8KLWZ1bmN0aW9uIGFzc2VydFRocm93cyhjb2RlLCB0eXBlX29wdCwgY2F1c2Vfb3B0KSB7Ci0g
IHRyeSB7Ci0gICAgaWYgKHR5cGVvZiBjb2RlID09ICdmdW5jdGlvbicpIHsKLSAgICAgIGNvZGUo
KTsKLSAgICB9IGVsc2UgewotICAgICAgZXZhbChjb2RlKTsKLSAgICB9Ci0gIH0gY2F0Y2ggKGUp
IHsKLSAgICBpZiAodHlwZW9mIHR5cGVfb3B0ID09ICdmdW5jdGlvbicpIHsKLSAgICAgIGFzc2Vy
dEluc3RhbmNlb2YoZSwgdHlwZV9vcHQpOwotICAgIH0KLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0
aCA+PSAzKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoY2F1c2Vfb3B0LCBlLnR5cGUsICd0aHJvd24g
ZXhjZXB0aW9uIHR5cGUgbWlzbWF0Y2gnKTsKLSAgICB9Ci0gICAgLy8gU3VjY2Vzcy4KLSAgICBy
ZXR1cm47Ci0gIH0KLSAgdmFyIGV4cGVjdGVkID0gYXJndW1lbnRzLmxlbmd0aCA+PSAzID8gY2F1
c2Vfb3B0IDoKLSAgICAgIHR5cGVvZiB0eXBlX29wdCA9PSAnZnVuY3Rpb24nID8gdHlwZV9vcHQg
OiAnYW55IGV4Y2VwdGlvbic7Ci0gIGZhaWwoZXhwZWN0ZWQsICdubyBleGNlcHRpb24nLCAnZXhw
ZWN0ZWQgdGhyb3duIGV4Y2VwdGlvbicpOwotfQorbG9hZCgiLi9oYXJtb255LXN1cHBvcnQuanMi
KTsKIAogewogICBjbGFzcyBDIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZp
ZWxkcy1zdGF0aWMtaGFybW9ueS5qcyBiL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1zdGF0
aWMtaGFybW9ueS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmNh
Njc1YTg2ZjVjMgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxk
cy1zdGF0aWMtaGFybW9ueS5qcwpAQCAtMCwwICsxLDUwNyBAQAorLy9AIHJlcXVpcmVPcHRpb25z
KCItLXVzZVB1YmxpY0NsYXNzRmllbGRzPTEiKQorLy9AIGRlZmF1bHROb0VhZ2VyUnVuCisKKy8v
IENvcHlyaWdodCAyMDE3IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisKKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAor
Ly8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisv
LyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworInVzZSBzdHJpY3QiOworCitsb2FkKCIuL2hhcm1vbnktc3Vw
cG9ydC5qcyIpOworCit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBhOworICB9CisKKyAgYXNz
ZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5hKTsKKyAgbGV0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEMsICdhJyk7CisgIGFzc2VydFRydWUoQy5oYXNPd25Qcm9w
ZXJ0eSgnYScpKTsKKyAgYXNzZXJ0VHJ1ZShkZXNjcmlwdG9yLndyaXRhYmxlKTsKKyAgYXNzZXJ0
VHJ1ZShkZXNjcmlwdG9yLmVudW1lcmFibGUpOworICBhc3NlcnRUcnVlKGRlc2NyaXB0b3IuY29u
ZmlndXJhYmxlKTsKKworICBsZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVk
LCBjLmEpOworfQorCit7CisgIGxldCB4ID0gJ2EnOworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMg
YTsKKyAgICBzdGF0aWMgaGFzT3duUHJvcGVydHkgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDE7IH0K
KyAgICBzdGF0aWMgYiA9IHg7CisgICAgc3RhdGljIGMgPSAxOworICB9CisKKyAgYXNzZXJ0RXF1
YWxzKHVuZGVmaW5lZCwgQy5hKTsKKyAgYXNzZXJ0RXF1YWxzKCdhJywgQy5iKTsKKyAgYXNzZXJ0
RXF1YWxzKDEsIEMuYyk7CisgIGFzc2VydEVxdWFscygxLCBDLmhhc093blByb3BlcnR5KCkpOwor
CisgIGxldCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYSk7CisgIGFz
c2VydEVxdWFscyh1bmRlZmluZWQsIGMuYik7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMu
Yyk7Cit9CisKK3sKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IHsKKyAgICBjbGFzcyBDIHsKKyAgICAg
IHN0YXRpYyB4ID0gT2JqZWN0LmZyZWV6ZSh0aGlzKTsKKyAgICAgIHN0YXRpYyBjID0gNDI7Cisg
ICAgfQorICB9LCBUeXBlRXJyb3IpOworfQorCit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBj
ID0gdGhpczsKKyAgICBzdGF0aWMgZCA9ICgpID0+IHRoaXM7CisgIH0KKworICBhc3NlcnRFcXVh
bHMoQywgQy5jKTsKKyAgYXNzZXJ0RXF1YWxzKEMsIEMuZCgpKTsKKworICBsZXQgYyA9IG5ldyBD
OworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmMpOworICBhc3NlcnRFcXVhbHModW5kZWZp
bmVkLCBjLmQpOworfQorCit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBjID0gMTsKKyAgICBz
dGF0aWMgZCA9IHRoaXMuYzsKKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBDLmMpOworICBhc3Nl
cnRFcXVhbHMoMSwgQy5kKTsKKworICBsZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5k
ZWZpbmVkLCBjLmMpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmQpOworfQorCit7Cisg
IGNsYXNzIEMgeworICAgIHN0YXRpYyBiID0gMTsKKyAgICBzdGF0aWMgYyA9ICgpID0+IHRoaXMu
YjsKKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBDLmIpOworICBhc3NlcnRFcXVhbHMoMSwgQy5j
KCkpOworCisgIGxldCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYyk7
Cit9CisKK3sKKyAgbGV0IHggPSAnYSc7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBiID0gMTsK
KyAgICBzdGF0aWMgYyA9ICgpID0+IHRoaXMuYjsKKyAgICBzdGF0aWMgZSA9ICgpID0+IHg7Cisg
IH0KKworICBhc3NlcnRFcXVhbHMoMSwgQy5iKTsKKyAgYXNzZXJ0RXF1YWxzKCdhJywgQy5lKCkp
OworCisgIGxldCBhID0ge2IgOiAyIH07CisgIGFzc2VydEVxdWFscygxLCBDLmMuY2FsbChhKSk7
CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5iKTsKKyAg
YXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5jKTsKK30KKworeworICBsZXQgeCA9ICdhJzsKKyAg
Y2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSAxOworICAgIHN0YXRpYyBkID0gZnVuY3Rpb24oKSB7
IHJldHVybiB0aGlzLmM7IH07CisgICAgc3RhdGljIGUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHg7
IH07CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwgQy5jKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMu
ZCgpKTsKKyAgYXNzZXJ0RXF1YWxzKCdhJywgQy5lKCkpOworCisgIEMuYyA9IDI7CisgIGFzc2Vy
dEVxdWFscygyLCBDLmQoKSk7CisKKyAgbGV0IGEgPSB7YyA6IDMgfTsKKyAgYXNzZXJ0RXF1YWxz
KDMsIEMuZC5jYWxsKGEpKTsKKworICBhc3NlcnRUaHJvd3MoQy5kLmJpbmQodW5kZWZpbmVkKSk7
CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5jKTsKKyAg
YXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5kKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwg
Yy5lKTsKK30KKworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYyA9IGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gMSB9OworICB9CisKKyAgYXNzZXJ0RXF1YWxzKCdjJywgQy5jLm5hbWUpOworfQorCit7
CisgIGxldCBkID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcudGFyZ2V0OyB9CisgIGNsYXNzIEMg
eworICAgIHN0YXRpYyBjID0gZDsKKyAgfQorCisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIEMu
YygpKTsKKyAgYXNzZXJ0RXF1YWxzKG5ldyBkLCBuZXcgQy5jKCkpOworfQorCit7CisgIGNsYXNz
IEMgeworICAgIHN0YXRpYyBjID0gKCkgPT4gbmV3LnRhcmdldDsKKyAgfQorCisgIGFzc2VydEVx
dWFscyh1bmRlZmluZWQsIEMuYygpKTsKK30KKworeworICAgY2xhc3MgQyB7CisgICAgIHN0YXRp
YyBjID0gKCkgPT4geworICAgICAgIGxldCBiOworICAgICAgIGNsYXNzIEEgeworICAgICAgICAg
Y29uc3RydWN0b3IoKSB7CisgICAgICAgICAgIGIgPSBuZXcudGFyZ2V0OworICAgICAgICAgfQor
ICAgICAgIH07CisgICAgICAgbmV3IEE7CisgICAgICAgYXNzZXJ0RXF1YWxzKEEsIGIpOworICAg
ICB9CisgIH0KKworICBDLmMoKTsKK30KKworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYyA9
IG5ldy50YXJnZXQ7CisgIH0KKworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmMpOworfQor
CisvKgoreworICBjbGFzcyBCIHsKKyAgICBzdGF0aWMgZCA9IDE7CisgICAgc3RhdGljIGIgPSAo
KSA9PiB0aGlzLmQ7CisgIH0KKworICBjbGFzcyBDIGV4dGVuZHMgQiB7CisgICAgc3RhdGljIGMg
PSBzdXBlci5kOworICAgIHN0YXRpYyBkID0gKCkgPT4gc3VwZXIuZDsKKyAgICBzdGF0aWMgZSA9
ICgpID0+IHN1cGVyLmIoKTsKKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBDLmMpOworICBhc3Nl
cnRFcXVhbHMoMSwgQy5kKCkpOworICBhc3NlcnRFcXVhbHMoMSwgQy5lKCkpOworfQorKi8KKwor
eworICBsZXQgZm9vID0gdW5kZWZpbmVkOworICBjbGFzcyBCIHsKKyAgICBzdGF0aWMgc2V0IGQo
eCkgeworICAgICAgZm9vID0geDsKKyAgICB9CisgIH0KKworICBjbGFzcyBDIGV4dGVuZHMgQiB7
CisgICAgc3RhdGljIGQgPSAyOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgZm9v
KTsKKyAgYXNzZXJ0RXF1YWxzKDIsIEMuZCk7Cit9CisKKworeworICBsZXQgQyAgPSBjbGFzcyB7
CisgICAgc3RhdGljIGM7CisgIH07CisKKyAgYXNzZXJ0RXF1YWxzKCJDIiwgQy5uYW1lKTsKK30K
KworLyoKK3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSBuZXcgQzsKKyAgfQorCisgIGFz
c2VydFRydWUoQy5jIGluc3RhbmNlb2YgQyk7Cit9CisqLworCisoZnVuY3Rpb24gdGVzdCgpIHsK
KyAgZnVuY3Rpb24gbWFrZUMoKSB7CisgICAgdmFyIHggPSAxOworCisgICAgcmV0dXJuIGNsYXNz
IHsKKyAgICAgIHN0YXRpYyBhID0gKCkgPT4gKCkgPT4geDsKKyAgICB9CisgIH0KKworICBsZXQg
QyA9IG1ha2VDKCk7CisgIGxldCBmID0gQy5hKCk7CisgIGFzc2VydEVxdWFscygxLCBmKCkpOwor
fSkoKQorCit7CisgIGxldCBjID0gImMiOworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgWyJhIl0g
PSAxOworICAgIHN0YXRpYyBbImIiXTsKKyAgICBzdGF0aWMgW2NdOworICB9CisKKyAgYXNzZXJ0
RXF1YWxzKDEsIEMuYSk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIEMuYik7CisgIGFzc2Vy
dEVxdWFscyh1bmRlZmluZWQsIENbY10pOworfQorCit7CisgIGxldCBsb2cgPSBbXTsKKyAgZnVu
Y3Rpb24gcnVuKGkpIHsKKyAgICBsb2cucHVzaChpKTsKKyAgICByZXR1cm4gaTsKKyAgfQorCisg
IGNsYXNzIEMgeworICAgIHN0YXRpYyBbcnVuKDEpXSA9IHJ1big2KTsKKyAgICBzdGF0aWMgW3J1
bigyKV0gPSBydW4oNyk7CisgICAgW3J1bigzKV0oKSB7IHJ1big5KTt9CisgICAgc3RhdGljIFty
dW4oNCldID0gcnVuKDgpOworICAgIHN0YXRpYyBbcnVuKDUpXSgpIHsgdGhyb3cgbmV3IEVycm9y
KCdzaG91bGQgbm90IGV4ZWN1dGUnKTt9OworICB9CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgY1sz
XSgpOworICBhc3NlcnRFcXVhbHMoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldLCBsb2cpOwor
fQorCisKKworZnVuY3Rpb24geCgpIHsKKworICAvLyBUaGlzIHRlc3RzIGxhenkgcGFyc2luZy4K
KyAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgIGxldCBsb2cgPSBbXTsKKyAgICBmdW5jdGlvbiBy
dW4oaSkgeworICAgICAgbG9nLnB1c2goaSk7CisgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAg
ICBjbGFzcyBDIHsKKyAgICAgIHN0YXRpYyBbcnVuKDEpXSA9IHJ1big2KTsKKyAgICAgIHN0YXRp
YyBbcnVuKDIpXSA9IHJ1big3KTsKKyAgICAgIFtydW4oMyldKCkgeyBydW4oOSk7fQorICAgICAg
c3RhdGljIFtydW4oNCldID0gcnVuKDgpOworICAgICAgc3RhdGljIFtydW4oNSldKCkgeyB0aHJv
dyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgZXhlY3V0ZScpO307CisgICAgfQorCisgICAgbGV0IGMg
PSBuZXcgQzsKKyAgICBjWzNdKCk7CisgICAgYXNzZXJ0RXF1YWxzKFsxLCAyLCAzLCA0LCA1LCA2
LCA3LCA4LCA5XSwgbG9nKTsKKyAgfQorfQoreCgpKCk7CisKK3sKKyAgbGV0IGxvZyA9IFtdOwor
ICBmdW5jdGlvbiBydW4oaSkgeworICAgIGxvZy5wdXNoKGkpOworICAgIHJldHVybiBpOworICB9
CisKKyAgY2xhc3MgQyB7CisgICAgW3J1bigxKV0gPSBydW4oNyk7CisgICAgW3J1bigyKV0gPSBy
dW4oOCk7CisgICAgW3J1bigzKV0oKSB7IHJ1big5KTt9CisgICAgc3RhdGljIFtydW4oNCldID0g
cnVuKDYpOworICAgIFtydW4oNSldKCkgeyB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgZXhl
Y3V0ZScpO307CisgIH0KKworICBsZXQgYyA9IG5ldyBDOworICBjWzNdKCk7CisgIGFzc2VydEVx
dWFscyhbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0sIGxvZyk7Cit9CisKK2Z1bmN0aW9uIHko
KSB7CisgIC8vIFRoaXMgdGVzdHMgbGF6eSBwYXJzaW5nLgorICByZXR1cm4gZnVuY3Rpb24oKSB7
CisgICAgbGV0IGxvZyA9IFtdOworICAgIGZ1bmN0aW9uIHJ1bihpKSB7CisgICAgICBsb2cucHVz
aChpKTsKKyAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIGNsYXNzIEMgeworICAgICAgW3J1
bigxKV0gPSBydW4oNyk7CisgICAgICBbcnVuKDIpXSA9IHJ1big4KTsKKyAgICAgIFtydW4oMyld
KCkgeyBydW4oOSk7fQorICAgICAgc3RhdGljIFtydW4oNCldID0gcnVuKDYpOworICAgICAgW3J1
big1KV0oKSB7IHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5vdCBleGVjdXRlJyk7fTsKKyAgICB9
CisKKyAgICBsZXQgYyA9IG5ldyBDOworICAgIGNbM10oKTsKKyAgICBhc3NlcnRFcXVhbHMoWzEs
IDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldLCBsb2cpOworICB9Cit9Cit5KCkoKTsKKworeworICBj
bGFzcyBDIHt9CisgIGNsYXNzIEQgeworICAgIHN0YXRpYyBbQ107CisgIH0KKworICBhc3NlcnRU
aHJvd3MoKCkgPT4geyBjbGFzcyBYIHsgc3RhdGljIFtYXSB9IH0pOworICBhc3NlcnRFcXVhbHMo
dW5kZWZpbmVkLCBEW0NdKTsKK30KKworeworICBmdW5jdGlvbiB0KCkgeworICAgIHJldHVybiBj
bGFzcyB7CisgICAgICBzdGF0aWMgWyd4J10gPSAyOworICAgIH0KKyAgfQorCisgIGxldCBrbGFz
cyA9IHQoKTsKKyAgbGV0IG9iaiA9IG5ldyBrbGFzczsKKyAgYXNzZXJ0RXF1YWxzKDIsIGtsYXNz
LngpOworfQorCit7CisgIGxldCB4ID0gJ2EnOworICBjbGFzcyBDIHsKKyAgICBhOworICAgIGIg
PSB4OworICAgIGMgPSAxOworICAgIGhhc093blByb3BlcnR5KCkgeyByZXR1cm4gMTt9CisgICAg
c3RhdGljIFt4XSA9IDI7CisgICAgc3RhdGljIGIgPSAzOworICAgIHN0YXRpYyBkOworICB9CisK
KyAgYXNzZXJ0RXF1YWxzKDIsIEMuYSk7CisgIGFzc2VydEVxdWFscygzLCBDLmIpOworICBhc3Nl
cnRFcXVhbHModW5kZWZpbmVkLCBDLmQpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmMp
OworCisgIGxldCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYSk7Cisg
IGFzc2VydEVxdWFscygnYScsIGMuYik7CisgIGFzc2VydEVxdWFscygxLCBjLmMpOworICBhc3Nl
cnRFcXVhbHModW5kZWZpbmVkLCBjLmQpOworICBhc3NlcnRFcXVhbHMoMSwgYy5oYXNPd25Qcm9w
ZXJ0eSgpKTsKK30KKworeworICBmdW5jdGlvbiB0KCkgeworICAgIHJldHVybiBjbGFzcyB7Cisg
ICAgICBbJ3gnXSA9IDE7CisgICAgICBzdGF0aWMgWyd4J10gPSAyOworICAgIH0KKyAgfQorCisg
IGxldCBrbGFzcyA9IHQoKTsKKyAgbGV0IG9iaiA9IG5ldyBrbGFzczsKKyAgYXNzZXJ0RXF1YWxz
KDEsIG9iai54KTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGtsYXNzLngpOworfQorCisKK3sKKyAgY2xh
c3MgWCB7CisgICAgc3RhdGljIHAgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50c1swXTsg
fQorICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEsIFgucCgxKSk7Cit9CisKK3sKKyAgY2xhc3MgWCB7
CisgICAgc3RhdGljIHQgPSAoKSA9PiB7CisgICAgICBmdW5jdGlvbiBwKCkgeyByZXR1cm4gYXJn
dW1lbnRzWzBdOyB9OworICAgICAgcmV0dXJuIHA7CisgICAgfQorICB9CisKKyAgbGV0IHAgPSBY
LnQoKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIHAoMSkpOworfQorCit7CisgIGNsYXNzIFggeworICAg
IHN0YXRpYyB0ID0gKCkgPT4geworICAgICAgZnVuY3Rpb24gcCgpIHsgcmV0dXJuIGV2YWwoImFy
Z3VtZW50c1swXSIpOyB9OworICAgICAgcmV0dXJuIHA7CisgICAgfQorICB9CisKKyAgbGV0IHAg
PSBYLnQoKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIHAoMSkpOworfQorCit7CisgIGNsYXNzIFggewor
ICAgIHN0YXRpYyBwID0gZXZhbCgiKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzWzBdOyB9
KSgxKSIpOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEsIFgucCk7Cit9CisKKy8qCit7CisgIGxl
dCBwID0geyB6OiBjbGFzcyB7IHN0YXRpYyB5ID0gdGhpcy5uYW1lIH0gfQorICBhc3NlcnRFcXVh
bHMocC56LnksICd6Jyk7CisKKyAgbGV0IHEgPSB7IFsieiJdOiBjbGFzcyB7IHN0YXRpYyB5ID0g
dGhpcy5uYW1lIH0gfQorICBhc3NlcnRFcXVhbHMocS56LnksICd6Jyk7CisKKyAgY29uc3QgQyA9
IGNsYXNzIHsKKyAgICBzdGF0aWMgeCA9IHRoaXMubmFtZTsKKyAgfQorICBhc3NlcnRFcXVhbHMo
Qy54LCAnQycpOworfQorKi8KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hhcm1vbnktc3Vw
cG9ydC5qcyBiL0pTVGVzdHMvc3RyZXNzL2hhcm1vbnktc3VwcG9ydC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAyNGIzYjA4ODllMQotLS0gL2Rldi9udWxsCisr
KyBiL0pTVGVzdHMvc3RyZXNzL2hhcm1vbnktc3VwcG9ydC5qcwpAQCAtMCwwICsxLDE5NiBAQAor
Ly8gQ29weXJpZ2h0IDIwMTcgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKworLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
Ky8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGNsYXNzT2Yo
b2JqZWN0KSB7CisgICAvLyBBcmd1bWVudCBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4K
KyAgIHZhciBzdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTsK
KyAgIC8vIFN0cmluZyBoYXMgZm9ybWF0IFtvYmplY3QgPENsYXNzTmFtZT5dLgorICAgcmV0dXJu
IHN0cmluZy5zdWJzdHJpbmcoOCwgc3RyaW5nLmxlbmd0aCAtIDEpOworfQorCisvKioKKyAqIENv
bXBhcmVzIHR3byBvYmplY3RzIGZvciBrZXkvdmFsdWUgZXF1YWxpdHkuCisgKiBSZXR1cm5zIHRy
dWUgaWYgdGhleSBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworZnVuY3Rpb24gZGVl
cE9iamVjdEVxdWFscyhhLCBiKSB7CisgIHZhciBhUHJvcHMgPSBPYmplY3Qua2V5cyhhKTsKKyAg
YVByb3BzLnNvcnQoKTsKKyAgdmFyIGJQcm9wcyA9IE9iamVjdC5rZXlzKGIpOworICBiUHJvcHMu
c29ydCgpOworICBpZiAoIWRlZXBFcXVhbHMoYVByb3BzLCBiUHJvcHMpKSB7CisgICAgcmV0dXJu
IGZhbHNlOworICB9CisgIGZvciAodmFyIGkgPSAwOyBpIDwgYVByb3BzLmxlbmd0aDsgaSsrKSB7
CisgICAgaWYgKCFkZWVwRXF1YWxzKGFbYVByb3BzW2ldXSwgYlthUHJvcHNbaV1dKSkgeworICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworLyoqCisg
KiBDb21wYXJlcyB0d28gSmF2YVNjcmlwdCB2YWx1ZXMgZm9yIHR5cGUgYW5kIHZhbHVlIGVxdWFs
aXR5LgorICogSXQgY2hlY2tzIGludGVybmFscyBvZiBhcnJheXMgYW5kIG9iamVjdHMuCisgKi8K
K2Z1bmN0aW9uIGRlZXBFcXVhbHMoYSwgYikgeworICBpZiAoYSA9PT0gYikgeworICAgIC8vIENo
ZWNrIGZvciAtMC4KKyAgICBpZiAoYSA9PT0gMCkgcmV0dXJuICgxIC8gYSkgPT09ICgxIC8gYik7
CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgaWYgKHR5cGVvZiBhICE9IHR5cGVvZiBiKSByZXR1
cm4gZmFsc2U7CisgIGlmICh0eXBlb2YgYSA9PSAnbnVtYmVyJykgcmV0dXJuIGlzTmFOKGEpICYm
IGlzTmFOKGIpOworICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnICYmIHR5cGVvZiBhICE9PSAn
ZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7CisgIC8vIE5laXRoZXIgYSBub3IgYiBpcyBwcmltaXRp
dmUuCisgIHZhciBvYmplY3RDbGFzcyA9IGNsYXNzT2YoYSk7CisgIGlmIChvYmplY3RDbGFzcyAh
PT0gY2xhc3NPZihiKSkgcmV0dXJuIGZhbHNlOworICBpZiAob2JqZWN0Q2xhc3MgPT09ICdSZWdF
eHAnKSB7CisgICAgLy8gRm9yIFJlZ0V4cCwganVzdCBjb21wYXJlIHBhdHRlcm4gYW5kIGZsYWdz
IHVzaW5nIGl0cyB0b1N0cmluZy4KKyAgICByZXR1cm4gKGEudG9TdHJpbmcoKSA9PT0gYi50b1N0
cmluZygpKTsKKyAgfQorICAvLyBGdW5jdGlvbnMgYXJlIG9ubHkgaWRlbnRpY2FsIHRvIHRoZW1z
ZWx2ZXMuCisgIGlmIChvYmplY3RDbGFzcyA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlOwor
ICBpZiAob2JqZWN0Q2xhc3MgPT09ICdBcnJheScpIHsKKyAgICB2YXIgZWxlbWVudENvdW50ID0g
MDsKKyAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHsKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CisgICAgICBp
ZiAoIWRlZXBFcXVhbHMoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7CisgIH0KKyAgaWYgKG9iamVjdENsYXNzID09ICdTdHJpbmcnIHx8IG9iamVjdENs
YXNzID09ICdOdW1iZXInIHx8CisgICAgICBvYmplY3RDbGFzcyA9PSAnQm9vbGVhbicgfHwgb2Jq
ZWN0Q2xhc3MgPT0gJ0RhdGUnKSB7CisgICAgaWYgKGEudmFsdWVPZigpICE9PSBiLnZhbHVlT2Yo
KSkgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiBkZWVwT2JqZWN0RXF1YWxzKGEsIGIpOwor
fQorCisvKioKKyAqIFRocm93cyBhbiBleGNlcHRpb24gY29udGFpbmluZyB0aGUgdXNlcl9tZXNz
YWdlIChpZiBhbnkpIGFuZCB0aGUgdmFsdWVzLgorICovCitmdW5jdGlvbiBmYWlsKGV4cGVjdGVk
LCBmb3VuZCwgdXNlcl9tZXNzYWdlID0gJycpIHsKKyAgLy8gVE9ETyhjaXJhKTogUmVwbGFjZSBT
dHJpbmcgd2l0aCBQcmV0dHlQcmludCBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzLgorICB2YXIgbWVz
c2FnZSA9ICdGYWlsdXJlJyArICh1c2VyX21lc3NhZ2UgPyAnICgnICsgdXNlcl9tZXNzYWdlICsg
JyknIDogJycpICsKKyAgICAgICc6IGV4cGVjdGVkIDwnICsgU3RyaW5nKGV4cGVjdGVkKSArICc+
LCBmb3VuZCA8JyArIFN0cmluZyhmb3VuZCkgKyAnPi4nOworICB0aHJvdyBuZXcgRXJyb3IobWVz
c2FnZSk7Cit9CisKKy8qKgorICogVGhyb3dzIGlmIG9iaiBpcyBub3Qgb2YgZ2l2ZW4gdHlwZS4K
KyAqLworZnVuY3Rpb24gYXNzZXJ0SW5zdGFuY2VvZihvYmosIHR5cGUpIHsKKyAgaWYgKCEob2Jq
IGluc3RhbmNlb2YgdHlwZSkpIHsKKyAgICB2YXIgYWN0dWFsVHlwZU5hbWUgPSBudWxsOworICAg
IHZhciBhY3R1YWxDb25zdHJ1Y3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopLmNvbnN0
cnVjdG9yOworICAgIGlmICh0eXBlb2YgYWN0dWFsQ29uc3RydWN0b3IgPT0gImZ1bmN0aW9uIikg
eworICAgICAgYWN0dWFsVHlwZU5hbWUgPSBhY3R1YWxDb25zdHJ1Y3Rvci5uYW1lIHx8IFN0cmlu
ZyhhY3R1YWxDb25zdHJ1Y3Rvcik7CisgICAgfQorICAgIHRocm93IG5ldyBFcnJvcignT2JqZWN0
IDwnICsgb2JqICsgJz4gaXMgbm90IGFuIGluc3RhbmNlIG9mIDwnICsKKyAgICAgICAgICAgICAg
ICAgICAgKHR5cGUubmFtZSB8fCB0eXBlKSArICc+JyArCisgICAgICAgICAgICAgICAgICAgIChh
Y3R1YWxUeXBlTmFtZSA/ICcgYnV0IG9mIDwgJyArIGFjdHVhbFR5cGVOYW1lICsgJz4nIDogJycp
KTsKKyAgfQorfQorCisvKioKKyAqIFRocm93cyBpZiBvYmogaXMgbm90IHRoZSBzYW1lIGFzIGV4
cGVjdGVkLgorICovCitmdW5jdGlvbiBhc3NlcnRTYW1lKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9v
cHQpIHsKKyAgaWYgKGZvdW5kID09PSBleHBlY3RlZCkgeworICAgIGlmIChleHBlY3RlZCAhPT0g
MCB8fCAoMSAvIGV4cGVjdGVkKSA9PT0gKDEgLyBmb3VuZCkpCisgICAgICByZXR1cm47CisgIH0g
ZWxzZSBpZiAoKGV4cGVjdGVkICE9PSBleHBlY3RlZCkgJiYgKGZvdW5kICE9PSBmb3VuZCkpIHsK
KyAgICAgIHJldHVybjsKKyAgfQorICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpOwor
fQorCisvKioKKyAqIFRocm93cyBpZiB0d28gdmFyaWFibGVzIGhhdmUgZGlmZmVyZW50IHR5cGVz
IG9yIHZhbHVlcy4KKyAqLworCitmdW5jdGlvbiBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGZvdW5k
LCB1c2VyX21lc3NhZ2UgPSAnJykgeworICBpZiAoIWRlZXBFcXVhbHMoZXhwZWN0ZWQsIGZvdW5k
KSkgeworICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2UpOworICB9Cit9CisK
Ky8qKgorICogVGhyb3dzIGlmIHR3byB2YXJpYWJsZXMgaGF2ZSBlcXVhbCB0eXBlcyBvciB2YWx1
ZXMuCisgKi8KKworZnVuY3Rpb24gYXNzZXJ0Tm90RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgdXNl
cl9tZXNzYWdlID0gJycpIHsKKyAgaWYgKGRlZXBFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kKSkgewor
ICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2UpOworICB9Cit9CisKKy8qKgor
ICogVGhyb3dzIGlmIHZhbHVlIGlzIGZhbHNlLgorICovCitmdW5jdGlvbiBhc3NlcnRUcnVlKHZh
bHVlLCB1c2VyX21lc3NhZ2UgPSAnJykgeworICBhc3NlcnRFcXVhbHModHJ1ZSwgdmFsdWUsIHVz
ZXJfbWVzc2FnZSk7Cit9CisKKworLyoqCisgKiBUaHJvd3MgaWYgdmFsdWUgaXMgdHJ1ZS4KKyAq
LworZnVuY3Rpb24gYXNzZXJ0RmFsc2UodmFsdWUsIHVzZXJfbWVzc2FnZSA9ICcnKSB7CisgIGFz
c2VydEVxdWFscyhmYWxzZSwgdmFsdWUsIHVzZXJfbWVzc2FnZSk7Cit9CisKKy8qKgorICogUnVu
cyBjb2RlKCkgYW5kIGFzc2VydHMgdGhhdCBpdCB0aHJvd3MgdGhlIHNwZWNpZmllZCBleGNlcHRp
b24uCisgKi8KK2Z1bmN0aW9uIGFzc2VydFRocm93cyhjb2RlLCB0eXBlX29wdCwgY2F1c2Vfb3B0
KSB7CisgIHRyeSB7CisgICAgaWYgKHR5cGVvZiBjb2RlID09ICdmdW5jdGlvbicpIHsKKyAgICAg
IGNvZGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgZXZhbChjb2RlKTsKKyAgICB9CisgIH0gY2F0
Y2ggKGUpIHsKKyAgICBpZiAodHlwZW9mIHR5cGVfb3B0ID09ICdmdW5jdGlvbicpIHsKKyAgICAg
IGFzc2VydEluc3RhbmNlb2YoZSwgdHlwZV9vcHQpOworICAgIH0KKyAgICBpZiAoYXJndW1lbnRz
Lmxlbmd0aCA+PSAzKSB7CisgICAgICBhc3NlcnRFcXVhbHMoY2F1c2Vfb3B0LCBlLnR5cGUsICd0
aHJvd24gZXhjZXB0aW9uIHR5cGUgbWlzbWF0Y2gnKTsKKyAgICB9CisgICAgLy8gU3VjY2Vzcy4K
KyAgICByZXR1cm47CisgIH0KKyAgdmFyIGV4cGVjdGVkID0gYXJndW1lbnRzLmxlbmd0aCA+PSAz
ID8gY2F1c2Vfb3B0IDoKKyAgICAgIHR5cGVvZiB0eXBlX29wdCA9PSAnZnVuY3Rpb24nID8gdHlw
ZV9vcHQgOiAnYW55IGV4Y2VwdGlvbic7CisgIGZhaWwoZXhwZWN0ZWQsICdubyBleGNlcHRpb24n
LCAnZXhwZWN0ZWQgdGhyb3duIGV4Y2VwdGlvbicpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy90
ZXN0MjYyL2NvbmZpZy55YW1sIGIvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sCmluZGV4IDM3
NGU5ODg3ZmEyMS4uMWU1YTY4MjFjZTE4IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3Rlc3QyNjIvY29u
ZmlnLnlhbWwKKysrIGIvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sCkBAIC02LDYgKzYsNyBA
QCBmbGFnczoKICAgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQ6IHVzZUludGxSZWxhdGl2ZVRpbWVG
b3JtYXQKICAgV2Vha1JlZjogdXNlV2Vha1JlZnMKICAgY2xhc3MtZmllbGRzLXB1YmxpYzogdXNl
UHVibGljQ2xhc3NGaWVsZHMKKyAgY2xhc3Mtc3RhdGljLWZpZWxkcy1wdWJsaWM6IHVzZVB1Ymxp
Y0NsYXNzRmllbGRzCiBza2lwOgogICBmZWF0dXJlczoKICAgICAtIFNoYXJlZEFycmF5QnVmZmVy
CkBAIC0xNiw3ICsxNyw2IEBAIHNraXA6CiAKICAgICAtIGNsYXNzLWZpZWxkcy1wcml2YXRlCiAg
ICAgLSBjbGFzcy1tZXRob2RzLXByaXZhdGUKLSAgICAtIGNsYXNzLXN0YXRpYy1maWVsZHMtcHVi
bGljCiAgICAgLSBjbGFzcy1zdGF0aWMtZmllbGRzLXByaXZhdGUKICAgICAtIGNsYXNzLXN0YXRp
Yy1tZXRob2RzLXByaXZhdGUKICAgICAtIGhvc3QtZ2MtcmVxdWlyZWQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCmluZGV4IGM2ZDIyMDg2MzIzNi4uNTY4Y2YzNTc3ZjA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMDkgQEAKKzIwMjAtMDYtMDUgIFhhbiBMw7NwZXogIDx4YW5A
aWdhbGlhLmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3Igc3RhdGljIHB1Ymxp
YyBjbGFzcyBmaWVsZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5NDA5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcy4gV2UgY2Fu
IHJldXNlIG1vc3Qgb2YKKyAgICAgICAgdGhlIGV4aXN0aW5nIG1hY2hpbmVyeSBhdmFpbGFibGUg
Zm9yIGluc3RhbmNlIGZpZWxkcywgd2l0aCBhCisgICAgICAgIGNvdXBsZSBvZiBpc3N1ZXMgdGhh
dCBtZXJpdCBzcGVjaWFsIGNvbW1lbnQ6CisKKyAgICAgICAgU3RhdGljIGZpZWxkcyBhcmUgaW5p
dGlhbGl6ZWQsIGxpa2UgaW5zdGFuY2UgZmllbGRzLCB3aXRoIGEKKyAgICAgICAgc3ludGhldGlj
IGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUgdG8gYWxsb3cgdXMgdG8gdHJpdmlhbGx5IGZvbGxvdwor
ICAgICAgICB0aGUgc2NvcGluZyBydWxlcyBpbiB0aGUgc3BlYy4gQXMgaXQgaGFwcGVucyB3aXRo
IGluc3RhbmNlIGZpZWxkcworICAgICAgICB0aGlzIGNvdWxkIGJlIGlubGluZWQgaW4gYSBmdXR1
cmUgcGF0Y2guCisKKyAgICAgICAgVGhlIHdheSB3ZSBzdG9yZSBjb21wdXRlZCBwcm9wZXJ0eSBr
ZXlzIG5lZWRzIHRvIGJlCisgICAgICAgIG1vZGlmaWVkLiBCZWZvcmUgd2UgYXNzdW1lZCB0aGUg
c291cmNlIGNvZGUgb3JkZXIgd291bGQgYmUKKyAgICAgICAgaWRlbnRpY2FsIHRvIHRoZSBldmFs
dWF0aW9uIG9yZGVyICh3aGljaCB3YXMgdHJ1ZSBmb3IgaW5zdGFuY2UKKyAgICAgICAgZmllbGRz
KS4gV2l0aCBzdGF0aWMgZmllbGRzIHRoaXMgY2FuIG5vdCBiZSB0aGUgY2FzZSwgc2luY2Ugc3Rh
dGljCisgICAgICAgIGZpZWxkcyBhcmUgYWx3YXlzIGluaXRpYWxpemVkIGZpcnN0LiBUbyBhbGxv
dyBmb3IgdGhpcyBtaXNtYXRjaAorICAgICAgICB0aGUgY29tcHV0ZWQgcHJvcGVydHkga2V5cyBm
b3IgaW5zdGFuY2UgZmllbGRzIGFyZSBzdG9yZWQgd2l0aCBhbgorICAgICAgICBldmVuIGlkZW50
aWZpZXIsIGFuZCB0aG9zZSBmb3Igc3RhdGljIGZpZWxkcyBhcmUgc3RvcmVkIHdpdGggYW4KKyAg
ICAgICAgb2RkIGlkZW50aWZpZXIuIFRoZSBmaWVsZCBwYXJzZXIsIHVwb24gZmlndXJpbmcgb3V0
IHdoZXRoZXIgaXQncworICAgICAgICBpbml0aWFsaXppbmcgdGhlIHN0YXRpYyBvciB0aGUgaW5z
dGFuY2UgZmllbGRzLCB3aWxsIGtub3cgd2hlcmUgdG8KKyAgICAgICAgbG9vayB1cCB0aGUga2V5
LgorCisgICAgICAgIEZvciBleGFtcGxlOgorCisgICAgICAgIGNsYXNzIEZPTyB7CisgICAgICAg
ICAgWyJhIl0gPSAwOworICAgICAgICAgIHN0YXRpYyBbImIiXSA9IDE7CisgICAgICAgICAgc3Rh
dGljIFsiYyJdID0gMjsKKyAgICAgICAgICBbImQiXSA9IDM7CisgICAgICAgIH0KKworICAgICAg
ICBIZXJlIHdlIHdpbGwgZXZhbHVhdGUgdGhlIGNvbXB1dGVkIGZpZWxkIG5hbWVzIGluIHRoZSBm
b2xsb3dpbmcKKyAgICAgICAgb3JkZXI6IGEsIGIsIGMsIGQ7IGJ1dCB3ZSB3aWxsIGluaXRpYWxp
emUgdGhlIGZpZWxkcyBpbiB0aGUKKyAgICAgICAgZm9sbG93aW5nIG9yZGVyOiBiLCBjLCBhLCBk
LiBTaW5jZSBlYWNoIGdyb3VwIG9mIGZpZWxkcyBpcworICAgICAgICBpbml0aWFsaXplZCBpbmRl
cGVuZGVudGx5IHdlIGNhbiB0cml2aWFsbHkgcmV0cmlldmUgdGhlIHByb3BlcnR5CisgICAgICAg
IGtleXMgZm9yIGVhY2ggZ3JvdXAganVzdCBieSBnZXR0aW5nIHRoZSBvZGQgcHJvcGVydHkga2V5
cyBmb3IKKyAgICAgICAgc3RhdGljIGZpZWxkcyAoaW5kZXhlcyAxIGFuZCAzKSBhbmQgdGhlIGV2
ZW4gb25lcyBmb3IgaW5zdGFuY2UKKyAgICAgICAgZmllbGRzIChpbmRleGVzIDAgYW5kIDIpLgor
CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgorICAg
ICAgICAoSlNDOjpnZW5lcmF0ZVVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAq
IGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXROZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbik6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRTYXZlQ29tcHV0
ZWRGaWVsZE5hbWUpOgorICAgICAgICAoSlNDOjpEZWZpbmVGaWVsZE5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkNsYXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
ICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
RGVmaW5lRmllbGQpOgorICAgICAgICAqIHBhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmg6CisgICAg
ICAgIChKU0M6OkRlZmluZUZpZWxkTm9kZTo6RGVmaW5lRmllbGROb2RlKToKKyAgICAgICAgKiBw
YXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUluc3RhbmNlRmllbGRJbml0aWFsaXplclNvdXJjZUVsZW1lbnRzKToKKyAgICAgICAg
KiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZSk6CisgICAgICAgIChKU0M6OnBhcnNlKToKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tl
ci5oOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVEZWZpbmVGaWVsZCk6Cisg
ICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlv
bjo6c2V0RnVuY3Rpb25OYW1lKToKKworICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVyRnVu
Y3Rpb24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWRBcnJvd0Z1
bmN0aW9uTGV4aWNhbEVudmlyb25tZW50KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoK
KyAgICAgICAgKEpTQzo6ZW1pdEhvbWVPYmplY3RGb3JDYWxsZWUpOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUxp
c3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1lKToKKyAgICAgICAgKEpTQzo6RGVmaW5l
RmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpDbGFzc0V4cHJOb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6ZXZhbCk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgICog
cGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUlubmVyKToKKyAgICAgICAgKEpTQzo6c3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZSk6Cisg
ICAgICAgIChKU0M6OnN0cmluZ0ZvckZ1bmN0aW9uTW9kZSk6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlQ2xhc3NGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMpOgorICAgICAgICAq
IHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6U2NvcGU6OnNldFNvdXJjZVBhcnNlTW9k
ZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZSk6CisgICAgICAgIChK
U0M6OnBhcnNlKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyTW9kZXMuaDoKKyAgICAgICAgKEpT
Qzo6aXNGdW5jdGlvblBhcnNlTW9kZSk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvblByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246
OmNhbGxlckdldHRlcik6CisKIDIwMjAtMDYtMDQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFw
cGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZXBvcnQgZXh0cmEgbWVtb3J5IGFsbG9jYXRpb24g
ZnJvbSBQcm9wZXJ0eVRhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAppbmRleCBiY2Y3ZDNh
ZDg1ZWIuLjAxZGI1MDVjZjM4NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCkBAIC01Niw5
ICs1Niw5IEBAIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZVVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2soCiAgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUg
PSBleGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4dCgpID8gSlNQYXJzZXJTdHJpY3RNb2RlOjpT
dHJpY3QgOiBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdDsKICAgICBKU1BhcnNlclNjcmlw
dE1vZGUgc2NyaXB0TW9kZSA9IGV4ZWN1dGFibGUtPnNjcmlwdE1vZGUoKTsKICAgICBBU1NFUlQo
aXNGdW5jdGlvblBhcnNlTW9kZShleGVjdXRhYmxlLT5wYXJzZU1vZGUoKSkpOwotICAgIFZlY3Rv
cjxKU1RleHRQb3NpdGlvbj4qIGluc3RhbmNlRmllbGRMb2NhdGlvbnMgPSBleGVjdXRhYmxlLT5p
bnN0YW5jZUZpZWxkTG9jYXRpb25zKCk7CisgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogY2xh
c3NGaWVsZExvY2F0aW9ucyA9IGV4ZWN1dGFibGUtPmNsYXNzRmllbGRMb2NhdGlvbnMoKTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Ob2RlPiBmdW5jdGlvbiA9IHBhcnNlPEZ1bmN0aW9u
Tm9kZT4oCi0gICAgICAgIHZtLCBzb3VyY2UsIGV4ZWN1dGFibGUtPm5hbWUoKSwgYnVpbHRpbk1v
ZGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGV4ZWN1dGFibGUtPnBhcnNlTW9kZSgpLCBleGVj
dXRhYmxlLT5zdXBlckJpbmRpbmcoKSwgZXJyb3IsIG51bGxwdHIsIENvbnN0cnVjdG9yS2luZDo6
Tm9uZSwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsIG51
bGxwdHIsIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgICAgICB2bSwgc291cmNlLCBleGVj
dXRhYmxlLT5uYW1lKCksIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBleGVj
dXRhYmxlLT5wYXJzZU1vZGUoKSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIGVycm9yLCBu
dWxscHRyLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwg
RXZhbENvbnRleHRUeXBlOjpOb25lLCBudWxscHRyLCBjbGFzc0ZpZWxkTG9jYXRpb25zKTsKIAog
ICAgIGlmICghZnVuY3Rpb24pIHsKICAgICAgICAgQVNTRVJUKGVycm9yLmlzVmFsaWQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4IDhmZmUzMDBkODQ0Mi4uNTgwMzJhZDVlZGQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtMjA5LDIzICsyMDksMjMgQEAgcHVibGljOgogICAgICAg
ICBTdHJpbmcgbV9zb3VyY2VVUkxEaXJlY3RpdmU7CiAgICAgICAgIFN0cmluZyBtX3NvdXJjZU1h
cHBpbmdVUkxEaXJlY3RpdmU7CiAgICAgICAgIENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlIG1f
cGFyZW50U2NvcGVURFpWYXJpYWJsZXM7Ci0gICAgICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4g
bV9pbnN0YW5jZUZpZWxkTG9jYXRpb25zOworICAgICAgICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+
IG1fY2xhc3NGaWVsZExvY2F0aW9uczsKICAgICB9OwogCiAgICAgTmVlZHNDbGFzc0ZpZWxkSW5p
dGlhbGl6ZXIgbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcj4obV9uZWVkc0NsYXNzRmllbGRJbml0
aWFsaXplcik7IH0KIAotICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGluc3RhbmNlRmllbGRM
b2NhdGlvbnMoKSBjb25zdAorICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGNsYXNzRmllbGRM
b2NhdGlvbnMoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fcmFyZURhdGEpCi0gICAgICAg
ICAgICByZXR1cm4gJm1fcmFyZURhdGEtPm1faW5zdGFuY2VGaWVsZExvY2F0aW9uczsKKyAgICAg
ICAgICAgIHJldHVybiAmbV9yYXJlRGF0YS0+bV9jbGFzc0ZpZWxkTG9jYXRpb25zOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICB2b2lkIHNldEluc3RhbmNlRmllbGRMb2Nh
dGlvbnMoVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYmIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpCisg
ICAgdm9pZCBzZXRDbGFzc0ZpZWxkTG9jYXRpb25zKFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mJiBj
bGFzc0ZpZWxkTG9jYXRpb25zKQogICAgIHsKLSAgICAgICAgaWYgKGluc3RhbmNlRmllbGRMb2Nh
dGlvbnMuaXNFbXB0eSgpKQorICAgICAgICBpZiAoY2xhc3NGaWVsZExvY2F0aW9ucy5pc0VtcHR5
KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuc3VyZVJhcmVEYXRhKCkubV9pbnN0
YW5jZUZpZWxkTG9jYXRpb25zID0gV1RGTW92ZShpbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAg
ICAgICAgZW5zdXJlUmFyZURhdGEoKS5tX2NsYXNzRmllbGRMb2NhdGlvbnMgPSBXVEZNb3ZlKGNs
YXNzRmllbGRMb2NhdGlvbnMpOwogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5k
ZXggMTc3NTJjODg5NTg0Li43N2JkYmJmMWZjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0zNzgs
NyArMzc4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwg
RnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAgICBib29sIHNob3VsZENhcHR1
cmVTb21lT2ZUaGVUaGluZ3MgPSBzaG91bGRFbWl0RGVidWdIb29rcygpIHx8IGZ1bmN0aW9uTm9k
ZS0+bmVlZHNBY3RpdmF0aW9uKCkgfHwgY29udGFpbnNBcnJvd09yRXZhbEJ1dE5vdEluQXJyb3dC
bG9jazsKIAogICAgIGJvb2wgc2hvdWxkQ2FwdHVyZUFsbE9mVGhlVGhpbmdzID0gc2hvdWxkRW1p
dERlYnVnSG9va3MoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCk7Ci0gICAgYm9vbCBuZWVkc0Fy
Z3VtZW50cyA9ICgoZnVuY3Rpb25Ob2RlLT51c2VzQXJndW1lbnRzKCkgJiYgIWNvZGVCbG9jay0+
aXNBcnJvd0Z1bmN0aW9uKCkpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSB8fCAoZnVuY3Rpb25O
b2RlLT51c2VzQXJyb3dGdW5jdGlvbigpICYmICFjb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigp
ICYmIGlzQXJndW1lbnRzVXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCkpKSAmJiBwYXJzZU1vZGUg
IT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOworICAgIGJv
b2wgbmVlZHNBcmd1bWVudHMgPSAoKGZ1bmN0aW9uTm9kZS0+dXNlc0FyZ3VtZW50cygpICYmICFj
b2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkgfHwg
KGZ1bmN0aW9uTm9kZS0+dXNlc0Fycm93RnVuY3Rpb24oKSAmJiAhY29kZUJsb2NrLT5pc0Fycm93
RnVuY3Rpb24oKSAmJiBpc0FyZ3VtZW50c1VzZWRJbklubmVyQXJyb3dGdW5jdGlvbigpKSkgJiYg
cGFyc2VNb2RlICE9IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZTsK
IAogICAgIGlmIChpc0dlbmVyYXRvck9yQXN5bmNGdW5jdGlvbkJvZHlQYXJzZU1vZGUocGFyc2VN
b2RlKSkgewogICAgICAgICAvLyBHZW5lcmF0b3IgYW5kIEFzeW5jRnVuY3Rpb24gbmV2ZXIgcHJv
dmlkZXMgImFyZ3VtZW50cyIuICJhcmd1bWVudHMiIHJlZmVyZW5jZSB3aWxsIGJlIHJlc29sdmVk
IGluIGFuIHVwcGVyIGdlbmVyYXRvciBmdW5jdGlvbiBzY29wZS4KQEAgLTYxMCw3ICs2MTAsNyBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBGdW5jdGlvbk5v
ZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBzaG91
bGRDcmVhdGVBcmd1bWVuc1ZhcmlhYmxlID0gIWhhdmVQYXJhbWV0ZXJOYW1lZEFyZ3VtZW50cwot
ICAgICAgICAgICAgJiYgIVNvdXJjZVBhcnNlTW9kZVNldChTb3VyY2VQYXJzZU1vZGU6OkFycm93
RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUsIFNv
dXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSkuY29udGFpbnMobV9j
b2RlQmxvY2stPnBhcnNlTW9kZSgpKTsKKyAgICAgICAgICAgICYmICFTb3VyY2VQYXJzZU1vZGVT
ZXQoU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSwgU291cmNlUGFyc2VNb2RlOjpB
c3luY0Fycm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFs
aXplck1vZGUpLmNvbnRhaW5zKG1fY29kZUJsb2NrLT5wYXJzZU1vZGUoKSk7CiAgICAgICAgIHNo
b3VsZENyZWF0ZUFyZ3VtZW50c1ZhcmlhYmxlSW5QYXJhbWV0ZXJTY29wZSA9IHNob3VsZENyZWF0
ZUFyZ3VtZW5zVmFyaWFibGUgJiYgIWlzU2ltcGxlUGFyYW1ldGVyTGlzdDsKICAgICAgICAgLy8g
RG8gbm90IGNyZWF0ZSBhcmd1bWVudHMgdmFyaWFibGUgaW4gY2FzZSBvZiBBcnJvdyBmdW5jdGlv
bi4gVmFsdWUgd2lsbCBiZSBsb2FkZWQgZnJvbSBwYXJlbnQgc2NvcGUKICAgICAgICAgaWYgKHNo
b3VsZENyZWF0ZUFyZ3VtZW5zVmFyaWFibGUgJiYgIXNob3VsZENyZWF0ZUFyZ3VtZW50c1Zhcmlh
YmxlSW5QYXJhbWV0ZXJTY29wZSkgewpAQCAtMzA5MSw3ICszMDkxLDcgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdEZWZhdWx0Q29uc3RydWN0b3IoUmVnaXN0ZXJJRCog
ZHN0LCBDb25zdHIKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdE5ld0luc3RhbmNlRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKFJlZ2lzdGVy
SUQqIGRzdCwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYmIGluc3RhbmNlRmllbGRMb2NhdGlvbnMs
IGJvb2wgaXNEZXJpdmVkKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdD
bGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIFZlY3RvcjxKU1Rl
eHRQb3NpdGlvbj4mJiBjbGFzc0ZpZWxkTG9jYXRpb25zLCBib29sIGlzRGVyaXZlZCkKIHsKICAg
ICBEZXJpdmVkQ29udGV4dFR5cGUgbmV3RGVyaXZlZENvbnRleHRUeXBlOwogICAgIFN1cGVyQmlu
ZGluZyBzdXBlckJpbmRpbmc7CkBAIC0zMTA0LDE0ICszMTA0LDE0IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24o
UmVnaXN0ZXJJCiAgICAgfQogCiAgICAgT3B0aW9uYWw8Q29tcGFjdFZhcmlhYmxlTWFwOjpIYW5k
bGU+IHZhcmlhYmxlc1VuZGVyVERaID0gZ2V0VmFyaWFibGVzVW5kZXJURFooKTsKLSAgICBTb3Vy
Y2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5p
dGlhbGl6ZXJNb2RlOworICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUgPSBTb3VyY2VQYXJz
ZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU7CiAgICAgQ29uc3RydWN0QWJpbGl0eSBj
b25zdHJ1Y3RBYmlsaXR5ID0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0OwogCiAg
ICAgY29uc3QgYm9vbCBhbHdheXNTdHJpY3RJbkNsYXNzID0gdHJ1ZTsKICAgICBGdW5jdGlvbk1l
dGFkYXRhTm9kZSBtZXRhZGF0YShwYXJzZXJBcmVuYSgpLCBKU1Rva2VuTG9jYXRpb24oKSwgSlNU
b2tlbkxvY2F0aW9uKCksIDAsIDAsIDAsIDAsIDAsIGFsd2F5c1N0cmljdEluQ2xhc3MsIENvbnN0
cnVjdG9yS2luZDo6Tm9uZSwgc3VwZXJCaW5kaW5nLCAwLCBwYXJzZU1vZGUsIGZhbHNlKTsKICAg
ICBtZXRhZGF0YS5maW5pc2hQYXJzaW5nKG1fc2NvcGVOb2RlLT5zb3VyY2UoKSwgSWRlbnRpZmll
cigpLCBGdW5jdGlvbk1vZGU6Ok1ldGhvZERlZmluaXRpb24pOwogICAgIGF1dG8gaW5pdGlhbGl6
ZXIgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKG1fdm0sIG1fc2NvcGVOb2Rl
LT5zb3VyY2UoKSwgJm1ldGFkYXRhLCBpc0J1aWx0aW5GdW5jdGlvbigpID8gVW5saW5rZWRCdWls
dGluRnVuY3Rpb24gOiBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLCBjb25zdHJ1Y3RBYmlsaXR5LCBz
Y3JpcHRNb2RlKCksIFdURk1vdmUodmFyaWFibGVzVW5kZXJURFopLCBuZXdEZXJpdmVkQ29udGV4
dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyOjpObyk7Ci0gICAgaW5pdGlhbGl6ZXIt
PnNldEluc3RhbmNlRmllbGRMb2NhdGlvbnMoV1RGTW92ZShpbnN0YW5jZUZpZWxkTG9jYXRpb25z
KSk7CisgICAgaW5pdGlhbGl6ZXItPnNldENsYXNzRmllbGRMb2NhdGlvbnMoV1RGTW92ZShjbGFz
c0ZpZWxkTG9jYXRpb25zKSk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IG1fY29kZUJsb2NrLT5h
ZGRGdW5jdGlvbkV4cHIoaW5pdGlhbGl6ZXIpOwogICAgIE9wTmV3RnVuY0V4cDo6ZW1pdCh0aGlz
LCBkc3QsIHNjb3BlUmVnaXN0ZXIoKSwgaW5kZXgpOwpAQCAtNDQzMiw3ICs0NDMyLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9j
YWxSZWdpc3RlcikKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJy
b3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2Rl
QmxvY2stPmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBD
b25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2Nv
ZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5p
dGlhbGl6ZXJNb2RlKTsKKyAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigp
IHx8IG1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCkgfHwgY29uc3RydWN0b3JL
aW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzIHx8IG1fY29kZVR5cGUgPT0gRXZhbENv
ZGUgfHwgbV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpID09IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NG
aWVsZEluaXRpYWxpemVyTW9kZSk7CiAKICAgICByZXR1cm4gZW1pdFJlc29sdmVTY29wZShudWxs
cHRyLCB2YXJpYWJsZShpZGVudGlmaWVyLCBUaGlzUmVzb2x1dGlvblR5cGU6OlNjb3BlZCkpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCmluZGV4IDcyODY0OTA2OTljNy4uMmQyY2M2M2UzYTMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCkBAIC03NzUsNyArNzc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXROZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uTWV0YWRhdGFOb2Rl
Kik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0
ZXJJRCogZHN0LCBGdW5jRXhwck5vZGUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Rl
ZmF1bHRDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIENvbnN0cnVjdG9yS2luZCwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgY29uc3QgSWRlbnRpZmllciYgZWNtYU5hbWUsIGNvbnN0IFNvdXJj
ZUNvZGUmIGNsYXNzU291cmNlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcik7Ci0gICAgICAg
IFJlZ2lzdGVySUQqIGVtaXROZXdJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdp
c3RlcklEKiBkc3QsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mJiBpbnN0YW5jZUZpZWxkTG9jYXRp
b25zLCBib29sIGlzRGVyaXZlZCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdDbGFzc0Zp
ZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIFZlY3RvcjxKU1RleHRQb3Np
dGlvbj4mJiBjbGFzc0ZpZWxkTG9jYXRpb25zLCBib29sIGlzRGVyaXZlZCk7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXROZXdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiwgQXJy
b3dGdW5jRXhwck5vZGUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld01ldGhvZERlZmlu
aXRpb24oUmVnaXN0ZXJJRCogZHN0LCBNZXRob2REZWZpbml0aW9uTm9kZSopOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TmV3UmVnRXhwKFJlZ2lzdGVySUQqIGRzdCwgUmVnRXhwKik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAK
aW5kZXggNDQxZmEyNGVjYzhjLi4xMDE0MDc1OWIwMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTE4MCw3ICsxODAs
NyBAQCBSZWdpc3RlcklEKiBUaGlzTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdAogCiBzdGF0aWMgUmVnaXN0ZXJJRCogZW1pdEhv
bWVPYmplY3RGb3JDYWxsZWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICBp
ZiAoKGdlbmVyYXRvci5pc0Rlcml2ZWRDbGFzc0NvbnRleHQoKSB8fCBnZW5lcmF0b3IuaXNEZXJp
dmVkQ29uc3RydWN0b3JDb250ZXh0KCkpICYmIGdlbmVyYXRvci5wYXJzZU1vZGUoKSAhPSBTb3Vy
Y2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGUpIHsKKyAgICBpZiAoKGdl
bmVyYXRvci5pc0Rlcml2ZWRDbGFzc0NvbnRleHQoKSB8fCBnZW5lcmF0b3IuaXNEZXJpdmVkQ29u
c3RydWN0b3JDb250ZXh0KCkpICYmIGdlbmVyYXRvci5wYXJzZU1vZGUoKSAhPSBTb3VyY2VQYXJz
ZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpIHsKICAgICAgICAgUmVnaXN0ZXJJRCog
ZGVyaXZlZENvbnN0cnVjdG9yID0gZ2VuZXJhdG9yLmVtaXRMb2FkRGVyaXZlZENvbnN0cnVjdG9y
RnJvbUFycm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1lbnQoKTsKICAgICAgICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGRlcml2ZWRDb25z
dHJ1Y3RvciwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5ob21lT2Jq
ZWN0UHJpdmF0ZU5hbWUoKSk7CiAgICAgfQpAQCAtNTQ5LDYgKzU0OSw5IEBAIFJlZ2lzdGVySUQq
IFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlCiAgICAgLy8gRmFzdCBjYXNlOiB0aGlzIGxvb3AganVzdCBoYW5kbGVzIHJl
Z3VsYXIgdmFsdWUgcHJvcGVydGllcy4KICAgICBQcm9wZXJ0eUxpc3ROb2RlKiBwID0gdGhpczsK
ICAgICBSZWdpc3RlcklEKiBkc3QgPSBudWxscHRyOworCisgICAgLy8gRmFzdCBjYXNlOiB0aGlz
IGxvb3AganVzdCBoYW5kbGVzIHJlZ3VsYXIgdmFsdWUgcHJvcGVydGllcy4KKyAgICBWZWN0b3I8
SlNUZXh0UG9zaXRpb24+IHN0YXRpY0ZpZWxkTG9jYXRpb25zOwogICAgIGZvciAoOyBwICYmIChw
LT5tX25vZGUtPm1fdHlwZSAmIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOyBwID0gcC0+bV9uZXh0
KSB7CiAgICAgICAgIGRzdCA9IHAtPm1fbm9kZS0+aXNJbnN0YW5jZUNsYXNzUHJvcGVydHkoKSA/
IHByb3RvdHlwZSA6IGRzdE9yQ29uc3RydWN0b3I7CiAKQEAgLTU2MSw2ICs1NjQsMTEgQEAgUmVn
aXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAK
KyAgICAgICAgaWYgKHAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAgICAgICAgICBzdGF0
aWNGaWVsZExvY2F0aW9ucy5hcHBlbmQocC0+cG9zaXRpb24oKSk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRQdXRDb25zdGFudFByb3BlcnR5KGdlbmVy
YXRvciwgZHN0LCAqcC0+bV9ub2RlKTsKICAgICB9CiAKQEAgLTYxOCw2ICs2MjYsMTEgQEAgUmVn
aXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KIAorICAgICAgICAgICAgaWYgKHAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAg
ICAgICAgICAgICAgc3RhdGljRmllbGRMb2NhdGlvbnMuYXBwZW5kKHAtPnBvc2l0aW9uKCkpOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAv
LyBIYW5kbGUgcmVndWxhciB2YWx1ZXMuCiAgICAgICAgICAgICBpZiAobm9kZS0+bV90eXBlICYg
UHJvcGVydHlOb2RlOjpDb25zdGFudCkgewogICAgICAgICAgICAgICAgIGVtaXRQdXRDb25zdGFu
dFByb3BlcnR5KGdlbmVyYXRvciwgZHN0LCAqbm9kZSk7CkBAIC03MDUsNiArNzE4LDE3IEBAIFJl
Z2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIXN0YXRp
Y0ZpZWxkTG9jYXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
c3RhdGljRmllbGRJbml0aWFsaXplciA9IGdlbmVyYXRvci5lbWl0TmV3Q2xhc3NGaWVsZEluaXRp
YWxpemVyRnVuY3Rpb24oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBXVEZNb3ZlKHN0YXRpY0Zp
ZWxkTG9jYXRpb25zKSwgZmFsc2UgLypGSVhNRTogaXMgdGhlIGNsYXNzIGhlcml0YWdlIGV2ZW4g
bmVlZGVkIGhlcmU/Ki8pOworICAgICAgICAvLyBGSVhNRTogU2tpcCB0aGlzIGlmIHRoZSBpbml0
aWFsaXplciBmdW5jdGlvbiBpc24ndCBnb2luZyB0byBuZWVkIGEgaG9tZSBvYmplY3QgKG5vIGV2
YWwgb3Igc3VwZXIgcHJvcGVydGllcykKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5Njg2NworICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5l
cmF0b3IsIHN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXIuZ2V0KCksIGRzdE9yQ29uc3RydWN0b3IpOwor
CisgICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51bGxwdHIpOworICAgICAg
ICBnZW5lcmF0b3IubW92ZShhcmdzLnRoaXNSZWdpc3RlcigpLCBkc3RPckNvbnN0cnVjdG9yKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc3Rh
dGljRmllbGRJbml0aWFsaXplci5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdzLCBwb3Np
dGlvbigpLCBwb3NpdGlvbigpLCBwb3NpdGlvbigpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOworICAg
IH0KKwogICAgIHJldHVybiBkc3RPckNvbnN0cnVjdG9yOwogfQogCkBAIC03NTcsMTggKzc4MSwy
MyBAQCB2b2lkIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRQdXRDb25zdGFudFByb3BlcnR5KEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZwogdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0
U2F2ZUNvbXB1dGVkRmllbGROYW1lKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFByb3Bl
cnR5Tm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZS5pc0NvbXB1dGVkQ2xhc3NGaWVsZCgp
KTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlFeHByOwogCiAgICAgLy8gVGhlICdu
YW1lJyByZWZlcnMgdG8gYSBzeW50aGV0aWMgbnVtZXJpYyB2YXJpYWJsZSBuYW1lIGluIHRoZSBw
cml2YXRlIG5hbWUgc2NvcGUsIHdoZXJlIHRoZSBwcm9wZXJ0eSBrZXkgaXMgc2F2ZWQgZm9yIGxh
dGVyIHVzZS4KICAgICBjb25zdCBJZGVudGlmaWVyJiBkZXNjcmlwdGlvbiA9ICpub2RlLm5hbWUo
KTsKICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoZGVzY3JpcHRpb24pOwog
ICAgIEFTU0VSVCghdmFyLmxvY2FsKCkpOwogCi0gICAgcHJvcGVydHlFeHByID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG5vZGUubV9leHByZXNzaW9uKTsKLSAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUgPSBnZW5lcmF0b3IuZW1pdFRvUHJvcGVydHlLZXkoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBwcm9wZXJ0eUV4cHIuZ2V0KCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eUV4
cHIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS5tX2V4cHJlc3Npb24pOworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdFRvUHJvcGVydHlLZXkoZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eUV4cHIuZ2V0KCkpOworCisgICAgUmVmPExh
YmVsPiB2YWxpZFByb3BlcnR5TmFtZUxhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvdHlwZVN0cmluZyA9IGdlbmVyYXRvci5lbWl0TG9hZChu
dWxscHRyLCBKU1ZhbHVlKGdlbmVyYXRvci5hZGRTdHJpbmdDb25zdGFudChnZW5lcmF0b3IucHJv
cGVydHlOYW1lcygpLnByb3RvdHlwZSkpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNl
KGdlbmVyYXRvci5lbWl0QmluYXJ5T3A8T3BFcT4oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBw
cm90b3R5cGVTdHJpbmcuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgT3BlcmFuZFR5cGVzKFJl
c3VsdFR5cGU6OnN0cmluZ1R5cGUoKSwgUmVzdWx0VHlwZTo6c3RyaW5nVHlwZSgpKSksIHZhbGlk
UHJvcGVydHlOYW1lTGFiZWwuZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0VGhyb3dUeXBlRXJy
b3IoIkNhbm5vdCBkZWNsYXJlIGEgc3RhdGljIGZpZWxkIG5hbWVkICdwcm90b3R5cGUnIik7CiAK
KyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHZhbGlkUHJvcGVydHlOYW1lTGFiZWwuZ2V0KCkpOwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3Bl
KG51bGxwdHIsIHZhcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgp
LCB2YXIsIHByb3BlcnR5TmFtZSwgVGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbk1vZGU6
OkNvbnN0SW5pdGlhbGl6YXRpb24pOworICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29w
ZS5nZXQoKSwgdmFyLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCwgSW5pdGlh
bGl6YXRpb25Nb2RlOjpDb25zdEluaXRpYWxpemF0aW9uKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KQEAgLTQ2ODYsNiArNDcxNSw3IEBAIHZvaWQgRGVmaW5lRmllbGROb2Rl
OjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCop
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZCh2YWx1ZS5nZXQoKSwganNVbmRlZmluZWQoKSk7
CiAgICAgZWxzZSB7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZSh2YWx1ZS5nZXQoKSwgbV9h
c3NpZ24pOworCiAgICAgICAgIGlmIChtX2lkZW50ICYmIGdlbmVyYXRvci5zaG91bGRTZXRGdW5j
dGlvbk5hbWUobV9hc3NpZ24pKQogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRTZXRGdW5jdGlv
bk5hbWUodmFsdWUuZ2V0KCksICptX2lkZW50KTsKICAgICB9CkBAIC00NzA3LDcgKzQ3MzcsNyBA
QCB2b2lkIERlZmluZUZpZWxkTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogICAgICAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3Iu
dmFyaWFibGUoKm1faWRlbnQpOwogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCF2YXIubG9j
YWwoKSwgIkNvbXB1dGVkIG5hbWVzIG11c3QgYmUgc3RvcmVkIGluIGNhcHR1cmVkIHZhcmlhYmxl
cyIpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8ocG9zaXRpb24oKSwg
cG9zaXRpb24oKSwgcG9zaXRpb24oKSArIDEpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKG1fcG9zaXRpb24sIG1fcG9zaXRpb24sIG1fcG9zaXRpb24gKyAxKTsKICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCB2YXIpOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcHJpdmF0ZU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0R2V0RnJvbVNjb3BlKHByaXZhdGVOYW1lLmdldCgpLCBzY29wZS5nZXQoKSwgdmFy
LCBUaHJvd0lmTm90Rm91bmQpOwpAQCAtNDgwMyw3ICs0ODMzLDcgQEAgUmVnaXN0ZXJJRCogQ2xh
c3NFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQKICAgICAgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiBpbnN0YW5jZUZpZWxkTG9j
YXRpb25zOwogICAgICAgICBnZW5lcmF0b3IuZW1pdERlZmluZUNsYXNzRWxlbWVudHMobV9jbGFz
c0VsZW1lbnRzLCBjb25zdHJ1Y3Rvci5nZXQoKSwgcHJvdG90eXBlLmdldCgpLCBpbnN0YW5jZUZp
ZWxkTG9jYXRpb25zKTsKICAgICAgICAgaWYgKCFpbnN0YW5jZUZpZWxkTG9jYXRpb25zLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGluc3RhbmNlRmllbGRJbml0
aWFsaXplciA9IGdlbmVyYXRvci5lbWl0TmV3SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyRnVuY3Rp
b24oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBXVEZNb3ZlKGluc3RhbmNlRmllbGRMb2NhdGlv
bnMpLCBtX2NsYXNzSGVyaXRhZ2UpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGlu
c3RhbmNlRmllbGRJbml0aWFsaXplciA9IGdlbmVyYXRvci5lbWl0TmV3Q2xhc3NGaWVsZEluaXRp
YWxpemVyRnVuY3Rpb24oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBXVEZNb3ZlKGluc3RhbmNl
RmllbGRMb2NhdGlvbnMpLCBtX2NsYXNzSGVyaXRhZ2UpOwogCiAgICAgICAgICAgICAvLyBGSVhN
RTogU2tpcCB0aGlzIGlmIHRoZSBpbml0aWFsaXplciBmdW5jdGlvbiBpc24ndCBnb2luZyB0byBu
ZWVkIGEgaG9tZSBvYmplY3QgKG5vIGV2YWwgb3Igc3VwZXIgcHJvcGVydGllcykKICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY4NjcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmlu
ZGV4IDRhNDI3ZWI4NmE3Mi4uZTEyZDEzMTk3M2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCBK
U1ZhbHVlIGV2YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEVDTUFNb2RlIGVjbWFNbwogICAgIH0KIAogICAgIEV2YWxDb250ZXh0VHlwZSBldmFs
Q29udGV4dFR5cGU7Ci0gICAgaWYgKGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5wYXJzZU1vZGUo
KSA9PSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGUpCisgICAg
aWYgKGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5wYXJzZU1vZGUoKSA9PSBTb3VyY2VQYXJzZU1v
ZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpCiAgICAgICAgIGV2YWxDb250ZXh0VHlwZSA9
IEV2YWxDb250ZXh0VHlwZTo6SW5zdGFuY2VGaWVsZEV2YWxDb250ZXh0OwogICAgIGVsc2UgaWYg
KGlzRnVuY3Rpb25QYXJzZU1vZGUoY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPnBhcnNlTW9kZSgp
KSkKICAgICAgICAgZXZhbENvbnRleHRUeXBlID0gRXZhbENvbnRleHRUeXBlOjpGdW5jdGlvbkV2
YWxDb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4IDYzYzVhMTNi
ZjU1ZS4uNGI3Y2RhMjQzZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBA
IC03MzksNiArNzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNJbnN0YW5j
ZUNsYXNzUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDbGFzc0VsZW1lbnRU
YWc+KG1fY2xhc3NFbGVtZW50VGFnKSA9PSBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlOyB9CiAg
ICAgICAgIGJvb2wgaXNDbGFzc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gaXNDbGFzc1Byb3BlcnR5
KCkgJiYgIW5lZWRzU3VwZXJCaW5kaW5nKCk7IH0KICAgICAgICAgYm9vbCBpc0luc3RhbmNlQ2xh
c3NGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGlzSW5zdGFuY2VDbGFzc1Byb3BlcnR5KCkgJiYgIW5l
ZWRzU3VwZXJCaW5kaW5nKCk7IH0KKyAgICAgICAgYm9vbCBpc1N0YXRpY0NsYXNzRmllbGQoKSBj
b25zdCB7IHJldHVybiBpc1N0YXRpY0NsYXNzUHJvcGVydHkoKSAmJiAhbmVlZHNTdXBlckJpbmRp
bmcoKTsgfQogICAgICAgICBib29sIGlzT3ZlcnJpZGRlbkJ5RHVwbGljYXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc092ZXJyaWRkZW5CeUR1cGxpY2F0ZTsgfQogICAgICAgICBib29sIGhhc0NvbXB1
dGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbjsgfQogICAgICAgICBib29sIGlz
Q29tcHV0ZWRDbGFzc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gaXNDbGFzc0ZpZWxkKCkgJiYgaGFz
Q29tcHV0ZWROYW1lKCk7IH0KQEAgLTc3NCw2ICs3NzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIH0KICAgICAgICAgYm9vbCBoYXNJbnN0YW5jZUZpZWxkcygpIGNvbnN0OwogCisgICAg
ICAgIGJvb2wgaXNTdGF0aWNDbGFzc0ZpZWxkKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fbm9kZS0+aXNTdGF0aWNDbGFzc0ZpZWxkKCk7CisgICAgICAgIH0KKwogICAg
ICAgICBzdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVMZXhpY2FsU2NvcGVGb3JDbGFzcyhQcm9wZXJ0
eUxpc3ROb2RlKik7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBWZWN0b3I8SlNUZXh0UG9zaXRp
b24+Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKaW5kZXggZDQyYWFj
MjI4OTUzLi42N2Y4OTczNzU5NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5jcHAKQEAgLTIwOSw3ICsyMDksNyBAQCBQYXJzZXI8TGV4ZXJUeXBlPjo6flBhcnNlcigpCiB9
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Ci1FeHBlY3RlZDx0eXBlbmFtZSBQYXJz
ZXI8TGV4ZXJUeXBlPjo6UGFyc2VJbm5lclJlc3VsdCwgU3RyaW5nPiBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VJbm5lcihjb25zdCBJZGVudGlmaWVyJiBjYWxsZWVOYW1lLCBTb3VyY2VQYXJzZU1v
ZGUgcGFyc2VNb2RlLCBQYXJzaW5nQ29udGV4dCBwYXJzaW5nQ29udGV4dCwgT3B0aW9uYWw8aW50
PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBjb25zdCBWZWN0b3I8
SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQorRXhwZWN0ZWQ8dHlwZW5h
bWUgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlSW5uZXJSZXN1bHQsIFN0cmluZz4gUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlSW5uZXIoY29uc3QgSWRlbnRpZmllciYgY2FsbGVlTmFtZSwgU291cmNl
UGFyc2VNb2RlIHBhcnNlTW9kZSwgUGFyc2luZ0NvbnRleHQgcGFyc2luZ0NvbnRleHQsIE9wdGlv
bmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgY29uc3Qg
VmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogY2xhc3NGaWVsZExvY2F0aW9ucykKIHsKICAgICBBU1RC
dWlsZGVyIGNvbnRleHQoY29uc3RfY2FzdDxWTSY+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBjb25z
dF9jYXN0PFNvdXJjZUNvZGUqPihtX3NvdXJjZSkpOwogICAgIFNjb3BlUmVmIHNjb3BlID0gY3Vy
cmVudFNjb3BlKCk7CkBAIC0yMjIsNyArMjIyLDcgQEAgRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2Vy
PExleGVyVHlwZT46OlBhcnNlSW5uZXJSZXN1bHQsIFN0cmluZz4gUGFyc2VyPExleGVyVHlwZT4K
ICAgICAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+IGZ1bmN0aW9uSW5mbzsKICAg
ICAgICAgaWYgKGlzR2VuZXJhdG9yT3JBc3luY0Z1bmN0aW9uQm9keVBhcnNlTW9kZShwYXJzZU1v
ZGUpKQogICAgICAgICAgICAgcGFyYW1ldGVycyA9IGNyZWF0ZUdlbmVyYXRvclBhcmFtZXRlcnMo
Y29udGV4dCwgZnVuY3Rpb25JbmZvLnBhcmFtZXRlckNvdW50KTsKLSAgICAgICAgZWxzZSBpZiAo
cGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9k
ZSkKKyAgICAgICAgZWxzZSBpZiAocGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NG
aWVsZEluaXRpYWxpemVyTW9kZSkKICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBjb250ZXh0LmNy
ZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGFy
YW1ldGVycyA9IHBhcnNlRnVuY3Rpb25QYXJhbWV0ZXJzKGNvbnRleHQsIHBhcnNlTW9kZSwgZnVu
Y3Rpb25JbmZvKTsKQEAgLTI1Niw5ICsyNTYsOSBAQCBFeHBlY3RlZDx0eXBlbmFtZSBQYXJzZXI8
TGV4ZXJUeXBlPjo6UGFyc2VJbm5lclJlc3VsdCwgU3RyaW5nPiBQYXJzZXI8TGV4ZXJUeXBlPgog
ICAgICAgICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZUFzeW5jR2VuZXJhdG9yRnVuY3Rpb25T
b3VyY2VFbGVtZW50cyhjb250ZXh0LCBwYXJzZU1vZGUsIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHBy
ZXNzaW9uLCBDaGVja0ZvclN0cmljdE1vZGUpOwogICAgICAgICBlbHNlIGlmIChwYXJzaW5nQ29u
dGV4dCA9PSBQYXJzaW5nQ29udGV4dDo6RnVuY3Rpb25Db25zdHJ1Y3RvcikKICAgICAgICAgICAg
IHNvdXJjZUVsZW1lbnRzID0gcGFyc2VTaW5nbGVGdW5jdGlvbihjb250ZXh0LCBmdW5jdGlvbkNv
bnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAocGFyc2VN
b2RlID09IFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSkgewot
ICAgICAgICAgICAgQVNTRVJUKGluc3RhbmNlRmllbGRMb2NhdGlvbnMgJiYgIWluc3RhbmNlRmll
bGRMb2NhdGlvbnMtPmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBh
cnNlSW5zdGFuY2VGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoY29udGV4dCwgKmluc3Rh
bmNlRmllbGRMb2NhdGlvbnMpOworICAgICAgICBlbHNlIGlmIChwYXJzZU1vZGUgPT0gU291cmNl
UGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKSB7CisgICAgICAgICAgICBBU1NF
UlQoY2xhc3NGaWVsZExvY2F0aW9ucyAmJiAhY2xhc3NGaWVsZExvY2F0aW9ucy0+aXNFbXB0eSgp
KTsKKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VDbGFzc0ZpZWxkSW5pdGlhbGl6
ZXJTb3VyY2VFbGVtZW50cyhjb250ZXh0LCAqY2xhc3NGaWVsZExvY2F0aW9ucyk7CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZVNvdXJjZUVsZW1lbnRz
KGNvbnRleHQsIENoZWNrRm9yU3RyaWN0TW9kZSk7CiAgICAgfQpAQCAtMjE3MSw3ICsyMTcxLDcg
QEAgc3RhdGljIGNvbnN0IGNoYXIqIHN0cmluZ0FydGljbGVGb3JGdW5jdGlvbk1vZGUoU291cmNl
UGFyc2VNb2RlIG1vZGUpCiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlOgog
ICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZToKICAgICBjYXNlIFNv
dXJjZVBhcnNlTW9kZTo6TW9kdWxlRXZhbHVhdGVNb2RlOgotICAgIGNhc2UgU291cmNlUGFyc2VN
b2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOgorICAgIGNhc2UgU291cmNlUGFyc2VN
b2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gIiI7CiAgICAgfQpAQCAtMjIxMyw3ICsyMjEz
LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShTb3VyY2VQYXJz
ZU1vZGUgbW9kZSkKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGU6CiAgICAg
Y2FzZSBTb3VyY2VQYXJzZU1vZGU6Ok1vZHVsZUFuYWx5emVNb2RlOgogICAgIGNhc2UgU291cmNl
UGFyc2VNb2RlOjpNb2R1bGVFdmFsdWF0ZU1vZGU6Ci0gICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6
Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGU6CisgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6
OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAiIjsKICAgICB9CkBAIC0yODY5LDcgKzI4NjksMTYg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeHByZXNzaW9uIFBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKFQKICAgICBUcmVlRXhwcmVzc2lvbiBjb25zdHJ1Y3Rv
ciA9IDA7CiAgICAgVHJlZVByb3BlcnR5TGlzdCBjbGFzc0VsZW1lbnRzID0gMDsKICAgICBUcmVl
UHJvcGVydHlMaXN0IGNsYXNzRWxlbWVudHNUYWlsID0gMDsKLSAgICB1bnNpZ25lZCBudW1Db21w
dXRlZEZpZWxkcyA9IDA7CisgICAgLy8gV2Ugc3RvcmUgdGhlIGNvbXB1dGVkIGZpZWxkIHByb3Bl
cnR5IGtleXMgc2VwYXJhdGVkbHkgZm9yCisgICAgLy8gaW5zdGFuY2UgYW5kIHN0YXRpYyBmaWVs
ZHMgKHdpdGggZXZlbiBhbmQgb2RkIGluZGV4ZXMsCisgICAgLy8gcmVzcGVjdGl2ZWx5KS4gV2Ug
ZG8gdGhpcyBiZWNhdXNlIHRoZSBwcm9wZXJ0eSBuYW1lcyBhcmUKKyAgICAvLyBldmFsdWF0ZWQg
aW4gc291cmNlIGNvZGUgb3JkZXIsIHNvIHdlIG5lZWQgYW4gZWFzeSB3YXkgdG8KKyAgICAvLyBj
cmVhdGUgYWxsIHRoZSBpbmRleGVzIG5vdywgYnV0IHRoZSBmaWVsZHMgdGhlbXNlbHZlcyBhcmUK
KyAgICAvLyBpbml0aWFsaXplZCBpbiBhIGRpZmZlcmVudCBvcmRlciAoc3RhdGljIGZpcnN0LCB0
aGVuIGluc3RhbmNlKSwKKyAgICAvLyBzbyB0aGVyZSBuZWVkcyB0byBiZSBhIHN0cmFpZ2h0Zm9y
d2FyZCBtZWNoYW5pc20gdG8gcmV0cmlldmUKKyAgICAvLyB0aGUgcmlnaHQgaW5kZXggd2l0aG91
dCB0aGUgd2hvbGUgbGlzdCBvZiBmaWVsZHMgaW4gc291cmNlIGNvZGUKKyAgICAvLyBvcmRlci4K
KyAgICB1bnNpZ25lZCBuZXh0SW5zdGFuY2VDb21wdXRlZEZpZWxkSUQgPSAwLCBuZXh0U3RhdGlj
Q29tcHV0ZWRGaWVsZElEID0gMTsKICAgICB3aGlsZSAoIW1hdGNoKENMT1NFQlJBQ0UpKSB7CiAg
ICAgICAgIGlmIChtYXRjaChTRU1JQ09MT04pKSB7CiAgICAgICAgICAgICBuZXh0KCk7CkBAIC0y
OTY2LDEzICsyOTc1LDIyIEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgdHlwZSA9IHN0YXRp
Y19jYXN0PFByb3BlcnR5Tm9kZTo6VHlwZT4odHlwZSB8IChpc0dldHRlciA/IFByb3BlcnR5Tm9k
ZTo6R2V0dGVyIDogUHJvcGVydHlOb2RlOjpTZXR0ZXIpKTsKICAgICAgICAgICAgIHByb3BlcnR5
ID0gcGFyc2VHZXR0ZXJTZXR0ZXIoY29udGV4dCwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xhc3MsIHR5
cGUsIG1ldGhvZFN0YXJ0LCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIHRhZyk7CiAgICAgICAgICAg
ICBmYWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNhbm5vdCBwYXJzZSB0aGlzIG1ldGhvZCIpOwotICAg
ICAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVzZVB1YmxpY0NsYXNzRmllbGRzKCkgJiYgIW1hdGNo
KE9QRU5QQVJFTikgJiYgdGFnID09IENsYXNzRWxlbWVudFRhZzo6SW5zdGFuY2UgJiYgcGFyc2VN
b2RlID09IFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9kTW9kZSkgeworICAgICAgICB9IGVsc2UgaWYg
KE9wdGlvbnM6OnVzZVB1YmxpY0NsYXNzRmllbGRzKCkgJiYgIW1hdGNoKE9QRU5QQVJFTikgJiYg
cGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9kTW9kZSkgewogICAgICAgICAgICAg
QVNTRVJUKCFpc0dldHRlciAmJiAhaXNTZXR0ZXIpOwotICAgICAgICAgICAgaWYgKGlkZW50KQor
ICAgICAgICAgICAgaWYgKGlkZW50KSB7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZU
cnVlKCppZGVudCA9PSBwcm9wZXJ0eU5hbWVzLmNvbnN0cnVjdG9yLCAiQ2Fubm90IGRlY2xhcmUg
Y2xhc3MgZmllbGQgbmFtZWQgJ2NvbnN0cnVjdG9yJyIpOworICAgICAgICAgICAgICAgIGlmICh0
YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpTdGF0aWMpCisgICAgICAgICAgICAgICAgICAgIHNlbWFu
dGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gcHJvcGVydHlOYW1lcy5wcm90b3R5cGUsICJDYW5ub3Qg
ZGVjbGFyZSBhIHN0YXRpYyBmaWVsZCBuYW1lZCAncHJvdG90eXBlJyIpOworICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoY29tcHV0ZWRQcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAg
ICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmlj
SWRlbnRpZmllcihtX3ZtLCBudW1Db21wdXRlZEZpZWxkcysrKTsKKyAgICAgICAgICAgICAgICBp
ZiAodGFnID09IENsYXNzRWxlbWVudFRhZzo6SW5zdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lk
ZW50aWZpZXIobV92bSwgbmV4dEluc3RhbmNlQ29tcHV0ZWRGaWVsZElEKTsKKyAgICAgICAgICAg
ICAgICAgICAgbmV4dEluc3RhbmNlQ29tcHV0ZWRGaWVsZElEICs9IDI7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5p
ZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgbmV4dFN0YXRpY0Nv
bXB1dGVkRmllbGRJRCk7CisgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0aWNDb21wdXRlZEZp
ZWxkSUQgKz0gMjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgRGVjbGFyYXRp
b25SZXN1bHRNYXNrIGRlY2xhcmF0aW9uUmVzdWx0ID0gY2xhc3NTY29wZS0+ZGVjbGFyZUxleGlj
YWxWYXJpYWJsZShpZGVudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChk
ZWNsYXJhdGlvblJlc3VsdCwgZGVjbGFyYXRpb25SZXN1bHQgPT0gRGVjbGFyYXRpb25SZXN1bHQ6
OlZhbGlkKTsKICAgICAgICAgICAgICAgICBjbGFzc1Njb3BlLT51c2VWYXJpYWJsZShpZGVudCwg
ZmFsc2UpOwpAQCAtMzAzOSwxMyArMzA1NywxNyBAQCBwYXJzZU1ldGhvZDoKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlRmllbGRJbml0
aWFsaXplclNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBWZWN0b3I8
SlNUZXh0UG9zaXRpb24+JiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQordGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
Q2xhc3NGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXImIGNvbnRleHQs
IGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIGNsYXNzRmllbGRMb2NhdGlvbnMpCiB7CiAg
ICAgVHJlZVNvdXJjZUVsZW1lbnRzIHNvdXJjZUVsZW1lbnRzID0gY29udGV4dC5jcmVhdGVTb3Vy
Y2VFbGVtZW50cygpOwogICAgIGN1cnJlbnRTY29wZSgpLT5zZXRJc0NsYXNzU2NvcGUoKTsKIAot
ICAgIHVuc2lnbmVkIG51bUNvbXB1dGVkRmllbGRzID0gMDsKLSAgICBmb3IgKGF1dG8gbG9jYXRp
b24gOiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKSB7CisgICAgLy8gUHJvcGVydHkga2V5cyBmb3Ig
Y29tcHV0ZWQgZmllbGRzIHN0YXJ0IGF0IDAgZm9yIGluc3RhbmNlCisgICAgLy8gZmllbGRzLCBh
dCAxIGZvciBzdGF0aWMgZmllbGRzLiBXZSdsbCBidW1wIHRoZSBjb3VudGVyIGJ5IG9uZQorICAg
IC8vIGlmIHdlIGV2ZXIgZmluZCBvbmUgc3RhdGljIGZpZWxkLCBzaW5jZSB0aGF0IG1lYW5zIHRo
ZXknbGwgYWxsCisgICAgLy8gYmUgc3RhdGljIGZpZWxkcy4KKyAgICB1bnNpZ25lZCBuZXh0Q29t
cHV0ZWRGaWVsZElEID0gMDsKKyAgICBmb3IgKGF1dG8gbG9jYXRpb24gOiBjbGFzc0ZpZWxkTG9j
YXRpb25zKSB7CiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaGFzTGlu
ZVRlcm1pbmF0b3JCZWZvcmVUb2tlbgogICAgICAgICAvLyBvbiBjbGFzcyBmaWVsZHMsIHNvIHdl
IHNldCB0aGlzIHZhbHVlIHRvIGZhbHNlLgogICAgICAgICBMZXhlclN0YXRlIGxleGVyU3RhdGUg
eyBsb2NhdGlvbi5vZmZzZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2NhdGlvbi5saW5lU3Rh
cnRPZmZzZXQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9jYXRpb24ubGluZSksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsb2NhdGlvbi5saW5lKSwgZmFsc2UgfTsKQEAgLTMwNTUsNiArMzA3Nywx
NyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZQogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9IG51bGxwdHI7CiAgICAgICAgIFRyZWVFeHByZXNzaW9uIGNvbXB1dGVkUHJvcGVydHlO
YW1lID0gMDsKICAgICAgICAgRGVmaW5lRmllbGROb2RlOjpUeXBlIHR5cGUgPSBEZWZpbmVGaWVs
ZE5vZGU6OlR5cGU6Ok5hbWU7CisKKyAgICAgICAgaWYgKG1hdGNoKFJFU0VSVkVEX0lGX1NUUklD
VCkgJiYgKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+c3RhdGlj
S2V5d29yZCkgeworICAgICAgICAgICAgaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKKyAg
ICAgICAgICAgIEFTU0VSVChpZGVudCk7CisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAg
ICBpZiAobWF0Y2goU0VNSUNPTE9OKSB8fCBtYXRjaCAoRVFVQUwpIHx8IG1hdGNoKENMT1NFQlJB
Q0UpIHx8IG1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9rZW4oKSkKKyAgICAgICAg
ICAgICAgICBnb3RvIHZhbGlkRmllbGQ7CisgICAgICAgICAgICBpZiAoIW5leHRDb21wdXRlZEZp
ZWxkSUQpCisgICAgICAgICAgICAgICAgbmV4dENvbXB1dGVkRmllbGRJRCsrOworICAgICAgICB9
CisKICAgICAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewogICAgICAgICBjYXNlIFNUUklO
RzoKICAgICAgICAgY2FzZSBJREVOVDoKQEAgLTMwNzksNyArMzExMiw4IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUluc3RhbmNlCiAgICAgICAgICAgICBjb21wdXRlZFByb3BlcnR5TmFtZSA9IHBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShjb21w
dXRlZFByb3BlcnR5TmFtZSwgIkNhbm5vdCBwYXJzZSBjb21wdXRlZCBwcm9wZXJ0eSBuYW1lIik7
CiAgICAgICAgICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwgIl0iLCAi
ZW5kIiwgImNvbXB1dGVkIHByb3BlcnR5IG5hbWUiKTsKLSAgICAgICAgICAgIGlkZW50ID0gJm1f
cGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKG1fdm0s
IG51bUNvbXB1dGVkRmllbGRzKyspOworICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVu
YS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgbmV4dENvbXB1
dGVkRmllbGRJRCk7CisgICAgICAgICAgICBuZXh0Q29tcHV0ZWRGaWVsZElEICs9IDI7CiAgICAg
ICAgICAgICB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpDb21wdXRlZE5hbWU7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTMwODgsNiArMzEyMiw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZUluc3RhbmNlCiAgICAgICAgICAgICBmYWlsRHVlVG9VbmV4cGVjdGVkVG9r
ZW4oKTsKICAgICAgICAgfQogCisgICAgdmFsaWRGaWVsZDoKICAgICAgICAgLy8gT25seSB2YWxp
ZCBjbGFzcyBmaWVsZHMgYXJlIGhhbmRsZWQgaW4gdGhpcyBmdW5jdGlvbi4KICAgICAgICAgQVNT
RVJUKG1hdGNoKEVRVUFMKSB8fCBtYXRjaChTRU1JQ09MT04pIHx8IG1hdGNoKENMT1NFQlJBQ0Up
IHx8IG1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9rZW4oKSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDU0YjM5NzMwOWVhMi4uMWYwYzNkMDY3MDM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTI2MCw3ICsyNjAsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpHZXR0ZXJNb2RlOgogICAg
ICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6U2V0dGVyTW9kZToKICAgICAgICAgY2FzZSBTb3Vy
Y2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGU6Ci0gICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpJ
bnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOgorICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9k
ZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZToKICAgICAgICAgICAgIHNldElzRnVuY3Rpb24o
KTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0xNjE5LDcgKzE2MTksNyBAQCBwcml2YXRlOgog
ICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNl
QXN5bmNGdW5jdGlvblNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiwgU291cmNlUGFyc2VNb2Rl
LCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uLCBTb3VyY2VFbGVtZW50c01vZGUp
OwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBh
cnNlQXN5bmNHZW5lcmF0b3JGdW5jdGlvblNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiwgU291
cmNlUGFyc2VNb2RlLCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uLCBTb3VyY2VF
bGVtZW50c01vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJj
ZUVsZW1lbnRzIHBhcnNlU2luZ2xlRnVuY3Rpb24oVHJlZUJ1aWxkZXImLCBPcHRpb25hbDxpbnQ+
IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pOwotICAgIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNlSW5zdGFuY2VGaWVs
ZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXImLCBjb25zdCBWZWN0b3I8SlNU
ZXh0UG9zaXRpb24+Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291
cmNlRWxlbWVudHMgcGFyc2VDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyhUcmVl
QnVpbGRlciYsIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mKTsKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1lbnRMaXN0SXRlbShU
cmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3RpdmUsIHVuc2lnbmVkKiBkaXJl
Y3RpdmVMaXRlcmFsTGVuZ3RoKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImLCBjb25zdCBJZGVudGlmaWVy
KiYgZGlyZWN0aXZlLCB1bnNpZ25lZCogZGlyZWN0aXZlTGl0ZXJhbExlbmd0aCA9IG51bGxwdHIp
OwogICAgIGVudW0gY2xhc3MgRXhwb3J0VHlwZSB7IEV4cG9ydGVkLCBOb3RFeHBvcnRlZCB9OwpA
QCAtMTk1OSw3ICsxOTU5LDcgQEAgcHJpdmF0ZToKIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVy
VHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgotc3RkOjp1bmlxdWVfcHRyPFBhcnNl
ZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShQYXJzZXJFcnJvciYgZXJyb3IsIGNvbnN0
IElkZW50aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFBhcnNp
bmdDb250ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0
b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGlu
c3RhbmNlRmllbGRMb2NhdGlvbnMpCitzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlKFBhcnNlckVycm9yJiBlcnJvciwgY29uc3QgSWRlbnRpZmllciYg
Y2FsbGVlTmFtZSwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgUGFyc2luZ0NvbnRleHQgcGFy
c2luZ0NvbnRleHQsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNF
bmRQb3NpdGlvbiwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogY2xhc3NGaWVsZExvY2F0
aW9ucykKIHsKICAgICBpbnQgZXJyTGluZTsKICAgICBTdHJpbmcgZXJyTXNnOwpAQCAtMTk3NCw3
ICsxOTc0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZShQYXJzZXJFcnJvciYgZXJyb3IsIGNvbnN0IEkKICAgICBBU1NFUlQobV9zb3VyY2Ut
PnN0YXJ0Q29sdW1uKCkgPiBPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpKTsKICAgICB1bnNp
Z25lZCBzdGFydENvbHVtbiA9IG1fc291cmNlLT5zdGFydENvbHVtbigpLnplcm9CYXNlZEludCgp
OwogCi0gICAgYXV0byBwYXJzZVJlc3VsdCA9IHBhcnNlSW5uZXIoY2FsbGVlTmFtZSwgcGFyc2VN
b2RlLCBwYXJzaW5nQ29udGV4dCwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3Np
dGlvbiwgaW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7CisgICAgYXV0byBwYXJzZVJlc3VsdCA9IHBh
cnNlSW5uZXIoY2FsbGVlTmFtZSwgcGFyc2VNb2RlLCBwYXJzaW5nQ29udGV4dCwgZnVuY3Rpb25D
b25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgY2xhc3NGaWVsZExvY2F0aW9ucyk7CiAK
ICAgICBpbnQgbGluZU51bWJlciA9IG1fbGV4ZXItPmxpbmVOdW1iZXIoKTsKICAgICBib29sIGxl
eEVycm9yID0gbV9sZXhlci0+c2F3RXJyb3IoKTsKQEAgLTIwNTgsNyArMjA1OCw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBwYXJzZSgKICAgICBEZXJpdmVkQ29udGV4dFR5cGUgZGVy
aXZlZENvbnRleHRUeXBlID0gRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLAogICAgIEV2YWxDb250
ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsCiAgICAgRGVi
dWdnZXJQYXJzZURhdGEqIGRlYnVnZ2VyUGFyc2VEYXRhID0gbnVsbHB0ciwKLSAgICBjb25zdCBW
ZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zID0gbnVsbHB0ciwK
KyAgICBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBjbGFzc0ZpZWxkTG9jYXRpb25zID0g
bnVsbHB0ciwKICAgICBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbiA9IGZhbHNlKQogewog
ICAgIEFTU0VSVCghc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlzTnVsbCgpKTsKQEAgLTIw
NzAsNyArMjA3MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBwYXJzZSgKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcmVzdWx0OwogICAgIGlmIChzb3VyY2UucHJvdmlk
ZXIoKS0+c291cmNlKCkuaXM4Qml0KCkpIHsKICAgICAgICAgUGFyc2VyPExleGVyPExDaGFyPj4g
cGFyc2VyKHZtLCBzb3VyY2UsIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBw
YXJzZU1vZGUsIHN1cGVyQmluZGluZywgZGVmYXVsdENvbnN0cnVjdG9yS2luZEZvclRvcExldmVs
RnVuY3Rpb24sIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpLCBl
dmFsQ29udGV4dFR5cGUsIGRlYnVnZ2VyUGFyc2VEYXRhLCBpc0luc2lkZU9yZGluYXJ5RnVuY3Rp
b24pOwotICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IsIG5h
bWUsIHBhcnNlTW9kZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpID8gUGFyc2luZ0NvbnRleHQ6
OkV2YWwgOiBQYXJzaW5nQ29udGV4dDo6UHJvZ3JhbSwgV1RGOjpudWxsb3B0LCBpbnN0YW5jZUZp
ZWxkTG9jYXRpb25zKTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+
KGVycm9yLCBuYW1lLCBwYXJzZU1vZGUsIGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4oKSA/IFBhcnNp
bmdDb250ZXh0OjpFdmFsIDogUGFyc2luZ0NvbnRleHQ6OlByb2dyYW0sIFdURjo6bnVsbG9wdCwg
Y2xhc3NGaWVsZExvY2F0aW9ucyk7CiAgICAgICAgIGlmIChwb3NpdGlvbkJlZm9yZUxhc3ROZXds
aW5lKQogICAgICAgICAgICAgKnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUgPSBwYXJzZXIucG9z
aXRpb25CZWZvcmVMYXN0TmV3bGluZSgpOwogICAgICAgICBpZiAoYnVpbHRpbk1vZGUgPT0gSlNQ
YXJzZXJCdWlsdGluTW9kZTo6QnVpbHRpbikgewpAQCAtMjA4Myw3ICsyMDgzLDcgQEAgc3RkOjp1
bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHBhcnNlKAogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoZGVmYXVsdENvbnN0cnVjdG9yS2luZEZvclRvcExldmVsRnVuY3Rpb24g
PT0gQ29uc3RydWN0b3JLaW5kOjpOb25lLCAiQnVpbHRpbkV4ZWN1dGFibGVzJ3Mgc3BlY2lhbCBj
b25zdHJ1Y3RvcnMgc2hvdWxkIGFsd2F5cyB1c2UgYSA4LWJpdCBzdHJpbmciKTsKICAgICAgICAg
UGFyc2VyPExleGVyPFVDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIGJ1aWx0aW5Nb2RlLCBzdHJp
Y3RNb2RlLCBzY3JpcHRNb2RlLCBwYXJzZU1vZGUsIHN1cGVyQmluZGluZywgZGVmYXVsdENvbnN0
cnVjdG9yS2luZEZvclRvcExldmVsRnVuY3Rpb24sIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNFdmFs
Tm9kZTxQYXJzZWROb2RlPigpLCBldmFsQ29udGV4dFR5cGUsIGRlYnVnZ2VyUGFyc2VEYXRhLCBp
c0luc2lkZU9yZGluYXJ5RnVuY3Rpb24pOwotICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2U8
UGFyc2VkTm9kZT4oZXJyb3IsIG5hbWUsIHBhcnNlTW9kZSwgaXNFdmFsTm9kZTxQYXJzZWROb2Rl
PigpID8gUGFyc2luZ0NvbnRleHQ6OkV2YWwgOiBQYXJzaW5nQ29udGV4dDo6UHJvZ3JhbSwgV1RG
OjpudWxsb3B0LCBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgcmVzdWx0ID0gcGFy
c2VyLnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yLCBuYW1lLCBwYXJzZU1vZGUsIGlzRXZhbE5vZGU8
UGFyc2VkTm9kZT4oKSA/IFBhcnNpbmdDb250ZXh0OjpFdmFsIDogUGFyc2luZ0NvbnRleHQ6OlBy
b2dyYW0sIFdURjo6bnVsbG9wdCwgY2xhc3NGaWVsZExvY2F0aW9ucyk7CiAgICAgICAgIGlmIChw
b3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKQogICAgICAgICAgICAgKnBvc2l0aW9uQmVmb3JlTGFz
dE5ld2xpbmUgPSBwYXJzZXIucG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSgpOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAppbmRleCA2NDEzMTJjY2M5
YmMuLjQxNTMwNjdmNjVmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXJNb2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
TW9kZXMuaApAQCAtNjYsNyArNjYsNyBAQCBlbnVtIGNsYXNzIFNvdXJjZVBhcnNlTW9kZSA6IHVp
bnQ4X3QgewogICAgIEFzeW5jR2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZSA9IDE2LAogICAg
IEFzeW5jR2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGUgICA9IDE3LAogICAgIEdlbmVyYXRvcldy
YXBwZXJNZXRob2RNb2RlICAgICAgICA9IDE4LAotICAgIEluc3RhbmNlRmllbGRJbml0aWFsaXpl
ck1vZGUgICAgICA9IDE5LAorICAgIENsYXNzRmllbGRJbml0aWFsaXplck1vZGUgICAgICAgICA9
IDE5LAogfTsKIAogY2xhc3MgU291cmNlUGFyc2VNb2RlU2V0IHsgCkBAIC0xMTYsNyArMTE2LDcg
QEAgQUxXQVlTX0lOTElORSBib29sIGlzRnVuY3Rpb25QYXJzZU1vZGUoU291cmNlUGFyc2VNb2Rl
IHBhcnNlTW9kZSkKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvckJvZHlN
b2RlLAogICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBlckZ1bmN0
aW9uTW9kZSwKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBwZXJN
ZXRob2RNb2RlLAotICAgICAgICBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFs
aXplck1vZGUpLmNvbnRhaW5zKHBhcnNlTW9kZSk7CisgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6
Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZSkuY29udGFpbnMocGFyc2VNb2RlKTsKIH0gCiAKIEFM
V0FZU19JTkxJTkUgYm9vbCBpc0FzeW5jRnVuY3Rpb25QYXJzZU1vZGUoU291cmNlUGFyc2VNb2Rl
IHBhcnNlTW9kZSkgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvblByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblByb3RvdHlwZS5jcHAKaW5kZXggMjM2MWFkNzEzYmZmLi4wMDBiYjcxOTA3YWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAKQEAgLTEwOSw3ICsxMDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uUHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iagogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25N
b2RlOgotICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxp
emVyTW9kZToKKyAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFs
aXplck1vZGU6CiAgICAgICAgICAgICBmdW5jdGlvbkhlYWRlciA9ICIiOwogICAgICAgICAgICAg
YnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAK
aW5kZXggZDU1NmNkZWU2Mjk4Li5mZmVlOGY1MGRhMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCkBAIC00MjYsNyArNDI2LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1YKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JX
cmFwcGVyRnVuY3Rpb25Nb2RlOgogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVy
YXRvcldyYXBwZXJNZXRob2RNb2RlOgogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpHZW5lcmF0
b3JXcmFwcGVyTWV0aG9kTW9kZToKLSAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VG
aWVsZEluaXRpYWxpemVyTW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVs
ZEluaXRpYWxpemVyTW9kZToKICAgICAgICAgaWYgKCFmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCkt
PmlzSW5TdHJpY3RDb250ZXh0KCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNhbGxlcik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIkZ1bmN0aW9uLmNhbGxlciB1c2VkIHRvIHJldHJpZXZlIHN0
cmljdCBjYWxsZXIiX3MpKTsKLS0gCjIuMjYuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404092</attachid>
            <date>2020-07-12 02:46:55 -0700</date>
            <delta_ts>2020-07-21 06:52:24 -0700</delta_ts>
            <desc>Add support for static public fields, v4</desc>
            <filename>0001-JSC-Add-support-for-static-public-class-fields.patch</filename>
            <type>text/plain</type>
            <size>74465</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA5Y2E3YzRjMmRmYTc5NjMyZDgyNDQxZjg4YzYyODhhZmJjODM4NGYwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/WGFuPTIwTD1DMz1CM3Blej89IDx4YW5AaWdh
bGlhLmNvbT4KRGF0ZTogVGh1LCAxNiBBcHIgMjAyMCAxODoyMToxMyArMDIwMApTdWJqZWN0OiBb
UEFUQ0hdIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcwog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5NQoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpKU1Rlc3RzOgoKRW5hYmxlIHN0YXRpYyBwdWJsaWMgZmllbGRz
LCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJvbSB0aGUKVjggcHJvamVjdC4gQWxzbyBz
cGxpdCB0aGUgc3VwcG9ydCBjb2RlIGludG8gYSBzZXBhcmF0ZSBmaWxlCihoYXJtb255LXN1cHBv
cnQuanMpIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgoKKiB0ZXN0MjYyL2NvbmZpZy55YW1sOiBlbmFi
bGUgc3RhdGljIHB1YmxpYyBmaWVsZHMuCiogc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255Lmpz
OgoqIHN0cmVzcy9jbGFzcy1maWVsZHMtc3RhdGljLWhhcm1vbnkuanM6IEFkZGVkLgoobG9hZC5D
KToKKGxvYWQpOgooYXNzZXJ0RXF1YWxzLkMuaGFzT3duUHJvcGVydHkpOgooYXNzZXJ0RXF1YWxz
LkMpOgooYXNzZXJ0RXF1YWxzKToKKGFzc2VydEVxdWFscy5DLmQpOgooYXNzZXJ0RXF1YWxzLkMu
ZSk6Cihhc3NlcnRFcXVhbHMuQy5jKToKKGFzc2VydEVxdWFscy5sZXQuZCk6CihDKToKKEMuYy5B
KToKKEMuYyk6CihDLmMuQyk6Cihhc3NlcnRFcXVhbHMuQi5zZXQgZCk6Cihhc3NlcnRFcXVhbHMu
Qik6Cihhc3NlcnRFcXVhbHMuQy5ydW4pOgooeC4pOgooeC5DLnJ1bik6Cih4LkMpOgooeCk6Cihw
cm90b3R5cGUueCk6Cihwcm90b3R5cGUueC5DLnByb3RvdHlwZS5ydW4pOgoocHJvdG90eXBlLngu
Qy5ydW4pOgoocHJvdG90eXBlLnguQyk6Cih5Lik6Cih5LkMucHJvdG90eXBlLnJ1bik6Cih5LkMu
cnVuKToKKHkuQyk6Cih5KToKKHByb3RvdHlwZS55LkMpOgoocHJvdG90eXBlLnkuRCk6Cihhc3Nl
cnRFcXVhbHMuQy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpOgooYXNzZXJ0RXF1YWxzLlgucCk6
Cihhc3NlcnRFcXVhbHMuWCk6CihYLnQpOgooWCk6Ciogc3RyZXNzL2hhcm1vbnktc3VwcG9ydC5q
czogQWRkZWQuCihjbGFzc09mKToKKGRlZXBPYmplY3RFcXVhbHMpOgooZGVlcEVxdWFscyk6Cihm
YWlsKToKKGFzc2VydEluc3RhbmNlb2YpOgooYXNzZXJ0RXF1YWxzKToKKGFzc2VydE5vdEVxdWFs
cyk6Cihhc3NlcnRUcnVlKToKKGFzc2VydEZhbHNlKToKKGFzc2VydFRocm93cyk6CgpTb3VyY2Uv
SmF2YVNjcmlwdENvcmU6CgpBZGQgc3VwcG9ydCBmb3Igc3RhdGljIHB1YmxpYyBjbGFzcyBmaWVs
ZHMuIFdlIGNhbiByZXVzZSBtb3N0IG9mCnRoZSBleGlzdGluZyBtYWNoaW5lcnkgYXZhaWxhYmxl
IGZvciBpbnN0YW5jZSBmaWVsZHMsIHdpdGggYQpjb3VwbGUgb2YgaXNzdWVzIHRoYXQgbWVyaXQg
c3BlY2lhbCBjb21tZW50OgoKU3RhdGljIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIGxpa2UgaW5z
dGFuY2UgZmllbGRzLCB3aXRoIGEKc3ludGhldGljIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUgdG8g
YWxsb3cgdXMgdG8gdHJpdmlhbGx5IGZvbGxvdwp0aGUgc2NvcGluZyBydWxlcyBpbiB0aGUgc3Bl
Yy4gQXMgaXQgaGFwcGVucyB3aXRoIGluc3RhbmNlIGZpZWxkcwp0aGlzIGNvdWxkIGJlIGlubGlu
ZWQgaW4gYSBmdXR1cmUgcGF0Y2guCgpUaGUgd2F5IHdlIHN0b3JlIGNvbXB1dGVkIHByb3BlcnR5
IGtleXMgbmVlZHMgdG8gYmUKbW9kaWZpZWQuIEJlZm9yZSB3ZSBhc3N1bWVkIHRoZSBzb3VyY2Ug
Y29kZSBvcmRlciB3b3VsZCBiZQppZGVudGljYWwgdG8gdGhlIGV2YWx1YXRpb24gb3JkZXIgKHdo
aWNoIHdhcyB0cnVlIGZvciBpbnN0YW5jZQpmaWVsZHMpLiBXaXRoIHN0YXRpYyBmaWVsZHMgdGhp
cyBjYW4gbm90IGJlIHRoZSBjYXNlLCBzaW5jZSBzdGF0aWMKZmllbGRzIGFyZSBhbHdheXMgaW5p
dGlhbGl6ZWQgZmlyc3QuIFRvIGFsbG93IGZvciB0aGlzIG1pc21hdGNoCnRoZSBjb21wdXRlZCBw
cm9wZXJ0eSBrZXlzIGZvciBpbnN0YW5jZSBmaWVsZHMgYXJlIHN0b3JlZCB3aXRoIGFuCmV2ZW4g
aWRlbnRpZmllciwgYW5kIHRob3NlIGZvciBzdGF0aWMgZmllbGRzIGFyZSBzdG9yZWQgd2l0aCBh
bgpvZGQgaWRlbnRpZmllci4gVGhlIGZpZWxkIHBhcnNlciwgdXBvbiBmaWd1cmluZyBvdXQgd2hl
dGhlciBpdCdzCmluaXRpYWxpemluZyB0aGUgc3RhdGljIG9yIHRoZSBpbnN0YW5jZSBmaWVsZHMs
IHdpbGwga25vdyB3aGVyZSB0bwpsb29rIHVwIHRoZSBrZXkuCgpGb3IgZXhhbXBsZToKCmNsYXNz
IEZPTyB7CiAgWyJhIl0gPSAwOwogIHN0YXRpYyBbImIiXSA9IDE7CiAgc3RhdGljIFsiYyJdID0g
MjsKICBbImQiXSA9IDM7Cn0KCkhlcmUgd2Ugd2lsbCBldmFsdWF0ZSB0aGUgY29tcHV0ZWQgZmll
bGQgbmFtZXMgaW4gdGhlIGZvbGxvd2luZwpvcmRlcjogYSwgYiwgYywgZDsgYnV0IHdlIHdpbGwg
aW5pdGlhbGl6ZSB0aGUgZmllbGRzIGluIHRoZQpmb2xsb3dpbmcgb3JkZXI6IGIsIGMsIGEsIGQu
IFNpbmNlIGVhY2ggZ3JvdXAgb2YgZmllbGRzIGlzCmluaXRpYWxpemVkIGluZGVwZW5kZW50bHkg
d2UgY2FuIHRyaXZpYWxseSByZXRyaWV2ZSB0aGUgcHJvcGVydHkKa2V5cyBmb3IgZWFjaCBncm91
cCBqdXN0IGJ5IGdldHRpbmcgdGhlIG9kZCBwcm9wZXJ0eSBrZXlzIGZvcgpzdGF0aWMgZmllbGRz
IChpbmRleGVzIDEgYW5kIDMpIGFuZCB0aGUgZXZlbiBvbmVzIGZvciBpbnN0YW5jZQpmaWVsZHMg
KGluZGV4ZXMgMCBhbmQgMikuCgoqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmNwcDoKKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKiBieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgoqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHA6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZElu
aXRpYWxpemVyRnVuY3Rpb24pOgoqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgoq
IGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjpl
bWl0Qnl0ZWNvZGUpOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmll
bGROYW1lKToKKEpTQzo6RGVmaW5lRmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpDbGFz
c0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgoqIHBhcnNlci9BU1RCdWlsZGVyLmg6CihKU0M6OkFT
VEJ1aWxkZXI6OmNyZWF0ZURlZmluZUZpZWxkKToKKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5o
OgooSlNDOjpEZWZpbmVGaWVsZE5vZGU6OkRlZmluZUZpZWxkTm9kZSk6CiogcGFyc2VyL05vZGVz
Lmg6CiogcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlu
bmVyKToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MpOgooSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyk6
CiogcGFyc2VyL1BhcnNlci5oOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UpOgooSlND
OjpwYXJzZSk6CiogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKEpTQzo6U3ludGF4Q2hlY2tlcjo6
Y3JlYXRlRGVmaW5lRmllbGQpOgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpTRnVu
Y3Rpb246OnNldEZ1bmN0aW9uTmFtZSk6CgoqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcDoKKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKiBi
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgoqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHA6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcik6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxp
emVyRnVuY3Rpb24pOgooSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWRBcnJvd0Z1bmN0
aW9uTGV4aWNhbEVudmlyb25tZW50KToKKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aDoKKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKEpTQzo6ZW1pdEhvbWVPYmplY3RG
b3JDYWxsZWUpOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpQ
cm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1lKToKKEpTQzo6RGVmaW5l
RmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNv
ZGUpOgoqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKEpTQzo6ZXZhbCk6CiogcGFyc2Vy
L05vZGVzLmg6CiogcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUlubmVyKToKKEpTQzo6c3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZSk6CihKU0M6OnN0
cmluZ0ZvckZ1bmN0aW9uTW9kZSk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNz
KToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NGaWVsZEluaXRpYWxpemVyU291
cmNlRWxlbWVudHMpOgoqIHBhcnNlci9QYXJzZXIuaDoKKEpTQzo6U2NvcGU6OnNldFNvdXJjZVBh
cnNlTW9kZSk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZSk6CihKU0M6OnBhcnNlKToK
KiBwYXJzZXIvUGFyc2VyTW9kZXMuaDoKKEpTQzo6aXNGdW5jdGlvblBhcnNlTW9kZSk6CiogcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CihKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJp
bmcpOgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpTRnVuY3Rpb246OmNhbGxlckdl
dHRlcik6Ci0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDYyICsrKwogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanMgICAgICAg
IHwgMTY1ICstLS0tLQogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255
LmpzIHwgNTAzICsrKysrKysrKysrKysrKysrKwogSlNUZXN0cy9zdHJlc3MvaGFybW9ueS1zdXBw
b3J0LmpzICAgICAgICAgICAgIHwgMTk2ICsrKysrKysKIEpTVGVzdHMvdGVzdDI2Mi9jb25maWcu
eWFtbCAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgIHwgMTA2ICsrKysKIC4uLi9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5jcHAgICB8ICAgNCArLQogLi4uL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmggICAgIHwgIDEyICstCiAuLi4vYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCAgICAgICAgfCAgMTIgKy0KIC4uLi9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaCAgICAgICAgICB8ICAgNiArLQogLi4uL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwICAgICAgICAgICAgIHwgIDY0ICsrLQogLi4uL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcCAgICAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmggICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcCAgICAgICB8ICA2MiArKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmggICAgICAgICB8ICAxNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXJNb2Rlcy5oICAgIHwgICA0ICstCiAuLi4vcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAgICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwICB8ICAgMiArLQogMTggZmlsZXMgY2hhbmdlZCwgMTAwMSBpbnNlcnRpb25z
KCspLCAyMjcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy9zdHJlc3Mv
Y2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0
cy9zdHJlc3MvaGFybW9ueS1zdXBwb3J0LmpzCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBhMjkwZDhiMTcxYWEuLjZhNWJiM2QzNzIwOSAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw2NSBAQAorMjAyMC0wNi0wNSAgWGFuIEzDs3BleiAgPHhhbkBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxk
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxl
IHN0YXRpYyBwdWJsaWMgZmllbGRzLCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJvbSB0
aGUKKyAgICAgICAgVjggcHJvamVjdC4gQWxzbyBzcGxpdCB0aGUgc3VwcG9ydCBjb2RlIGludG8g
YSBzZXBhcmF0ZSBmaWxlCisgICAgICAgIChoYXJtb255LXN1cHBvcnQuanMpIHRvIGF2b2lkIGR1
cGxpY2F0aW9uLgorCisgICAgICAgICogdGVzdDI2Mi9jb25maWcueWFtbDogZW5hYmxlIHN0YXRp
YyBwdWJsaWMgZmllbGRzLgorICAgICAgICAqIHN0cmVzcy9jbGFzcy1maWVsZHMtaGFybW9ueS5q
czoKKyAgICAgICAgKiBzdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGxvYWQuQyk6CisgICAgICAgIChsb2FkKToKKyAgICAgICAgKGFzc2VydEVx
dWFscy5DLmhhc093blByb3BlcnR5KToKKyAgICAgICAgKGFzc2VydEVxdWFscy5DKToKKyAgICAg
ICAgKGFzc2VydEVxdWFscyk6CisgICAgICAgIChhc3NlcnRFcXVhbHMuQy5kKToKKyAgICAgICAg
KGFzc2VydEVxdWFscy5DLmUpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkMuYyk6CisgICAgICAg
IChhc3NlcnRFcXVhbHMubGV0LmQpOgorICAgICAgICAoQyk6CisgICAgICAgIChDLmMuQSk6Cisg
ICAgICAgIChDLmMpOgorICAgICAgICAoQy5jLkMpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkIu
c2V0IGQpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkIpOgorICAgICAgICAoYXNzZXJ0RXF1YWxz
LkMucnVuKToKKyAgICAgICAgKHguKToKKyAgICAgICAgKHguQy5ydW4pOgorICAgICAgICAoeC5D
KToKKyAgICAgICAgKHgpOgorICAgICAgICAocHJvdG90eXBlLngpOgorICAgICAgICAocHJvdG90
eXBlLnguQy5wcm90b3R5cGUucnVuKToKKyAgICAgICAgKHByb3RvdHlwZS54LkMucnVuKToKKyAg
ICAgICAgKHByb3RvdHlwZS54LkMpOgorICAgICAgICAoeS4pOgorICAgICAgICAoeS5DLnByb3Rv
dHlwZS5ydW4pOgorICAgICAgICAoeS5DLnJ1bik6CisgICAgICAgICh5LkMpOgorICAgICAgICAo
eSk6CisgICAgICAgIChwcm90b3R5cGUueS5DKToKKyAgICAgICAgKHByb3RvdHlwZS55LkQpOgor
ICAgICAgICAoYXNzZXJ0RXF1YWxzLkMucHJvdG90eXBlLmhhc093blByb3BlcnR5KToKKyAgICAg
ICAgKGFzc2VydEVxdWFscy5YLnApOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLlgpOgorICAgICAg
ICAoWC50KToKKyAgICAgICAgKFgpOgorICAgICAgICAqIHN0cmVzcy9oYXJtb255LXN1cHBvcnQu
anM6IEFkZGVkLgorICAgICAgICAoY2xhc3NPZik6CisgICAgICAgIChkZWVwT2JqZWN0RXF1YWxz
KToKKyAgICAgICAgKGRlZXBFcXVhbHMpOgorICAgICAgICAoZmFpbCk6CisgICAgICAgIChhc3Nl
cnRJbnN0YW5jZW9mKToKKyAgICAgICAgKGFzc2VydEVxdWFscyk6CisgICAgICAgIChhc3NlcnRO
b3RFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0VHJ1ZSk6CisgICAgICAgIChhc3NlcnRGYWxzZSk6
CisgICAgICAgIChhc3NlcnRUaHJvd3MpOgorCiAyMDIwLTA3LTExICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgSW50bC5Mb2NhbGUgbWF4aW1pemUsIG1pbmlt
aXplIHNob3VsZCByZXR1cm4gSW50bC5Mb2NhbGUgaW5zdGVhZCBvZiBTdHJpbmcKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255LmpzIGIvSlNUZXN0cy9zdHJl
c3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanMKaW5kZXggZGJmNDZkNTI3YjFlLi4wNjk2ODQ5ZWU2
Y2UgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255LmpzCisr
KyBiL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255LmpzCkBAIC0zMSwxNzAgKzMx
LDcgQEAKIAogInVzZSBzdHJpY3QiOwogCi1mdW5jdGlvbiBjbGFzc09mKG9iamVjdCkgewotICAg
Ly8gQXJndW1lbnQgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuCi0gICB2YXIgc3RyaW5n
ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCk7Ci0gICAvLyBTdHJpbmcg
aGFzIGZvcm1hdCBbb2JqZWN0IDxDbGFzc05hbWU+XS4KLSAgIHJldHVybiBzdHJpbmcuc3Vic3Ry
aW5nKDgsIHN0cmluZy5sZW5ndGggLSAxKTsKLX0KLQotLyoqCi0gKiBDb21wYXJlcyB0d28gb2Jq
ZWN0cyBmb3Iga2V5L3ZhbHVlIGVxdWFsaXR5LgotICogUmV0dXJucyB0cnVlIGlmIHRoZXkgYXJl
IGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCi0gKi8KLWZ1bmN0aW9uIGRlZXBPYmplY3RFcXVhbHMo
YSwgYikgewotICB2YXIgYVByb3BzID0gT2JqZWN0LmtleXMoYSk7Ci0gIGFQcm9wcy5zb3J0KCk7
Ci0gIHZhciBiUHJvcHMgPSBPYmplY3Qua2V5cyhiKTsKLSAgYlByb3BzLnNvcnQoKTsKLSAgaWYg
KCFkZWVwRXF1YWxzKGFQcm9wcywgYlByb3BzKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
ICBmb3IgKHZhciBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykgewotICAgIGlmICghZGVl
cEVxdWFscyhhW2FQcm9wc1tpXV0sIGJbYVByb3BzW2ldXSkpIHsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qKgotICogQ29tcGFyZXMgdHdv
IEphdmFTY3JpcHQgdmFsdWVzIGZvciB0eXBlIGFuZCB2YWx1ZSBlcXVhbGl0eS4KLSAqIEl0IGNo
ZWNrcyBpbnRlcm5hbHMgb2YgYXJyYXlzIGFuZCBvYmplY3RzLgotICovCi1mdW5jdGlvbiBkZWVw
RXF1YWxzKGEsIGIpIHsKLSAgaWYgKGEgPT09IGIpIHsKLSAgICAvLyBDaGVjayBmb3IgLTAuCi0g
ICAgaWYgKGEgPT09IDApIHJldHVybiAoMSAvIGEpID09PSAoMSAvIGIpOwotICAgIHJldHVybiB0
cnVlOwotICB9Ci0gIGlmICh0eXBlb2YgYSAhPSB0eXBlb2YgYikgcmV0dXJuIGZhbHNlOwotICBp
ZiAodHlwZW9mIGEgPT0gJ251bWJlcicpIHJldHVybiBpc05hTihhKSAmJiBpc05hTihiKTsKLSAg
aWYgKHR5cGVvZiBhICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYSAhPT0gJ2Z1bmN0aW9uJykgcmV0
dXJuIGZhbHNlOwotICAvLyBOZWl0aGVyIGEgbm9yIGIgaXMgcHJpbWl0aXZlLgotICB2YXIgb2Jq
ZWN0Q2xhc3MgPSBjbGFzc09mKGEpOwotICBpZiAob2JqZWN0Q2xhc3MgIT09IGNsYXNzT2YoYikp
IHJldHVybiBmYWxzZTsKLSAgaWYgKG9iamVjdENsYXNzID09PSAnUmVnRXhwJykgewotICAgIC8v
IEZvciBSZWdFeHAsIGp1c3QgY29tcGFyZSBwYXR0ZXJuIGFuZCBmbGFncyB1c2luZyBpdHMgdG9T
dHJpbmcuCi0gICAgcmV0dXJuIChhLnRvU3RyaW5nKCkgPT09IGIudG9TdHJpbmcoKSk7Ci0gIH0K
LSAgLy8gRnVuY3Rpb25zIGFyZSBvbmx5IGlkZW50aWNhbCB0byB0aGVtc2VsdmVzLgotICBpZiAo
b2JqZWN0Q2xhc3MgPT09ICdGdW5jdGlvbicpIHJldHVybiBmYWxzZTsKLSAgaWYgKG9iamVjdENs
YXNzID09PSAnQXJyYXknKSB7Ci0gICAgdmFyIGVsZW1lbnRDb3VudCA9IDA7Ci0gICAgaWYgKGEu
bGVuZ3RoICE9IGIubGVuZ3RoKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKCFkZWVwRXF1YWxz
KGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9
Ci0gIGlmIChvYmplY3RDbGFzcyA9PSAnU3RyaW5nJyB8fCBvYmplY3RDbGFzcyA9PSAnTnVtYmVy
JyB8fAotICAgICAgb2JqZWN0Q2xhc3MgPT0gJ0Jvb2xlYW4nIHx8IG9iamVjdENsYXNzID09ICdE
YXRlJykgewotICAgIGlmIChhLnZhbHVlT2YoKSAhPT0gYi52YWx1ZU9mKCkpIHJldHVybiBmYWxz
ZTsKLSAgfQotICByZXR1cm4gZGVlcE9iamVjdEVxdWFscyhhLCBiKTsKLX0KLQotLyoqCi0gKiBU
aHJvd3MgYW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgdGhlIHVzZXJfbWVzc2FnZSAoaWYgYW55KSBh
bmQgdGhlIHZhbHVlcy4KLSAqLwotZnVuY3Rpb24gZmFpbChleHBlY3RlZCwgZm91bmQsIHVzZXJf
bWVzc2FnZSA9ICcnKSB7Ci0gIC8vIFRPRE8oY2lyYSk6IFJlcGxhY2UgU3RyaW5nIHdpdGggUHJl
dHR5UHJpbnQgZm9yIG9iamVjdHMgYW5kIGFycmF5cy4KLSAgdmFyIG1lc3NhZ2UgPSAnRmFpbHVy
ZScgKyAodXNlcl9tZXNzYWdlID8gJyAoJyArIHVzZXJfbWVzc2FnZSArICcpJyA6ICcnKSArCi0g
ICAgICAnOiBleHBlY3RlZCA8JyArIFN0cmluZyhleHBlY3RlZCkgKyAnPiwgZm91bmQgPCcgKyBT
dHJpbmcoZm91bmQpICsgJz4uJzsKLSAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpOwotfQotCi0v
KioKLSAqIFRocm93cyBpZiBvYmogaXMgbm90IG9mIGdpdmVuIHR5cGUuCi0gKi8KLWZ1bmN0aW9u
IGFzc2VydEluc3RhbmNlb2Yob2JqLCB0eXBlKSB7Ci0gIGlmICghKG9iaiBpbnN0YW5jZW9mIHR5
cGUpKSB7Ci0gICAgdmFyIGFjdHVhbFR5cGVOYW1lID0gbnVsbDsKLSAgICB2YXIgYWN0dWFsQ29u
c3RydWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKS5jb25zdHJ1Y3RvcjsKLSAgICBp
ZiAodHlwZW9mIGFjdHVhbENvbnN0cnVjdG9yID09ICJmdW5jdGlvbiIpIHsKLSAgICAgIGFjdHVh
bFR5cGVOYW1lID0gYWN0dWFsQ29uc3RydWN0b3IubmFtZSB8fCBTdHJpbmcoYWN0dWFsQ29uc3Ry
dWN0b3IpOwotICAgIH0KLSAgICB0aHJvdyBuZXcgRXJyb3IoJ09iamVjdCA8JyArIG9iaiArICc+
IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiA8JyArCi0gICAgICAgICAgICAgICAgICAgICh0eXBlLm5h
bWUgfHwgdHlwZSkgKyAnPicgKwotICAgICAgICAgICAgICAgICAgICAoYWN0dWFsVHlwZU5hbWUg
PyAnIGJ1dCBvZiA8ICcgKyBhY3R1YWxUeXBlTmFtZSArICc+JyA6ICcnKSk7Ci0gIH0KLX0KLQot
LyoqCi0gKiBUaHJvd3MgaWYgb2JqIGlzIG5vdCB0aGUgc2FtZSBhcyBleHBlY3RlZC4KLSAqLwot
ZnVuY3Rpb24gYXNzZXJ0U2FtZShleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7Ci0gIGlmIChm
b3VuZCA9PT0gZXhwZWN0ZWQpIHsKLSAgICBpZiAoZXhwZWN0ZWQgIT09IDAgfHwgKDEgLyBleHBl
Y3RlZCkgPT09ICgxIC8gZm91bmQpKQotICAgICAgcmV0dXJuOwotICB9IGVsc2UgaWYgKChleHBl
Y3RlZCAhPT0gZXhwZWN0ZWQpICYmIChmb3VuZCAhPT0gZm91bmQpKSB7Ci0gICAgICByZXR1cm47
Ci0gIH0KLSAgZmFpbChleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KTsKLX0KLQotLyoqCi0gKiBU
aHJvd3MgaWYgdHdvIHZhcmlhYmxlcyBoYXZlIGRpZmZlcmVudCB0eXBlcyBvciB2YWx1ZXMuCi0g
Ki8KLQotZnVuY3Rpb24gYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdl
ID0gJycpIHsKLSAgaWYgKCFkZWVwRXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsKLSAgICBmYWls
KGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlKTsKLSAgfQotfQotCi0vKioKLSAqIFRocm93
cyBpZiB0d28gdmFyaWFibGVzIGhhdmUgZXF1YWwgdHlwZXMgb3IgdmFsdWVzLgotICovCi0KLWZ1
bmN0aW9uIGFzc2VydE5vdEVxdWFscyhleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSA9ICcn
KSB7Ci0gIGlmIChkZWVwRXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsKLSAgICBmYWlsKGV4cGVj
dGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlKTsKLSAgfQotfQotCi0vKioKLSAqIFRocm93cyBpZiB2
YWx1ZSBpcyBmYWxzZS4KLSAqLwotZnVuY3Rpb24gYXNzZXJ0VHJ1ZSh2YWx1ZSwgdXNlcl9tZXNz
YWdlID0gJycpIHsKLSAgYXNzZXJ0RXF1YWxzKHRydWUsIHZhbHVlLCB1c2VyX21lc3NhZ2UpOwot
fQotCi0KLS8qKgotICogVGhyb3dzIGlmIHZhbHVlIGlzIHRydWUuCi0gKi8KLWZ1bmN0aW9uIGFz
c2VydEZhbHNlKHZhbHVlLCB1c2VyX21lc3NhZ2UgPSAnJykgewotICBhc3NlcnRFcXVhbHMoZmFs
c2UsIHZhbHVlLCB1c2VyX21lc3NhZ2UpOwotfQotCi0vKioKLSAqIFJ1bnMgY29kZSgpIGFuZCBh
c3NlcnRzIHRoYXQgaXQgdGhyb3dzIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uLgotICovCi1mdW5j
dGlvbiBhc3NlcnRUaHJvd3MoY29kZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgewotICB0cnkgewot
ICAgIGlmICh0eXBlb2YgY29kZSA9PSAnZnVuY3Rpb24nKSB7Ci0gICAgICBjb2RlKCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIGV2YWwoY29kZSk7Ci0gICAgfQotICB9IGNhdGNoIChlKSB7Ci0gICAg
aWYgKHR5cGVvZiB0eXBlX29wdCA9PSAnZnVuY3Rpb24nKSB7Ci0gICAgICBhc3NlcnRJbnN0YW5j
ZW9mKGUsIHR5cGVfb3B0KTsKLSAgICB9Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykg
ewotICAgICAgYXNzZXJ0RXF1YWxzKGNhdXNlX29wdCwgZS50eXBlLCAndGhyb3duIGV4Y2VwdGlv
biB0eXBlIG1pc21hdGNoJyk7Ci0gICAgfQotICAgIC8vIFN1Y2Nlc3MuCi0gICAgcmV0dXJuOwot
ICB9Ci0gIHZhciBleHBlY3RlZCA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMyA/IGNhdXNlX29wdCA6
Ci0gICAgICB0eXBlb2YgdHlwZV9vcHQgPT0gJ2Z1bmN0aW9uJyA/IHR5cGVfb3B0IDogJ2FueSBl
eGNlcHRpb24nOwotICBmYWlsKGV4cGVjdGVkLCAnbm8gZXhjZXB0aW9uJywgJ2V4cGVjdGVkIHRo
cm93biBleGNlcHRpb24nKTsKLX0KK2xvYWQoIi4vaGFybW9ueS1zdXBwb3J0LmpzIik7CiAKIHsK
ICAgY2xhc3MgQyB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtc3Rh
dGljLWhhcm1vbnkuanMgYi9KU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtc3RhdGljLWhhcm1v
bnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45ODY3NGI1MWY5
YTIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtc3RhdGlj
LWhhcm1vbnkuanMKQEAgLTAsMCArMSw1MDMgQEAKKy8vQCByZXF1aXJlT3B0aW9ucygiLS11c2VQ
dWJsaWNDbGFzc0ZpZWxkcz0xIikKKy8vQCBkZWZhdWx0Tm9FYWdlclJ1bgorCisvLyBDb3B5cmln
aHQgMjAxNyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAg
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyJ1c2Ugc3RyaWN0IjsKKworbG9hZCgiLi9oYXJtb255LXN1cHBvcnQuanMi
KTsKKworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYTsKKyAgfQorCisgIGFzc2VydEVxdWFs
cyh1bmRlZmluZWQsIEMuYSk7CisgIGxldCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihDLCAnYScpOworICBhc3NlcnRUcnVlKEMuaGFzT3duUHJvcGVydHkoJ2En
KSk7CisgIGFzc2VydFRydWUoZGVzY3JpcHRvci53cml0YWJsZSk7CisgIGFzc2VydFRydWUoZGVz
Y3JpcHRvci5lbnVtZXJhYmxlKTsKKyAgYXNzZXJ0VHJ1ZShkZXNjcmlwdG9yLmNvbmZpZ3VyYWJs
ZSk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5hKTsK
K30KKworeworICBsZXQgeCA9ICdhJzsKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGE7CisgICAg
c3RhdGljIGhhc093blByb3BlcnR5ID0gZnVuY3Rpb24oKSB7IHJldHVybiAxOyB9CisgICAgc3Rh
dGljIGIgPSB4OworICAgIHN0YXRpYyBjID0gMTsKKyAgfQorCisgIGFzc2VydEVxdWFscyh1bmRl
ZmluZWQsIEMuYSk7CisgIGFzc2VydEVxdWFscygnYScsIEMuYik7CisgIGFzc2VydEVxdWFscygx
LCBDLmMpOworICBhc3NlcnRFcXVhbHMoMSwgQy5oYXNPd25Qcm9wZXJ0eSgpKTsKKworICBsZXQg
YyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmEpOworICBhc3NlcnRFcXVh
bHModW5kZWZpbmVkLCBjLmIpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmMpOworfQor
Cit7CisgIGFzc2VydFRocm93cygoKSA9PiB7CisgICAgY2xhc3MgQyB7CisgICAgICBzdGF0aWMg
eCA9IE9iamVjdC5mcmVlemUodGhpcyk7CisgICAgICBzdGF0aWMgYyA9IDQyOworICAgIH0KKyAg
fSwgVHlwZUVycm9yKTsKK30KKworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYyA9IHRoaXM7
CisgICAgc3RhdGljIGQgPSAoKSA9PiB0aGlzOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKEMsIEMu
Yyk7CisgIGFzc2VydEVxdWFscyhDLCBDLmQoKSk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNz
ZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5jKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5k
KTsKK30KKworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYyA9IDE7CisgICAgc3RhdGljIGQg
PSB0aGlzLmM7CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwgQy5jKTsKKyAgYXNzZXJ0RXF1YWxz
KDEsIEMuZCk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwg
Yy5jKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5kKTsKK30KKworeworICBjbGFzcyBD
IHsKKyAgICBzdGF0aWMgYiA9IDE7CisgICAgc3RhdGljIGMgPSAoKSA9PiB0aGlzLmI7CisgIH0K
KworICBhc3NlcnRFcXVhbHMoMSwgQy5iKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYygpKTsKKwor
ICBsZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmMpOworfQorCit7
CisgIGxldCB4ID0gJ2EnOworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYiA9IDE7CisgICAgc3Rh
dGljIGMgPSAoKSA9PiB0aGlzLmI7CisgICAgc3RhdGljIGUgPSAoKSA9PiB4OworICB9CisKKyAg
YXNzZXJ0RXF1YWxzKDEsIEMuYik7CisgIGFzc2VydEVxdWFscygnYScsIEMuZSgpKTsKKworICBs
ZXQgYSA9IHtiIDogMiB9OworICBhc3NlcnRFcXVhbHMoMSwgQy5jLmNhbGwoYSkpOworCisgIGxl
dCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYik7CisgIGFzc2VydEVx
dWFscyh1bmRlZmluZWQsIGMuYyk7Cit9CisKK3sKKyAgbGV0IHggPSAnYSc7CisgIGNsYXNzIEMg
eworICAgIHN0YXRpYyBjID0gMTsKKyAgICBzdGF0aWMgZCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4g
dGhpcy5jOyB9OworICAgIHN0YXRpYyBlID0gZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9OworICB9
CisKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYyk7CisgIGFzc2VydEVxdWFscygxLCBDLmQoKSk7Cisg
IGFzc2VydEVxdWFscygnYScsIEMuZSgpKTsKKworICBDLmMgPSAyOworICBhc3NlcnRFcXVhbHMo
MiwgQy5kKCkpOworCisgIGxldCBhID0ge2MgOiAzIH07CisgIGFzc2VydEVxdWFscygzLCBDLmQu
Y2FsbChhKSk7CisKKyAgYXNzZXJ0VGhyb3dzKEMuZC5iaW5kKHVuZGVmaW5lZCkpOworCisgIGxl
dCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYyk7CisgIGFzc2VydEVx
dWFscyh1bmRlZmluZWQsIGMuZCk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuZSk7Cit9
CisKK3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDEg
fTsKKyAgfQorCisgIGFzc2VydEVxdWFscygnYycsIEMuYy5uYW1lKTsKK30KKworeworICBsZXQg
ZCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3LnRhcmdldDsgfQorICBjbGFzcyBDIHsKKyAgICBz
dGF0aWMgYyA9IGQ7CisgIH0KKworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmMoKSk7Cisg
IGFzc2VydEVxdWFscyhuZXcgZCwgbmV3IEMuYygpKTsKK30KKworeworICBjbGFzcyBDIHsKKyAg
ICBzdGF0aWMgYyA9ICgpID0+IG5ldy50YXJnZXQ7CisgIH0KKworICBhc3NlcnRFcXVhbHModW5k
ZWZpbmVkLCBDLmMoKSk7Cit9CisKK3sKKyAgIGNsYXNzIEMgeworICAgICBzdGF0aWMgYyA9ICgp
ID0+IHsKKyAgICAgICBsZXQgYjsKKyAgICAgICBjbGFzcyBBIHsKKyAgICAgICAgIGNvbnN0cnVj
dG9yKCkgeworICAgICAgICAgICBiID0gbmV3LnRhcmdldDsKKyAgICAgICAgIH0KKyAgICAgICB9
OworICAgICAgIG5ldyBBOworICAgICAgIGFzc2VydEVxdWFscyhBLCBiKTsKKyAgICAgfQorICB9
CisKKyAgQy5jKCk7Cit9CisKK3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSBuZXcudGFy
Z2V0OworICB9CisKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5jKTsKK30KKworeworICBj
bGFzcyBCIHsKKyAgICBzdGF0aWMgZCA9IDE7CisgICAgc3RhdGljIGIgPSAoKSA9PiB0aGlzLmQ7
CisgIH0KKworICBjbGFzcyBDIGV4dGVuZHMgQiB7CisgICAgc3RhdGljIGMgPSBzdXBlci5kOwor
ICAgIHN0YXRpYyBkID0gKCkgPT4gc3VwZXIuZDsKKyAgICBzdGF0aWMgZSA9ICgpID0+IHN1cGVy
LmIoKTsKKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBDLmMpOworICBhc3NlcnRFcXVhbHMoMSwg
Qy5kKCkpOworICBhc3NlcnRFcXVhbHMoMSwgQy5lKCkpOworfQorCit7CisgIGxldCBmb28gPSB1
bmRlZmluZWQ7CisgIGNsYXNzIEIgeworICAgIHN0YXRpYyBzZXQgZCh4KSB7CisgICAgICBmb28g
PSB4OworICAgIH0KKyAgfQorCisgIGNsYXNzIEMgZXh0ZW5kcyBCIHsKKyAgICBzdGF0aWMgZCA9
IDI7CisgIH0KKworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBmb28pOworICBhc3NlcnRFcXVh
bHMoMiwgQy5kKTsKK30KKworCit7CisgIGxldCBDICA9IGNsYXNzIHsKKyAgICBzdGF0aWMgYzsK
KyAgfTsKKworICBhc3NlcnRFcXVhbHMoIkMiLCBDLm5hbWUpOworfQorCit7CisgIGNsYXNzIEMg
eworICAgIHN0YXRpYyBjID0gbmV3IEM7CisgIH0KKworICBhc3NlcnRUcnVlKEMuYyBpbnN0YW5j
ZW9mIEMpOworfQorCisoZnVuY3Rpb24gdGVzdCgpIHsKKyAgZnVuY3Rpb24gbWFrZUMoKSB7Cisg
ICAgdmFyIHggPSAxOworCisgICAgcmV0dXJuIGNsYXNzIHsKKyAgICAgIHN0YXRpYyBhID0gKCkg
PT4gKCkgPT4geDsKKyAgICB9CisgIH0KKworICBsZXQgQyA9IG1ha2VDKCk7CisgIGxldCBmID0g
Qy5hKCk7CisgIGFzc2VydEVxdWFscygxLCBmKCkpOworfSkoKQorCit7CisgIGxldCBjID0gImMi
OworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgWyJhIl0gPSAxOworICAgIHN0YXRpYyBbImIiXTsK
KyAgICBzdGF0aWMgW2NdOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYSk7CisgIGFzc2Vy
dEVxdWFscyh1bmRlZmluZWQsIEMuYik7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIENbY10p
OworfQorCit7CisgIGxldCBsb2cgPSBbXTsKKyAgZnVuY3Rpb24gcnVuKGkpIHsKKyAgICBsb2cu
cHVzaChpKTsKKyAgICByZXR1cm4gaTsKKyAgfQorCisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBb
cnVuKDEpXSA9IHJ1big2KTsKKyAgICBzdGF0aWMgW3J1bigyKV0gPSBydW4oNyk7CisgICAgW3J1
bigzKV0oKSB7IHJ1big5KTt9CisgICAgc3RhdGljIFtydW4oNCldID0gcnVuKDgpOworICAgIHN0
YXRpYyBbcnVuKDUpXSgpIHsgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgbm90IGV4ZWN1dGUnKTt9
OworICB9CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgY1szXSgpOworICBhc3NlcnRFcXVhbHMoWzEs
IDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldLCBsb2cpOworfQorCisKKworZnVuY3Rpb24geCgpIHsK
KworICAvLyBUaGlzIHRlc3RzIGxhenkgcGFyc2luZy4KKyAgcmV0dXJuIGZ1bmN0aW9uKCkgewor
ICAgIGxldCBsb2cgPSBbXTsKKyAgICBmdW5jdGlvbiBydW4oaSkgeworICAgICAgbG9nLnB1c2go
aSk7CisgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICBjbGFzcyBDIHsKKyAgICAgIHN0YXRp
YyBbcnVuKDEpXSA9IHJ1big2KTsKKyAgICAgIHN0YXRpYyBbcnVuKDIpXSA9IHJ1big3KTsKKyAg
ICAgIFtydW4oMyldKCkgeyBydW4oOSk7fQorICAgICAgc3RhdGljIFtydW4oNCldID0gcnVuKDgp
OworICAgICAgc3RhdGljIFtydW4oNSldKCkgeyB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3Qg
ZXhlY3V0ZScpO307CisgICAgfQorCisgICAgbGV0IGMgPSBuZXcgQzsKKyAgICBjWzNdKCk7Cisg
ICAgYXNzZXJ0RXF1YWxzKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XSwgbG9nKTsKKyAgfQor
fQoreCgpKCk7CisKK3sKKyAgbGV0IGxvZyA9IFtdOworICBmdW5jdGlvbiBydW4oaSkgeworICAg
IGxvZy5wdXNoKGkpOworICAgIHJldHVybiBpOworICB9CisKKyAgY2xhc3MgQyB7CisgICAgW3J1
bigxKV0gPSBydW4oNyk7CisgICAgW3J1bigyKV0gPSBydW4oOCk7CisgICAgW3J1bigzKV0oKSB7
IHJ1big5KTt9CisgICAgc3RhdGljIFtydW4oNCldID0gcnVuKDYpOworICAgIFtydW4oNSldKCkg
eyB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgZXhlY3V0ZScpO307CisgIH0KKworICBsZXQg
YyA9IG5ldyBDOworICBjWzNdKCk7CisgIGFzc2VydEVxdWFscyhbMSwgMiwgMywgNCwgNSwgNiwg
NywgOCwgOV0sIGxvZyk7Cit9CisKK2Z1bmN0aW9uIHkoKSB7CisgIC8vIFRoaXMgdGVzdHMgbGF6
eSBwYXJzaW5nLgorICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgbGV0IGxvZyA9IFtdOworICAg
IGZ1bmN0aW9uIHJ1bihpKSB7CisgICAgICBsb2cucHVzaChpKTsKKyAgICAgIHJldHVybiBpOwor
ICAgIH0KKworICAgIGNsYXNzIEMgeworICAgICAgW3J1bigxKV0gPSBydW4oNyk7CisgICAgICBb
cnVuKDIpXSA9IHJ1big4KTsKKyAgICAgIFtydW4oMyldKCkgeyBydW4oOSk7fQorICAgICAgc3Rh
dGljIFtydW4oNCldID0gcnVuKDYpOworICAgICAgW3J1big1KV0oKSB7IHRocm93IG5ldyBFcnJv
cignc2hvdWxkIG5vdCBleGVjdXRlJyk7fTsKKyAgICB9CisKKyAgICBsZXQgYyA9IG5ldyBDOwor
ICAgIGNbM10oKTsKKyAgICBhc3NlcnRFcXVhbHMoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDld
LCBsb2cpOworICB9Cit9Cit5KCkoKTsKKworeworICBjbGFzcyBDIHt9CisgIGNsYXNzIEQgewor
ICAgIHN0YXRpYyBbQ107CisgIH0KKworICBhc3NlcnRUaHJvd3MoKCkgPT4geyBjbGFzcyBYIHsg
c3RhdGljIFtYXSB9IH0pOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBEW0NdKTsKK30KKwor
eworICBmdW5jdGlvbiB0KCkgeworICAgIHJldHVybiBjbGFzcyB7CisgICAgICBzdGF0aWMgWyd4
J10gPSAyOworICAgIH0KKyAgfQorCisgIGxldCBrbGFzcyA9IHQoKTsKKyAgbGV0IG9iaiA9IG5l
dyBrbGFzczsKKyAgYXNzZXJ0RXF1YWxzKDIsIGtsYXNzLngpOworfQorCit7CisgIGxldCB4ID0g
J2EnOworICBjbGFzcyBDIHsKKyAgICBhOworICAgIGIgPSB4OworICAgIGMgPSAxOworICAgIGhh
c093blByb3BlcnR5KCkgeyByZXR1cm4gMTt9CisgICAgc3RhdGljIFt4XSA9IDI7CisgICAgc3Rh
dGljIGIgPSAzOworICAgIHN0YXRpYyBkOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKDIsIEMuYSk7
CisgIGFzc2VydEVxdWFscygzLCBDLmIpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmQp
OworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmMpOworCisgIGxldCBjID0gbmV3IEM7Cisg
IGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYSk7CisgIGFzc2VydEVxdWFscygnYScsIGMuYik7
CisgIGFzc2VydEVxdWFscygxLCBjLmMpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmQp
OworICBhc3NlcnRFcXVhbHMoMSwgYy5oYXNPd25Qcm9wZXJ0eSgpKTsKK30KKworeworICBmdW5j
dGlvbiB0KCkgeworICAgIHJldHVybiBjbGFzcyB7CisgICAgICBbJ3gnXSA9IDE7CisgICAgICBz
dGF0aWMgWyd4J10gPSAyOworICAgIH0KKyAgfQorCisgIGxldCBrbGFzcyA9IHQoKTsKKyAgbGV0
IG9iaiA9IG5ldyBrbGFzczsKKyAgYXNzZXJ0RXF1YWxzKDEsIG9iai54KTsKKyAgYXNzZXJ0RXF1
YWxzKDIsIGtsYXNzLngpOworfQorCisKK3sKKyAgY2xhc3MgWCB7CisgICAgc3RhdGljIHAgPSBm
dW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50c1swXTsgfQorICB9CisKKyAgYXNzZXJ0RXF1YWxz
KDEsIFgucCgxKSk7Cit9CisKK3sKKyAgY2xhc3MgWCB7CisgICAgc3RhdGljIHQgPSAoKSA9PiB7
CisgICAgICBmdW5jdGlvbiBwKCkgeyByZXR1cm4gYXJndW1lbnRzWzBdOyB9OworICAgICAgcmV0
dXJuIHA7CisgICAgfQorICB9CisKKyAgbGV0IHAgPSBYLnQoKTsKKyAgYXNzZXJ0RXF1YWxzKDEs
IHAoMSkpOworfQorCit7CisgIGNsYXNzIFggeworICAgIHN0YXRpYyB0ID0gKCkgPT4geworICAg
ICAgZnVuY3Rpb24gcCgpIHsgcmV0dXJuIGV2YWwoImFyZ3VtZW50c1swXSIpOyB9OworICAgICAg
cmV0dXJuIHA7CisgICAgfQorICB9CisKKyAgbGV0IHAgPSBYLnQoKTsKKyAgYXNzZXJ0RXF1YWxz
KDEsIHAoMSkpOworfQorCit7CisgIGNsYXNzIFggeworICAgIHN0YXRpYyBwID0gZXZhbCgiKGZ1
bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzWzBdOyB9KSgxKSIpOworICB9CisKKyAgYXNzZXJ0
RXF1YWxzKDEsIFgucCk7Cit9CisKKy8qCit7CisgIGxldCBwID0geyB6OiBjbGFzcyB7IHN0YXRp
YyB5ID0gdGhpcy5uYW1lIH0gfQorICBhc3NlcnRFcXVhbHMocC56LnksICd6Jyk7CisKKyAgbGV0
IHEgPSB7IFsieiJdOiBjbGFzcyB7IHN0YXRpYyB5ID0gdGhpcy5uYW1lIH0gfQorICBhc3NlcnRF
cXVhbHMocS56LnksICd6Jyk7CisKKyAgY29uc3QgQyA9IGNsYXNzIHsKKyAgICBzdGF0aWMgeCA9
IHRoaXMubmFtZTsKKyAgfQorICBhc3NlcnRFcXVhbHMoQy54LCAnQycpOworfQorKi8KZGlmZiAt
LWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hhcm1vbnktc3VwcG9ydC5qcyBiL0pTVGVzdHMvc3RyZXNz
L2hhcm1vbnktc3VwcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLjAyNGIzYjA4ODllMQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2hhcm1v
bnktc3VwcG9ydC5qcwpAQCAtMCwwICsxLDE5NiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisi
dXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGNsYXNzT2Yob2JqZWN0KSB7CisgICAvLyBBcmd1bWVu
dCBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4KKyAgIHZhciBzdHJpbmcgPSBPYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTsKKyAgIC8vIFN0cmluZyBoYXMgZm9ybWF0
IFtvYmplY3QgPENsYXNzTmFtZT5dLgorICAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoOCwgc3Ry
aW5nLmxlbmd0aCAtIDEpOworfQorCisvKioKKyAqIENvbXBhcmVzIHR3byBvYmplY3RzIGZvciBr
ZXkvdmFsdWUgZXF1YWxpdHkuCisgKiBSZXR1cm5zIHRydWUgaWYgdGhleSBhcmUgZXF1YWwsIGZh
bHNlIG90aGVyd2lzZS4KKyAqLworZnVuY3Rpb24gZGVlcE9iamVjdEVxdWFscyhhLCBiKSB7Cisg
IHZhciBhUHJvcHMgPSBPYmplY3Qua2V5cyhhKTsKKyAgYVByb3BzLnNvcnQoKTsKKyAgdmFyIGJQ
cm9wcyA9IE9iamVjdC5rZXlzKGIpOworICBiUHJvcHMuc29ydCgpOworICBpZiAoIWRlZXBFcXVh
bHMoYVByb3BzLCBiUHJvcHMpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGZvciAodmFy
IGkgPSAwOyBpIDwgYVByb3BzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKCFkZWVwRXF1YWxzKGFb
YVByb3BzW2ldXSwgYlthUHJvcHNbaV1dKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBDb21wYXJlcyB0d28gSmF2YVNjcmlw
dCB2YWx1ZXMgZm9yIHR5cGUgYW5kIHZhbHVlIGVxdWFsaXR5LgorICogSXQgY2hlY2tzIGludGVy
bmFscyBvZiBhcnJheXMgYW5kIG9iamVjdHMuCisgKi8KK2Z1bmN0aW9uIGRlZXBFcXVhbHMoYSwg
YikgeworICBpZiAoYSA9PT0gYikgeworICAgIC8vIENoZWNrIGZvciAtMC4KKyAgICBpZiAoYSA9
PT0gMCkgcmV0dXJuICgxIC8gYSkgPT09ICgxIC8gYik7CisgICAgcmV0dXJuIHRydWU7CisgIH0K
KyAgaWYgKHR5cGVvZiBhICE9IHR5cGVvZiBiKSByZXR1cm4gZmFsc2U7CisgIGlmICh0eXBlb2Yg
YSA9PSAnbnVtYmVyJykgcmV0dXJuIGlzTmFOKGEpICYmIGlzTmFOKGIpOworICBpZiAodHlwZW9m
IGEgIT09ICdvYmplY3QnICYmIHR5cGVvZiBhICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7
CisgIC8vIE5laXRoZXIgYSBub3IgYiBpcyBwcmltaXRpdmUuCisgIHZhciBvYmplY3RDbGFzcyA9
IGNsYXNzT2YoYSk7CisgIGlmIChvYmplY3RDbGFzcyAhPT0gY2xhc3NPZihiKSkgcmV0dXJuIGZh
bHNlOworICBpZiAob2JqZWN0Q2xhc3MgPT09ICdSZWdFeHAnKSB7CisgICAgLy8gRm9yIFJlZ0V4
cCwganVzdCBjb21wYXJlIHBhdHRlcm4gYW5kIGZsYWdzIHVzaW5nIGl0cyB0b1N0cmluZy4KKyAg
ICByZXR1cm4gKGEudG9TdHJpbmcoKSA9PT0gYi50b1N0cmluZygpKTsKKyAgfQorICAvLyBGdW5j
dGlvbnMgYXJlIG9ubHkgaWRlbnRpY2FsIHRvIHRoZW1zZWx2ZXMuCisgIGlmIChvYmplY3RDbGFz
cyA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlOworICBpZiAob2JqZWN0Q2xhc3MgPT09ICdB
cnJheScpIHsKKyAgICB2YXIgZWxlbWVudENvdW50ID0gMDsKKyAgICBpZiAoYS5sZW5ndGggIT0g
Yi5sZW5ndGgpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAoIWRlZXBFcXVhbHMoYVtpXSwgYltp
XSkpIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgaWYgKG9i
amVjdENsYXNzID09ICdTdHJpbmcnIHx8IG9iamVjdENsYXNzID09ICdOdW1iZXInIHx8CisgICAg
ICBvYmplY3RDbGFzcyA9PSAnQm9vbGVhbicgfHwgb2JqZWN0Q2xhc3MgPT0gJ0RhdGUnKSB7Cisg
ICAgaWYgKGEudmFsdWVPZigpICE9PSBiLnZhbHVlT2YoKSkgcmV0dXJuIGZhbHNlOworICB9Cisg
IHJldHVybiBkZWVwT2JqZWN0RXF1YWxzKGEsIGIpOworfQorCisvKioKKyAqIFRocm93cyBhbiBl
eGNlcHRpb24gY29udGFpbmluZyB0aGUgdXNlcl9tZXNzYWdlIChpZiBhbnkpIGFuZCB0aGUgdmFs
dWVzLgorICovCitmdW5jdGlvbiBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlID0g
JycpIHsKKyAgLy8gVE9ETyhjaXJhKTogUmVwbGFjZSBTdHJpbmcgd2l0aCBQcmV0dHlQcmludCBm
b3Igb2JqZWN0cyBhbmQgYXJyYXlzLgorICB2YXIgbWVzc2FnZSA9ICdGYWlsdXJlJyArICh1c2Vy
X21lc3NhZ2UgPyAnICgnICsgdXNlcl9tZXNzYWdlICsgJyknIDogJycpICsKKyAgICAgICc6IGV4
cGVjdGVkIDwnICsgU3RyaW5nKGV4cGVjdGVkKSArICc+LCBmb3VuZCA8JyArIFN0cmluZyhmb3Vu
ZCkgKyAnPi4nOworICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7Cit9CisKKy8qKgorICogVGhy
b3dzIGlmIG9iaiBpcyBub3Qgb2YgZ2l2ZW4gdHlwZS4KKyAqLworZnVuY3Rpb24gYXNzZXJ0SW5z
dGFuY2VvZihvYmosIHR5cGUpIHsKKyAgaWYgKCEob2JqIGluc3RhbmNlb2YgdHlwZSkpIHsKKyAg
ICB2YXIgYWN0dWFsVHlwZU5hbWUgPSBudWxsOworICAgIHZhciBhY3R1YWxDb25zdHJ1Y3RvciA9
IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopLmNvbnN0cnVjdG9yOworICAgIGlmICh0eXBlb2Yg
YWN0dWFsQ29uc3RydWN0b3IgPT0gImZ1bmN0aW9uIikgeworICAgICAgYWN0dWFsVHlwZU5hbWUg
PSBhY3R1YWxDb25zdHJ1Y3Rvci5uYW1lIHx8IFN0cmluZyhhY3R1YWxDb25zdHJ1Y3Rvcik7Cisg
ICAgfQorICAgIHRocm93IG5ldyBFcnJvcignT2JqZWN0IDwnICsgb2JqICsgJz4gaXMgbm90IGFu
IGluc3RhbmNlIG9mIDwnICsKKyAgICAgICAgICAgICAgICAgICAgKHR5cGUubmFtZSB8fCB0eXBl
KSArICc+JyArCisgICAgICAgICAgICAgICAgICAgIChhY3R1YWxUeXBlTmFtZSA/ICcgYnV0IG9m
IDwgJyArIGFjdHVhbFR5cGVOYW1lICsgJz4nIDogJycpKTsKKyAgfQorfQorCisvKioKKyAqIFRo
cm93cyBpZiBvYmogaXMgbm90IHRoZSBzYW1lIGFzIGV4cGVjdGVkLgorICovCitmdW5jdGlvbiBh
c3NlcnRTYW1lKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgaWYgKGZvdW5kID09PSBl
eHBlY3RlZCkgeworICAgIGlmIChleHBlY3RlZCAhPT0gMCB8fCAoMSAvIGV4cGVjdGVkKSA9PT0g
KDEgLyBmb3VuZCkpCisgICAgICByZXR1cm47CisgIH0gZWxzZSBpZiAoKGV4cGVjdGVkICE9PSBl
eHBlY3RlZCkgJiYgKGZvdW5kICE9PSBmb3VuZCkpIHsKKyAgICAgIHJldHVybjsKKyAgfQorICBm
YWlsKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpOworfQorCisvKioKKyAqIFRocm93cyBpZiB0
d28gdmFyaWFibGVzIGhhdmUgZGlmZmVyZW50IHR5cGVzIG9yIHZhbHVlcy4KKyAqLworCitmdW5j
dGlvbiBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2UgPSAnJykgewor
ICBpZiAoIWRlZXBFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kKSkgeworICAgIGZhaWwoZXhwZWN0ZWQs
IGZvdW5kLCB1c2VyX21lc3NhZ2UpOworICB9Cit9CisKKy8qKgorICogVGhyb3dzIGlmIHR3byB2
YXJpYWJsZXMgaGF2ZSBlcXVhbCB0eXBlcyBvciB2YWx1ZXMuCisgKi8KKworZnVuY3Rpb24gYXNz
ZXJ0Tm90RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlID0gJycpIHsKKyAgaWYg
KGRlZXBFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kKSkgeworICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5k
LCB1c2VyX21lc3NhZ2UpOworICB9Cit9CisKKy8qKgorICogVGhyb3dzIGlmIHZhbHVlIGlzIGZh
bHNlLgorICovCitmdW5jdGlvbiBhc3NlcnRUcnVlKHZhbHVlLCB1c2VyX21lc3NhZ2UgPSAnJykg
eworICBhc3NlcnRFcXVhbHModHJ1ZSwgdmFsdWUsIHVzZXJfbWVzc2FnZSk7Cit9CisKKworLyoq
CisgKiBUaHJvd3MgaWYgdmFsdWUgaXMgdHJ1ZS4KKyAqLworZnVuY3Rpb24gYXNzZXJ0RmFsc2Uo
dmFsdWUsIHVzZXJfbWVzc2FnZSA9ICcnKSB7CisgIGFzc2VydEVxdWFscyhmYWxzZSwgdmFsdWUs
IHVzZXJfbWVzc2FnZSk7Cit9CisKKy8qKgorICogUnVucyBjb2RlKCkgYW5kIGFzc2VydHMgdGhh
dCBpdCB0aHJvd3MgdGhlIHNwZWNpZmllZCBleGNlcHRpb24uCisgKi8KK2Z1bmN0aW9uIGFzc2Vy
dFRocm93cyhjb2RlLCB0eXBlX29wdCwgY2F1c2Vfb3B0KSB7CisgIHRyeSB7CisgICAgaWYgKHR5
cGVvZiBjb2RlID09ICdmdW5jdGlvbicpIHsKKyAgICAgIGNvZGUoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgZXZhbChjb2RlKTsKKyAgICB9CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBpZiAodHlwZW9m
IHR5cGVfb3B0ID09ICdmdW5jdGlvbicpIHsKKyAgICAgIGFzc2VydEluc3RhbmNlb2YoZSwgdHlw
ZV9vcHQpOworICAgIH0KKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSB7CisgICAgICBh
c3NlcnRFcXVhbHMoY2F1c2Vfb3B0LCBlLnR5cGUsICd0aHJvd24gZXhjZXB0aW9uIHR5cGUgbWlz
bWF0Y2gnKTsKKyAgICB9CisgICAgLy8gU3VjY2Vzcy4KKyAgICByZXR1cm47CisgIH0KKyAgdmFy
IGV4cGVjdGVkID0gYXJndW1lbnRzLmxlbmd0aCA+PSAzID8gY2F1c2Vfb3B0IDoKKyAgICAgIHR5
cGVvZiB0eXBlX29wdCA9PSAnZnVuY3Rpb24nID8gdHlwZV9vcHQgOiAnYW55IGV4Y2VwdGlvbic7
CisgIGZhaWwoZXhwZWN0ZWQsICdubyBleGNlcHRpb24nLCAnZXhwZWN0ZWQgdGhyb3duIGV4Y2Vw
dGlvbicpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sIGIvSlNU
ZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sCmluZGV4IDZlOTA0MDBlZjMwMS4uZTQ1ZWJhZGQ0Nzg3
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwKKysrIGIvSlNUZXN0cy90
ZXN0MjYyL2NvbmZpZy55YW1sCkBAIC01LDYgKzUsNyBAQCBmbGFnczoKICAgV2Vha1JlZjogdXNl
V2Vha1JlZnMKICAgY2xhc3MtZmllbGRzLXB1YmxpYzogdXNlUHVibGljQ2xhc3NGaWVsZHMKICAg
Y2xhc3MtZmllbGRzLXByaXZhdGU6IHVzZVByaXZhdGVDbGFzc0ZpZWxkcworICBjbGFzcy1zdGF0
aWMtZmllbGRzLXB1YmxpYzogdXNlUHVibGljQ2xhc3NGaWVsZHMKIHNraXA6CiAgIGZlYXR1cmVz
OgogICAgIC0gU2hhcmVkQXJyYXlCdWZmZXIKQEAgLTE0LDcgKzE1LDYgQEAgc2tpcDoKICAgICAt
IHJlZ2V4cC1sb29rYmVoaW5kCiAKICAgICAtIGNsYXNzLW1ldGhvZHMtcHJpdmF0ZQotICAgIC0g
Y2xhc3Mtc3RhdGljLWZpZWxkcy1wdWJsaWMKICAgICAtIGNsYXNzLXN0YXRpYy1maWVsZHMtcHJp
dmF0ZQogICAgIC0gY2xhc3Mtc3RhdGljLW1ldGhvZHMtcHJpdmF0ZQogICAgIC0gaG9zdC1nYy1y
ZXF1aXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggMzY4ZWE4ODY5YjNmLi44ZjY4NGMx
NzZlNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAyMC0w
Ni0wNSAgWGFuIEzDs3BleiAgPHhhbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtKU0NdIEFkZCBz
dXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDk1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHN0YXRpYyBwdWJs
aWMgY2xhc3MgZmllbGRzLiBXZSBjYW4gcmV1c2UgbW9zdCBvZgorICAgICAgICB0aGUgZXhpc3Rp
bmcgbWFjaGluZXJ5IGF2YWlsYWJsZSBmb3IgaW5zdGFuY2UgZmllbGRzLCB3aXRoIGEKKyAgICAg
ICAgY291cGxlIG9mIGlzc3VlcyB0aGF0IG1lcml0IHNwZWNpYWwgY29tbWVudDoKKworICAgICAg
ICBTdGF0aWMgZmllbGRzIGFyZSBpbml0aWFsaXplZCwgbGlrZSBpbnN0YW5jZSBmaWVsZHMsIHdp
dGggYQorICAgICAgICBzeW50aGV0aWMgZnVuY3Rpb24uIFRoaXMgaXMgZG9uZSB0byBhbGxvdyB1
cyB0byB0cml2aWFsbHkgZm9sbG93CisgICAgICAgIHRoZSBzY29waW5nIHJ1bGVzIGluIHRoZSBz
cGVjLiBBcyBpdCBoYXBwZW5zIHdpdGggaW5zdGFuY2UgZmllbGRzCisgICAgICAgIHRoaXMgY291
bGQgYmUgaW5saW5lZCBpbiBhIGZ1dHVyZSBwYXRjaC4KKworICAgICAgICBUaGUgd2F5IHdlIHN0
b3JlIGNvbXB1dGVkIHByb3BlcnR5IGtleXMgbmVlZHMgdG8gYmUKKyAgICAgICAgbW9kaWZpZWQu
IEJlZm9yZSB3ZSBhc3N1bWVkIHRoZSBzb3VyY2UgY29kZSBvcmRlciB3b3VsZCBiZQorICAgICAg
ICBpZGVudGljYWwgdG8gdGhlIGV2YWx1YXRpb24gb3JkZXIgKHdoaWNoIHdhcyB0cnVlIGZvciBp
bnN0YW5jZQorICAgICAgICBmaWVsZHMpLiBXaXRoIHN0YXRpYyBmaWVsZHMgdGhpcyBjYW4gbm90
IGJlIHRoZSBjYXNlLCBzaW5jZSBzdGF0aWMKKyAgICAgICAgZmllbGRzIGFyZSBhbHdheXMgaW5p
dGlhbGl6ZWQgZmlyc3QuIFRvIGFsbG93IGZvciB0aGlzIG1pc21hdGNoCisgICAgICAgIHRoZSBj
b21wdXRlZCBwcm9wZXJ0eSBrZXlzIGZvciBpbnN0YW5jZSBmaWVsZHMgYXJlIHN0b3JlZCB3aXRo
IGFuCisgICAgICAgIGV2ZW4gaWRlbnRpZmllciwgYW5kIHRob3NlIGZvciBzdGF0aWMgZmllbGRz
IGFyZSBzdG9yZWQgd2l0aCBhbgorICAgICAgICBvZGQgaWRlbnRpZmllci4gVGhlIGZpZWxkIHBh
cnNlciwgdXBvbiBmaWd1cmluZyBvdXQgd2hldGhlciBpdCdzCisgICAgICAgIGluaXRpYWxpemlu
ZyB0aGUgc3RhdGljIG9yIHRoZSBpbnN0YW5jZSBmaWVsZHMsIHdpbGwga25vdyB3aGVyZSB0bwor
ICAgICAgICBsb29rIHVwIHRoZSBrZXkuCisKKyAgICAgICAgRm9yIGV4YW1wbGU6CisKKyAgICAg
ICAgY2xhc3MgRk9PIHsKKyAgICAgICAgICBbImEiXSA9IDA7CisgICAgICAgICAgc3RhdGljIFsi
YiJdID0gMTsKKyAgICAgICAgICBzdGF0aWMgWyJjIl0gPSAyOworICAgICAgICAgIFsiZCJdID0g
MzsKKyAgICAgICAgfQorCisgICAgICAgIEhlcmUgd2Ugd2lsbCBldmFsdWF0ZSB0aGUgY29tcHV0
ZWQgZmllbGQgbmFtZXMgaW4gdGhlIGZvbGxvd2luZworICAgICAgICBvcmRlcjogYSwgYiwgYywg
ZDsgYnV0IHdlIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZmllbGRzIGluIHRoZQorICAgICAgICBmb2xs
b3dpbmcgb3JkZXI6IGIsIGMsIGEsIGQuIFNpbmNlIGVhY2ggZ3JvdXAgb2YgZmllbGRzIGlzCisg
ICAgICAgIGluaXRpYWxpemVkIGluZGVwZW5kZW50bHkgd2UgY2FuIHRyaXZpYWxseSByZXRyaWV2
ZSB0aGUgcHJvcGVydHkKKyAgICAgICAga2V5cyBmb3IgZWFjaCBncm91cCBqdXN0IGJ5IGdldHRp
bmcgdGhlIG9kZCBwcm9wZXJ0eSBrZXlzIGZvcgorICAgICAgICBzdGF0aWMgZmllbGRzIChpbmRl
eGVzIDEgYW5kIDMpIGFuZCB0aGUgZXZlbiBvbmVzIGZvciBpbnN0YW5jZQorICAgICAgICBmaWVs
ZHMgKGluZGV4ZXMgMCBhbmQgMikuCisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0NsYXNzRmllbGRJbml0aWFsaXpl
ckZ1bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6
UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlM
aXN0Tm9kZTo6ZW1pdFNhdmVDb21wdXRlZEZpZWxkTmFtZSk6CisgICAgICAgIChKU0M6OkRlZmlu
ZUZpZWxkTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2xhc3NFeHByTm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAo
SlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEZWZpbmVGaWVsZCk6CisgICAgICAgICogcGFyc2VyL05v
ZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6RGVmaW5lRmllbGROb2RlOjpEZWZpbmVG
aWVsZE5vZGUpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcik6
CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKToKKyAgICAgICAg
KEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5zdGFuY2VGaWVsZEluaXRpYWxpemVyU291
cmNlRWxlbWVudHMpOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlKToKKyAgICAgICAgKEpTQzo6cGFyc2UpOgorICAgICAg
ICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6
OmNyZWF0ZURlZmluZUZpZWxkKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgor
ICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUpOgorCisgICAgICAgICog
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpn
ZW5lcmF0ZVVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdD
bGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0TG9hZEFycm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1lbnQpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjplbWl0SG9tZU9iamVjdEZvckNh
bGxlZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRTYXZlQ29tcHV0ZWRGaWVsZE5hbWUp
OgorICAgICAgICAoSlNDOjpEZWZpbmVGaWVsZE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OkNsYXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFsKToKKyAgICAgICAgKiBwYXJz
ZXIvTm9kZXMuaDoKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIpOgorICAgICAgICAoSlNDOjpzdHJpbmdBcnRp
Y2xlRm9yRnVuY3Rpb25Nb2RlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nRm9yRnVuY3Rpb25Nb2Rl
KToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MpOgorICAgICAg
ICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJTb3Vy
Y2VFbGVtZW50cyk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpT
Y29wZTo6c2V0U291cmNlUGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlKToKKyAgICAgICAgKEpTQzo6cGFyc2UpOgorICAgICAgICAqIHBhcnNlci9QYXJz
ZXJNb2Rlcy5oOgorICAgICAgICAoSlNDOjppc0Z1bmN0aW9uUGFyc2VNb2RlKToKKyAgICAgICAg
KiBydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Q
cm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVyKToKKwogMjAyMC0wNy0xMSAgWXVz
dWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIEludGwuTG9jYWxlIG1h
eGltaXplLCBtaW5pbWl6ZSBzaG91bGQgcmV0dXJuIEludGwuTG9jYWxlIGluc3RlYWQgb2YgU3Ry
aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAppbmRleCA0NjFkOWZhZGQ0OGIuLmFkMTg5OWY2
ZWM4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCkBAIC01Niw5ICs1Niw5IEBAIHN0YXRp
YyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZVVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2soCiAgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5p
c0luU3RyaWN0Q29udGV4dCgpID8gSlNQYXJzZXJTdHJpY3RNb2RlOjpTdHJpY3QgOiBKU1BhcnNl
clN0cmljdE1vZGU6Ok5vdFN0cmljdDsKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9k
ZSA9IGV4ZWN1dGFibGUtPnNjcmlwdE1vZGUoKTsKICAgICBBU1NFUlQoaXNGdW5jdGlvblBhcnNl
TW9kZShleGVjdXRhYmxlLT5wYXJzZU1vZGUoKSkpOwotICAgIFZlY3RvcjxKU1RleHRQb3NpdGlv
bj4qIGluc3RhbmNlRmllbGRMb2NhdGlvbnMgPSBleGVjdXRhYmxlLT5pbnN0YW5jZUZpZWxkTG9j
YXRpb25zKCk7CisgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogY2xhc3NGaWVsZExvY2F0aW9u
cyA9IGV4ZWN1dGFibGUtPmNsYXNzRmllbGRMb2NhdGlvbnMoKTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RnVuY3Rpb25Ob2RlPiBmdW5jdGlvbiA9IHBhcnNlPEZ1bmN0aW9uTm9kZT4oCi0gICAgICAg
IHZtLCBzb3VyY2UsIGV4ZWN1dGFibGUtPm5hbWUoKSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUs
IHNjcmlwdE1vZGUsIGV4ZWN1dGFibGUtPnBhcnNlTW9kZSgpLCBleGVjdXRhYmxlLT5zdXBlckJp
bmRpbmcoKSwgZXJyb3IsIG51bGxwdHIsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgRGVyaXZlZENv
bnRleHRUeXBlOjpOb25lLCBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsIG51bGxwdHIsIG51bGxwdHIs
IGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgICAgICB2bSwgc291cmNlLCBleGVjdXRhYmxl
LT5uYW1lKCksIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBleGVjdXRhYmxl
LT5wYXJzZU1vZGUoKSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIGVycm9yLCBudWxscHRy
LCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgRXZhbENv
bnRleHRUeXBlOjpOb25lLCBudWxscHRyLCBudWxscHRyLCBjbGFzc0ZpZWxkTG9jYXRpb25zKTsK
IAogICAgIGlmICghZnVuY3Rpb24pIHsKICAgICAgICAgQVNTRVJUKGVycm9yLmlzVmFsaWQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4IDhmZmUzMDBkODQ0Mi4uNTgwMzJhZDVlZGQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtMjA5LDIzICsyMDksMjMgQEAgcHVibGljOgogICAg
ICAgICBTdHJpbmcgbV9zb3VyY2VVUkxEaXJlY3RpdmU7CiAgICAgICAgIFN0cmluZyBtX3NvdXJj
ZU1hcHBpbmdVUkxEaXJlY3RpdmU7CiAgICAgICAgIENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxl
IG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXM7Ci0gICAgICAgIFZlY3RvcjxKU1RleHRQb3NpdGlv
bj4gbV9pbnN0YW5jZUZpZWxkTG9jYXRpb25zOworICAgICAgICBWZWN0b3I8SlNUZXh0UG9zaXRp
b24+IG1fY2xhc3NGaWVsZExvY2F0aW9uczsKICAgICB9OwogCiAgICAgTmVlZHNDbGFzc0ZpZWxk
SW5pdGlhbGl6ZXIgbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcj4obV9uZWVkc0NsYXNzRmllbGRJ
bml0aWFsaXplcik7IH0KIAotICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGluc3RhbmNlRmll
bGRMb2NhdGlvbnMoKSBjb25zdAorICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGNsYXNzRmll
bGRMb2NhdGlvbnMoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fcmFyZURhdGEpCi0gICAg
ICAgICAgICByZXR1cm4gJm1fcmFyZURhdGEtPm1faW5zdGFuY2VGaWVsZExvY2F0aW9uczsKKyAg
ICAgICAgICAgIHJldHVybiAmbV9yYXJlRGF0YS0+bV9jbGFzc0ZpZWxkTG9jYXRpb25zOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICB2b2lkIHNldEluc3RhbmNlRmllbGRM
b2NhdGlvbnMoVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYmIGluc3RhbmNlRmllbGRMb2NhdGlvbnMp
CisgICAgdm9pZCBzZXRDbGFzc0ZpZWxkTG9jYXRpb25zKFZlY3RvcjxKU1RleHRQb3NpdGlvbj4m
JiBjbGFzc0ZpZWxkTG9jYXRpb25zKQogICAgIHsKLSAgICAgICAgaWYgKGluc3RhbmNlRmllbGRM
b2NhdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICBpZiAoY2xhc3NGaWVsZExvY2F0aW9ucy5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuc3VyZVJhcmVEYXRhKCkubV9p
bnN0YW5jZUZpZWxkTG9jYXRpb25zID0gV1RGTW92ZShpbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsK
KyAgICAgICAgZW5zdXJlUmFyZURhdGEoKS5tX2NsYXNzRmllbGRMb2NhdGlvbnMgPSBXVEZNb3Zl
KGNsYXNzRmllbGRMb2NhdGlvbnMpOwogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
aW5kZXggNmYzNTczOGIzMTY4Li4xMjAzYTViNzBlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0z
NzgsNyArMzc4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2
bSwgRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAgICBib29sIHNob3VsZENh
cHR1cmVTb21lT2ZUaGVUaGluZ3MgPSBzaG91bGRFbWl0RGVidWdIb29rcygpIHx8IGZ1bmN0aW9u
Tm9kZS0+bmVlZHNBY3RpdmF0aW9uKCkgfHwgY29udGFpbnNBcnJvd09yRXZhbEJ1dE5vdEluQXJy
b3dCbG9jazsKIAogICAgIGJvb2wgc2hvdWxkQ2FwdHVyZUFsbE9mVGhlVGhpbmdzID0gc2hvdWxk
RW1pdERlYnVnSG9va3MoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCk7Ci0gICAgYm9vbCBuZWVk
c0FyZ3VtZW50cyA9ICgoZnVuY3Rpb25Ob2RlLT51c2VzQXJndW1lbnRzKCkgJiYgIWNvZGVCbG9j
ay0+aXNBcnJvd0Z1bmN0aW9uKCkpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSB8fCAoZnVuY3Rp
b25Ob2RlLT51c2VzQXJyb3dGdW5jdGlvbigpICYmICFjb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlv
bigpICYmIGlzQXJndW1lbnRzVXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCkpKSAmJiBwYXJzZU1v
ZGUgIT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOworICAg
IGJvb2wgbmVlZHNBcmd1bWVudHMgPSAoKGZ1bmN0aW9uTm9kZS0+dXNlc0FyZ3VtZW50cygpICYm
ICFjb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkg
fHwgKGZ1bmN0aW9uTm9kZS0+dXNlc0Fycm93RnVuY3Rpb24oKSAmJiAhY29kZUJsb2NrLT5pc0Fy
cm93RnVuY3Rpb24oKSAmJiBpc0FyZ3VtZW50c1VzZWRJbklubmVyQXJyb3dGdW5jdGlvbigpKSkg
JiYgcGFyc2VNb2RlICE9IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9k
ZTsKIAogICAgIGlmIChpc0dlbmVyYXRvck9yQXN5bmNGdW5jdGlvbkJvZHlQYXJzZU1vZGUocGFy
c2VNb2RlKSkgewogICAgICAgICAvLyBHZW5lcmF0b3IgYW5kIEFzeW5jRnVuY3Rpb24gbmV2ZXIg
cHJvdmlkZXMgImFyZ3VtZW50cyIuICJhcmd1bWVudHMiIHJlZmVyZW5jZSB3aWxsIGJlIHJlc29s
dmVkIGluIGFuIHVwcGVyIGdlbmVyYXRvciBmdW5jdGlvbiBzY29wZS4KQEAgLTYxMCw3ICs2MTAs
NyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBGdW5jdGlv
bk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBz
aG91bGRDcmVhdGVBcmd1bWVuc1ZhcmlhYmxlID0gIWhhdmVQYXJhbWV0ZXJOYW1lZEFyZ3VtZW50
cwotICAgICAgICAgICAgJiYgIVNvdXJjZVBhcnNlTW9kZVNldChTb3VyY2VQYXJzZU1vZGU6OkFy
cm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUs
IFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSkuY29udGFpbnMo
bV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpKTsKKyAgICAgICAgICAgICYmICFTb3VyY2VQYXJzZU1v
ZGVTZXQoU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSwgU291cmNlUGFyc2VNb2Rl
OjpBc3luY0Fycm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0
aWFsaXplck1vZGUpLmNvbnRhaW5zKG1fY29kZUJsb2NrLT5wYXJzZU1vZGUoKSk7CiAgICAgICAg
IHNob3VsZENyZWF0ZUFyZ3VtZW50c1ZhcmlhYmxlSW5QYXJhbWV0ZXJTY29wZSA9IHNob3VsZENy
ZWF0ZUFyZ3VtZW5zVmFyaWFibGUgJiYgIWlzU2ltcGxlUGFyYW1ldGVyTGlzdDsKICAgICAgICAg
Ly8gRG8gbm90IGNyZWF0ZSBhcmd1bWVudHMgdmFyaWFibGUgaW4gY2FzZSBvZiBBcnJvdyBmdW5j
dGlvbi4gVmFsdWUgd2lsbCBiZSBsb2FkZWQgZnJvbSBwYXJlbnQgc2NvcGUKICAgICAgICAgaWYg
KHNob3VsZENyZWF0ZUFyZ3VtZW5zVmFyaWFibGUgJiYgIXNob3VsZENyZWF0ZUFyZ3VtZW50c1Zh
cmlhYmxlSW5QYXJhbWV0ZXJTY29wZSkgewpAQCAtMzEyMCw3ICszMTIwLDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdEZWZhdWx0Q29uc3RydWN0b3IoUmVnaXN0ZXJJ
RCogZHN0LCBDb25zdHIKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdE5ld0luc3RhbmNlRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKFJlZ2lz
dGVySUQqIGRzdCwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYmIGluc3RhbmNlRmllbGRMb2NhdGlv
bnMsIGJvb2wgaXNEZXJpdmVkKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRO
ZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIFZlY3RvcjxK
U1RleHRQb3NpdGlvbj4mJiBjbGFzc0ZpZWxkTG9jYXRpb25zLCBib29sIGlzRGVyaXZlZCkKIHsK
ICAgICBEZXJpdmVkQ29udGV4dFR5cGUgbmV3RGVyaXZlZENvbnRleHRUeXBlOwogICAgIFN1cGVy
QmluZGluZyBzdXBlckJpbmRpbmc7CkBAIC0zMTMzLDE0ICszMTMzLDE0IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyRnVuY3Rp
b24oUmVnaXN0ZXJJCiAgICAgfQogCiAgICAgT3B0aW9uYWw8Q29tcGFjdFZhcmlhYmxlTWFwOjpI
YW5kbGU+IHZhcmlhYmxlc1VuZGVyVERaID0gZ2V0VmFyaWFibGVzVW5kZXJURFooKTsKLSAgICBT
b3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxk
SW5pdGlhbGl6ZXJNb2RlOworICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUgPSBTb3VyY2VQ
YXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU7CiAgICAgQ29uc3RydWN0QWJpbGl0
eSBjb25zdHJ1Y3RBYmlsaXR5ID0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0Owog
CiAgICAgY29uc3QgYm9vbCBhbHdheXNTdHJpY3RJbkNsYXNzID0gdHJ1ZTsKICAgICBGdW5jdGlv
bk1ldGFkYXRhTm9kZSBtZXRhZGF0YShwYXJzZXJBcmVuYSgpLCBKU1Rva2VuTG9jYXRpb24oKSwg
SlNUb2tlbkxvY2F0aW9uKCksIDAsIDAsIDAsIDAsIDAsIGFsd2F5c1N0cmljdEluQ2xhc3MsIENv
bnN0cnVjdG9yS2luZDo6Tm9uZSwgc3VwZXJCaW5kaW5nLCAwLCBwYXJzZU1vZGUsIGZhbHNlKTsK
ICAgICBtZXRhZGF0YS5maW5pc2hQYXJzaW5nKG1fc2NvcGVOb2RlLT5zb3VyY2UoKSwgSWRlbnRp
ZmllcigpLCBGdW5jdGlvbk1vZGU6Ok1ldGhvZERlZmluaXRpb24pOwogICAgIGF1dG8gaW5pdGlh
bGl6ZXIgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKG1fdm0sIG1fc2NvcGVO
b2RlLT5zb3VyY2UoKSwgJm1ldGFkYXRhLCBpc0J1aWx0aW5GdW5jdGlvbigpID8gVW5saW5rZWRC
dWlsdGluRnVuY3Rpb24gOiBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLCBjb25zdHJ1Y3RBYmlsaXR5
LCBzY3JpcHRNb2RlKCksIFdURk1vdmUodmFyaWFibGVzVW5kZXJURFopLCBuZXdEZXJpdmVkQ29u
dGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyOjpObyk7Ci0gICAgaW5pdGlhbGl6
ZXItPnNldEluc3RhbmNlRmllbGRMb2NhdGlvbnMoV1RGTW92ZShpbnN0YW5jZUZpZWxkTG9jYXRp
b25zKSk7CisgICAgaW5pdGlhbGl6ZXItPnNldENsYXNzRmllbGRMb2NhdGlvbnMoV1RGTW92ZShj
bGFzc0ZpZWxkTG9jYXRpb25zKSk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IG1fY29kZUJsb2Nr
LT5hZGRGdW5jdGlvbkV4cHIoaW5pdGlhbGl6ZXIpOwogICAgIE9wTmV3RnVuY0V4cDo6ZW1pdCh0
aGlzLCBkc3QsIHNjb3BlUmVnaXN0ZXIoKSwgaW5kZXgpOwpAQCAtNDQ2MSw3ICs0NDYxLDcgQEAg
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCog
bG9jYWxSZWdpc3RlcikKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2Fk
QXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyKQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9j
b2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9
PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBt
X2NvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxk
SW5pdGlhbGl6ZXJNb2RlKTsKKyAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlv
bigpIHx8IG1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCkgfHwgY29uc3RydWN0
b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzIHx8IG1fY29kZVR5cGUgPT0gRXZh
bENvZGUgfHwgbV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpID09IFNvdXJjZVBhcnNlTW9kZTo6Q2xh
c3NGaWVsZEluaXRpYWxpemVyTW9kZSk7CiAKICAgICByZXR1cm4gZW1pdFJlc29sdmVTY29wZShu
dWxscHRyLCB2YXJpYWJsZShpZGVudGlmaWVyLCBUaGlzUmVzb2x1dGlvblR5cGU6OlNjb3BlZCkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCmluZGV4IDVlMTkyNDU0NTNmNC4uOGVmMGNlMDlmMWVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCkBAIC01ODEsMTQgKzU4MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IHJldHVybiBlbWl0Tm9kZUluVGFpbFBvc2l0aW9uKG51bGxwdHIsIG4pOwogICAgICAgICB9CiAK
LSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdERlZmluZUNsYXNzRWxlbWVudHMoUHJvcGVydHlMaXN0
Tm9kZSogbiwgUmVnaXN0ZXJJRCogY29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3RvdHlwZSwg
VmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYgaW5zdGFuY2VGaWVsZExvY2F0aW9ucykKKyAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdERlZmluZUNsYXNzRWxlbWVudHMoUHJvcGVydHlMaXN0Tm9kZSogbiwg
UmVnaXN0ZXJJRCogY29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3RvdHlwZSwgVmVjdG9yPEpT
VGV4dFBvc2l0aW9uPiYgaW5zdGFuY2VGaWVsZExvY2F0aW9ucywgVmVjdG9yPEpTVGV4dFBvc2l0
aW9uPiYgc3RhdGljRmllbGRMb2NhdGlvbnMpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VS
VChjb25zdHJ1Y3Rvci0+cmVmQ291bnQoKSAmJiBwcm90b3R5cGUtPnJlZkNvdW50KCkpOwogICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3ZtLmlzU2FmZVRvUmVjdXJzZSgpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZW1pdFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsKICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShuLT5uZWVkc0RlYnVnSG9vaygpKSkKICAgICAgICAgICAg
ICAgICBlbWl0RGVidWdIb29rKG4pOwotICAgICAgICAgICAgcmV0dXJuIG4tPmVtaXRCeXRlY29k
ZSgqdGhpcywgY29uc3RydWN0b3IsIHByb3RvdHlwZSwgJmluc3RhbmNlRmllbGRMb2NhdGlvbnMp
OworICAgICAgICAgICAgcmV0dXJuIG4tPmVtaXRCeXRlY29kZSgqdGhpcywgY29uc3RydWN0b3Is
IHByb3RvdHlwZSwgJmluc3RhbmNlRmllbGRMb2NhdGlvbnMsICZzdGF0aWNGaWVsZExvY2F0aW9u
cyk7CiAgICAgICAgIH0KIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Tm9kZUZvclByb3BlcnR5
KFJlZ2lzdGVySUQqIGRzdCwgRXhwcmVzc2lvbk5vZGUqIG5vZGUpCkBAIC03NzUsNyArNzc1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlvbihS
ZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKik7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jRXhwck5v
ZGUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0RlZmF1bHRDb25zdHJ1Y3RvcihSZWdp
c3RlcklEKiBkc3QsIENvbnN0cnVjdG9yS2luZCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29u
c3QgSWRlbnRpZmllciYgZWNtYU5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIGNsYXNzU291cmNlLCBO
ZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdJ
bnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIFZlY3RvcjxK
U1RleHRQb3NpdGlvbj4mJiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zLCBib29sIGlzRGVyaXZlZCk7
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlv
bihSZWdpc3RlcklEKiBkc3QsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mJiBjbGFzc0ZpZWxkTG9j
YXRpb25zLCBib29sIGlzRGVyaXZlZCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdBcnJv
d0Z1bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiwgQXJyb3dGdW5jRXhwck5vZGUqKTsKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld01ldGhvZERlZmluaXRpb24oUmVnaXN0ZXJJRCogZHN0
LCBNZXRob2REZWZpbml0aW9uTm9kZSopOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3UmVn
RXhwKFJlZ2lzdGVySUQqIGRzdCwgUmVnRXhwKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggNDhiYThiZWE2NzE0Li5j
ZmM4Yzc5YWY1NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTE4Niw3ICsxODYsNyBAQCBSZWdpc3RlcklEKiBUaGlz
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdAogCiBzdGF0aWMgUmVnaXN0ZXJJRCogZW1pdEhvbWVPYmplY3RGb3JDYWxsZWUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICBpZiAoKGdlbmVyYXRvci5pc0Rlcml2
ZWRDbGFzc0NvbnRleHQoKSB8fCBnZW5lcmF0b3IuaXNEZXJpdmVkQ29uc3RydWN0b3JDb250ZXh0
KCkpICYmIGdlbmVyYXRvci5wYXJzZU1vZGUoKSAhPSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNl
RmllbGRJbml0aWFsaXplck1vZGUpIHsKKyAgICBpZiAoKGdlbmVyYXRvci5pc0Rlcml2ZWRDbGFz
c0NvbnRleHQoKSB8fCBnZW5lcmF0b3IuaXNEZXJpdmVkQ29uc3RydWN0b3JDb250ZXh0KCkpICYm
IGdlbmVyYXRvci5wYXJzZU1vZGUoKSAhPSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0
aWFsaXplck1vZGUpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZGVyaXZlZENvbnN0cnVjdG9yID0g
Z2VuZXJhdG9yLmVtaXRMb2FkRGVyaXZlZENvbnN0cnVjdG9yRnJvbUFycm93RnVuY3Rpb25MZXhp
Y2FsRW52aXJvbm1lbnQoKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGRlcml2ZWRDb25zdHJ1Y3RvciwgZ2VuZXJhdG9yLnBy
b3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5ob21lT2JqZWN0UHJpdmF0ZU5hbWUoKSk7CiAg
ICAgfQpAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdERlY2xh
cmVQcml2YXRlRmllbGROYW1lcyhCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yCiAgICAgfQog
fQogCi1SZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0T3JDb25zdHJ1Y3RvciwgUmVnaXN0
ZXJJRCogcHJvdG90eXBlLCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9j
YXRpb25zKQorUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdE9yQ29uc3RydWN0b3IsIFJl
Z2lzdGVySUQqIHByb3RvdHlwZSwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogaW5zdGFuY2VGaWVs
ZExvY2F0aW9ucywgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogc3RhdGljRmllbGRMb2NhdGlvbnMp
CiB7CiAgICAgUHJvcGVydHlMaXN0Tm9kZSogcCA9IHRoaXM7CiAgICAgUmVnaXN0ZXJJRCogZHN0
ID0gbnVsbHB0cjsKQEAgLTU5NSw2ICs1OTUsMTIgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHAtPmlzU3Rh
dGljQ2xhc3NGaWVsZCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGljRmllbGRMb2NhdGlv
bnMpOworICAgICAgICAgICAgc3RhdGljRmllbGRMb2NhdGlvbnMtPmFwcGVuZChwLT5wb3NpdGlv
bigpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgZW1pdFB1
dENvbnN0YW50UHJvcGVydHkoZ2VuZXJhdG9yLCBkc3QsICpwLT5tX25vZGUpOwogICAgIH0KIApA
QCAtNjUyLDYgKzY1OCwxMiBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAocC0+aXNTdGF0
aWNDbGFzc0ZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdGljRmllbGRMb2Nh
dGlvbnMpOworICAgICAgICAgICAgICAgIHN0YXRpY0ZpZWxkTG9jYXRpb25zLT5hcHBlbmQocC0+
cG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIC8vIEhhbmRsZSByZWd1bGFyIHZhbHVlcy4KICAgICAgICAgICAgIGlmIChu
b2RlLT5tX3R5cGUgJiBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KSB7CiAgICAgICAgICAgICAgICAg
ZW1pdFB1dENvbnN0YW50UHJvcGVydHkoZ2VuZXJhdG9yLCBkc3QsICpub2RlKTsKQEAgLTc0NCw3
ICs3NTYsNyBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogCiB2b2lkIFByb3BlcnR5TGlzdE5v
ZGU6OmVtaXRQdXRDb25zdGFudFByb3BlcnR5KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIG5ld09iaiwgUHJvcGVydHlOb2RlJiBub2RlKQogewotICAgIC8vIFByaXZh
dGUgZmllbGRzIGFyZSBoYW5kbGVkIGluIHRoZSBzeW50aGV0aWMgaW5zdGFuY2VGaWVsZEluaXRp
YWxpemVyIGZ1bmN0aW9uLCBub3QgaGVyZS4KKyAgICAvLyBQcml2YXRlIGZpZWxkcyBhcmUgaGFu
ZGxlZCBpbiBhIHN5bnRoZXRpYyBjbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgZnVuY3Rpb24sIG5vdCBo
ZXJlLgogICAgIEFTU0VSVCghKG5vZGUudHlwZSgpICYgUHJvcGVydHlOb2RlOjpQcml2YXRlKSk7
CiAKICAgICBib29sIHNob3VsZFNldEZ1bmN0aW9uTmFtZSA9IGdlbmVyYXRvci5zaG91bGRTZXRG
dW5jdGlvbk5hbWUobm9kZS5tX2Fzc2lnbik7CkBAIC03OTQsMTggKzgwNiwyMyBAQCB2b2lkIFBy
b3BlcnR5TGlzdE5vZGU6OmVtaXRQdXRDb25zdGFudFByb3BlcnR5KEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZwogdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVk
RmllbGROYW1lKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFByb3BlcnR5Tm9kZSYgbm9k
ZSkKIHsKICAgICBBU1NFUlQobm9kZS5pc0NvbXB1dGVkQ2xhc3NGaWVsZCgpKTsKLSAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlFeHByOwogCiAgICAgLy8gVGhlICduYW1lJyByZWZlcnMg
dG8gYSBzeW50aGV0aWMgbnVtZXJpYyB2YXJpYWJsZSBuYW1lIGluIHRoZSBwcml2YXRlIG5hbWUg
c2NvcGUsIHdoZXJlIHRoZSBwcm9wZXJ0eSBrZXkgaXMgc2F2ZWQgZm9yIGxhdGVyIHVzZS4KICAg
ICBjb25zdCBJZGVudGlmaWVyJiBkZXNjcmlwdGlvbiA9ICpub2RlLm5hbWUoKTsKICAgICBWYXJp
YWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUoZGVzY3JpcHRpb24pOwogICAgIEFTU0VSVCgh
dmFyLmxvY2FsKCkpOwogCi0gICAgcHJvcGVydHlFeHByID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5v
ZGUubV9leHByZXNzaW9uKTsKLSAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0
b3IuZW1pdFRvUHJvcGVydHlLZXkoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eUV4
cHIuZ2V0KCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eUV4cHIgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobm9kZS5tX2V4cHJlc3Npb24pOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBw
cm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdFRvUHJvcGVydHlLZXkoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCBwcm9wZXJ0eUV4cHIuZ2V0KCkpOworCisgICAgUmVmPExhYmVsPiB2YWxpZFBy
b3BlcnR5TmFtZUxhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByb3RvdHlwZVN0cmluZyA9IGdlbmVyYXRvci5lbWl0TG9hZChudWxscHRyLCBKU1Zh
bHVlKGdlbmVyYXRvci5hZGRTdHJpbmdDb25zdGFudChnZW5lcmF0b3IucHJvcGVydHlOYW1lcygp
LnByb3RvdHlwZSkpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGdlbmVyYXRvci5l
bWl0QmluYXJ5T3A8T3BFcT4oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm90b3R5cGVTdHJp
bmcuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnN0
cmluZ1R5cGUoKSwgUmVzdWx0VHlwZTo6c3RyaW5nVHlwZSgpKSksIHZhbGlkUHJvcGVydHlOYW1l
TGFiZWwuZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0VGhyb3dUeXBlRXJyb3IoIkNhbm5vdCBk
ZWNsYXJlIGEgc3RhdGljIGZpZWxkIG5hbWVkICdwcm90b3R5cGUnIik7CiAKKyAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKHZhbGlkUHJvcGVydHlOYW1lTGFiZWwuZ2V0KCkpOwogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZh
cik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCB2YXIsIHByb3Bl
cnR5TmFtZSwgVGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbk1vZGU6OkNvbnN0SW5pdGlh
bGl6YXRpb24pOworICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFy
LCBwcm9wZXJ0eU5hbWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6YXRpb25Nb2Rl
OjpDb25zdEluaXRpYWxpemF0aW9uKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KQEAgLTQ4MDIsNiArNDgxOSw3IEBAIHZvaWQgRGVmaW5lRmllbGROb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiAgICAgICAgIGdl
bmVyYXRvci5lbWl0TG9hZCh2YWx1ZS5nZXQoKSwganNVbmRlZmluZWQoKSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZSh2YWx1ZS5nZXQoKSwgbV9hc3NpZ24pOworCiAg
ICAgICAgIGlmIChtX2lkZW50ICYmIGdlbmVyYXRvci5zaG91bGRTZXRGdW5jdGlvbk5hbWUobV9h
c3NpZ24pKQogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRTZXRGdW5jdGlvbk5hbWUodmFsdWUu
Z2V0KCksICptX2lkZW50KTsKICAgICB9CkBAIC00OTI2LDEzICs0OTQ0LDE0IEBAIFJlZ2lzdGVy
SUQqIENsYXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklECiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvdHlwZU5hbWVSZWdp
c3RlciA9IGdlbmVyYXRvci5lbWl0TG9hZChudWxscHRyLCBwcm9wZXJ0eU5hbWVzLnByb3RvdHlw
ZSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsRGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IuZ2V0
KCksIHByb3RvdHlwZU5hbWVSZWdpc3Rlci5nZXQoKSwgcHJvdG90eXBlLmdldCgpLCBudWxscHRy
LCBudWxscHRyLCAwLCBtX3Bvc2l0aW9uKTsKIAorICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4g
c3RhdGljRmllbGRMb2NhdGlvbnM7CiAgICAgaWYgKG1fY2xhc3NFbGVtZW50cykgewogICAgICAg
ICBtX2NsYXNzRWxlbWVudHMtPmVtaXREZWNsYXJlUHJpdmF0ZUZpZWxkTmFtZXMoZ2VuZXJhdG9y
LCBnZW5lcmF0b3Iuc2NvcGVSZWdpc3RlcigpKTsKIAogICAgICAgICBWZWN0b3I8SlNUZXh0UG9z
aXRpb24+IGluc3RhbmNlRmllbGRMb2NhdGlvbnM7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVm
aW5lQ2xhc3NFbGVtZW50cyhtX2NsYXNzRWxlbWVudHMsIGNvbnN0cnVjdG9yLmdldCgpLCBwcm90
b3R5cGUuZ2V0KCksIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdERlZmluZUNsYXNzRWxlbWVudHMobV9jbGFzc0VsZW1lbnRzLCBjb25zdHJ1Y3Rvci5nZXQo
KSwgcHJvdG90eXBlLmdldCgpLCBpbnN0YW5jZUZpZWxkTG9jYXRpb25zLCBzdGF0aWNGaWVsZExv
Y2F0aW9ucyk7CiAgICAgICAgIGlmICghaW5zdGFuY2VGaWVsZExvY2F0aW9ucy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbnN0YW5jZUZpZWxkSW5pdGlhbGl6
ZXIgPSBnZW5lcmF0b3IuZW1pdE5ld0luc3RhbmNlRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgV1RGTW92ZShpbnN0YW5jZUZpZWxkTG9jYXRpb25zKSwg
bV9jbGFzc0hlcml0YWdlKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbnN0YW5j
ZUZpZWxkSW5pdGlhbGl6ZXIgPSBnZW5lcmF0b3IuZW1pdE5ld0NsYXNzRmllbGRJbml0aWFsaXpl
ckZ1bmN0aW9uKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgV1RGTW92ZShpbnN0YW5jZUZpZWxk
TG9jYXRpb25zKSwgbV9jbGFzc0hlcml0YWdlKTsKIAogICAgICAgICAgICAgLy8gRklYTUU6IFNr
aXAgdGhpcyBpZiB0aGUgaW5pdGlhbGl6ZXIgZnVuY3Rpb24gaXNuJ3QgZ29pbmcgdG8gbmVlZCBh
IGhvbWUgb2JqZWN0IChubyBldmFsIG9yIHN1cGVyIHByb3BlcnRpZXMpCiAgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2ODY3CkBAIC00OTQy
LDE2ICs0OTYxLDI3IEBAIFJlZ2lzdGVySUQqIENsYXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklECiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAobV9uZWVkc0xleGljYWxTY29wZSkgewotICAgICAgICBpZiAoIW1fbmFtZS5p
c051bGwoKSkgewotICAgICAgICAgICAgVmFyaWFibGUgY2xhc3NOYW1lVmFyID0gZ2VuZXJhdG9y
LnZhcmlhYmxlKG1fbmFtZSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjbGFzc05hbWVW
YXIuaXNSZXNvbHZlZCgpKTsKLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9
IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIGNsYXNzTmFtZVZhcik7Ci0gICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGNsYXNzTmFtZVZh
ciwgY29uc3RydWN0b3IuZ2V0KCksIFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6YXRpb25Nb2Rl
OjpJbml0aWFsaXphdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgZ2VuZXJhdG9yLnBvcExleGlj
YWxTY29wZSh0aGlzKTsKKyAgICBpZiAobV9uZWVkc0xleGljYWxTY29wZSAmJiAhbV9uYW1lLmlz
TnVsbCgpKSB7CisgICAgICAgIFZhcmlhYmxlIGNsYXNzTmFtZVZhciA9IGdlbmVyYXRvci52YXJp
YWJsZShtX25hbWUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjbGFzc05hbWVWYXIuaXNSZXNv
bHZlZCgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgY2xhc3NOYW1lVmFyKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBjbGFzc05hbWVWYXIsIGNvbnN0cnVjdG9yLmdl
dCgpLCBUaHJvd0lmTm90Rm91bmQsIEluaXRpYWxpemF0aW9uTW9kZTo6SW5pdGlhbGl6YXRpb24p
OworICAgIH0KKworICAgIGlmICghc3RhdGljRmllbGRMb2NhdGlvbnMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzdGF0aWNGaWVsZEluaXRpYWxpemVyID0gZ2VuZXJh
dG9yLmVtaXROZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIFdURk1vdmUoc3RhdGljRmllbGRMb2NhdGlvbnMpLCBtX2NsYXNzSGVyaXRhZ2Up
OworICAgICAgICAvLyBGSVhNRTogU2tpcCB0aGlzIGlmIHRoZSBpbml0aWFsaXplciBmdW5jdGlv
biBpc24ndCBnb2luZyB0byBuZWVkIGEgaG9tZSBvYmplY3QgKG5vIGV2YWwgb3Igc3VwZXIgcHJv
cGVydGllcykKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5Njg2NworICAgICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIHN0YXRpY0Zp
ZWxkSW5pdGlhbGl6ZXIuZ2V0KCksIGNvbnN0cnVjdG9yLmdldCgpKTsKKworICAgICAgICBDYWxs
QXJndW1lbnRzIGFyZ3MoZ2VuZXJhdG9yLCBudWxscHRyKTsKKyAgICAgICAgZ2VuZXJhdG9yLm1v
dmUoYXJncy50aGlzUmVnaXN0ZXIoKSwgY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzdGF0aWNGaWVsZEluaXRp
YWxpemVyLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3MsIHBvc2l0aW9uKCksIHBvc2l0
aW9uKCksIHBvc2l0aW9uKCksIERlYnVnZ2FibGVDYWxsOjpObyk7CiAgICAgfQogCisgICAgaWYg
KG1fbmVlZHNMZXhpY2FsU2NvcGUpCisgICAgICAgIGdlbmVyYXRvci5wb3BMZXhpY2FsU2NvcGUo
dGhpcyk7CisKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0LCBjb25zdHJ1Y3Rvci5nZXQoKSksIGNvbnN0cnVjdG9yLmdldCgpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
aW5kZXggNGE0MjdlYjg2YTcyLi5lMTJkMTMxOTczYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMTE3LDcgKzExNyw3IEBA
IEpTVmFsdWUgZXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgRUNNQU1vZGUgZWNtYU1vCiAgICAgfQogCiAgICAgRXZhbENvbnRleHRUeXBlIGV2
YWxDb250ZXh0VHlwZTsKLSAgICBpZiAoY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPnBhcnNlTW9k
ZSgpID09IFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSkKKyAg
ICBpZiAoY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPnBhcnNlTW9kZSgpID09IFNvdXJjZVBhcnNl
TW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZSkKICAgICAgICAgZXZhbENvbnRleHRUeXBl
ID0gRXZhbENvbnRleHRUeXBlOjpJbnN0YW5jZUZpZWxkRXZhbENvbnRleHQ7CiAgICAgZWxzZSBp
ZiAoaXNGdW5jdGlvblBhcnNlTW9kZShjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+cGFyc2VNb2Rl
KCkpKQogICAgICAgICBldmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6OkZ1bmN0aW9u
RXZhbENvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5kZXggNzEwMTVj
YmU5MWM1Li5hM2MzNmY1NjI0NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgK
QEAgLTc0MCw2ICs3NDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc0luc3Rh
bmNlQ2xhc3NQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENsYXNzRWxlbWVu
dFRhZz4obV9jbGFzc0VsZW1lbnRUYWcpID09IENsYXNzRWxlbWVudFRhZzo6SW5zdGFuY2U7IH0K
ICAgICAgICAgYm9vbCBpc0NsYXNzRmllbGQoKSBjb25zdCB7IHJldHVybiBpc0NsYXNzUHJvcGVy
dHkoKSAmJiAhbmVlZHNTdXBlckJpbmRpbmcoKTsgfQogICAgICAgICBib29sIGlzSW5zdGFuY2VD
bGFzc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gaXNJbnN0YW5jZUNsYXNzUHJvcGVydHkoKSAmJiAh
bmVlZHNTdXBlckJpbmRpbmcoKTsgfQorICAgICAgICBib29sIGlzU3RhdGljQ2xhc3NGaWVsZCgp
IGNvbnN0IHsgcmV0dXJuIGlzU3RhdGljQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmlu
ZGluZygpOyB9CiAgICAgICAgIGJvb2wgaXNPdmVycmlkZGVuQnlEdXBsaWNhdGUoKSBjb25zdCB7
IHJldHVybiBtX2lzT3ZlcnJpZGRlbkJ5RHVwbGljYXRlOyB9CiAgICAgICAgIGJvb2wgaXNQcml2
YXRlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYgUHJpdmF0ZTsgfQogICAgICAgICBib29sIGhh
c0NvbXB1dGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbjsgfQpAQCAtNzc2LDE2
ICs3NzcsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBoYXNJ
bnN0YW5jZUZpZWxkcygpIGNvbnN0OwogCisgICAgICAgIGJvb2wgaXNTdGF0aWNDbGFzc0ZpZWxk
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fbm9kZS0+aXNTdGF0aWND
bGFzc0ZpZWxkKCk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgYm9vbCBzaG91bGRDcmVh
dGVMZXhpY2FsU2NvcGVGb3JDbGFzcyhQcm9wZXJ0eUxpc3ROb2RlKik7CiAKLSAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCosIFJl
Z2lzdGVySUQqLCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+Kik7CisgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqLCBSZWdpc3RlcklE
KiwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiosIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qKTsKIAog
ICAgICAgICB2b2lkIGVtaXREZWNsYXJlUHJpdmF0ZUZpZWxkTmFtZXMoQnl0ZWNvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiBzY29wZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0ID0gbnVsbHB0cikgZmluYWwKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVt
aXRCeXRlY29kZShnZW5lcmF0b3IsIGRzdCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAg
ICByZXR1cm4gZW1pdEJ5dGVjb2RlKGdlbmVyYXRvciwgZHN0LCBudWxscHRyLCBudWxscHRyLCBu
dWxscHRyKTsKICAgICAgICAgfQogICAgICAgICB2b2lkIGVtaXRQdXRDb25zdGFudFByb3BlcnR5
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCosIFByb3BlcnR5Tm9kZSYpOwogICAgICAg
ICB2b2lkIGVtaXRTYXZlQ29tcHV0ZWRGaWVsZE5hbWUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBQcm9w
ZXJ0eU5vZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCBk
YjU0MGU5OTFlODMuLjhlNWVkYWExYWQ1NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcApAQCAtMjA5LDcgKzIwOSw3IEBAIFBhcnNlcjxMZXhlclR5cGU+Ojp+UGFyc2Vy
KCkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLUV4cGVjdGVkPHR5cGVuYW1l
IFBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZUlubmVyUmVzdWx0LCBTdHJpbmc+IFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZUlubmVyKGNvbnN0IElkZW50aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBh
cnNlTW9kZSBwYXJzZU1vZGUsIFBhcnNpbmdDb250ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25h
bDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZl
Y3RvcjxKU1RleHRQb3NpdGlvbj4qIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpCitFeHBlY3RlZDx0
eXBlbmFtZSBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VJbm5lclJlc3VsdCwgU3RyaW5nPiBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcihjb25zdCBJZGVudGlmaWVyJiBjYWxsZWVOYW1lLCBT
b3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBQYXJzaW5nQ29udGV4dCBwYXJzaW5nQ29udGV4dCwg
T3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBj
b25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBjbGFzc0ZpZWxkTG9jYXRpb25zKQogewogICAg
IEFTVEJ1aWxkZXIgY29udGV4dChjb25zdF9jYXN0PFZNJj4obV92bSksIG1fcGFyc2VyQXJlbmEs
IGNvbnN0X2Nhc3Q8U291cmNlQ29kZSo+KG1fc291cmNlKSk7CiAgICAgU2NvcGVSZWYgc2NvcGUg
PSBjdXJyZW50U2NvcGUoKTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBFeHBlY3RlZDx0eXBlbmFtZSBQ
YXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VJbm5lclJlc3VsdCwgU3RyaW5nPiBQYXJzZXI8TGV4ZXJU
eXBlPgogICAgICAgICBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4gZnVuY3Rpb25JbmZv
OwogICAgICAgICBpZiAoaXNHZW5lcmF0b3JPckFzeW5jRnVuY3Rpb25Cb2R5UGFyc2VNb2RlKHBh
cnNlTW9kZSkpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlR2VuZXJhdG9yUGFyYW1l
dGVycyhjb250ZXh0LCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQpOwotICAgICAgICBlbHNl
IGlmIChwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6
ZXJNb2RlKQorICAgICAgICBlbHNlIGlmIChwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpD
bGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKQogICAgICAgICAgICAgcGFyYW1ldGVycyA9IGNvbnRl
eHQuY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdCgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBwYXJhbWV0ZXJzID0gcGFyc2VGdW5jdGlvblBhcmFtZXRlcnMoY29udGV4dCwgcGFyc2VNb2Rl
LCBmdW5jdGlvbkluZm8pOwpAQCAtMjU2LDkgKzI1Niw5IEBAIEV4cGVjdGVkPHR5cGVuYW1lIFBh
cnNlcjxMZXhlclR5cGU+OjpQYXJzZUlubmVyUmVzdWx0LCBTdHJpbmc+IFBhcnNlcjxMZXhlclR5
cGU+CiAgICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBhcnNlQXN5bmNHZW5lcmF0b3JGdW5j
dGlvblNvdXJjZUVsZW1lbnRzKGNvbnRleHQsIHBhcnNlTW9kZSwgaXNBcnJvd0Z1bmN0aW9uQm9k
eUV4cHJlc3Npb24sIENoZWNrRm9yU3RyaWN0TW9kZSk7CiAgICAgICAgIGVsc2UgaWYgKHBhcnNp
bmdDb250ZXh0ID09IFBhcnNpbmdDb250ZXh0OjpGdW5jdGlvbkNvbnN0cnVjdG9yKQogICAgICAg
ICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZVNpbmdsZUZ1bmN0aW9uKGNvbnRleHQsIGZ1bmN0
aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pOwotICAgICAgICBlbHNlIGlmIChw
YXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2Rl
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5zdGFuY2VGaWVsZExvY2F0aW9ucyAmJiAhaW5zdGFu
Y2VGaWVsZExvY2F0aW9ucy0+aXNFbXB0eSgpKTsKLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRz
ID0gcGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyhjb250ZXh0LCAq
aW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7CisgICAgICAgIGVsc2UgaWYgKHBhcnNlTW9kZSA9PSBT
b3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpIHsKKyAgICAgICAgICAg
IEFTU0VSVChjbGFzc0ZpZWxkTG9jYXRpb25zICYmICFjbGFzc0ZpZWxkTG9jYXRpb25zLT5pc0Vt
cHR5KCkpOworICAgICAgICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZUNsYXNzRmllbGRJbml0
aWFsaXplclNvdXJjZUVsZW1lbnRzKGNvbnRleHQsICpjbGFzc0ZpZWxkTG9jYXRpb25zKTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBhcnNlU291cmNlRWxl
bWVudHMoY29udGV4dCwgQ2hlY2tGb3JTdHJpY3RNb2RlKTsKICAgICB9CkBAIC0yMTc1LDcgKzIx
NzUsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogc3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZShT
b3VyY2VQYXJzZU1vZGUgbW9kZSkKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1v
ZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Ok1vZHVsZUFuYWx5emVNb2RlOgogICAgIGNh
c2UgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVFdmFsdWF0ZU1vZGU6Ci0gICAgY2FzZSBTb3VyY2VQ
YXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGU6CisgICAgY2FzZSBTb3VyY2VQ
YXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAiIjsKICAgICB9CkBAIC0yMjE3LDcg
KzIyMTcsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKFNvdXJj
ZVBhcnNlTW9kZSBtb2RlKQogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZToK
ICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlQW5hbHl6ZU1vZGU6CiAgICAgY2FzZSBT
b3VyY2VQYXJzZU1vZGU6Ok1vZHVsZUV2YWx1YXRlTW9kZToKLSAgICBjYXNlIFNvdXJjZVBhcnNl
TW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNl
TW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuICIiOwogICAgIH0KQEAgLTI4NzMsNyArMjg3
MywxNiBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4cHJlc3Npb24g
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MoVAogICAgIFRyZWVFeHByZXNzaW9uIGNvbnN0
cnVjdG9yID0gMDsKICAgICBUcmVlUHJvcGVydHlMaXN0IGNsYXNzRWxlbWVudHMgPSAwOwogICAg
IFRyZWVQcm9wZXJ0eUxpc3QgY2xhc3NFbGVtZW50c1RhaWwgPSAwOwotICAgIHVuc2lnbmVkIG51
bUNvbXB1dGVkRmllbGRzID0gMDsKKyAgICAvLyBXZSBzdG9yZSB0aGUgY29tcHV0ZWQgZmllbGQg
cHJvcGVydHkga2V5cyBzZXBhcmF0ZWRseSBmb3IKKyAgICAvLyBpbnN0YW5jZSBhbmQgc3RhdGlj
IGZpZWxkcyAod2l0aCBldmVuIGFuZCBvZGQgaW5kZXhlcywKKyAgICAvLyByZXNwZWN0aXZlbHkp
LiBXZSBkbyB0aGlzIGJlY2F1c2UgdGhlIHByb3BlcnR5IG5hbWVzIGFyZQorICAgIC8vIGV2YWx1
YXRlZCBpbiBzb3VyY2UgY29kZSBvcmRlciwgc28gd2UgbmVlZCBhbiBlYXN5IHdheSB0bworICAg
IC8vIGNyZWF0ZSBhbGwgdGhlIGluZGV4ZXMgbm93LCBidXQgdGhlIGZpZWxkcyB0aGVtc2VsdmVz
IGFyZQorICAgIC8vIGluaXRpYWxpemVkIGluIGEgZGlmZmVyZW50IG9yZGVyIChzdGF0aWMgZmly
c3QsIHRoZW4gaW5zdGFuY2UpLAorICAgIC8vIHNvIHRoZXJlIG5lZWRzIHRvIGJlIGEgc3RyYWln
aHRmb3J3YXJkIG1lY2hhbmlzbSB0byByZXRyaWV2ZQorICAgIC8vIHRoZSByaWdodCBpbmRleCB3
aXRob3V0IHRoZSB3aG9sZSBsaXN0IG9mIGZpZWxkcyBpbiBzb3VyY2UgY29kZQorICAgIC8vIG9y
ZGVyLgorICAgIHVuc2lnbmVkIG5leHRJbnN0YW5jZUNvbXB1dGVkRmllbGRJRCA9IDAsIG5leHRT
dGF0aWNDb21wdXRlZEZpZWxkSUQgPSAxOwogICAgIHdoaWxlICghbWF0Y2goQ0xPU0VCUkFDRSkp
IHsKICAgICAgICAgaWYgKG1hdGNoKFNFTUlDT0xPTikpIHsKICAgICAgICAgICAgIG5leHQoKTsK
QEAgLTI5ODMsMTUgKzI5OTIsMjMgQEAgcGFyc2VNZXRob2Q6CiAgICAgICAgICAgICB0eXBlID0g
c3RhdGljX2Nhc3Q8UHJvcGVydHlOb2RlOjpUeXBlPih0eXBlIHwgKGlzR2V0dGVyID8gUHJvcGVy
dHlOb2RlOjpHZXR0ZXIgOiBQcm9wZXJ0eU5vZGU6OlNldHRlcikpOwogICAgICAgICAgICAgcHJv
cGVydHkgPSBwYXJzZUdldHRlclNldHRlcihjb250ZXh0LCBhbHdheXNTdHJpY3RJbnNpZGVDbGFz
cywgdHlwZSwgbWV0aG9kU3RhcnQsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgdGFnKTsKICAgICAg
ICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7
Ci0gICAgICAgIH0gZWxzZSBpZiAoT3B0aW9uczo6dXNlUHVibGljQ2xhc3NGaWVsZHMoKSAmJiAh
bWF0Y2goT1BFTlBBUkVOKSAmJiB0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpJbnN0YW5jZSAmJiBw
YXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlKSB7CisgICAgICAgIH0gZWxz
ZSBpZiAoT3B0aW9uczo6dXNlUHVibGljQ2xhc3NGaWVsZHMoKSAmJiAhbWF0Y2goT1BFTlBBUkVO
KSAmJiBwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoIWlzR2V0dGVyICYmICFpc1NldHRlcik7CiAgICAgICAgICAgICBpZiAoaWRl
bnQpIHsKICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50ID09IHByb3Bl
cnR5TmFtZXMuY29uc3RydWN0b3IsICJDYW5ub3QgZGVjbGFyZSBjbGFzcyBmaWVsZCBuYW1lZCAn
Y29uc3RydWN0b3InIik7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKCppZGVu
dCA9PSBwcm9wZXJ0eU5hbWVzLmNvbnN0cnVjdG9yUHJpdmF0ZUZpZWxkLCAiQ2Fubm90IGRlY2xh
cmUgcHJpdmF0ZSBjbGFzcyBmaWVsZCBuYW1lZCAnI2NvbnN0cnVjdG9yJyIpOworICAgICAgICAg
ICAgICAgIGlmICh0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpTdGF0aWMpCisgICAgICAgICAgICAg
ICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gcHJvcGVydHlOYW1lcy5wcm90b3R5
cGUsICJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyBmaWVsZCBuYW1lZCAncHJvdG90eXBlJyIpOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY29tcHV0ZWRQcm9wZXJ0eU5hbWUpIHsK
LSAgICAgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgp
Lm1ha2VOdW1lcmljSWRlbnRpZmllcihtX3ZtLCBudW1Db21wdXRlZEZpZWxkcysrKTsKKyAgICAg
ICAgICAgICAgICBpZiAodGFnID09IENsYXNzRWxlbWVudFRhZzo6SW5zdGFuY2UpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5t
YWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgbmV4dEluc3RhbmNlQ29tcHV0ZWRGaWVsZElEKTsK
KyAgICAgICAgICAgICAgICAgICAgbmV4dEluc3RhbmNlQ29tcHV0ZWRGaWVsZElEICs9IDI7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9w
YXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwg
bmV4dFN0YXRpY0NvbXB1dGVkRmllbGRJRCk7CisgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0
aWNDb21wdXRlZEZpZWxkSUQgKz0gMjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgRGVjbGFyYXRpb25SZXN1bHRNYXNrIGRlY2xhcmF0aW9uUmVzdWx0ID0gY2xhc3NTY29wZS0+
ZGVjbGFyZUxleGljYWxWYXJpYWJsZShpZGVudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChkZWNsYXJhdGlvblJlc3VsdCwgZGVjbGFyYXRpb25SZXN1bHQgPT0gRGVjbGFy
YXRpb25SZXN1bHQ6OlZhbGlkKTsKICAgICAgICAgICAgICAgICBjbGFzc1Njb3BlLT51c2VWYXJp
YWJsZShpZGVudCwgZmFsc2UpOwpAQCAtMzA2MiwxMyArMzA3OSwxNyBAQCBwYXJzZU1ldGhvZDoK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3Rh
bmNlRmllbGRJbml0aWFsaXplclNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBj
b25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQordGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlQ2xhc3NGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoVHJlZUJ1aWxk
ZXImIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIGNsYXNzRmllbGRMb2Nh
dGlvbnMpCiB7CiAgICAgVHJlZVNvdXJjZUVsZW1lbnRzIHNvdXJjZUVsZW1lbnRzID0gY29udGV4
dC5jcmVhdGVTb3VyY2VFbGVtZW50cygpOwogICAgIGN1cnJlbnRTY29wZSgpLT5zZXRJc0NsYXNz
U2NvcGUoKTsKIAotICAgIHVuc2lnbmVkIG51bUNvbXB1dGVkRmllbGRzID0gMDsKLSAgICBmb3Ig
KGF1dG8gbG9jYXRpb24gOiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKSB7CisgICAgLy8gUHJvcGVy
dHkga2V5cyBmb3IgY29tcHV0ZWQgZmllbGRzIHN0YXJ0IGF0IDAgZm9yIGluc3RhbmNlCisgICAg
Ly8gZmllbGRzLCBhdCAxIGZvciBzdGF0aWMgZmllbGRzLiBXZSdsbCBidW1wIHRoZSBjb3VudGVy
IGJ5IG9uZQorICAgIC8vIGlmIHdlIGV2ZXIgZmluZCBvbmUgc3RhdGljIGZpZWxkLCBzaW5jZSB0
aGF0IG1lYW5zIHRoZXknbGwgYWxsCisgICAgLy8gYmUgc3RhdGljIGZpZWxkcy4KKyAgICB1bnNp
Z25lZCBuZXh0Q29tcHV0ZWRGaWVsZElEID0gMDsKKyAgICBmb3IgKGF1dG8gbG9jYXRpb24gOiBj
bGFzc0ZpZWxkTG9jYXRpb25zKSB7CiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gd29ycnkg
YWJvdXQgaGFzTGluZVRlcm1pbmF0b3JCZWZvcmVUb2tlbgogICAgICAgICAvLyBvbiBjbGFzcyBm
aWVsZHMsIHNvIHdlIHNldCB0aGlzIHZhbHVlIHRvIGZhbHNlLgogICAgICAgICBMZXhlclN0YXRl
IGxleGVyU3RhdGUgeyBsb2NhdGlvbi5vZmZzZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2Nh
dGlvbi5saW5lU3RhcnRPZmZzZXQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9jYXRpb24ubGlu
ZSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2NhdGlvbi5saW5lKSwgZmFsc2UgfTsKQEAgLTMw
NzgsNiArMzA5OSwxNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VF
bGVtZW50cyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZQogICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9IG51bGxwdHI7CiAgICAgICAgIFRyZWVFeHByZXNzaW9uIGNvbXB1
dGVkUHJvcGVydHlOYW1lID0gMDsKICAgICAgICAgRGVmaW5lRmllbGROb2RlOjpUeXBlIHR5cGUg
PSBEZWZpbmVGaWVsZE5vZGU6OlR5cGU6Ok5hbWU7CisKKyAgICAgICAgaWYgKG1hdGNoKFJFU0VS
VkVEX0lGX1NUUklDVCkgJiYgKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlO
YW1lcy0+c3RhdGljS2V5d29yZCkgeworICAgICAgICAgICAgaWRlbnQgPSBtX3Rva2VuLm1fZGF0
YS5pZGVudDsKKyAgICAgICAgICAgIEFTU0VSVChpZGVudCk7CisgICAgICAgICAgICBuZXh0KCk7
CisgICAgICAgICAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSB8fCBtYXRjaCAoRVFVQUwpIHx8IG1h
dGNoKENMT1NFQlJBQ0UpIHx8IG1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9rZW4o
KSkKKyAgICAgICAgICAgICAgICBnb3RvIHZhbGlkRmllbGQ7CisgICAgICAgICAgICBpZiAoIW5l
eHRDb21wdXRlZEZpZWxkSUQpCisgICAgICAgICAgICAgICAgbmV4dENvbXB1dGVkRmllbGRJRCsr
OworICAgICAgICB9CisKICAgICAgICAgc3dpdGNoIChtX3Rva2VuLm1fdHlwZSkgewogICAgICAg
ICBjYXNlIFBSSVZBVEVOQU1FOgogICAgICAgICAgICAgdHlwZSA9IERlZmluZUZpZWxkTm9kZTo6
VHlwZTo6UHJpdmF0ZU5hbWU7CkBAIC0zMTA1LDcgKzMxMzcsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJ
bnN0YW5jZQogICAgICAgICAgICAgY29tcHV0ZWRQcm9wZXJ0eU5hbWUgPSBwYXJzZUFzc2lnbm1l
bnRFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UoY29tcHV0ZWRQ
cm9wZXJ0eU5hbWUsICJDYW5ub3QgcGFyc2UgY29tcHV0ZWQgcHJvcGVydHkgbmFtZSIpOwogICAg
ICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIs
ICJjb21wdXRlZCBwcm9wZXJ0eSBuYW1lIik7Ci0gICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNl
ckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihtX3ZtLCBudW1D
b21wdXRlZEZpZWxkcysrKTsKKyAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRl
bnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKG1fdm0sIG5leHRDb21wdXRlZEZp
ZWxkSUQpOworICAgICAgICAgICAgbmV4dENvbXB1dGVkRmllbGRJRCArPSAyOwogICAgICAgICAg
ICAgdHlwZSA9IERlZmluZUZpZWxkTm9kZTo6VHlwZTo6Q29tcHV0ZWROYW1lOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0zMTE0LDYgKzMxNDcsNyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VJbnN0YW5jZQogICAgICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRva2VuKCk7
CiAgICAgICAgIH0KIAorICAgIHZhbGlkRmllbGQ6CiAgICAgICAgIC8vIE9ubHkgdmFsaWQgY2xh
c3MgZmllbGRzIGFyZSBoYW5kbGVkIGluIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgIEFTU0VSVCht
YXRjaChFUVVBTCkgfHwgbWF0Y2goU0VNSUNPTE9OKSB8fCBtYXRjaChDTE9TRUJSQUNFKSB8fCBt
X2xleGVyLT5oYXNMaW5lVGVybWluYXRvckJlZm9yZVRva2VuKCkpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuaAppbmRleCAxZjVkOTMyYzNmNTcuLmQ4MGI5MjI3N2NkMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCkBAIC0yNjAsNyArMjYwLDcgQEAgcHVi
bGljOgogICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6R2V0dGVyTW9kZToKICAgICAgICAg
Y2FzZSBTb3VyY2VQYXJzZU1vZGU6OlNldHRlck1vZGU6CiAgICAgICAgIGNhc2UgU291cmNlUGFy
c2VNb2RlOjpNZXRob2RNb2RlOgotICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFu
Y2VGaWVsZEluaXRpYWxpemVyTW9kZToKKyAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkNs
YXNzRmllbGRJbml0aWFsaXplck1vZGU6CiAgICAgICAgICAgICBzZXRJc0Z1bmN0aW9uKCk7CiAg
ICAgICAgICAgICBicmVhazsKIApAQCAtMTcxMiw3ICsxNzEyLDcgQEAgcHJpdmF0ZToKICAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJzZUFzeW5j
RnVuY3Rpb25Tb3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYsIFNvdXJjZVBhcnNlTW9kZSwgYm9v
bCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiwgU291cmNlRWxlbWVudHNNb2RlKTsKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJzZUFz
eW5jR2VuZXJhdG9yRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYsIFNvdXJjZVBh
cnNlTW9kZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiwgU291cmNlRWxlbWVu
dHNNb2RlKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVt
ZW50cyBwYXJzZVNpbmdsZUZ1bmN0aW9uKFRyZWVCdWlsZGVyJiwgT3B0aW9uYWw8aW50PiBmdW5j
dGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uKTsKLSAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJzZUluc3RhbmNlRmllbGRJbml0
aWFsaXplclNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiwgY29uc3QgVmVjdG9yPEpTVGV4dFBv
c2l0aW9uPiYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVs
ZW1lbnRzIHBhcnNlQ2xhc3NGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoVHJlZUJ1aWxk
ZXImLCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+Jik7CiAgICAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oVHJlZUJ1
aWxkZXImLCBjb25zdCBJZGVudGlmaWVyKiYgZGlyZWN0aXZlLCB1bnNpZ25lZCogZGlyZWN0aXZl
TGl0ZXJhbExlbmd0aCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZW50IHBhcnNlU3RhdGVtZW50KFRyZWVCdWlsZGVyJiwgY29uc3QgSWRlbnRpZmllciomIGRp
cmVjdGl2ZSwgdW5zaWduZWQqIGRpcmVjdGl2ZUxpdGVyYWxMZW5ndGggPSBudWxscHRyKTsKICAg
ICBlbnVtIGNsYXNzIEV4cG9ydFR5cGUgeyBFeHBvcnRlZCwgTm90RXhwb3J0ZWQgfTsKQEAgLTIw
NTUsNyArMjA1NSw3IEBAIHByaXZhdGU6CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+
CiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KLXN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2Rl
PiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UoUGFyc2VyRXJyb3ImIGVycm9yLCBjb25zdCBJZGVu
dGlmaWVyJiBjYWxsZWVOYW1lLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBQYXJzaW5nQ29u
dGV4dCBwYXJzaW5nQ29udGV4dCwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFy
YW1ldGVyc0VuZFBvc2l0aW9uLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiB2YXJpYWJsZXNV
bmRlclREWiwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogaW5zdGFuY2VGaWVsZExvY2F0
aW9ucykKK3N0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2UoUGFyc2VyRXJyb3ImIGVycm9yLCBjb25zdCBJZGVudGlmaWVyJiBjYWxsZWVOYW1lLCBTb3Vy
Y2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBQYXJzaW5nQ29udGV4dCBwYXJzaW5nQ29udGV4dCwgT3B0
aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBjb25z
dCBWYXJpYWJsZUVudmlyb25tZW50KiB2YXJpYWJsZXNVbmRlclREWiwgY29uc3QgVmVjdG9yPEpT
VGV4dFBvc2l0aW9uPiogY2xhc3NGaWVsZExvY2F0aW9ucykKIHsKICAgICBpbnQgZXJyTGluZTsK
ICAgICBTdHJpbmcgZXJyTXNnOwpAQCAtMjA3NSw3ICsyMDc1LDcgQEAgc3RkOjp1bmlxdWVfcHRy
PFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShQYXJzZXJFcnJvciYgZXJyb3Is
IGNvbnN0IEkKICAgICAgICAgdmFyaWFibGVzVW5kZXJURFotPmNvcHlQcml2YXRlTmFtZXNUbyhj
dXJyZW50U2NvcGUoKS0+bGV4aWNhbFZhcmlhYmxlcygpKTsKICAgICB9CiAKLSAgICBhdXRvIHBh
cnNlUmVzdWx0ID0gcGFyc2VJbm5lcihjYWxsZWVOYW1lLCBwYXJzZU1vZGUsIHBhcnNpbmdDb250
ZXh0LCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBpbnN0YW5jZUZp
ZWxkTG9jYXRpb25zKTsKKyAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VJbm5lcihjYWxsZWVO
YW1lLCBwYXJzZU1vZGUsIHBhcnNpbmdDb250ZXh0LCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1l
dGVyc0VuZFBvc2l0aW9uLCBjbGFzc0ZpZWxkTG9jYXRpb25zKTsKIAogICAgIGludCBsaW5lTnVt
YmVyID0gbV9sZXhlci0+bGluZU51bWJlcigpOwogICAgIGJvb2wgbGV4RXJyb3IgPSBtX2xleGVy
LT5zYXdFcnJvcigpOwpAQCAtMjE2MCw3ICsyMTYwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFBhcnNl
ZE5vZGU+IHBhcnNlKAogICAgIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUgPSBFdmFs
Q29udGV4dFR5cGU6Ok5vbmUsCiAgICAgRGVidWdnZXJQYXJzZURhdGEqIGRlYnVnZ2VyUGFyc2VE
YXRhID0gbnVsbHB0ciwKICAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiB2YXJpYWJsZXNV
bmRlclREWiA9IG51bGxwdHIsCi0gICAgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogaW5z
dGFuY2VGaWVsZExvY2F0aW9ucyA9IG51bGxwdHIsCisgICAgY29uc3QgVmVjdG9yPEpTVGV4dFBv
c2l0aW9uPiogY2xhc3NGaWVsZExvY2F0aW9ucyA9IG51bGxwdHIsCiAgICAgYm9vbCBpc0luc2lk
ZU9yZGluYXJ5RnVuY3Rpb24gPSBmYWxzZSkKIHsKICAgICBBU1NFUlQoIXNvdXJjZS5wcm92aWRl
cigpLT5zb3VyY2UoKS5pc051bGwoKSk7CkBAIC0yMTcyLDcgKzIxNzIsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+
IHJlc3VsdDsKICAgICBpZiAoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlzOEJpdCgpKSB7
CiAgICAgICAgIFBhcnNlcjxMZXhlcjxMQ2hhcj4+IHBhcnNlcih2bSwgc291cmNlLCBidWlsdGlu
TW9kZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgcGFyc2VNb2RlLCBzdXBlckJpbmRpbmcsIGRl
ZmF1bHRDb25zdHJ1Y3RvcktpbmRGb3JUb3BMZXZlbEZ1bmN0aW9uLCBkZXJpdmVkQ29udGV4dFR5
cGUsIGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4oKSwgZXZhbENvbnRleHRUeXBlLCBkZWJ1Z2dlclBh
cnNlRGF0YSwgaXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9uKTsKLSAgICAgICAgcmVzdWx0ID0gcGFy
c2VyLnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yLCBuYW1lLCBwYXJzZU1vZGUsIGlzRXZhbE5vZGU8
UGFyc2VkTm9kZT4oKSA/IFBhcnNpbmdDb250ZXh0OjpFdmFsIDogUGFyc2luZ0NvbnRleHQ6OlBy
b2dyYW0sIFdURjo6bnVsbG9wdCwgdmFyaWFibGVzVW5kZXJURFosIGluc3RhbmNlRmllbGRMb2Nh
dGlvbnMpOworICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3Is
IG5hbWUsIHBhcnNlTW9kZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpID8gUGFyc2luZ0NvbnRl
eHQ6OkV2YWwgOiBQYXJzaW5nQ29udGV4dDo6UHJvZ3JhbSwgV1RGOjpudWxsb3B0LCB2YXJpYWJs
ZXNVbmRlclREWiwgY2xhc3NGaWVsZExvY2F0aW9ucyk7CiAgICAgICAgIGlmIChwb3NpdGlvbkJl
Zm9yZUxhc3ROZXdsaW5lKQogICAgICAgICAgICAgKnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUg
PSBwYXJzZXIucG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSgpOwogICAgICAgICBpZiAoYnVpbHRp
bk1vZGUgPT0gSlNQYXJzZXJCdWlsdGluTW9kZTo6QnVpbHRpbikgewpAQCAtMjE4NSw3ICsyMTg1
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHBhcnNlKAogICAgIH0gZWxzZSB7CiAg
ICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZGVmYXVsdENvbnN0cnVjdG9yS2luZEZvclRvcExl
dmVsRnVuY3Rpb24gPT0gQ29uc3RydWN0b3JLaW5kOjpOb25lLCAiQnVpbHRpbkV4ZWN1dGFibGVz
J3Mgc3BlY2lhbCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGFsd2F5cyB1c2UgYSA4LWJpdCBzdHJpbmci
KTsKICAgICAgICAgUGFyc2VyPExleGVyPFVDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIGJ1aWx0
aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBwYXJzZU1vZGUsIHN1cGVyQmluZGluZywg
ZGVmYXVsdENvbnN0cnVjdG9yS2luZEZvclRvcExldmVsRnVuY3Rpb24sIGRlcml2ZWRDb250ZXh0
VHlwZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpLCBldmFsQ29udGV4dFR5cGUsIGRlYnVnZ2Vy
UGFyc2VEYXRhLCBpc0luc2lkZU9yZGluYXJ5RnVuY3Rpb24pOwotICAgICAgICByZXN1bHQgPSBw
YXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IsIG5hbWUsIHBhcnNlTW9kZSwgaXNFdmFsTm9k
ZTxQYXJzZWROb2RlPigpID8gUGFyc2luZ0NvbnRleHQ6OkV2YWwgOiBQYXJzaW5nQ29udGV4dDo6
UHJvZ3JhbSwgV1RGOjpudWxsb3B0LCB2YXJpYWJsZXNVbmRlclREWiwgaW5zdGFuY2VGaWVsZExv
Y2F0aW9ucyk7CisgICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJv
ciwgbmFtZSwgcGFyc2VNb2RlLCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCkgPyBQYXJzaW5nQ29u
dGV4dDo6RXZhbCA6IFBhcnNpbmdDb250ZXh0OjpQcm9ncmFtLCBXVEY6Om51bGxvcHQsIHZhcmlh
Ymxlc1VuZGVyVERaLCBjbGFzc0ZpZWxkTG9jYXRpb25zKTsKICAgICAgICAgaWYgKHBvc2l0aW9u
QmVmb3JlTGFzdE5ld2xpbmUpCiAgICAgICAgICAgICAqcG9zaXRpb25CZWZvcmVMYXN0TmV3bGlu
ZSA9IHBhcnNlci5wb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKCk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCmluZGV4IDY0MTMxMmNjYzliYy4uNDE1
MzA2N2Y2NWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ck1vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5o
CkBAIC02Niw3ICs2Niw3IEBAIGVudW0gY2xhc3MgU291cmNlUGFyc2VNb2RlIDogdWludDhfdCB7
CiAgICAgQXN5bmNHZW5lcmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlID0gMTYsCiAgICAgQXN5bmNH
ZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZSAgID0gMTcsCiAgICAgR2VuZXJhdG9yV3JhcHBlck1l
dGhvZE1vZGUgICAgICAgID0gMTgsCi0gICAgSW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSAg
ICAgID0gMTksCisgICAgQ2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZSAgICAgICAgID0gMTksCiB9
OwogCiBjbGFzcyBTb3VyY2VQYXJzZU1vZGVTZXQgeyAKQEAgLTExNiw3ICsxMTYsNyBAQCBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNGdW5jdGlvblBhcnNlTW9kZShTb3VyY2VQYXJzZU1vZGUgcGFyc2VN
b2RlKQogICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yQm9keU1vZGUsCiAg
ICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2Rl
LAogICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBlck1ldGhvZE1v
ZGUsCi0gICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9k
ZSkuY29udGFpbnMocGFyc2VNb2RlKTsKKyAgICAgICAgU291cmNlUGFyc2VNb2RlOjpDbGFzc0Zp
ZWxkSW5pdGlhbGl6ZXJNb2RlKS5jb250YWlucyhwYXJzZU1vZGUpOwogfSAKIAogQUxXQVlTX0lO
TElORSBib29sIGlzQXN5bmNGdW5jdGlvblBhcnNlTW9kZShTb3VyY2VQYXJzZU1vZGUgcGFyc2VN
b2RlKSAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9u
UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmNwcAppbmRleCAyMzYxYWQ3MTNiZmYuLjAwMGJiNzE5MDdhYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcApAQCAt
MTA5LDcgKzEwOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm90
b0Z1bmNUb1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqCiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGU6Ci0g
ICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2Rl
OgorICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9k
ZToKICAgICAgICAgICAgIGZ1bmN0aW9uSGVhZGVyID0gIiI7CiAgICAgICAgICAgICBicmVhazsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAppbmRleCBk
NTU2Y2RlZTYyOTguLmZmZWU4ZjUwZGExZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAKQEAgLTQyNiw3ICs0MjYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVgogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBwZXJG
dW5jdGlvbk1vZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3Jh
cHBlck1ldGhvZE1vZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkdlbmVyYXRvcldyYXBw
ZXJNZXRob2RNb2RlOgotICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5p
dGlhbGl6ZXJNb2RlOgorICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlh
bGl6ZXJNb2RlOgogICAgICAgICBpZiAoIWZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKS0+aXNJblN0
cmljdENvbnRleHQoKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbGVy
KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiRnVuY3Rpb24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUgc3RyaWN0IGNh
bGxlciJfcykpOwotLSAKMi4yNi4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404819</attachid>
            <date>2020-07-21 06:52:24 -0700</date>
            <delta_ts>2020-07-28 04:34:17 -0700</delta_ts>
            <desc>Add support for static public fields, v5</desc>
            <filename>0001-JSC-Add-support-for-static-public-class-fields.patch</filename>
            <type>text/plain</type>
            <size>74433</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSAwN2M5ZWJiM2U3YzE0MmQ1ZmNlNjdiNjBkYzhkYThmMGMwMzZhMDA2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/WGFuPTIwTD1DMz1CM3Blej89IDx4YW5AaWdh
bGlhLmNvbT4KRGF0ZTogVGh1LCAxNiBBcHIgMjAyMCAxODoyMToxMyArMDIwMApTdWJqZWN0OiBb
UEFUQ0hdIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcwog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5NQoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpKU1Rlc3RzOgoKRW5hYmxlIHN0YXRpYyBwdWJsaWMgZmllbGRz
LCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJvbSB0aGUKVjggcHJvamVjdC4gQWxzbyBz
cGxpdCB0aGUgc3VwcG9ydCBjb2RlIGludG8gYSBzZXBhcmF0ZSBmaWxlCihoYXJtb255LXN1cHBv
cnQuanMpIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgoKKiB0ZXN0MjYyL2NvbmZpZy55YW1sOiBlbmFi
bGUgc3RhdGljIHB1YmxpYyBmaWVsZHMuCiogc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255Lmpz
OgoqIHN0cmVzcy9jbGFzcy1maWVsZHMtc3RhdGljLWhhcm1vbnkuanM6IEFkZGVkLgoobG9hZC5D
KToKKGxvYWQpOgooYXNzZXJ0RXF1YWxzLkMuaGFzT3duUHJvcGVydHkpOgooYXNzZXJ0RXF1YWxz
LkMpOgooYXNzZXJ0RXF1YWxzKToKKGFzc2VydEVxdWFscy5DLmQpOgooYXNzZXJ0RXF1YWxzLkMu
ZSk6Cihhc3NlcnRFcXVhbHMuQy5jKToKKGFzc2VydEVxdWFscy5sZXQuZCk6CihDKToKKEMuYy5B
KToKKEMuYyk6CihDLmMuQyk6Cihhc3NlcnRFcXVhbHMuQi5zZXQgZCk6Cihhc3NlcnRFcXVhbHMu
Qik6Cihhc3NlcnRFcXVhbHMuQy5ydW4pOgooeC4pOgooeC5DLnJ1bik6Cih4LkMpOgooeCk6Cihw
cm90b3R5cGUueCk6Cihwcm90b3R5cGUueC5DLnByb3RvdHlwZS5ydW4pOgoocHJvdG90eXBlLngu
Qy5ydW4pOgoocHJvdG90eXBlLnguQyk6Cih5Lik6Cih5LkMucHJvdG90eXBlLnJ1bik6Cih5LkMu
cnVuKToKKHkuQyk6Cih5KToKKHByb3RvdHlwZS55LkMpOgoocHJvdG90eXBlLnkuRCk6Cihhc3Nl
cnRFcXVhbHMuQy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpOgooYXNzZXJ0RXF1YWxzLlgucCk6
Cihhc3NlcnRFcXVhbHMuWCk6CihYLnQpOgooWCk6Ciogc3RyZXNzL2hhcm1vbnktc3VwcG9ydC5q
czogQWRkZWQuCihjbGFzc09mKToKKGRlZXBPYmplY3RFcXVhbHMpOgooZGVlcEVxdWFscyk6Cihm
YWlsKToKKGFzc2VydEluc3RhbmNlb2YpOgooYXNzZXJ0RXF1YWxzKToKKGFzc2VydE5vdEVxdWFs
cyk6Cihhc3NlcnRUcnVlKToKKGFzc2VydEZhbHNlKToKKGFzc2VydFRocm93cyk6CgpTb3VyY2Uv
SmF2YVNjcmlwdENvcmU6CgpBZGQgc3VwcG9ydCBmb3Igc3RhdGljIHB1YmxpYyBjbGFzcyBmaWVs
ZHMuIFdlIGNhbiByZXVzZSBtb3N0IG9mCnRoZSBleGlzdGluZyBtYWNoaW5lcnkgYXZhaWxhYmxl
IGZvciBpbnN0YW5jZSBmaWVsZHMsIHdpdGggYQpjb3VwbGUgb2YgaXNzdWVzIHRoYXQgbWVyaXQg
c3BlY2lhbCBjb21tZW50OgoKU3RhdGljIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIGxpa2UgaW5z
dGFuY2UgZmllbGRzLCB3aXRoIGEKc3ludGhldGljIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUgdG8g
YWxsb3cgdXMgdG8gdHJpdmlhbGx5IGZvbGxvdwp0aGUgc2NvcGluZyBydWxlcyBpbiB0aGUgc3Bl
Yy4gQXMgaXQgaGFwcGVucyB3aXRoIGluc3RhbmNlIGZpZWxkcwp0aGlzIGNvdWxkIGJlIGlubGlu
ZWQgaW4gYSBmdXR1cmUgcGF0Y2guCgpUaGUgd2F5IHdlIHN0b3JlIGNvbXB1dGVkIHByb3BlcnR5
IGtleXMgbmVlZHMgdG8gYmUKbW9kaWZpZWQuIEJlZm9yZSB3ZSBhc3N1bWVkIHRoZSBzb3VyY2Ug
Y29kZSBvcmRlciB3b3VsZCBiZQppZGVudGljYWwgdG8gdGhlIGV2YWx1YXRpb24gb3JkZXIgKHdo
aWNoIHdhcyB0cnVlIGZvciBpbnN0YW5jZQpmaWVsZHMpLiBXaXRoIHN0YXRpYyBmaWVsZHMgdGhp
cyBjYW4gbm90IGJlIHRoZSBjYXNlLCBzaW5jZSBzdGF0aWMKZmllbGRzIGFyZSBhbHdheXMgaW5p
dGlhbGl6ZWQgZmlyc3QuIFRvIGFsbG93IGZvciB0aGlzIG1pc21hdGNoCnRoZSBjb21wdXRlZCBw
cm9wZXJ0eSBrZXlzIGZvciBpbnN0YW5jZSBmaWVsZHMgYXJlIHN0b3JlZCB3aXRoIGFuCmV2ZW4g
aWRlbnRpZmllciwgYW5kIHRob3NlIGZvciBzdGF0aWMgZmllbGRzIGFyZSBzdG9yZWQgd2l0aCBh
bgpvZGQgaWRlbnRpZmllci4gVGhlIGZpZWxkIHBhcnNlciwgdXBvbiBmaWd1cmluZyBvdXQgd2hl
dGhlciBpdCdzCmluaXRpYWxpemluZyB0aGUgc3RhdGljIG9yIHRoZSBpbnN0YW5jZSBmaWVsZHMs
IHdpbGwga25vdyB3aGVyZSB0bwpsb29rIHVwIHRoZSBrZXkuCgpGb3IgZXhhbXBsZToKCmNsYXNz
IEZPTyB7CiAgWyJhIl0gPSAwOwogIHN0YXRpYyBbImIiXSA9IDE7CiAgc3RhdGljIFsiYyJdID0g
MjsKICBbImQiXSA9IDM7Cn0KCkhlcmUgd2Ugd2lsbCBldmFsdWF0ZSB0aGUgY29tcHV0ZWQgZmll
bGQgbmFtZXMgaW4gdGhlIGZvbGxvd2luZwpvcmRlcjogYSwgYiwgYywgZDsgYnV0IHdlIHdpbGwg
aW5pdGlhbGl6ZSB0aGUgZmllbGRzIGluIHRoZQpmb2xsb3dpbmcgb3JkZXI6IGIsIGMsIGEsIGQu
IFNpbmNlIGVhY2ggZ3JvdXAgb2YgZmllbGRzIGlzCmluaXRpYWxpemVkIGluZGVwZW5kZW50bHkg
d2UgY2FuIHRyaXZpYWxseSByZXRyaWV2ZSB0aGUgcHJvcGVydHkKa2V5cyBmb3IgZWFjaCBncm91
cCBqdXN0IGJ5IGdldHRpbmcgdGhlIG9kZCBwcm9wZXJ0eSBrZXlzIGZvcgpzdGF0aWMgZmllbGRz
IChpbmRleGVzIDEgYW5kIDMpIGFuZCB0aGUgZXZlbiBvbmVzIGZvciBpbnN0YW5jZQpmaWVsZHMg
KGluZGV4ZXMgMCBhbmQgMikuCgoqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmNwcDoKKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKiBieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgoqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHA6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZElu
aXRpYWxpemVyRnVuY3Rpb24pOgoqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgoq
IGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjpl
bWl0Qnl0ZWNvZGUpOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmll
bGROYW1lKToKKEpTQzo6RGVmaW5lRmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpDbGFz
c0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgoqIHBhcnNlci9BU1RCdWlsZGVyLmg6CihKU0M6OkFT
VEJ1aWxkZXI6OmNyZWF0ZURlZmluZUZpZWxkKToKKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5o
OgooSlNDOjpEZWZpbmVGaWVsZE5vZGU6OkRlZmluZUZpZWxkTm9kZSk6CiogcGFyc2VyL05vZGVz
Lmg6CiogcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlu
bmVyKToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MpOgooSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyk6
CiogcGFyc2VyL1BhcnNlci5oOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UpOgooSlND
OjpwYXJzZSk6CiogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKEpTQzo6U3ludGF4Q2hlY2tlcjo6
Y3JlYXRlRGVmaW5lRmllbGQpOgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpTRnVu
Y3Rpb246OnNldEZ1bmN0aW9uTmFtZSk6CgoqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcDoKKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKiBi
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgoqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHA6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcik6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxp
emVyRnVuY3Rpb24pOgooSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWRBcnJvd0Z1bmN0
aW9uTGV4aWNhbEVudmlyb25tZW50KToKKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aDoKKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKEpTQzo6ZW1pdEhvbWVPYmplY3RG
b3JDYWxsZWUpOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpQ
cm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1lKToKKEpTQzo6RGVmaW5l
RmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNv
ZGUpOgoqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKEpTQzo6ZXZhbCk6CiogcGFyc2Vy
L05vZGVzLmg6CiogcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUlubmVyKToKKEpTQzo6c3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZSk6CihKU0M6OnN0
cmluZ0ZvckZ1bmN0aW9uTW9kZSk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNz
KToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NGaWVsZEluaXRpYWxpemVyU291
cmNlRWxlbWVudHMpOgoqIHBhcnNlci9QYXJzZXIuaDoKKEpTQzo6U2NvcGU6OnNldFNvdXJjZVBh
cnNlTW9kZSk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZSk6CihKU0M6OnBhcnNlKToK
KiBwYXJzZXIvUGFyc2VyTW9kZXMuaDoKKEpTQzo6aXNGdW5jdGlvblBhcnNlTW9kZSk6CiogcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CihKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJp
bmcpOgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpTRnVuY3Rpb246OmNhbGxlckdl
dHRlcik6Ci0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDYyICsrKwogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanMgICAgICAg
IHwgMTY1ICstLS0tLQogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255
LmpzIHwgNTAzICsrKysrKysrKysrKysrKysrKwogSlNUZXN0cy9zdHJlc3MvaGFybW9ueS1zdXBw
b3J0LmpzICAgICAgICAgICAgIHwgMTk2ICsrKysrKysKIEpTVGVzdHMvdGVzdDI2Mi9jb25maWcu
eWFtbCAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgIHwgMTA2ICsrKysKIC4uLi9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5jcHAgICB8ICAgNCArLQogLi4uL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmggICAgIHwgIDEyICstCiAuLi4vYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCAgICAgICAgfCAgMTIgKy0KIC4uLi9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaCAgICAgICAgICB8ICAgNiArLQogLi4uL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwICAgICAgICAgICAgIHwgIDY0ICsrLQogLi4uL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcCAgICAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmggICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcCAgICAgICB8ICA2MiArKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmggICAgICAgICB8ICAxNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXJNb2Rlcy5oICAgIHwgICA0ICstCiAuLi4vcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAgICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwICB8ICAgMiArLQogMTggZmlsZXMgY2hhbmdlZCwgMTAwMSBpbnNlcnRpb25z
KCspLCAyMjcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy9zdHJlc3Mv
Y2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0
cy9zdHJlc3MvaGFybW9ueS1zdXBwb3J0LmpzCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA0MTIxN2IyNDBlZjAuLmRlMDZkOWEzYTFiMCAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw2NSBAQAorMjAyMC0wNi0wNSAgWGFuIEzDs3BleiAgPHhhbkBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxk
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxl
IHN0YXRpYyBwdWJsaWMgZmllbGRzLCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJvbSB0
aGUKKyAgICAgICAgVjggcHJvamVjdC4gQWxzbyBzcGxpdCB0aGUgc3VwcG9ydCBjb2RlIGludG8g
YSBzZXBhcmF0ZSBmaWxlCisgICAgICAgIChoYXJtb255LXN1cHBvcnQuanMpIHRvIGF2b2lkIGR1
cGxpY2F0aW9uLgorCisgICAgICAgICogdGVzdDI2Mi9jb25maWcueWFtbDogZW5hYmxlIHN0YXRp
YyBwdWJsaWMgZmllbGRzLgorICAgICAgICAqIHN0cmVzcy9jbGFzcy1maWVsZHMtaGFybW9ueS5q
czoKKyAgICAgICAgKiBzdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGxvYWQuQyk6CisgICAgICAgIChsb2FkKToKKyAgICAgICAgKGFzc2VydEVx
dWFscy5DLmhhc093blByb3BlcnR5KToKKyAgICAgICAgKGFzc2VydEVxdWFscy5DKToKKyAgICAg
ICAgKGFzc2VydEVxdWFscyk6CisgICAgICAgIChhc3NlcnRFcXVhbHMuQy5kKToKKyAgICAgICAg
KGFzc2VydEVxdWFscy5DLmUpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkMuYyk6CisgICAgICAg
IChhc3NlcnRFcXVhbHMubGV0LmQpOgorICAgICAgICAoQyk6CisgICAgICAgIChDLmMuQSk6Cisg
ICAgICAgIChDLmMpOgorICAgICAgICAoQy5jLkMpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkIu
c2V0IGQpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkIpOgorICAgICAgICAoYXNzZXJ0RXF1YWxz
LkMucnVuKToKKyAgICAgICAgKHguKToKKyAgICAgICAgKHguQy5ydW4pOgorICAgICAgICAoeC5D
KToKKyAgICAgICAgKHgpOgorICAgICAgICAocHJvdG90eXBlLngpOgorICAgICAgICAocHJvdG90
eXBlLnguQy5wcm90b3R5cGUucnVuKToKKyAgICAgICAgKHByb3RvdHlwZS54LkMucnVuKToKKyAg
ICAgICAgKHByb3RvdHlwZS54LkMpOgorICAgICAgICAoeS4pOgorICAgICAgICAoeS5DLnByb3Rv
dHlwZS5ydW4pOgorICAgICAgICAoeS5DLnJ1bik6CisgICAgICAgICh5LkMpOgorICAgICAgICAo
eSk6CisgICAgICAgIChwcm90b3R5cGUueS5DKToKKyAgICAgICAgKHByb3RvdHlwZS55LkQpOgor
ICAgICAgICAoYXNzZXJ0RXF1YWxzLkMucHJvdG90eXBlLmhhc093blByb3BlcnR5KToKKyAgICAg
ICAgKGFzc2VydEVxdWFscy5YLnApOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLlgpOgorICAgICAg
ICAoWC50KToKKyAgICAgICAgKFgpOgorICAgICAgICAqIHN0cmVzcy9oYXJtb255LXN1cHBvcnQu
anM6IEFkZGVkLgorICAgICAgICAoY2xhc3NPZik6CisgICAgICAgIChkZWVwT2JqZWN0RXF1YWxz
KToKKyAgICAgICAgKGRlZXBFcXVhbHMpOgorICAgICAgICAoZmFpbCk6CisgICAgICAgIChhc3Nl
cnRJbnN0YW5jZW9mKToKKyAgICAgICAgKGFzc2VydEVxdWFscyk6CisgICAgICAgIChhc3NlcnRO
b3RFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0VHJ1ZSk6CisgICAgICAgIChhc3NlcnRGYWxzZSk6
CisgICAgICAgIChhc3NlcnRUaHJvd3MpOgorCiAyMDIwLTA3LTIwICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0VDTUEtNDAyXSBJbXBsZW1lbnQgSW50bC5E
aXNwbGF5TmFtZXMKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJt
b255LmpzIGIvSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanMKaW5kZXggZGJm
NDZkNTI3YjFlLi4wNjk2ODQ5ZWU2Y2UgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2NsYXNz
LWZpZWxkcy1oYXJtb255LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJt
b255LmpzCkBAIC0zMSwxNzAgKzMxLDcgQEAKIAogInVzZSBzdHJpY3QiOwogCi1mdW5jdGlvbiBj
bGFzc09mKG9iamVjdCkgewotICAgLy8gQXJndW1lbnQgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRl
ZmluZWQuCi0gICB2YXIgc3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9i
amVjdCk7Ci0gICAvLyBTdHJpbmcgaGFzIGZvcm1hdCBbb2JqZWN0IDxDbGFzc05hbWU+XS4KLSAg
IHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDgsIHN0cmluZy5sZW5ndGggLSAxKTsKLX0KLQotLyoq
Ci0gKiBDb21wYXJlcyB0d28gb2JqZWN0cyBmb3Iga2V5L3ZhbHVlIGVxdWFsaXR5LgotICogUmV0
dXJucyB0cnVlIGlmIHRoZXkgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCi0gKi8KLWZ1bmN0
aW9uIGRlZXBPYmplY3RFcXVhbHMoYSwgYikgewotICB2YXIgYVByb3BzID0gT2JqZWN0LmtleXMo
YSk7Ci0gIGFQcm9wcy5zb3J0KCk7Ci0gIHZhciBiUHJvcHMgPSBPYmplY3Qua2V5cyhiKTsKLSAg
YlByb3BzLnNvcnQoKTsKLSAgaWYgKCFkZWVwRXF1YWxzKGFQcm9wcywgYlByb3BzKSkgewotICAg
IHJldHVybiBmYWxzZTsKLSAgfQotICBmb3IgKHZhciBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7
IGkrKykgewotICAgIGlmICghZGVlcEVxdWFscyhhW2FQcm9wc1tpXV0sIGJbYVByb3BzW2ldXSkp
IHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0K
LS8qKgotICogQ29tcGFyZXMgdHdvIEphdmFTY3JpcHQgdmFsdWVzIGZvciB0eXBlIGFuZCB2YWx1
ZSBlcXVhbGl0eS4KLSAqIEl0IGNoZWNrcyBpbnRlcm5hbHMgb2YgYXJyYXlzIGFuZCBvYmplY3Rz
LgotICovCi1mdW5jdGlvbiBkZWVwRXF1YWxzKGEsIGIpIHsKLSAgaWYgKGEgPT09IGIpIHsKLSAg
ICAvLyBDaGVjayBmb3IgLTAuCi0gICAgaWYgKGEgPT09IDApIHJldHVybiAoMSAvIGEpID09PSAo
MSAvIGIpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGlmICh0eXBlb2YgYSAhPSB0eXBlb2Yg
YikgcmV0dXJuIGZhbHNlOwotICBpZiAodHlwZW9mIGEgPT0gJ251bWJlcicpIHJldHVybiBpc05h
TihhKSAmJiBpc05hTihiKTsKLSAgaWYgKHR5cGVvZiBhICE9PSAnb2JqZWN0JyAmJiB0eXBlb2Yg
YSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlOwotICAvLyBOZWl0aGVyIGEgbm9yIGIgaXMg
cHJpbWl0aXZlLgotICB2YXIgb2JqZWN0Q2xhc3MgPSBjbGFzc09mKGEpOwotICBpZiAob2JqZWN0
Q2xhc3MgIT09IGNsYXNzT2YoYikpIHJldHVybiBmYWxzZTsKLSAgaWYgKG9iamVjdENsYXNzID09
PSAnUmVnRXhwJykgewotICAgIC8vIEZvciBSZWdFeHAsIGp1c3QgY29tcGFyZSBwYXR0ZXJuIGFu
ZCBmbGFncyB1c2luZyBpdHMgdG9TdHJpbmcuCi0gICAgcmV0dXJuIChhLnRvU3RyaW5nKCkgPT09
IGIudG9TdHJpbmcoKSk7Ci0gIH0KLSAgLy8gRnVuY3Rpb25zIGFyZSBvbmx5IGlkZW50aWNhbCB0
byB0aGVtc2VsdmVzLgotICBpZiAob2JqZWN0Q2xhc3MgPT09ICdGdW5jdGlvbicpIHJldHVybiBm
YWxzZTsKLSAgaWYgKG9iamVjdENsYXNzID09PSAnQXJyYXknKSB7Ci0gICAgdmFyIGVsZW1lbnRD
b3VudCA9IDA7Ci0gICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSB7Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewot
ICAgICAgaWYgKCFkZWVwRXF1YWxzKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGlmIChvYmplY3RDbGFzcyA9PSAnU3RyaW5nJyB8fCBv
YmplY3RDbGFzcyA9PSAnTnVtYmVyJyB8fAotICAgICAgb2JqZWN0Q2xhc3MgPT0gJ0Jvb2xlYW4n
IHx8IG9iamVjdENsYXNzID09ICdEYXRlJykgewotICAgIGlmIChhLnZhbHVlT2YoKSAhPT0gYi52
YWx1ZU9mKCkpIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gZGVlcE9iamVjdEVxdWFscyhh
LCBiKTsKLX0KLQotLyoqCi0gKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgdGhlIHVz
ZXJfbWVzc2FnZSAoaWYgYW55KSBhbmQgdGhlIHZhbHVlcy4KLSAqLwotZnVuY3Rpb24gZmFpbChl
eHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSA9ICcnKSB7Ci0gIC8vIFRPRE8oY2lyYSk6IFJl
cGxhY2UgU3RyaW5nIHdpdGggUHJldHR5UHJpbnQgZm9yIG9iamVjdHMgYW5kIGFycmF5cy4KLSAg
dmFyIG1lc3NhZ2UgPSAnRmFpbHVyZScgKyAodXNlcl9tZXNzYWdlID8gJyAoJyArIHVzZXJfbWVz
c2FnZSArICcpJyA6ICcnKSArCi0gICAgICAnOiBleHBlY3RlZCA8JyArIFN0cmluZyhleHBlY3Rl
ZCkgKyAnPiwgZm91bmQgPCcgKyBTdHJpbmcoZm91bmQpICsgJz4uJzsKLSAgdGhyb3cgbmV3IEVy
cm9yKG1lc3NhZ2UpOwotfQotCi0vKioKLSAqIFRocm93cyBpZiBvYmogaXMgbm90IG9mIGdpdmVu
IHR5cGUuCi0gKi8KLWZ1bmN0aW9uIGFzc2VydEluc3RhbmNlb2Yob2JqLCB0eXBlKSB7Ci0gIGlm
ICghKG9iaiBpbnN0YW5jZW9mIHR5cGUpKSB7Ci0gICAgdmFyIGFjdHVhbFR5cGVOYW1lID0gbnVs
bDsKLSAgICB2YXIgYWN0dWFsQ29uc3RydWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2Jq
KS5jb25zdHJ1Y3RvcjsKLSAgICBpZiAodHlwZW9mIGFjdHVhbENvbnN0cnVjdG9yID09ICJmdW5j
dGlvbiIpIHsKLSAgICAgIGFjdHVhbFR5cGVOYW1lID0gYWN0dWFsQ29uc3RydWN0b3IubmFtZSB8
fCBTdHJpbmcoYWN0dWFsQ29uc3RydWN0b3IpOwotICAgIH0KLSAgICB0aHJvdyBuZXcgRXJyb3Io
J09iamVjdCA8JyArIG9iaiArICc+IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiA8JyArCi0gICAgICAg
ICAgICAgICAgICAgICh0eXBlLm5hbWUgfHwgdHlwZSkgKyAnPicgKwotICAgICAgICAgICAgICAg
ICAgICAoYWN0dWFsVHlwZU5hbWUgPyAnIGJ1dCBvZiA8ICcgKyBhY3R1YWxUeXBlTmFtZSArICc+
JyA6ICcnKSk7Ci0gIH0KLX0KLQotLyoqCi0gKiBUaHJvd3MgaWYgb2JqIGlzIG5vdCB0aGUgc2Ft
ZSBhcyBleHBlY3RlZC4KLSAqLwotZnVuY3Rpb24gYXNzZXJ0U2FtZShleHBlY3RlZCwgZm91bmQs
IG5hbWVfb3B0KSB7Ci0gIGlmIChmb3VuZCA9PT0gZXhwZWN0ZWQpIHsKLSAgICBpZiAoZXhwZWN0
ZWQgIT09IDAgfHwgKDEgLyBleHBlY3RlZCkgPT09ICgxIC8gZm91bmQpKQotICAgICAgcmV0dXJu
OwotICB9IGVsc2UgaWYgKChleHBlY3RlZCAhPT0gZXhwZWN0ZWQpICYmIChmb3VuZCAhPT0gZm91
bmQpKSB7Ci0gICAgICByZXR1cm47Ci0gIH0KLSAgZmFpbChleHBlY3RlZCwgZm91bmQsIG5hbWVf
b3B0KTsKLX0KLQotLyoqCi0gKiBUaHJvd3MgaWYgdHdvIHZhcmlhYmxlcyBoYXZlIGRpZmZlcmVu
dCB0eXBlcyBvciB2YWx1ZXMuCi0gKi8KLQotZnVuY3Rpb24gYXNzZXJ0RXF1YWxzKGV4cGVjdGVk
LCBmb3VuZCwgdXNlcl9tZXNzYWdlID0gJycpIHsKLSAgaWYgKCFkZWVwRXF1YWxzKGV4cGVjdGVk
LCBmb3VuZCkpIHsKLSAgICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlKTsKLSAg
fQotfQotCi0vKioKLSAqIFRocm93cyBpZiB0d28gdmFyaWFibGVzIGhhdmUgZXF1YWwgdHlwZXMg
b3IgdmFsdWVzLgotICovCi0KLWZ1bmN0aW9uIGFzc2VydE5vdEVxdWFscyhleHBlY3RlZCwgZm91
bmQsIHVzZXJfbWVzc2FnZSA9ICcnKSB7Ci0gIGlmIChkZWVwRXF1YWxzKGV4cGVjdGVkLCBmb3Vu
ZCkpIHsKLSAgICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlKTsKLSAgfQotfQot
Ci0vKioKLSAqIFRocm93cyBpZiB2YWx1ZSBpcyBmYWxzZS4KLSAqLwotZnVuY3Rpb24gYXNzZXJ0
VHJ1ZSh2YWx1ZSwgdXNlcl9tZXNzYWdlID0gJycpIHsKLSAgYXNzZXJ0RXF1YWxzKHRydWUsIHZh
bHVlLCB1c2VyX21lc3NhZ2UpOwotfQotCi0KLS8qKgotICogVGhyb3dzIGlmIHZhbHVlIGlzIHRy
dWUuCi0gKi8KLWZ1bmN0aW9uIGFzc2VydEZhbHNlKHZhbHVlLCB1c2VyX21lc3NhZ2UgPSAnJykg
ewotICBhc3NlcnRFcXVhbHMoZmFsc2UsIHZhbHVlLCB1c2VyX21lc3NhZ2UpOwotfQotCi0vKioK
LSAqIFJ1bnMgY29kZSgpIGFuZCBhc3NlcnRzIHRoYXQgaXQgdGhyb3dzIHRoZSBzcGVjaWZpZWQg
ZXhjZXB0aW9uLgotICovCi1mdW5jdGlvbiBhc3NlcnRUaHJvd3MoY29kZSwgdHlwZV9vcHQsIGNh
dXNlX29wdCkgewotICB0cnkgewotICAgIGlmICh0eXBlb2YgY29kZSA9PSAnZnVuY3Rpb24nKSB7
Ci0gICAgICBjb2RlKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGV2YWwoY29kZSk7Ci0gICAgfQot
ICB9IGNhdGNoIChlKSB7Ci0gICAgaWYgKHR5cGVvZiB0eXBlX29wdCA9PSAnZnVuY3Rpb24nKSB7
Ci0gICAgICBhc3NlcnRJbnN0YW5jZW9mKGUsIHR5cGVfb3B0KTsKLSAgICB9Ci0gICAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPj0gMykgewotICAgICAgYXNzZXJ0RXF1YWxzKGNhdXNlX29wdCwgZS50
eXBlLCAndGhyb3duIGV4Y2VwdGlvbiB0eXBlIG1pc21hdGNoJyk7Ci0gICAgfQotICAgIC8vIFN1
Y2Nlc3MuCi0gICAgcmV0dXJuOwotICB9Ci0gIHZhciBleHBlY3RlZCA9IGFyZ3VtZW50cy5sZW5n
dGggPj0gMyA/IGNhdXNlX29wdCA6Ci0gICAgICB0eXBlb2YgdHlwZV9vcHQgPT0gJ2Z1bmN0aW9u
JyA/IHR5cGVfb3B0IDogJ2FueSBleGNlcHRpb24nOwotICBmYWlsKGV4cGVjdGVkLCAnbm8gZXhj
ZXB0aW9uJywgJ2V4cGVjdGVkIHRocm93biBleGNlcHRpb24nKTsKLX0KK2xvYWQoIi4vaGFybW9u
eS1zdXBwb3J0LmpzIik7CiAKIHsKICAgY2xhc3MgQyB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9jbGFzcy1maWVsZHMtc3RhdGljLWhhcm1vbnkuanMgYi9KU1Rlc3RzL3N0cmVzcy9jbGFz
cy1maWVsZHMtc3RhdGljLWhhcm1vbnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi45ODY3NGI1MWY5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVz
cy9jbGFzcy1maWVsZHMtc3RhdGljLWhhcm1vbnkuanMKQEAgLTAsMCArMSw1MDMgQEAKKy8vQCBy
ZXF1aXJlT3B0aW9ucygiLS11c2VQdWJsaWNDbGFzc0ZpZWxkcz0xIikKKy8vQCBkZWZhdWx0Tm9F
YWdlclJ1bgorCisvLyBDb3B5cmlnaHQgMjAxNyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyJ1c2Ugc3RyaWN0IjsKKworbG9hZCgi
Li9oYXJtb255LXN1cHBvcnQuanMiKTsKKworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYTsK
KyAgfQorCisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIEMuYSk7CisgIGxldCBkZXNjcmlwdG9y
ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihDLCAnYScpOworICBhc3NlcnRUcnVl
KEMuaGFzT3duUHJvcGVydHkoJ2EnKSk7CisgIGFzc2VydFRydWUoZGVzY3JpcHRvci53cml0YWJs
ZSk7CisgIGFzc2VydFRydWUoZGVzY3JpcHRvci5lbnVtZXJhYmxlKTsKKyAgYXNzZXJ0VHJ1ZShk
ZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1
YWxzKHVuZGVmaW5lZCwgYy5hKTsKK30KKworeworICBsZXQgeCA9ICdhJzsKKyAgY2xhc3MgQyB7
CisgICAgc3RhdGljIGE7CisgICAgc3RhdGljIGhhc093blByb3BlcnR5ID0gZnVuY3Rpb24oKSB7
IHJldHVybiAxOyB9CisgICAgc3RhdGljIGIgPSB4OworICAgIHN0YXRpYyBjID0gMTsKKyAgfQor
CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIEMuYSk7CisgIGFzc2VydEVxdWFscygnYScsIEMu
Yik7CisgIGFzc2VydEVxdWFscygxLCBDLmMpOworICBhc3NlcnRFcXVhbHMoMSwgQy5oYXNPd25Q
cm9wZXJ0eSgpKTsKKworICBsZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVk
LCBjLmEpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmIpOworICBhc3NlcnRFcXVhbHMo
dW5kZWZpbmVkLCBjLmMpOworfQorCit7CisgIGFzc2VydFRocm93cygoKSA9PiB7CisgICAgY2xh
c3MgQyB7CisgICAgICBzdGF0aWMgeCA9IE9iamVjdC5mcmVlemUodGhpcyk7CisgICAgICBzdGF0
aWMgYyA9IDQyOworICAgIH0KKyAgfSwgVHlwZUVycm9yKTsKK30KKworeworICBjbGFzcyBDIHsK
KyAgICBzdGF0aWMgYyA9IHRoaXM7CisgICAgc3RhdGljIGQgPSAoKSA9PiB0aGlzOworICB9CisK
KyAgYXNzZXJ0RXF1YWxzKEMsIEMuYyk7CisgIGFzc2VydEVxdWFscyhDLCBDLmQoKSk7CisKKyAg
bGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5jKTsKKyAgYXNzZXJ0
RXF1YWxzKHVuZGVmaW5lZCwgYy5kKTsKK30KKworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMg
YyA9IDE7CisgICAgc3RhdGljIGQgPSB0aGlzLmM7CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwg
Qy5jKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuZCk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNz
ZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5jKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5k
KTsKK30KKworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYiA9IDE7CisgICAgc3RhdGljIGMg
PSAoKSA9PiB0aGlzLmI7CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwgQy5iKTsKKyAgYXNzZXJ0
RXF1YWxzKDEsIEMuYygpKTsKKworICBsZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5k
ZWZpbmVkLCBjLmMpOworfQorCit7CisgIGxldCB4ID0gJ2EnOworICBjbGFzcyBDIHsKKyAgICBz
dGF0aWMgYiA9IDE7CisgICAgc3RhdGljIGMgPSAoKSA9PiB0aGlzLmI7CisgICAgc3RhdGljIGUg
PSAoKSA9PiB4OworICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYik7CisgIGFzc2VydEVxdWFs
cygnYScsIEMuZSgpKTsKKworICBsZXQgYSA9IHtiIDogMiB9OworICBhc3NlcnRFcXVhbHMoMSwg
Qy5jLmNhbGwoYSkpOworCisgIGxldCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmlu
ZWQsIGMuYik7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYyk7Cit9CisKK3sKKyAgbGV0
IHggPSAnYSc7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBjID0gMTsKKyAgICBzdGF0aWMgZCA9
IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5jOyB9OworICAgIHN0YXRpYyBlID0gZnVuY3Rpb24o
KSB7IHJldHVybiB4OyB9OworICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYyk7CisgIGFzc2Vy
dEVxdWFscygxLCBDLmQoKSk7CisgIGFzc2VydEVxdWFscygnYScsIEMuZSgpKTsKKworICBDLmMg
PSAyOworICBhc3NlcnRFcXVhbHMoMiwgQy5kKCkpOworCisgIGxldCBhID0ge2MgOiAzIH07Cisg
IGFzc2VydEVxdWFscygzLCBDLmQuY2FsbChhKSk7CisKKyAgYXNzZXJ0VGhyb3dzKEMuZC5iaW5k
KHVuZGVmaW5lZCkpOworCisgIGxldCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmlu
ZWQsIGMuYyk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuZCk7CisgIGFzc2VydEVxdWFs
cyh1bmRlZmluZWQsIGMuZSk7Cit9CisKK3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSBm
dW5jdGlvbigpIHsgcmV0dXJuIDEgfTsKKyAgfQorCisgIGFzc2VydEVxdWFscygnYycsIEMuYy5u
YW1lKTsKK30KKworeworICBsZXQgZCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3LnRhcmdldDsg
fQorICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYyA9IGQ7CisgIH0KKworICBhc3NlcnRFcXVhbHMo
dW5kZWZpbmVkLCBDLmMoKSk7CisgIGFzc2VydEVxdWFscyhuZXcgZCwgbmV3IEMuYygpKTsKK30K
KworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYyA9ICgpID0+IG5ldy50YXJnZXQ7CisgIH0K
KworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmMoKSk7Cit9CisKK3sKKyAgIGNsYXNzIEMg
eworICAgICBzdGF0aWMgYyA9ICgpID0+IHsKKyAgICAgICBsZXQgYjsKKyAgICAgICBjbGFzcyBB
IHsKKyAgICAgICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgICAgICBiID0gbmV3LnRhcmdldDsK
KyAgICAgICAgIH0KKyAgICAgICB9OworICAgICAgIG5ldyBBOworICAgICAgIGFzc2VydEVxdWFs
cyhBLCBiKTsKKyAgICAgfQorICB9CisKKyAgQy5jKCk7Cit9CisKK3sKKyAgY2xhc3MgQyB7Cisg
ICAgc3RhdGljIGMgPSBuZXcudGFyZ2V0OworICB9CisKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5l
ZCwgQy5jKTsKK30KKworeworICBjbGFzcyBCIHsKKyAgICBzdGF0aWMgZCA9IDE7CisgICAgc3Rh
dGljIGIgPSAoKSA9PiB0aGlzLmQ7CisgIH0KKworICBjbGFzcyBDIGV4dGVuZHMgQiB7CisgICAg
c3RhdGljIGMgPSBzdXBlci5kOworICAgIHN0YXRpYyBkID0gKCkgPT4gc3VwZXIuZDsKKyAgICBz
dGF0aWMgZSA9ICgpID0+IHN1cGVyLmIoKTsKKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBDLmMp
OworICBhc3NlcnRFcXVhbHMoMSwgQy5kKCkpOworICBhc3NlcnRFcXVhbHMoMSwgQy5lKCkpOwor
fQorCit7CisgIGxldCBmb28gPSB1bmRlZmluZWQ7CisgIGNsYXNzIEIgeworICAgIHN0YXRpYyBz
ZXQgZCh4KSB7CisgICAgICBmb28gPSB4OworICAgIH0KKyAgfQorCisgIGNsYXNzIEMgZXh0ZW5k
cyBCIHsKKyAgICBzdGF0aWMgZCA9IDI7CisgIH0KKworICBhc3NlcnRFcXVhbHModW5kZWZpbmVk
LCBmb28pOworICBhc3NlcnRFcXVhbHMoMiwgQy5kKTsKK30KKworCit7CisgIGxldCBDICA9IGNs
YXNzIHsKKyAgICBzdGF0aWMgYzsKKyAgfTsKKworICBhc3NlcnRFcXVhbHMoIkMiLCBDLm5hbWUp
OworfQorCit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBjID0gbmV3IEM7CisgIH0KKworICBh
c3NlcnRUcnVlKEMuYyBpbnN0YW5jZW9mIEMpOworfQorCisoZnVuY3Rpb24gdGVzdCgpIHsKKyAg
ZnVuY3Rpb24gbWFrZUMoKSB7CisgICAgdmFyIHggPSAxOworCisgICAgcmV0dXJuIGNsYXNzIHsK
KyAgICAgIHN0YXRpYyBhID0gKCkgPT4gKCkgPT4geDsKKyAgICB9CisgIH0KKworICBsZXQgQyA9
IG1ha2VDKCk7CisgIGxldCBmID0gQy5hKCk7CisgIGFzc2VydEVxdWFscygxLCBmKCkpOworfSko
KQorCit7CisgIGxldCBjID0gImMiOworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgWyJhIl0gPSAx
OworICAgIHN0YXRpYyBbImIiXTsKKyAgICBzdGF0aWMgW2NdOworICB9CisKKyAgYXNzZXJ0RXF1
YWxzKDEsIEMuYSk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIEMuYik7CisgIGFzc2VydEVx
dWFscyh1bmRlZmluZWQsIENbY10pOworfQorCit7CisgIGxldCBsb2cgPSBbXTsKKyAgZnVuY3Rp
b24gcnVuKGkpIHsKKyAgICBsb2cucHVzaChpKTsKKyAgICByZXR1cm4gaTsKKyAgfQorCisgIGNs
YXNzIEMgeworICAgIHN0YXRpYyBbcnVuKDEpXSA9IHJ1big2KTsKKyAgICBzdGF0aWMgW3J1bigy
KV0gPSBydW4oNyk7CisgICAgW3J1bigzKV0oKSB7IHJ1big5KTt9CisgICAgc3RhdGljIFtydW4o
NCldID0gcnVuKDgpOworICAgIHN0YXRpYyBbcnVuKDUpXSgpIHsgdGhyb3cgbmV3IEVycm9yKCdz
aG91bGQgbm90IGV4ZWN1dGUnKTt9OworICB9CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgY1szXSgp
OworICBhc3NlcnRFcXVhbHMoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldLCBsb2cpOworfQor
CisKKworZnVuY3Rpb24geCgpIHsKKworICAvLyBUaGlzIHRlc3RzIGxhenkgcGFyc2luZy4KKyAg
cmV0dXJuIGZ1bmN0aW9uKCkgeworICAgIGxldCBsb2cgPSBbXTsKKyAgICBmdW5jdGlvbiBydW4o
aSkgeworICAgICAgbG9nLnB1c2goaSk7CisgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICBj
bGFzcyBDIHsKKyAgICAgIHN0YXRpYyBbcnVuKDEpXSA9IHJ1big2KTsKKyAgICAgIHN0YXRpYyBb
cnVuKDIpXSA9IHJ1big3KTsKKyAgICAgIFtydW4oMyldKCkgeyBydW4oOSk7fQorICAgICAgc3Rh
dGljIFtydW4oNCldID0gcnVuKDgpOworICAgICAgc3RhdGljIFtydW4oNSldKCkgeyB0aHJvdyBu
ZXcgRXJyb3IoJ3Nob3VsZCBub3QgZXhlY3V0ZScpO307CisgICAgfQorCisgICAgbGV0IGMgPSBu
ZXcgQzsKKyAgICBjWzNdKCk7CisgICAgYXNzZXJ0RXF1YWxzKFsxLCAyLCAzLCA0LCA1LCA2LCA3
LCA4LCA5XSwgbG9nKTsKKyAgfQorfQoreCgpKCk7CisKK3sKKyAgbGV0IGxvZyA9IFtdOworICBm
dW5jdGlvbiBydW4oaSkgeworICAgIGxvZy5wdXNoKGkpOworICAgIHJldHVybiBpOworICB9CisK
KyAgY2xhc3MgQyB7CisgICAgW3J1bigxKV0gPSBydW4oNyk7CisgICAgW3J1bigyKV0gPSBydW4o
OCk7CisgICAgW3J1bigzKV0oKSB7IHJ1big5KTt9CisgICAgc3RhdGljIFtydW4oNCldID0gcnVu
KDYpOworICAgIFtydW4oNSldKCkgeyB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgZXhlY3V0
ZScpO307CisgIH0KKworICBsZXQgYyA9IG5ldyBDOworICBjWzNdKCk7CisgIGFzc2VydEVxdWFs
cyhbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0sIGxvZyk7Cit9CisKK2Z1bmN0aW9uIHkoKSB7
CisgIC8vIFRoaXMgdGVzdHMgbGF6eSBwYXJzaW5nLgorICByZXR1cm4gZnVuY3Rpb24oKSB7Cisg
ICAgbGV0IGxvZyA9IFtdOworICAgIGZ1bmN0aW9uIHJ1bihpKSB7CisgICAgICBsb2cucHVzaChp
KTsKKyAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIGNsYXNzIEMgeworICAgICAgW3J1bigx
KV0gPSBydW4oNyk7CisgICAgICBbcnVuKDIpXSA9IHJ1big4KTsKKyAgICAgIFtydW4oMyldKCkg
eyBydW4oOSk7fQorICAgICAgc3RhdGljIFtydW4oNCldID0gcnVuKDYpOworICAgICAgW3J1big1
KV0oKSB7IHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5vdCBleGVjdXRlJyk7fTsKKyAgICB9CisK
KyAgICBsZXQgYyA9IG5ldyBDOworICAgIGNbM10oKTsKKyAgICBhc3NlcnRFcXVhbHMoWzEsIDIs
IDMsIDQsIDUsIDYsIDcsIDgsIDldLCBsb2cpOworICB9Cit9Cit5KCkoKTsKKworeworICBjbGFz
cyBDIHt9CisgIGNsYXNzIEQgeworICAgIHN0YXRpYyBbQ107CisgIH0KKworICBhc3NlcnRUaHJv
d3MoKCkgPT4geyBjbGFzcyBYIHsgc3RhdGljIFtYXSB9IH0pOworICBhc3NlcnRFcXVhbHModW5k
ZWZpbmVkLCBEW0NdKTsKK30KKworeworICBmdW5jdGlvbiB0KCkgeworICAgIHJldHVybiBjbGFz
cyB7CisgICAgICBzdGF0aWMgWyd4J10gPSAyOworICAgIH0KKyAgfQorCisgIGxldCBrbGFzcyA9
IHQoKTsKKyAgbGV0IG9iaiA9IG5ldyBrbGFzczsKKyAgYXNzZXJ0RXF1YWxzKDIsIGtsYXNzLngp
OworfQorCit7CisgIGxldCB4ID0gJ2EnOworICBjbGFzcyBDIHsKKyAgICBhOworICAgIGIgPSB4
OworICAgIGMgPSAxOworICAgIGhhc093blByb3BlcnR5KCkgeyByZXR1cm4gMTt9CisgICAgc3Rh
dGljIFt4XSA9IDI7CisgICAgc3RhdGljIGIgPSAzOworICAgIHN0YXRpYyBkOworICB9CisKKyAg
YXNzZXJ0RXF1YWxzKDIsIEMuYSk7CisgIGFzc2VydEVxdWFscygzLCBDLmIpOworICBhc3NlcnRF
cXVhbHModW5kZWZpbmVkLCBDLmQpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmMpOwor
CisgIGxldCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYSk7CisgIGFz
c2VydEVxdWFscygnYScsIGMuYik7CisgIGFzc2VydEVxdWFscygxLCBjLmMpOworICBhc3NlcnRF
cXVhbHModW5kZWZpbmVkLCBjLmQpOworICBhc3NlcnRFcXVhbHMoMSwgYy5oYXNPd25Qcm9wZXJ0
eSgpKTsKK30KKworeworICBmdW5jdGlvbiB0KCkgeworICAgIHJldHVybiBjbGFzcyB7CisgICAg
ICBbJ3gnXSA9IDE7CisgICAgICBzdGF0aWMgWyd4J10gPSAyOworICAgIH0KKyAgfQorCisgIGxl
dCBrbGFzcyA9IHQoKTsKKyAgbGV0IG9iaiA9IG5ldyBrbGFzczsKKyAgYXNzZXJ0RXF1YWxzKDEs
IG9iai54KTsKKyAgYXNzZXJ0RXF1YWxzKDIsIGtsYXNzLngpOworfQorCisKK3sKKyAgY2xhc3Mg
WCB7CisgICAgc3RhdGljIHAgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50c1swXTsgfQor
ICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEsIFgucCgxKSk7Cit9CisKK3sKKyAgY2xhc3MgWCB7Cisg
ICAgc3RhdGljIHQgPSAoKSA9PiB7CisgICAgICBmdW5jdGlvbiBwKCkgeyByZXR1cm4gYXJndW1l
bnRzWzBdOyB9OworICAgICAgcmV0dXJuIHA7CisgICAgfQorICB9CisKKyAgbGV0IHAgPSBYLnQo
KTsKKyAgYXNzZXJ0RXF1YWxzKDEsIHAoMSkpOworfQorCit7CisgIGNsYXNzIFggeworICAgIHN0
YXRpYyB0ID0gKCkgPT4geworICAgICAgZnVuY3Rpb24gcCgpIHsgcmV0dXJuIGV2YWwoImFyZ3Vt
ZW50c1swXSIpOyB9OworICAgICAgcmV0dXJuIHA7CisgICAgfQorICB9CisKKyAgbGV0IHAgPSBY
LnQoKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIHAoMSkpOworfQorCit7CisgIGNsYXNzIFggeworICAg
IHN0YXRpYyBwID0gZXZhbCgiKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzWzBdOyB9KSgx
KSIpOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEsIFgucCk7Cit9CisKKy8qCit7CisgIGxldCBw
ID0geyB6OiBjbGFzcyB7IHN0YXRpYyB5ID0gdGhpcy5uYW1lIH0gfQorICBhc3NlcnRFcXVhbHMo
cC56LnksICd6Jyk7CisKKyAgbGV0IHEgPSB7IFsieiJdOiBjbGFzcyB7IHN0YXRpYyB5ID0gdGhp
cy5uYW1lIH0gfQorICBhc3NlcnRFcXVhbHMocS56LnksICd6Jyk7CisKKyAgY29uc3QgQyA9IGNs
YXNzIHsKKyAgICBzdGF0aWMgeCA9IHRoaXMubmFtZTsKKyAgfQorICBhc3NlcnRFcXVhbHMoQy54
LCAnQycpOworfQorKi8KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hhcm1vbnktc3VwcG9y
dC5qcyBiL0pTVGVzdHMvc3RyZXNzL2hhcm1vbnktc3VwcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjAyNGIzYjA4ODllMQotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvc3RyZXNzL2hhcm1vbnktc3VwcG9ydC5qcwpAQCAtMCwwICsxLDE5NiBAQAorLy8g
Q29weXJpZ2h0IDIwMTcgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisv
LyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8v
ICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGNsYXNzT2Yob2Jq
ZWN0KSB7CisgICAvLyBBcmd1bWVudCBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4KKyAg
IHZhciBzdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTsKKyAg
IC8vIFN0cmluZyBoYXMgZm9ybWF0IFtvYmplY3QgPENsYXNzTmFtZT5dLgorICAgcmV0dXJuIHN0
cmluZy5zdWJzdHJpbmcoOCwgc3RyaW5nLmxlbmd0aCAtIDEpOworfQorCisvKioKKyAqIENvbXBh
cmVzIHR3byBvYmplY3RzIGZvciBrZXkvdmFsdWUgZXF1YWxpdHkuCisgKiBSZXR1cm5zIHRydWUg
aWYgdGhleSBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworZnVuY3Rpb24gZGVlcE9i
amVjdEVxdWFscyhhLCBiKSB7CisgIHZhciBhUHJvcHMgPSBPYmplY3Qua2V5cyhhKTsKKyAgYVBy
b3BzLnNvcnQoKTsKKyAgdmFyIGJQcm9wcyA9IE9iamVjdC5rZXlzKGIpOworICBiUHJvcHMuc29y
dCgpOworICBpZiAoIWRlZXBFcXVhbHMoYVByb3BzLCBiUHJvcHMpKSB7CisgICAgcmV0dXJuIGZh
bHNlOworICB9CisgIGZvciAodmFyIGkgPSAwOyBpIDwgYVByb3BzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgaWYgKCFkZWVwRXF1YWxzKGFbYVByb3BzW2ldXSwgYlthUHJvcHNbaV1dKSkgeworICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBD
b21wYXJlcyB0d28gSmF2YVNjcmlwdCB2YWx1ZXMgZm9yIHR5cGUgYW5kIHZhbHVlIGVxdWFsaXR5
LgorICogSXQgY2hlY2tzIGludGVybmFscyBvZiBhcnJheXMgYW5kIG9iamVjdHMuCisgKi8KK2Z1
bmN0aW9uIGRlZXBFcXVhbHMoYSwgYikgeworICBpZiAoYSA9PT0gYikgeworICAgIC8vIENoZWNr
IGZvciAtMC4KKyAgICBpZiAoYSA9PT0gMCkgcmV0dXJuICgxIC8gYSkgPT09ICgxIC8gYik7Cisg
ICAgcmV0dXJuIHRydWU7CisgIH0KKyAgaWYgKHR5cGVvZiBhICE9IHR5cGVvZiBiKSByZXR1cm4g
ZmFsc2U7CisgIGlmICh0eXBlb2YgYSA9PSAnbnVtYmVyJykgcmV0dXJuIGlzTmFOKGEpICYmIGlz
TmFOKGIpOworICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnICYmIHR5cGVvZiBhICE9PSAnZnVu
Y3Rpb24nKSByZXR1cm4gZmFsc2U7CisgIC8vIE5laXRoZXIgYSBub3IgYiBpcyBwcmltaXRpdmUu
CisgIHZhciBvYmplY3RDbGFzcyA9IGNsYXNzT2YoYSk7CisgIGlmIChvYmplY3RDbGFzcyAhPT0g
Y2xhc3NPZihiKSkgcmV0dXJuIGZhbHNlOworICBpZiAob2JqZWN0Q2xhc3MgPT09ICdSZWdFeHAn
KSB7CisgICAgLy8gRm9yIFJlZ0V4cCwganVzdCBjb21wYXJlIHBhdHRlcm4gYW5kIGZsYWdzIHVz
aW5nIGl0cyB0b1N0cmluZy4KKyAgICByZXR1cm4gKGEudG9TdHJpbmcoKSA9PT0gYi50b1N0cmlu
ZygpKTsKKyAgfQorICAvLyBGdW5jdGlvbnMgYXJlIG9ubHkgaWRlbnRpY2FsIHRvIHRoZW1zZWx2
ZXMuCisgIGlmIChvYmplY3RDbGFzcyA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlOworICBp
ZiAob2JqZWN0Q2xhc3MgPT09ICdBcnJheScpIHsKKyAgICB2YXIgZWxlbWVudENvdW50ID0gMDsK
KyAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAo
IWRlZXBFcXVhbHMoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7CisgIH0KKyAgaWYgKG9iamVjdENsYXNzID09ICdTdHJpbmcnIHx8IG9iamVjdENsYXNz
ID09ICdOdW1iZXInIHx8CisgICAgICBvYmplY3RDbGFzcyA9PSAnQm9vbGVhbicgfHwgb2JqZWN0
Q2xhc3MgPT0gJ0RhdGUnKSB7CisgICAgaWYgKGEudmFsdWVPZigpICE9PSBiLnZhbHVlT2YoKSkg
cmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiBkZWVwT2JqZWN0RXF1YWxzKGEsIGIpOworfQor
CisvKioKKyAqIFRocm93cyBhbiBleGNlcHRpb24gY29udGFpbmluZyB0aGUgdXNlcl9tZXNzYWdl
IChpZiBhbnkpIGFuZCB0aGUgdmFsdWVzLgorICovCitmdW5jdGlvbiBmYWlsKGV4cGVjdGVkLCBm
b3VuZCwgdXNlcl9tZXNzYWdlID0gJycpIHsKKyAgLy8gVE9ETyhjaXJhKTogUmVwbGFjZSBTdHJp
bmcgd2l0aCBQcmV0dHlQcmludCBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzLgorICB2YXIgbWVzc2Fn
ZSA9ICdGYWlsdXJlJyArICh1c2VyX21lc3NhZ2UgPyAnICgnICsgdXNlcl9tZXNzYWdlICsgJykn
IDogJycpICsKKyAgICAgICc6IGV4cGVjdGVkIDwnICsgU3RyaW5nKGV4cGVjdGVkKSArICc+LCBm
b3VuZCA8JyArIFN0cmluZyhmb3VuZCkgKyAnPi4nOworICB0aHJvdyBuZXcgRXJyb3IobWVzc2Fn
ZSk7Cit9CisKKy8qKgorICogVGhyb3dzIGlmIG9iaiBpcyBub3Qgb2YgZ2l2ZW4gdHlwZS4KKyAq
LworZnVuY3Rpb24gYXNzZXJ0SW5zdGFuY2VvZihvYmosIHR5cGUpIHsKKyAgaWYgKCEob2JqIGlu
c3RhbmNlb2YgdHlwZSkpIHsKKyAgICB2YXIgYWN0dWFsVHlwZU5hbWUgPSBudWxsOworICAgIHZh
ciBhY3R1YWxDb25zdHJ1Y3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopLmNvbnN0cnVj
dG9yOworICAgIGlmICh0eXBlb2YgYWN0dWFsQ29uc3RydWN0b3IgPT0gImZ1bmN0aW9uIikgewor
ICAgICAgYWN0dWFsVHlwZU5hbWUgPSBhY3R1YWxDb25zdHJ1Y3Rvci5uYW1lIHx8IFN0cmluZyhh
Y3R1YWxDb25zdHJ1Y3Rvcik7CisgICAgfQorICAgIHRocm93IG5ldyBFcnJvcignT2JqZWN0IDwn
ICsgb2JqICsgJz4gaXMgbm90IGFuIGluc3RhbmNlIG9mIDwnICsKKyAgICAgICAgICAgICAgICAg
ICAgKHR5cGUubmFtZSB8fCB0eXBlKSArICc+JyArCisgICAgICAgICAgICAgICAgICAgIChhY3R1
YWxUeXBlTmFtZSA/ICcgYnV0IG9mIDwgJyArIGFjdHVhbFR5cGVOYW1lICsgJz4nIDogJycpKTsK
KyAgfQorfQorCisvKioKKyAqIFRocm93cyBpZiBvYmogaXMgbm90IHRoZSBzYW1lIGFzIGV4cGVj
dGVkLgorICovCitmdW5jdGlvbiBhc3NlcnRTYW1lKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQp
IHsKKyAgaWYgKGZvdW5kID09PSBleHBlY3RlZCkgeworICAgIGlmIChleHBlY3RlZCAhPT0gMCB8
fCAoMSAvIGV4cGVjdGVkKSA9PT0gKDEgLyBmb3VuZCkpCisgICAgICByZXR1cm47CisgIH0gZWxz
ZSBpZiAoKGV4cGVjdGVkICE9PSBleHBlY3RlZCkgJiYgKGZvdW5kICE9PSBmb3VuZCkpIHsKKyAg
ICAgIHJldHVybjsKKyAgfQorICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpOworfQor
CisvKioKKyAqIFRocm93cyBpZiB0d28gdmFyaWFibGVzIGhhdmUgZGlmZmVyZW50IHR5cGVzIG9y
IHZhbHVlcy4KKyAqLworCitmdW5jdGlvbiBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kLCB1
c2VyX21lc3NhZ2UgPSAnJykgeworICBpZiAoIWRlZXBFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kKSkg
eworICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2UpOworICB9Cit9CisKKy8q
KgorICogVGhyb3dzIGlmIHR3byB2YXJpYWJsZXMgaGF2ZSBlcXVhbCB0eXBlcyBvciB2YWx1ZXMu
CisgKi8KKworZnVuY3Rpb24gYXNzZXJ0Tm90RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9t
ZXNzYWdlID0gJycpIHsKKyAgaWYgKGRlZXBFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kKSkgeworICAg
IGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2UpOworICB9Cit9CisKKy8qKgorICog
VGhyb3dzIGlmIHZhbHVlIGlzIGZhbHNlLgorICovCitmdW5jdGlvbiBhc3NlcnRUcnVlKHZhbHVl
LCB1c2VyX21lc3NhZ2UgPSAnJykgeworICBhc3NlcnRFcXVhbHModHJ1ZSwgdmFsdWUsIHVzZXJf
bWVzc2FnZSk7Cit9CisKKworLyoqCisgKiBUaHJvd3MgaWYgdmFsdWUgaXMgdHJ1ZS4KKyAqLwor
ZnVuY3Rpb24gYXNzZXJ0RmFsc2UodmFsdWUsIHVzZXJfbWVzc2FnZSA9ICcnKSB7CisgIGFzc2Vy
dEVxdWFscyhmYWxzZSwgdmFsdWUsIHVzZXJfbWVzc2FnZSk7Cit9CisKKy8qKgorICogUnVucyBj
b2RlKCkgYW5kIGFzc2VydHMgdGhhdCBpdCB0aHJvd3MgdGhlIHNwZWNpZmllZCBleGNlcHRpb24u
CisgKi8KK2Z1bmN0aW9uIGFzc2VydFRocm93cyhjb2RlLCB0eXBlX29wdCwgY2F1c2Vfb3B0KSB7
CisgIHRyeSB7CisgICAgaWYgKHR5cGVvZiBjb2RlID09ICdmdW5jdGlvbicpIHsKKyAgICAgIGNv
ZGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgZXZhbChjb2RlKTsKKyAgICB9CisgIH0gY2F0Y2gg
KGUpIHsKKyAgICBpZiAodHlwZW9mIHR5cGVfb3B0ID09ICdmdW5jdGlvbicpIHsKKyAgICAgIGFz
c2VydEluc3RhbmNlb2YoZSwgdHlwZV9vcHQpOworICAgIH0KKyAgICBpZiAoYXJndW1lbnRzLmxl
bmd0aCA+PSAzKSB7CisgICAgICBhc3NlcnRFcXVhbHMoY2F1c2Vfb3B0LCBlLnR5cGUsICd0aHJv
d24gZXhjZXB0aW9uIHR5cGUgbWlzbWF0Y2gnKTsKKyAgICB9CisgICAgLy8gU3VjY2Vzcy4KKyAg
ICByZXR1cm47CisgIH0KKyAgdmFyIGV4cGVjdGVkID0gYXJndW1lbnRzLmxlbmd0aCA+PSAzID8g
Y2F1c2Vfb3B0IDoKKyAgICAgIHR5cGVvZiB0eXBlX29wdCA9PSAnZnVuY3Rpb24nID8gdHlwZV9v
cHQgOiAnYW55IGV4Y2VwdGlvbic7CisgIGZhaWwoZXhwZWN0ZWQsICdubyBleGNlcHRpb24nLCAn
ZXhwZWN0ZWQgdGhyb3duIGV4Y2VwdGlvbicpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy90ZXN0
MjYyL2NvbmZpZy55YW1sIGIvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sCmluZGV4IDM5Mjk1
YzJhODgxZi4uMjVkYTdmZDQ2NzU4IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3Rlc3QyNjIvY29uZmln
LnlhbWwKKysrIGIvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sCkBAIC02LDYgKzYsNyBAQCBm
bGFnczoKICAgRmluYWxpemF0aW9uUmVnaXN0cnk6IHVzZVdlYWtSZWZzCiAgIGNsYXNzLWZpZWxk
cy1wdWJsaWM6IHVzZVB1YmxpY0NsYXNzRmllbGRzCiAgIGNsYXNzLWZpZWxkcy1wcml2YXRlOiB1
c2VQcml2YXRlQ2xhc3NGaWVsZHMKKyAgY2xhc3Mtc3RhdGljLWZpZWxkcy1wdWJsaWM6IHVzZVB1
YmxpY0NsYXNzRmllbGRzICAKICAgSW50bC5EaXNwbGF5TmFtZXM6IHVzZUludGxEaXNwbGF5TmFt
ZXMKIHNraXA6CiAgIGZlYXR1cmVzOgpAQCAtMTYsNyArMTcsNiBAQCBza2lwOgogICAgIC0gcmVn
ZXhwLWxvb2tiZWhpbmQKIAogICAgIC0gY2xhc3MtbWV0aG9kcy1wcml2YXRlCi0gICAgLSBjbGFz
cy1zdGF0aWMtZmllbGRzLXB1YmxpYwogICAgIC0gY2xhc3Mtc3RhdGljLWZpZWxkcy1wcml2YXRl
CiAgICAgLSBjbGFzcy1zdGF0aWMtbWV0aG9kcy1wcml2YXRlCiAgICAgLSBob3N0LWdjLXJlcXVp
cmVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAzNTNjZThjZTQ0ZGQuLjMwMDE1ZmU4MjY1
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA5IEBACisyMDIwLTA2LTA1
ICBYYW4gTMOzcGV6ICA8eGFuQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0pTQ10gQWRkIHN1cHBv
cnQgZm9yIHN0YXRpYyBwdWJsaWMgY2xhc3MgZmllbGRzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQwOTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Igc3RhdGljIHB1YmxpYyBj
bGFzcyBmaWVsZHMuIFdlIGNhbiByZXVzZSBtb3N0IG9mCisgICAgICAgIHRoZSBleGlzdGluZyBt
YWNoaW5lcnkgYXZhaWxhYmxlIGZvciBpbnN0YW5jZSBmaWVsZHMsIHdpdGggYQorICAgICAgICBj
b3VwbGUgb2YgaXNzdWVzIHRoYXQgbWVyaXQgc3BlY2lhbCBjb21tZW50OgorCisgICAgICAgIFN0
YXRpYyBmaWVsZHMgYXJlIGluaXRpYWxpemVkLCBsaWtlIGluc3RhbmNlIGZpZWxkcywgd2l0aCBh
CisgICAgICAgIHN5bnRoZXRpYyBmdW5jdGlvbi4gVGhpcyBpcyBkb25lIHRvIGFsbG93IHVzIHRv
IHRyaXZpYWxseSBmb2xsb3cKKyAgICAgICAgdGhlIHNjb3BpbmcgcnVsZXMgaW4gdGhlIHNwZWMu
IEFzIGl0IGhhcHBlbnMgd2l0aCBpbnN0YW5jZSBmaWVsZHMKKyAgICAgICAgdGhpcyBjb3VsZCBi
ZSBpbmxpbmVkIGluIGEgZnV0dXJlIHBhdGNoLgorCisgICAgICAgIFRoZSB3YXkgd2Ugc3RvcmUg
Y29tcHV0ZWQgcHJvcGVydHkga2V5cyBuZWVkcyB0byBiZQorICAgICAgICBtb2RpZmllZC4gQmVm
b3JlIHdlIGFzc3VtZWQgdGhlIHNvdXJjZSBjb2RlIG9yZGVyIHdvdWxkIGJlCisgICAgICAgIGlk
ZW50aWNhbCB0byB0aGUgZXZhbHVhdGlvbiBvcmRlciAod2hpY2ggd2FzIHRydWUgZm9yIGluc3Rh
bmNlCisgICAgICAgIGZpZWxkcykuIFdpdGggc3RhdGljIGZpZWxkcyB0aGlzIGNhbiBub3QgYmUg
dGhlIGNhc2UsIHNpbmNlIHN0YXRpYworICAgICAgICBmaWVsZHMgYXJlIGFsd2F5cyBpbml0aWFs
aXplZCBmaXJzdC4gVG8gYWxsb3cgZm9yIHRoaXMgbWlzbWF0Y2gKKyAgICAgICAgdGhlIGNvbXB1
dGVkIHByb3BlcnR5IGtleXMgZm9yIGluc3RhbmNlIGZpZWxkcyBhcmUgc3RvcmVkIHdpdGggYW4K
KyAgICAgICAgZXZlbiBpZGVudGlmaWVyLCBhbmQgdGhvc2UgZm9yIHN0YXRpYyBmaWVsZHMgYXJl
IHN0b3JlZCB3aXRoIGFuCisgICAgICAgIG9kZCBpZGVudGlmaWVyLiBUaGUgZmllbGQgcGFyc2Vy
LCB1cG9uIGZpZ3VyaW5nIG91dCB3aGV0aGVyIGl0J3MKKyAgICAgICAgaW5pdGlhbGl6aW5nIHRo
ZSBzdGF0aWMgb3IgdGhlIGluc3RhbmNlIGZpZWxkcywgd2lsbCBrbm93IHdoZXJlIHRvCisgICAg
ICAgIGxvb2sgdXAgdGhlIGtleS4KKworICAgICAgICBGb3IgZXhhbXBsZToKKworICAgICAgICBj
bGFzcyBGT08geworICAgICAgICAgIFsiYSJdID0gMDsKKyAgICAgICAgICBzdGF0aWMgWyJiIl0g
PSAxOworICAgICAgICAgIHN0YXRpYyBbImMiXSA9IDI7CisgICAgICAgICAgWyJkIl0gPSAzOwor
ICAgICAgICB9CisKKyAgICAgICAgSGVyZSB3ZSB3aWxsIGV2YWx1YXRlIHRoZSBjb21wdXRlZCBm
aWVsZCBuYW1lcyBpbiB0aGUgZm9sbG93aW5nCisgICAgICAgIG9yZGVyOiBhLCBiLCBjLCBkOyBi
dXQgd2Ugd2lsbCBpbml0aWFsaXplIHRoZSBmaWVsZHMgaW4gdGhlCisgICAgICAgIGZvbGxvd2lu
ZyBvcmRlcjogYiwgYywgYSwgZC4gU2luY2UgZWFjaCBncm91cCBvZiBmaWVsZHMgaXMKKyAgICAg
ICAgaW5pdGlhbGl6ZWQgaW5kZXBlbmRlbnRseSB3ZSBjYW4gdHJpdmlhbGx5IHJldHJpZXZlIHRo
ZSBwcm9wZXJ0eQorICAgICAgICBrZXlzIGZvciBlYWNoIGdyb3VwIGp1c3QgYnkgZ2V0dGluZyB0
aGUgb2RkIHByb3BlcnR5IGtleXMgZm9yCisgICAgICAgIHN0YXRpYyBmaWVsZHMgKGluZGV4ZXMg
MSBhbmQgMykgYW5kIHRoZSBldmVuIG9uZXMgZm9yIGluc3RhbmNlCisgICAgICAgIGZpZWxkcyAo
aW5kZXhlcyAwIGFuZCAyKS4KKworICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5o
OgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVyRnVu
Y3Rpb24pOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAg
ICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUxpc3RO
b2RlOjplbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1lKToKKyAgICAgICAgKEpTQzo6RGVmaW5lRmll
bGROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAqIHBhcnNlci9BU1RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6OmNyZWF0ZURlZmluZUZpZWxkKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNv
bnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpEZWZpbmVGaWVsZE5vZGU6OkRlZmluZUZpZWxk
Tm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgICogcGFyc2VyL1BhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKToKKyAg
ICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MpOgorICAgICAgICAoSlND
OjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VF
bGVtZW50cyk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpwYXJzZSk6CisgICAgICAgICog
cGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3Jl
YXRlRGVmaW5lRmllbGQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246OnNldEZ1bmN0aW9uTmFtZSk6CisKKyAgICAgICAgKiBieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OmdlbmVy
YXRlVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0NsYXNz
RmllbGRJbml0aWFsaXplckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudCk6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OmVtaXRIb21lT2JqZWN0Rm9yQ2FsbGVl
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFNhdmVDb21wdXRlZEZpZWxkTmFtZSk6Cisg
ICAgICAgIChKU0M6OkRlZmluZUZpZWxkTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Q2xhc3NFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OmV2YWwpOgorICAgICAgICAqIHBhcnNlci9O
b2Rlcy5oOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcik6CisgICAgICAgIChKU0M6OnN0cmluZ0FydGljbGVG
b3JGdW5jdGlvbk1vZGUpOgorICAgICAgICAoSlNDOjpzdHJpbmdGb3JGdW5jdGlvbk1vZGUpOgor
ICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyk6CisgICAgICAgIChK
U0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzRmllbGRJbml0aWFsaXplclNvdXJjZUVs
ZW1lbnRzKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmg6CisgICAgICAgIChKU0M6OlNjb3Bl
OjpzZXRTb3VyY2VQYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2UpOgorICAgICAgICAoSlNDOjpwYXJzZSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlck1v
ZGVzLmg6CisgICAgICAgIChKU0M6OmlzRnVuY3Rpb25QYXJzZU1vZGUpOgorICAgICAgICAqIHJ1
bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3Rv
RnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAg
ICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0ZXIpOgorCiAyMDIwLTA3LTIxICBBZHJpYW4g
UGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXcg
bm9uLXVuaWZpZWQgc291cmNlIGJ1aWxkIGZpeApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKaW5k
ZXggNDYxZDlmYWRkNDhiLi5hZDE4OTlmNmVjODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cApAQCAtNTYsOSArNTYsOSBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2Vu
ZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKAogICAgIEpTUGFyc2VyU3RyaWN0TW9kZSBz
dHJpY3RNb2RlID0gZXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSA/IEpTUGFyc2VyU3Ry
aWN0TW9kZTo6U3RyaWN0IDogSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3Q7CiAgICAgSlNQ
YXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUgPSBleGVjdXRhYmxlLT5zY3JpcHRNb2RlKCk7CiAg
ICAgQVNTRVJUKGlzRnVuY3Rpb25QYXJzZU1vZGUoZXhlY3V0YWJsZS0+cGFyc2VNb2RlKCkpKTsK
LSAgICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zID0gZXhl
Y3V0YWJsZS0+aW5zdGFuY2VGaWVsZExvY2F0aW9ucygpOworICAgIFZlY3RvcjxKU1RleHRQb3Np
dGlvbj4qIGNsYXNzRmllbGRMb2NhdGlvbnMgPSBleGVjdXRhYmxlLT5jbGFzc0ZpZWxkTG9jYXRp
b25zKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uTm9kZT4gZnVuY3Rpb24gPSBwYXJz
ZTxGdW5jdGlvbk5vZGU+KAotICAgICAgICB2bSwgc291cmNlLCBleGVjdXRhYmxlLT5uYW1lKCks
IGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBleGVjdXRhYmxlLT5wYXJzZU1v
ZGUoKSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIGVycm9yLCBudWxscHRyLCBDb25zdHJ1
Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgRXZhbENvbnRleHRUeXBl
OjpOb25lLCBudWxscHRyLCBudWxscHRyLCBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAgICAg
ICAgdm0sIHNvdXJjZSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBidWlsdGluTW9kZSwgc3RyaWN0TW9k
ZSwgc2NyaXB0TW9kZSwgZXhlY3V0YWJsZS0+cGFyc2VNb2RlKCksIGV4ZWN1dGFibGUtPnN1cGVy
QmluZGluZygpLCBlcnJvciwgbnVsbHB0ciwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBEZXJpdmVk
Q29udGV4dFR5cGU6Ok5vbmUsIEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwgbnVsbHB0ciwgbnVsbHB0
ciwgY2xhc3NGaWVsZExvY2F0aW9ucyk7CiAKICAgICBpZiAoIWZ1bmN0aW9uKSB7CiAgICAgICAg
IEFTU0VSVChlcnJvci5pc1ZhbGlkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAppbmRleCA4ZmZl
MzAwZDg0NDIuLjU4MDMyYWQ1ZWRkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKQEAgLTIwOSwy
MyArMjA5LDIzIEBAIHB1YmxpYzoKICAgICAgICAgU3RyaW5nIG1fc291cmNlVVJMRGlyZWN0aXZl
OwogICAgICAgICBTdHJpbmcgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlOwogICAgICAgICBD
b21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZSBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzOwotICAg
ICAgICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+IG1faW5zdGFuY2VGaWVsZExvY2F0aW9uczsKKyAg
ICAgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiBtX2NsYXNzRmllbGRMb2NhdGlvbnM7CiAgICAg
fTsKIAogICAgIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIG5lZWRzQ2xhc3NGaWVsZEluaXRp
YWxpemVyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TmVlZHNDbGFzc0ZpZWxkSW5pdGlh
bGl6ZXI+KG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIpOyB9CiAKLSAgICBWZWN0b3I8SlNU
ZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKCkgY29uc3QKKyAgICBWZWN0b3I8
SlNUZXh0UG9zaXRpb24+KiBjbGFzc0ZpZWxkTG9jYXRpb25zKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIGlmIChtX3JhcmVEYXRhKQotICAgICAgICAgICAgcmV0dXJuICZtX3JhcmVEYXRhLT5tX2lu
c3RhbmNlRmllbGRMb2NhdGlvbnM7CisgICAgICAgICAgICByZXR1cm4gJm1fcmFyZURhdGEtPm1f
Y2xhc3NGaWVsZExvY2F0aW9uczsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0g
ICAgdm9pZCBzZXRJbnN0YW5jZUZpZWxkTG9jYXRpb25zKFZlY3RvcjxKU1RleHRQb3NpdGlvbj4m
JiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQorICAgIHZvaWQgc2V0Q2xhc3NGaWVsZExvY2F0aW9u
cyhWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiYgY2xhc3NGaWVsZExvY2F0aW9ucykKICAgICB7Ci0g
ICAgICAgIGlmIChpbnN0YW5jZUZpZWxkTG9jYXRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgaWYg
KGNsYXNzRmllbGRMb2NhdGlvbnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBlbnN1cmVSYXJlRGF0YSgpLm1faW5zdGFuY2VGaWVsZExvY2F0aW9ucyA9IFdURk1vdmUo
aW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7CisgICAgICAgIGVuc3VyZVJhcmVEYXRhKCkubV9jbGFz
c0ZpZWxkTG9jYXRpb25zID0gV1RGTW92ZShjbGFzc0ZpZWxkTG9jYXRpb25zKTsKICAgICB9CiAK
IHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDY4MDZmMzk1NTZjYS4uN2ZhYjhjYzdiMWZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMzc4LDcgKzM3OCw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEZ1bmN0aW9uTm9kZSogZnVuY3Rpb25Ob2RlLCBV
bmxpbmtlCiAgICAgYm9vbCBzaG91bGRDYXB0dXJlU29tZU9mVGhlVGhpbmdzID0gc2hvdWxkRW1p
dERlYnVnSG9va3MoKSB8fCBmdW5jdGlvbk5vZGUtPm5lZWRzQWN0aXZhdGlvbigpIHx8IGNvbnRh
aW5zQXJyb3dPckV2YWxCdXROb3RJbkFycm93QmxvY2s7CiAKICAgICBib29sIHNob3VsZENhcHR1
cmVBbGxPZlRoZVRoaW5ncyA9IHNob3VsZEVtaXREZWJ1Z0hvb2tzKCkgfHwgY29kZUJsb2NrLT51
c2VzRXZhbCgpOwotICAgIGJvb2wgbmVlZHNBcmd1bWVudHMgPSAoKGZ1bmN0aW9uTm9kZS0+dXNl
c0FyZ3VtZW50cygpICYmICFjb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpKSB8fCBjb2RlQmxv
Y2stPnVzZXNFdmFsKCkgfHwgKGZ1bmN0aW9uTm9kZS0+dXNlc0Fycm93RnVuY3Rpb24oKSAmJiAh
Y29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSAmJiBpc0FyZ3VtZW50c1VzZWRJbklubmVyQXJy
b3dGdW5jdGlvbigpKSkgJiYgcGFyc2VNb2RlICE9IFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VG
aWVsZEluaXRpYWxpemVyTW9kZTsKKyAgICBib29sIG5lZWRzQXJndW1lbnRzID0gKChmdW5jdGlv
bk5vZGUtPnVzZXNBcmd1bWVudHMoKSAmJiAhY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSkg
fHwgY29kZUJsb2NrLT51c2VzRXZhbCgpIHx8IChmdW5jdGlvbk5vZGUtPnVzZXNBcnJvd0Z1bmN0
aW9uKCkgJiYgIWNvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgJiYgaXNBcmd1bWVudHNVc2Vk
SW5Jbm5lckFycm93RnVuY3Rpb24oKSkpICYmIHBhcnNlTW9kZSAhPSBTb3VyY2VQYXJzZU1vZGU6
OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU7CiAKICAgICBpZiAoaXNHZW5lcmF0b3JPckFzeW5j
RnVuY3Rpb25Cb2R5UGFyc2VNb2RlKHBhcnNlTW9kZSkpIHsKICAgICAgICAgLy8gR2VuZXJhdG9y
IGFuZCBBc3luY0Z1bmN0aW9uIG5ldmVyIHByb3ZpZGVzICJhcmd1bWVudHMiLiAiYXJndW1lbnRz
IiByZWZlcmVuY2Ugd2lsbCBiZSByZXNvbHZlZCBpbiBhbiB1cHBlciBnZW5lcmF0b3IgZnVuY3Rp
b24gc2NvcGUuCkBAIC02MTAsNyArNjEwLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAg
ICAgICAgfQogCiAgICAgICAgIGJvb2wgc2hvdWxkQ3JlYXRlQXJndW1lbnNWYXJpYWJsZSA9ICFo
YXZlUGFyYW1ldGVyTmFtZWRBcmd1bWVudHMKLSAgICAgICAgICAgICYmICFTb3VyY2VQYXJzZU1v
ZGVTZXQoU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSwgU291cmNlUGFyc2VNb2Rl
OjpBc3luY0Fycm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJ
bml0aWFsaXplck1vZGUpLmNvbnRhaW5zKG1fY29kZUJsb2NrLT5wYXJzZU1vZGUoKSk7CisgICAg
ICAgICAgICAmJiAhU291cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5j
dGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSwgU291cmNl
UGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKS5jb250YWlucyhtX2NvZGVCbG9j
ay0+cGFyc2VNb2RlKCkpOwogICAgICAgICBzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJsZUlu
UGFyYW1ldGVyU2NvcGUgPSBzaG91bGRDcmVhdGVBcmd1bWVuc1ZhcmlhYmxlICYmICFpc1NpbXBs
ZVBhcmFtZXRlckxpc3Q7CiAgICAgICAgIC8vIERvIG5vdCBjcmVhdGUgYXJndW1lbnRzIHZhcmlh
YmxlIGluIGNhc2Ugb2YgQXJyb3cgZnVuY3Rpb24uIFZhbHVlIHdpbGwgYmUgbG9hZGVkIGZyb20g
cGFyZW50IHNjb3BlCiAgICAgICAgIGlmIChzaG91bGRDcmVhdGVBcmd1bWVuc1ZhcmlhYmxlICYm
ICFzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVyU2NvcGUpIHsKQEAgLTMx
MjAsNyArMzEyMCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RGVm
YXVsdENvbnN0cnVjdG9yKFJlZ2lzdGVySUQqIGRzdCwgQ29uc3RyCiAgICAgcmV0dXJuIGRzdDsK
IH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdJbnN0YW5jZUZpZWxk
SW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIFZlY3RvcjxKU1RleHRQb3NpdGlv
bj4mJiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zLCBib29sIGlzRGVyaXZlZCkKK1JlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24o
UmVnaXN0ZXJJRCogZHN0LCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiYgY2xhc3NGaWVsZExvY2F0
aW9ucywgYm9vbCBpc0Rlcml2ZWQpCiB7CiAgICAgRGVyaXZlZENvbnRleHRUeXBlIG5ld0Rlcml2
ZWRDb250ZXh0VHlwZTsKICAgICBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nOwpAQCAtMzEzMywx
NCArMzEzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0luc3Rh
bmNlRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKFJlZ2lzdGVySQogICAgIH0KIAogICAgIE9wdGlv
bmFsPENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlPiB2YXJpYWJsZXNVbmRlclREWiA9IGdldFZh
cmlhYmxlc1VuZGVyVERaKCk7Ci0gICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSA9IFNvdXJj
ZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZTsKKyAgICBTb3VyY2VQYXJz
ZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJN
b2RlOwogICAgIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSA9IENvbnN0cnVjdEFi
aWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKIAogICAgIGNvbnN0IGJvb2wgYWx3YXlzU3RyaWN0SW5D
bGFzcyA9IHRydWU7CiAgICAgRnVuY3Rpb25NZXRhZGF0YU5vZGUgbWV0YWRhdGEocGFyc2VyQXJl
bmEoKSwgSlNUb2tlbkxvY2F0aW9uKCksIEpTVG9rZW5Mb2NhdGlvbigpLCAwLCAwLCAwLCAwLCAw
LCBhbHdheXNTdHJpY3RJbkNsYXNzLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIHN1cGVyQmluZGlu
ZywgMCwgcGFyc2VNb2RlLCBmYWxzZSk7CiAgICAgbWV0YWRhdGEuZmluaXNoUGFyc2luZyhtX3Nj
b3BlTm9kZS0+c291cmNlKCksIElkZW50aWZpZXIoKSwgRnVuY3Rpb25Nb2RlOjpNZXRob2REZWZp
bml0aW9uKTsKICAgICBhdXRvIGluaXRpYWxpemVyID0gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZShtX3ZtLCBtX3Njb3BlTm9kZS0+c291cmNlKCksICZtZXRhZGF0YSwgaXNCdWls
dGluRnVuY3Rpb24oKSA/IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uIDogVW5saW5rZWROb3JtYWxG
dW5jdGlvbiwgY29uc3RydWN0QWJpbGl0eSwgc2NyaXB0TW9kZSgpLCBXVEZNb3ZlKHZhcmlhYmxl
c1VuZGVyVERaKSwgbmV3RGVyaXZlZENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFs
aXplcjo6Tm8pOwotICAgIGluaXRpYWxpemVyLT5zZXRJbnN0YW5jZUZpZWxkTG9jYXRpb25zKFdU
Rk1vdmUoaW5zdGFuY2VGaWVsZExvY2F0aW9ucykpOworICAgIGluaXRpYWxpemVyLT5zZXRDbGFz
c0ZpZWxkTG9jYXRpb25zKFdURk1vdmUoY2xhc3NGaWVsZExvY2F0aW9ucykpOwogCiAgICAgdW5z
aWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25FeHByKGluaXRpYWxpemVyKTsK
ICAgICBPcE5ld0Z1bmNFeHA6OmVtaXQodGhpcywgZHN0LCBzY29wZVJlZ2lzdGVyKCksIGluZGV4
KTsKQEAgLTQ0NTUsNyArNDQ1NSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEluZGV4
ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCiAKIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZEFycm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1lbnQo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2st
PmlzQXJyb3dGdW5jdGlvbigpIHx8IG1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0
KCkgfHwgY29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzIHx8IG1f
Y29kZVR5cGUgPT0gRXZhbENvZGUgfHwgbV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpID09IFNvdXJj
ZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSk7CisgICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0
aW9uQ29udGV4dCgpIHx8IGNvbnN0cnVjdG9yS2luZCgpID09IENvbnN0cnVjdG9yS2luZDo6RXh0
ZW5kcyB8fCBtX2NvZGVUeXBlID09IEV2YWxDb2RlIHx8IG1fY29kZUJsb2NrLT5wYXJzZU1vZGUo
KSA9PSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpOwogCiAgICAg
cmV0dXJuIGVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyaWFibGUoaWRlbnRpZmllciwgVGhp
c1Jlc29sdXRpb25UeXBlOjpTY29wZWQpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCA0YTEwODRiZmE1
NTYuLmM3N2I5NGRiYTZmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNTgxLDE0ICs1ODEsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZW1pdE5vZGVJblRhaWxQb3NpdGlvbihu
dWxscHRyLCBuKTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXREZWZpbmVD
bGFzc0VsZW1lbnRzKFByb3BlcnR5TGlzdE5vZGUqIG4sIFJlZ2lzdGVySUQqIGNvbnN0cnVjdG9y
LCBSZWdpc3RlcklEKiBwcm90b3R5cGUsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIGluc3RhbmNl
RmllbGRMb2NhdGlvbnMpCisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXREZWZpbmVDbGFzc0VsZW1l
bnRzKFByb3BlcnR5TGlzdE5vZGUqIG4sIFJlZ2lzdGVySUQqIGNvbnN0cnVjdG9yLCBSZWdpc3Rl
cklEKiBwcm90b3R5cGUsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIGluc3RhbmNlRmllbGRMb2Nh
dGlvbnMsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIHN0YXRpY0ZpZWxkTG9jYXRpb25zKQogICAg
ICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoY29uc3RydWN0b3ItPnJlZkNvdW50KCkgJiYgcHJv
dG90eXBlLT5yZWZDb3VudCgpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghbV92bS5pc1Nh
ZmVUb1JlY3Vyc2UoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0V4cHJlc3Np
b25Ub29EZWVwRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobi0+bmVlZHNE
ZWJ1Z0hvb2soKSkpCiAgICAgICAgICAgICAgICAgZW1pdERlYnVnSG9vayhuKTsKLSAgICAgICAg
ICAgIHJldHVybiBuLT5lbWl0Qnl0ZWNvZGUoKnRoaXMsIGNvbnN0cnVjdG9yLCBwcm90b3R5cGUs
ICZpbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgICAgIHJldHVybiBuLT5lbWl0Qnl0
ZWNvZGUoKnRoaXMsIGNvbnN0cnVjdG9yLCBwcm90b3R5cGUsICZpbnN0YW5jZUZpZWxkTG9jYXRp
b25zLCAmc3RhdGljRmllbGRMb2NhdGlvbnMpOwogICAgICAgICB9CiAKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdE5vZGVGb3JQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIEV4cHJlc3Npb25Ob2Rl
KiBub2RlKQpAQCAtNzc1LDcgKzc3NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlvbk1ldGFkYXRh
Tm9kZSopOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKFJl
Z2lzdGVySUQqIGRzdCwgRnVuY0V4cHJOb2RlKik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRO
ZXdEZWZhdWx0Q29uc3RydWN0b3IoUmVnaXN0ZXJJRCogZHN0LCBDb25zdHJ1Y3RvcktpbmQsIGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IElkZW50aWZpZXImIGVjbWFOYW1lLCBjb25zdCBT
b3VyY2VDb2RlJiBjbGFzc1NvdXJjZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0TmV3SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24o
UmVnaXN0ZXJJRCogZHN0LCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiYgaW5zdGFuY2VGaWVsZExv
Y2F0aW9ucywgYm9vbCBpc0Rlcml2ZWQpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3Q2xh
c3NGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBWZWN0b3I8SlNUZXh0
UG9zaXRpb24+JiYgY2xhc3NGaWVsZExvY2F0aW9ucywgYm9vbCBpc0Rlcml2ZWQpOwogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0TmV3QXJyb3dGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0ZXJJRCos
IEFycm93RnVuY0V4cHJOb2RlKik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdNZXRob2RE
ZWZpbml0aW9uKFJlZ2lzdGVySUQqIGRzdCwgTWV0aG9kRGVmaW5pdGlvbk5vZGUqKTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdE5ld1JlZ0V4cChSZWdpc3RlcklEKiBkc3QsIFJlZ0V4cCopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCmluZGV4IGY5NmUxYzM1MjUwMS4uMzQzOThjNDBlNGNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0xODYsNyAr
MTg2LDcgQEAgUmVnaXN0ZXJJRCogVGhpc05vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QKIAogc3RhdGljIFJlZ2lzdGVySUQqIGVt
aXRIb21lT2JqZWN0Rm9yQ2FsbGVlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCiB7Ci0g
ICAgaWYgKChnZW5lcmF0b3IuaXNEZXJpdmVkQ2xhc3NDb250ZXh0KCkgfHwgZ2VuZXJhdG9yLmlz
RGVyaXZlZENvbnN0cnVjdG9yQ29udGV4dCgpKSAmJiBnZW5lcmF0b3IucGFyc2VNb2RlKCkgIT0g
U291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlKSB7CisgICAgaWYg
KChnZW5lcmF0b3IuaXNEZXJpdmVkQ2xhc3NDb250ZXh0KCkgfHwgZ2VuZXJhdG9yLmlzRGVyaXZl
ZENvbnN0cnVjdG9yQ29udGV4dCgpKSAmJiBnZW5lcmF0b3IucGFyc2VNb2RlKCkgIT0gU291cmNl
UGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKSB7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGRlcml2ZWRDb25zdHJ1Y3RvciA9IGdlbmVyYXRvci5lbWl0TG9hZERlcml2ZWRDb25zdHJ1
Y3RvckZyb21BcnJvd0Z1bmN0aW9uTGV4aWNhbEVudmlyb25tZW50KCk7CiAgICAgICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBkZXJpdmVk
Q29uc3RydWN0b3IsIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuaG9t
ZU9iamVjdFByaXZhdGVOYW1lKCkpOwogICAgIH0KQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIFBy
b3BlcnR5TGlzdE5vZGU6OmVtaXREZWNsYXJlUHJpdmF0ZUZpZWxkTmFtZXMoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvcgogICAgIH0KIH0KIAotUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdE9yQ29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3RvdHlwZSwgVmVjdG9yPEpTVGV4dFBv
c2l0aW9uPiogaW5zdGFuY2VGaWVsZExvY2F0aW9ucykKK1JlZ2lzdGVySUQqIFByb3BlcnR5TGlz
dE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3RPckNvbnN0cnVjdG9yLCBSZWdpc3RlcklEKiBwcm90b3R5cGUsIFZlY3RvcjxKU1Rl
eHRQb3NpdGlvbj4qIGluc3RhbmNlRmllbGRMb2NhdGlvbnMsIFZlY3RvcjxKU1RleHRQb3NpdGlv
bj4qIHN0YXRpY0ZpZWxkTG9jYXRpb25zKQogewogICAgIFByb3BlcnR5TGlzdE5vZGUqIHAgPSB0
aGlzOwogICAgIFJlZ2lzdGVySUQqIGRzdCA9IG51bGxwdHI7CkBAIC01OTUsNiArNTk1LDEyIEBA
IFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCisgICAgICAgIGlmIChwLT5pc1N0YXRpY0NsYXNzRmllbGQoKSkgeworICAgICAgICAgICAg
QVNTRVJUKHN0YXRpY0ZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgICAgIHN0YXRpY0ZpZWxkTG9j
YXRpb25zLT5hcHBlbmQocC0+cG9zaXRpb24oKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCiAgICAgICAgIGVtaXRQdXRDb25zdGFudFByb3BlcnR5KGdlbmVyYXRvciwgZHN0
LCAqcC0+bV9ub2RlKTsKICAgICB9CiAKQEAgLTY1Miw2ICs2NTgsMTIgQEAgUmVnaXN0ZXJJRCog
UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAor
ICAgICAgICAgICAgaWYgKHAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0YXRpY0ZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNG
aWVsZExvY2F0aW9ucy0+YXBwZW5kKHAtPnBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBIYW5kbGUgcmVndWxhciB2
YWx1ZXMuCiAgICAgICAgICAgICBpZiAobm9kZS0+bV90eXBlICYgUHJvcGVydHlOb2RlOjpDb25z
dGFudCkgewogICAgICAgICAgICAgICAgIGVtaXRQdXRDb25zdGFudFByb3BlcnR5KGdlbmVyYXRv
ciwgZHN0LCAqbm9kZSk7CkBAIC03NDQsNyArNzU2LDcgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlM
aXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGUKIAogdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0UHV0Q29uc3RhbnRQcm9wZXJ0eShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBuZXdPYmosIFByb3BlcnR5Tm9k
ZSYgbm9kZSkKIHsKLSAgICAvLyBQcml2YXRlIGZpZWxkcyBhcmUgaGFuZGxlZCBpbiB0aGUgc3lu
dGhldGljIGluc3RhbmNlRmllbGRJbml0aWFsaXplciBmdW5jdGlvbiwgbm90IGhlcmUuCisgICAg
Ly8gUHJpdmF0ZSBmaWVsZHMgYXJlIGhhbmRsZWQgaW4gYSBzeW50aGV0aWMgY2xhc3NGaWVsZElu
aXRpYWxpemVyIGZ1bmN0aW9uLCBub3QgaGVyZS4KICAgICBBU1NFUlQoIShub2RlLnR5cGUoKSAm
IFByb3BlcnR5Tm9kZTo6UHJpdmF0ZSkpOwogCiAgICAgYm9vbCBzaG91bGRTZXRGdW5jdGlvbk5h
bWUgPSBnZW5lcmF0b3Iuc2hvdWxkU2V0RnVuY3Rpb25OYW1lKG5vZGUubV9hc3NpZ24pOwpAQCAt
Nzk0LDE4ICs4MDYsMjMgQEAgdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0UHV0Q29uc3RhbnRQ
cm9wZXJ0eShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWcKIHZvaWQgUHJvcGVydHlM
aXN0Tm9kZTo6ZW1pdFNhdmVDb21wdXRlZEZpZWxkTmFtZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBQcm9wZXJ0eU5vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUuaXNDb21wdXRl
ZENsYXNzRmllbGQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5RXhwcjsKIAog
ICAgIC8vIFRoZSAnbmFtZScgcmVmZXJzIHRvIGEgc3ludGhldGljIG51bWVyaWMgdmFyaWFibGUg
bmFtZSBpbiB0aGUgcHJpdmF0ZSBuYW1lIHNjb3BlLCB3aGVyZSB0aGUgcHJvcGVydHkga2V5IGlz
IHNhdmVkIGZvciBsYXRlciB1c2UuCiAgICAgY29uc3QgSWRlbnRpZmllciYgZGVzY3JpcHRpb24g
PSAqbm9kZS5uYW1lKCk7CiAgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGRl
c2NyaXB0aW9uKTsKICAgICBBU1NFUlQoIXZhci5sb2NhbCgpKTsKIAotICAgIHByb3BlcnR5RXhw
ciA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLm1fZXhwcmVzc2lvbik7Ci0gICAgUmVnaXN0ZXJJ
RCogcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXRUb1Byb3BlcnR5S2V5KGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlFeHByLmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcHJvcGVydHlFeHByID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUubV9leHByZXNzaW9uKTsK
KyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXRUb1By
b3BlcnR5S2V5KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlFeHByLmdldCgpKTsK
KworICAgIFJlZjxMYWJlbD4gdmFsaWRQcm9wZXJ0eU5hbWVMYWJlbCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90b3R5cGVTdHJpbmcgPSBnZW5lcmF0
b3IuZW1pdExvYWQobnVsbHB0ciwgSlNWYWx1ZShnZW5lcmF0b3IuYWRkU3RyaW5nQ29uc3RhbnQo
Z2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpKSk7CisgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wSWZGYWxzZShnZW5lcmF0b3IuZW1pdEJpbmFyeU9wPE9wRXE+KGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKSwgcHJvdG90eXBlU3RyaW5nLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIE9w
ZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjpzdHJpbmdUeXBlKCksIFJlc3VsdFR5cGU6OnN0cmluZ1R5
cGUoKSkpLCB2YWxpZFByb3BlcnR5TmFtZUxhYmVsLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1p
dFRocm93VHlwZUVycm9yKCJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyBmaWVsZCBuYW1lZCAncHJv
dG90eXBlJyIpOwogCisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh2YWxpZFByb3BlcnR5TmFtZUxh
YmVsLmdldCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1p
dFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOwotICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29w
ZShzY29wZS5nZXQoKSwgdmFyLCBwcm9wZXJ0eU5hbWUsIFRocm93SWZOb3RGb3VuZCwgSW5pdGlh
bGl6YXRpb25Nb2RlOjpDb25zdEluaXRpYWxpemF0aW9uKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1
dFRvU2NvcGUoc2NvcGUuZ2V0KCksIHZhciwgcHJvcGVydHlOYW1lLmdldCgpLCBUaHJvd0lmTm90
Rm91bmQsIEluaXRpYWxpemF0aW9uTW9kZTo6Q29uc3RJbml0aWFsaXphdGlvbik7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCcmFja2V0QWNjZXNzb3JOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00ODAyLDYgKzQ4MTksNyBAQCB2b2lkIERl
ZmluZUZpZWxkTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqKQogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQodmFsdWUuZ2V0KCksIGpz
VW5kZWZpbmVkKCkpOwogICAgIGVsc2UgewogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUodmFs
dWUuZ2V0KCksIG1fYXNzaWduKTsKKwogICAgICAgICBpZiAobV9pZGVudCAmJiBnZW5lcmF0b3Iu
c2hvdWxkU2V0RnVuY3Rpb25OYW1lKG1fYXNzaWduKSkKICAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0U2V0RnVuY3Rpb25OYW1lKHZhbHVlLmdldCgpLCAqbV9pZGVudCk7CiAgICAgfQpAQCAtNDky
NiwxMyArNDk0NCwxNCBAQCBSZWdpc3RlcklEKiBDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRAogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBwcm90b3R5cGVOYW1lUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0
ciwgcHJvcGVydHlOYW1lcy5wcm90b3R5cGUpOwogICAgIGdlbmVyYXRvci5lbWl0Q2FsbERlZmlu
ZVByb3BlcnR5KGNvbnN0cnVjdG9yLmdldCgpLCBwcm90b3R5cGVOYW1lUmVnaXN0ZXIuZ2V0KCks
IHByb3RvdHlwZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciwgMCwgbV9wb3NpdGlvbik7CiAKKyAg
ICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+IHN0YXRpY0ZpZWxkTG9jYXRpb25zOwogICAgIGlmICht
X2NsYXNzRWxlbWVudHMpIHsKICAgICAgICAgbV9jbGFzc0VsZW1lbnRzLT5lbWl0RGVjbGFyZVBy
aXZhdGVGaWVsZE5hbWVzKGdlbmVyYXRvciwgZ2VuZXJhdG9yLnNjb3BlUmVnaXN0ZXIoKSk7CiAK
ICAgICAgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdERlZmluZUNsYXNzRWxlbWVudHMobV9jbGFzc0VsZW1lbnRz
LCBjb25zdHJ1Y3Rvci5nZXQoKSwgcHJvdG90eXBlLmdldCgpLCBpbnN0YW5jZUZpZWxkTG9jYXRp
b25zKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWZpbmVDbGFzc0VsZW1lbnRzKG1fY2xhc3NF
bGVtZW50cywgY29uc3RydWN0b3IuZ2V0KCksIHByb3RvdHlwZS5nZXQoKSwgaW5zdGFuY2VGaWVs
ZExvY2F0aW9ucywgc3RhdGljRmllbGRMb2NhdGlvbnMpOwogICAgICAgICBpZiAoIWluc3RhbmNl
RmllbGRMb2NhdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gaW5zdGFuY2VGaWVsZEluaXRpYWxpemVyID0gZ2VuZXJhdG9yLmVtaXROZXdJbnN0YW5jZUZp
ZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIFdURk1vdmUo
aW5zdGFuY2VGaWVsZExvY2F0aW9ucyksIG1fY2xhc3NIZXJpdGFnZSk7CisgICAgICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gaW5zdGFuY2VGaWVsZEluaXRpYWxpemVyID0gZ2VuZXJhdG9yLmVt
aXROZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIFdURk1vdmUoaW5zdGFuY2VGaWVsZExvY2F0aW9ucyksIG1fY2xhc3NIZXJpdGFnZSk7CiAK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBTa2lwIHRoaXMgaWYgdGhlIGluaXRpYWxpemVyIGZ1bmN0
aW9uIGlzbid0IGdvaW5nIHRvIG5lZWQgYSBob21lIG9iamVjdCAobm8gZXZhbCBvciBzdXBlciBw
cm9wZXJ0aWVzKQogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5Njg2NwpAQCAtNDk0MiwxNiArNDk2MSwyNyBAQCBSZWdpc3RlcklEKiBDbGFz
c0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fbmVlZHNMZXhpY2FsU2NvcGUp
IHsKLSAgICAgICAgaWYgKCFtX25hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIFZhcmlhYmxl
IGNsYXNzTmFtZVZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX25hbWUpOwotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2xhc3NOYW1lVmFyLmlzUmVzb2x2ZWQoKSk7Ci0gICAgICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxs
cHRyLCBjbGFzc05hbWVWYXIpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3Bl
KHNjb3BlLmdldCgpLCBjbGFzc05hbWVWYXIsIGNvbnN0cnVjdG9yLmdldCgpLCBUaHJvd0lmTm90
Rm91bmQsIEluaXRpYWxpemF0aW9uTW9kZTo6SW5pdGlhbGl6YXRpb24pOwotICAgICAgICB9Ci0g
ICAgICAgIGdlbmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CisgICAgaWYgKG1fbmVlZHNM
ZXhpY2FsU2NvcGUgJiYgIW1fbmFtZS5pc051bGwoKSkgeworICAgICAgICBWYXJpYWJsZSBjbGFz
c05hbWVWYXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9uYW1lKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY2xhc3NOYW1lVmFyLmlzUmVzb2x2ZWQoKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIGNsYXNzTmFt
ZVZhcik7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgY2xh
c3NOYW1lVmFyLCBjb25zdHJ1Y3Rvci5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXph
dGlvbk1vZGU6OkluaXRpYWxpemF0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoIXN0YXRpY0ZpZWxk
TG9jYXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3RhdGlj
RmllbGRJbml0aWFsaXplciA9IGdlbmVyYXRvci5lbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVy
RnVuY3Rpb24oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBXVEZNb3ZlKHN0YXRpY0ZpZWxkTG9j
YXRpb25zKSwgbV9jbGFzc0hlcml0YWdlKTsKKyAgICAgICAgLy8gRklYTUU6IFNraXAgdGhpcyBp
ZiB0aGUgaW5pdGlhbGl6ZXIgZnVuY3Rpb24gaXNuJ3QgZ29pbmcgdG8gbmVlZCBhIGhvbWUgb2Jq
ZWN0IChubyBldmFsIG9yIHN1cGVyIHByb3BlcnRpZXMpCisgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY4NjcKKyAgICAgICAgZW1pdFB1dEhvbWVP
YmplY3QoZ2VuZXJhdG9yLCBzdGF0aWNGaWVsZEluaXRpYWxpemVyLmdldCgpLCBjb25zdHJ1Y3Rv
ci5nZXQoKSk7CisKKyAgICAgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKGdlbmVyYXRvciwgbnVsbHB0
cik7CisgICAgICAgIGdlbmVyYXRvci5tb3ZlKGFyZ3MudGhpc1JlZ2lzdGVyKCksIGNvbnN0cnVj
dG9yLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgc3RhdGljRmllbGRJbml0aWFsaXplci5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9u
LCBhcmdzLCBwb3NpdGlvbigpLCBwb3NpdGlvbigpLCBwb3NpdGlvbigpLCBEZWJ1Z2dhYmxlQ2Fs
bDo6Tm8pOwogICAgIH0KIAorICAgIGlmIChtX25lZWRzTGV4aWNhbFNjb3BlKQorICAgICAgICBn
ZW5lcmF0b3IucG9wTGV4aWNhbFNjb3BlKHRoaXMpOworCiAgICAgcmV0dXJuIGdlbmVyYXRvci5t
b3ZlKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgY29uc3RydWN0b3IuZ2V0KCkpLCBj
b25zdHJ1Y3Rvci5nZXQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IDRhNDI3ZWI4NmE3Mi4uZTEyZDEzMTk3M2E5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCBKU1ZhbHVlIGV2YWwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVDTUFNb2RlIGVjbWFNbwogICAgIH0K
IAogICAgIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGU7Ci0gICAgaWYgKGNhbGxlclVu
bGlua2VkQ29kZUJsb2NrLT5wYXJzZU1vZGUoKSA9PSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNl
RmllbGRJbml0aWFsaXplck1vZGUpCisgICAgaWYgKGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5w
YXJzZU1vZGUoKSA9PSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUp
CiAgICAgICAgIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6SW5zdGFuY2VGaWVs
ZEV2YWxDb250ZXh0OwogICAgIGVsc2UgaWYgKGlzRnVuY3Rpb25QYXJzZU1vZGUoY2FsbGVyVW5s
aW5rZWRDb2RlQmxvY2stPnBhcnNlTW9kZSgpKSkKICAgICAgICAgZXZhbENvbnRleHRUeXBlID0g
RXZhbENvbnRleHRUeXBlOjpGdW5jdGlvbkV2YWxDb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCmluZGV4IDlhMmVmY2FkMjg2YS4uN2EyNGZiNGY4NjE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC03NDAsNiArNzQwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNJbnN0YW5jZUNsYXNzUHJvcGVydHkoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxDbGFzc0VsZW1lbnRUYWc+KG1fY2xhc3NFbGVtZW50VGFnKSA9PSBDbGFz
c0VsZW1lbnRUYWc6Okluc3RhbmNlOyB9CiAgICAgICAgIGJvb2wgaXNDbGFzc0ZpZWxkKCkgY29u
c3QgeyByZXR1cm4gaXNDbGFzc1Byb3BlcnR5KCkgJiYgIW5lZWRzU3VwZXJCaW5kaW5nKCk7IH0K
ICAgICAgICAgYm9vbCBpc0luc3RhbmNlQ2xhc3NGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGlzSW5z
dGFuY2VDbGFzc1Byb3BlcnR5KCkgJiYgIW5lZWRzU3VwZXJCaW5kaW5nKCk7IH0KKyAgICAgICAg
Ym9vbCBpc1N0YXRpY0NsYXNzRmllbGQoKSBjb25zdCB7IHJldHVybiBpc1N0YXRpY0NsYXNzUHJv
cGVydHkoKSAmJiAhbmVlZHNTdXBlckJpbmRpbmcoKTsgfQogICAgICAgICBib29sIGlzT3ZlcnJp
ZGRlbkJ5RHVwbGljYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc092ZXJyaWRkZW5CeUR1cGxpY2F0
ZTsgfQogICAgICAgICBib29sIGlzUHJpdmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAmIFBy
aXZhdGU7IH0KICAgICAgICAgYm9vbCBoYXNDb21wdXRlZE5hbWUoKSBjb25zdCB7IHJldHVybiBt
X2V4cHJlc3Npb247IH0KQEAgLTc3NiwxNiArNzc3LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgICAgIGJvb2wgaGFzSW5zdGFuY2VGaWVsZHMoKSBjb25zdDsKIAorICAgICAg
ICBib29sIGlzU3RhdGljQ2xhc3NGaWVsZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX25vZGUtPmlzU3RhdGljQ2xhc3NGaWVsZCgpOworICAgICAgICB9CisKICAgICAg
ICAgc3RhdGljIGJvb2wgc2hvdWxkQ3JlYXRlTGV4aWNhbFNjb3BlRm9yQ2xhc3MoUHJvcGVydHlM
aXN0Tm9kZSopOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgVmVjdG9yPEpTVGV4dFBvc2l0aW9u
PiopOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qLCBWZWN0
b3I8SlNUZXh0UG9zaXRpb24+Kik7CiAKICAgICAgICAgdm9pZCBlbWl0RGVjbGFyZVByaXZhdGVG
aWVsZE5hbWVzKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogc2NvcGUpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCA9IG51bGxwdHIpIGZpbmFsCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBlbWl0Qnl0ZWNvZGUoZ2VuZXJhdG9yLCBkc3QsIG51bGxw
dHIsIG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIGVtaXRCeXRlY29kZShnZW5lcmF0b3Is
IGRzdCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIH0KICAgICAgICAgdm9p
ZCBlbWl0UHV0Q29uc3RhbnRQcm9wZXJ0eShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
LCBQcm9wZXJ0eU5vZGUmKTsKICAgICAgICAgdm9pZCBlbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1l
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUHJvcGVydHlOb2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5jcHAKaW5kZXggZGI1NDBlOTkxZTgzLi44ZTVlZGFhMWFkNTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKQEAgLTIwOSw3ICsyMDksNyBAQCBQ
YXJzZXI8TGV4ZXJUeXBlPjo6flBhcnNlcigpCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhl
clR5cGU+Ci1FeHBlY3RlZDx0eXBlbmFtZSBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VJbm5lclJl
c3VsdCwgU3RyaW5nPiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcihjb25zdCBJZGVudGlm
aWVyJiBjYWxsZWVOYW1lLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBQYXJzaW5nQ29udGV4
dCBwYXJzaW5nQ29udGV4dCwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1l
dGVyc0VuZFBvc2l0aW9uLCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZp
ZWxkTG9jYXRpb25zKQorRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBhcnNl
SW5uZXJSZXN1bHQsIFN0cmluZz4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoY29uc3Qg
SWRlbnRpZmllciYgY2FsbGVlTmFtZSwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgUGFyc2lu
Z0NvbnRleHQgcGFyc2luZ0NvbnRleHQsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3Rv
clBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogY2xh
c3NGaWVsZExvY2F0aW9ucykKIHsKICAgICBBU1RCdWlsZGVyIGNvbnRleHQoY29uc3RfY2FzdDxW
TSY+KG1fdm0pLCBtX3BhcnNlckFyZW5hLCBjb25zdF9jYXN0PFNvdXJjZUNvZGUqPihtX3NvdXJj
ZSkpOwogICAgIFNjb3BlUmVmIHNjb3BlID0gY3VycmVudFNjb3BlKCk7CkBAIC0yMjIsNyArMjIy
LDcgQEAgRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlSW5uZXJSZXN1
bHQsIFN0cmluZz4gUGFyc2VyPExleGVyVHlwZT4KICAgICAgICAgUGFyc2VyRnVuY3Rpb25JbmZv
PEFTVEJ1aWxkZXI+IGZ1bmN0aW9uSW5mbzsKICAgICAgICAgaWYgKGlzR2VuZXJhdG9yT3JBc3lu
Y0Z1bmN0aW9uQm9keVBhcnNlTW9kZShwYXJzZU1vZGUpKQogICAgICAgICAgICAgcGFyYW1ldGVy
cyA9IGNyZWF0ZUdlbmVyYXRvclBhcmFtZXRlcnMoY29udGV4dCwgZnVuY3Rpb25JbmZvLnBhcmFt
ZXRlckNvdW50KTsKLSAgICAgICAgZWxzZSBpZiAocGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9k
ZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSkKKyAgICAgICAgZWxzZSBpZiAocGFyc2VN
b2RlID09IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZSkKICAgICAg
ICAgICAgIHBhcmFtZXRlcnMgPSBjb250ZXh0LmNyZWF0ZUZvcm1hbFBhcmFtZXRlckxpc3QoKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcnNlRnVuY3Rpb25QYXJh
bWV0ZXJzKGNvbnRleHQsIHBhcnNlTW9kZSwgZnVuY3Rpb25JbmZvKTsKQEAgLTI1Niw5ICsyNTYs
OSBAQCBFeHBlY3RlZDx0eXBlbmFtZSBQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VJbm5lclJlc3Vs
dCwgU3RyaW5nPiBQYXJzZXI8TGV4ZXJUeXBlPgogICAgICAgICAgICAgc291cmNlRWxlbWVudHMg
PSBwYXJzZUFzeW5jR2VuZXJhdG9yRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyhjb250ZXh0LCBwYXJz
ZU1vZGUsIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uLCBDaGVja0ZvclN0cmljdE1vZGUp
OwogICAgICAgICBlbHNlIGlmIChwYXJzaW5nQ29udGV4dCA9PSBQYXJzaW5nQ29udGV4dDo6RnVu
Y3Rpb25Db25zdHJ1Y3RvcikKICAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VTaW5n
bGVGdW5jdGlvbihjb250ZXh0LCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0
aW9uKTsKLSAgICAgICAgZWxzZSBpZiAocGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6SW5z
dGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSkgewotICAgICAgICAgICAgQVNTRVJUKGluc3RhbmNl
RmllbGRMb2NhdGlvbnMgJiYgIWluc3RhbmNlRmllbGRMb2NhdGlvbnMtPmlzRW1wdHkoKSk7Ci0g
ICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBhcnNlSW5zdGFuY2VGaWVsZEluaXRpYWxpemVy
U291cmNlRWxlbWVudHMoY29udGV4dCwgKmluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgICAg
ICBlbHNlIGlmIChwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlh
bGl6ZXJNb2RlKSB7CisgICAgICAgICAgICBBU1NFUlQoY2xhc3NGaWVsZExvY2F0aW9ucyAmJiAh
Y2xhc3NGaWVsZExvY2F0aW9ucy0+aXNFbXB0eSgpKTsKKyAgICAgICAgICAgIHNvdXJjZUVsZW1l
bnRzID0gcGFyc2VDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyhjb250ZXh0LCAq
Y2xhc3NGaWVsZExvY2F0aW9ucyk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgc291cmNl
RWxlbWVudHMgPSBwYXJzZVNvdXJjZUVsZW1lbnRzKGNvbnRleHQsIENoZWNrRm9yU3RyaWN0TW9k
ZSk7CiAgICAgfQpAQCAtMjE3NSw3ICsyMTc1LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHN0cmlu
Z0FydGljbGVGb3JGdW5jdGlvbk1vZGUoU291cmNlUGFyc2VNb2RlIG1vZGUpCiAgICAgY2FzZSBT
b3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlOgogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpN
b2R1bGVBbmFseXplTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlRXZhbHVh
dGVNb2RlOgotICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6
ZXJNb2RlOgorICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJN
b2RlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gIiI7CiAgICAgfQpAQCAtMjIxNyw3ICsyMjE3LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHN0
cmluZ0ZvckZ1bmN0aW9uTW9kZShTb3VyY2VQYXJzZU1vZGUgbW9kZSkKICAgICBjYXNlIFNvdXJj
ZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Ok1vZHVs
ZUFuYWx5emVNb2RlOgogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVFdmFsdWF0ZU1v
ZGU6Ci0gICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1v
ZGU6CisgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAi
IjsKICAgICB9CkBAIC0yODczLDcgKzI4NzMsMTYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlQ2xhc3NFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKFQK
ICAgICBUcmVlRXhwcmVzc2lvbiBjb25zdHJ1Y3RvciA9IDA7CiAgICAgVHJlZVByb3BlcnR5TGlz
dCBjbGFzc0VsZW1lbnRzID0gMDsKICAgICBUcmVlUHJvcGVydHlMaXN0IGNsYXNzRWxlbWVudHNU
YWlsID0gMDsKLSAgICB1bnNpZ25lZCBudW1Db21wdXRlZEZpZWxkcyA9IDA7CisgICAgLy8gV2Ug
c3RvcmUgdGhlIGNvbXB1dGVkIGZpZWxkIHByb3BlcnR5IGtleXMgc2VwYXJhdGVkbHkgZm9yCisg
ICAgLy8gaW5zdGFuY2UgYW5kIHN0YXRpYyBmaWVsZHMgKHdpdGggZXZlbiBhbmQgb2RkIGluZGV4
ZXMsCisgICAgLy8gcmVzcGVjdGl2ZWx5KS4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBwcm9wZXJ0
eSBuYW1lcyBhcmUKKyAgICAvLyBldmFsdWF0ZWQgaW4gc291cmNlIGNvZGUgb3JkZXIsIHNvIHdl
IG5lZWQgYW4gZWFzeSB3YXkgdG8KKyAgICAvLyBjcmVhdGUgYWxsIHRoZSBpbmRleGVzIG5vdywg
YnV0IHRoZSBmaWVsZHMgdGhlbXNlbHZlcyBhcmUKKyAgICAvLyBpbml0aWFsaXplZCBpbiBhIGRp
ZmZlcmVudCBvcmRlciAoc3RhdGljIGZpcnN0LCB0aGVuIGluc3RhbmNlKSwKKyAgICAvLyBzbyB0
aGVyZSBuZWVkcyB0byBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBtZWNoYW5pc20gdG8gcmV0cmlldmUK
KyAgICAvLyB0aGUgcmlnaHQgaW5kZXggd2l0aG91dCB0aGUgd2hvbGUgbGlzdCBvZiBmaWVsZHMg
aW4gc291cmNlIGNvZGUKKyAgICAvLyBvcmRlci4KKyAgICB1bnNpZ25lZCBuZXh0SW5zdGFuY2VD
b21wdXRlZEZpZWxkSUQgPSAwLCBuZXh0U3RhdGljQ29tcHV0ZWRGaWVsZElEID0gMTsKICAgICB3
aGlsZSAoIW1hdGNoKENMT1NFQlJBQ0UpKSB7CiAgICAgICAgIGlmIChtYXRjaChTRU1JQ09MT04p
KSB7CiAgICAgICAgICAgICBuZXh0KCk7CkBAIC0yOTgzLDE1ICsyOTkyLDIzIEBAIHBhcnNlTWV0
aG9kOgogICAgICAgICAgICAgdHlwZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5Tm9kZTo6VHlwZT4o
dHlwZSB8IChpc0dldHRlciA/IFByb3BlcnR5Tm9kZTo6R2V0dGVyIDogUHJvcGVydHlOb2RlOjpT
ZXR0ZXIpKTsKICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VHZXR0ZXJTZXR0ZXIoY29udGV4
dCwgYWx3YXlzU3RyaWN0SW5zaWRlQ2xhc3MsIHR5cGUsIG1ldGhvZFN0YXJ0LCBDb25zdHJ1Y3Rv
cktpbmQ6Ok5vbmUsIHRhZyk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNh
bm5vdCBwYXJzZSB0aGlzIG1ldGhvZCIpOwotICAgICAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVz
ZVB1YmxpY0NsYXNzRmllbGRzKCkgJiYgIW1hdGNoKE9QRU5QQVJFTikgJiYgdGFnID09IENsYXNz
RWxlbWVudFRhZzo6SW5zdGFuY2UgJiYgcGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6TWV0
aG9kTW9kZSkgeworICAgICAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVzZVB1YmxpY0NsYXNzRmll
bGRzKCkgJiYgIW1hdGNoKE9QRU5QQVJFTikgJiYgcGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9k
ZTo6TWV0aG9kTW9kZSkgewogICAgICAgICAgICAgQVNTRVJUKCFpc0dldHRlciAmJiAhaXNTZXR0
ZXIpOwogICAgICAgICAgICAgaWYgKGlkZW50KSB7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNG
YWlsSWZUcnVlKCppZGVudCA9PSBwcm9wZXJ0eU5hbWVzLmNvbnN0cnVjdG9yLCAiQ2Fubm90IGRl
Y2xhcmUgY2xhc3MgZmllbGQgbmFtZWQgJ2NvbnN0cnVjdG9yJyIpOwogICAgICAgICAgICAgICAg
IHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gcHJvcGVydHlOYW1lcy5jb25zdHJ1Y3RvclBy
aXZhdGVGaWVsZCwgIkNhbm5vdCBkZWNsYXJlIHByaXZhdGUgY2xhc3MgZmllbGQgbmFtZWQgJyNj
b25zdHJ1Y3RvciciKTsKKyAgICAgICAgICAgICAgICBpZiAodGFnID09IENsYXNzRWxlbWVudFRh
Zzo6U3RhdGljKQorICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50
ID09IHByb3BlcnR5TmFtZXMucHJvdG90eXBlLCAiQ2Fubm90IGRlY2xhcmUgYSBzdGF0aWMgZmll
bGQgbmFtZWQgJ3Byb3RvdHlwZSciKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KGNvbXB1dGVkUHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJz
ZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIobV92bSwgbnVt
Q29tcHV0ZWRGaWVsZHMrKyk7CisgICAgICAgICAgICAgICAgaWYgKHRhZyA9PSBDbGFzc0VsZW1l
bnRUYWc6Okluc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2Vy
QXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKG1fdm0sIG5leHRJ
bnN0YW5jZUNvbXB1dGVkRmllbGRJRCk7CisgICAgICAgICAgICAgICAgICAgIG5leHRJbnN0YW5j
ZUNvbXB1dGVkRmllbGRJRCArPSAyOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFr
ZU51bWVyaWNJZGVudGlmaWVyKG1fdm0sIG5leHRTdGF0aWNDb21wdXRlZEZpZWxkSUQpOworICAg
ICAgICAgICAgICAgICAgICBuZXh0U3RhdGljQ29tcHV0ZWRGaWVsZElEICs9IDI7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJh
dGlvblJlc3VsdCA9IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFibGUoaWRlbnQsIHRy
dWUpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGVjbGFyYXRpb25SZXN1bHQsIGRl
Y2xhcmF0aW9uUmVzdWx0ID09IERlY2xhcmF0aW9uUmVzdWx0OjpWYWxpZCk7CiAgICAgICAgICAg
ICAgICAgY2xhc3NTY29wZS0+dXNlVmFyaWFibGUoaWRlbnQsIGZhbHNlKTsKQEAgLTMwNjIsMTMg
KzMwNzksMTcgQEAgcGFyc2VNZXRob2Q6CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5
cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50
cyhUcmVlQnVpbGRlciYgY29udGV4dCwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYgaW5z
dGFuY2VGaWVsZExvY2F0aW9ucykKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNv
dXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzRmllbGRJbml0aWFsaXpl
clNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBWZWN0b3I8SlNUZXh0
UG9zaXRpb24+JiBjbGFzc0ZpZWxkTG9jYXRpb25zKQogewogICAgIFRyZWVTb3VyY2VFbGVtZW50
cyBzb3VyY2VFbGVtZW50cyA9IGNvbnRleHQuY3JlYXRlU291cmNlRWxlbWVudHMoKTsKICAgICBj
dXJyZW50U2NvcGUoKS0+c2V0SXNDbGFzc1Njb3BlKCk7CiAKLSAgICB1bnNpZ25lZCBudW1Db21w
dXRlZEZpZWxkcyA9IDA7Ci0gICAgZm9yIChhdXRvIGxvY2F0aW9uIDogaW5zdGFuY2VGaWVsZExv
Y2F0aW9ucykgeworICAgIC8vIFByb3BlcnR5IGtleXMgZm9yIGNvbXB1dGVkIGZpZWxkcyBzdGFy
dCBhdCAwIGZvciBpbnN0YW5jZQorICAgIC8vIGZpZWxkcywgYXQgMSBmb3Igc3RhdGljIGZpZWxk
cy4gV2UnbGwgYnVtcCB0aGUgY291bnRlciBieSBvbmUKKyAgICAvLyBpZiB3ZSBldmVyIGZpbmQg
b25lIHN0YXRpYyBmaWVsZCwgc2luY2UgdGhhdCBtZWFucyB0aGV5J2xsIGFsbAorICAgIC8vIGJl
IHN0YXRpYyBmaWVsZHMuCisgICAgdW5zaWduZWQgbmV4dENvbXB1dGVkRmllbGRJRCA9IDA7Cisg
ICAgZm9yIChhdXRvIGxvY2F0aW9uIDogY2xhc3NGaWVsZExvY2F0aW9ucykgewogICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9r
ZW4KICAgICAgICAgLy8gb24gY2xhc3MgZmllbGRzLCBzbyB3ZSBzZXQgdGhpcyB2YWx1ZSB0byBm
YWxzZS4KICAgICAgICAgTGV4ZXJTdGF0ZSBsZXhlclN0YXRlIHsgbG9jYXRpb24ub2Zmc2V0LCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0KSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGxvY2F0aW9uLmxpbmUpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9jYXRp
b24ubGluZSksIGZhbHNlIH07CkBAIC0zMDc4LDYgKzMwOTksMTcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
SW5zdGFuY2UKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSBudWxscHRyOwogICAg
ICAgICBUcmVlRXhwcmVzc2lvbiBjb21wdXRlZFByb3BlcnR5TmFtZSA9IDA7CiAgICAgICAgIERl
ZmluZUZpZWxkTm9kZTo6VHlwZSB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpOYW1lOwor
CisgICAgICAgIGlmIChtYXRjaChSRVNFUlZFRF9JRl9TVFJJQ1QpICYmICptX3Rva2VuLm1fZGF0
YS5pZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPnN0YXRpY0tleXdvcmQpIHsKKyAgICAgICAg
ICAgIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CisgICAgICAgICAgICBBU1NFUlQoaWRl
bnQpOworICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgaWYgKG1hdGNoKFNFTUlDT0xP
TikgfHwgbWF0Y2ggKEVRVUFMKSB8fCBtYXRjaChDTE9TRUJSQUNFKSB8fCBtX2xleGVyLT5oYXNM
aW5lVGVybWluYXRvckJlZm9yZVRva2VuKCkpCisgICAgICAgICAgICAgICAgZ290byB2YWxpZEZp
ZWxkOworICAgICAgICAgICAgaWYgKCFuZXh0Q29tcHV0ZWRGaWVsZElEKQorICAgICAgICAgICAg
ICAgIG5leHRDb21wdXRlZEZpZWxkSUQrKzsKKyAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAo
bV90b2tlbi5tX3R5cGUpIHsKICAgICAgICAgY2FzZSBQUklWQVRFTkFNRToKICAgICAgICAgICAg
IHR5cGUgPSBEZWZpbmVGaWVsZE5vZGU6OlR5cGU6OlByaXZhdGVOYW1lOwpAQCAtMzEwNSw3ICsz
MTM3LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMg
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5zdGFuY2UKICAgICAgICAgICAgIGNvbXB1dGVkUHJv
cGVydHlOYW1lID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKICAgICAgICAg
ICAgIGZhaWxJZkZhbHNlKGNvbXB1dGVkUHJvcGVydHlOYW1lLCAiQ2Fubm90IHBhcnNlIGNvbXB1
dGVkIHByb3BlcnR5IG5hbWUiKTsKICAgICAgICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwo
Q0xPU0VCUkFDS0VULCAiXSIsICJlbmQiLCAiY29tcHV0ZWQgcHJvcGVydHkgbmFtZSIpOwotICAg
ICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVt
ZXJpY0lkZW50aWZpZXIobV92bSwgbnVtQ29tcHV0ZWRGaWVsZHMrKyk7CisgICAgICAgICAgICBp
ZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRp
ZmllcihtX3ZtLCBuZXh0Q29tcHV0ZWRGaWVsZElEKTsKKyAgICAgICAgICAgIG5leHRDb21wdXRl
ZEZpZWxkSUQgKz0gMjsKICAgICAgICAgICAgIHR5cGUgPSBEZWZpbmVGaWVsZE5vZGU6OlR5cGU6
OkNvbXB1dGVkTmFtZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgpAQCAt
MzExNCw2ICszMTQ3LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNl
RWxlbWVudHMgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5zdGFuY2UKICAgICAgICAgICAgIGZh
aWxEdWVUb1VuZXhwZWN0ZWRUb2tlbigpOwogICAgICAgICB9CiAKKyAgICB2YWxpZEZpZWxkOgog
ICAgICAgICAvLyBPbmx5IHZhbGlkIGNsYXNzIGZpZWxkcyBhcmUgaGFuZGxlZCBpbiB0aGlzIGZ1
bmN0aW9uLgogICAgICAgICBBU1NFUlQobWF0Y2goRVFVQUwpIHx8IG1hdGNoKFNFTUlDT0xPTikg
fHwgbWF0Y2goQ0xPU0VCUkFDRSkgfHwgbV9sZXhlci0+aGFzTGluZVRlcm1pbmF0b3JCZWZvcmVU
b2tlbigpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKaW5kZXggMWY1ZDkz
MmMzZjU3Li5kODBiOTIyNzdjZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
aApAQCAtMjYwLDcgKzI2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1v
ZGU6OkdldHRlck1vZGU6CiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpTZXR0ZXJNb2Rl
OgogICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9kTW9kZToKLSAgICAgICAgY2Fz
ZSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGU6CisgICAgICAg
IGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlOgogICAgICAg
ICAgICAgc2V0SXNGdW5jdGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTE3MTIsNyAr
MTcxMiw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U291cmNlRWxlbWVudHMgcGFyc2VBc3luY0Z1bmN0aW9uU291cmNlRWxlbWVudHMoVHJlZUJ1aWxk
ZXImLCBTb3VyY2VQYXJzZU1vZGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24s
IFNvdXJjZUVsZW1lbnRzTW9kZSk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU291cmNlRWxlbWVudHMgcGFyc2VBc3luY0dlbmVyYXRvckZ1bmN0aW9uU291cmNlRWxlbWVu
dHMoVHJlZUJ1aWxkZXImLCBTb3VyY2VQYXJzZU1vZGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQm9k
eUV4cHJlc3Npb24sIFNvdXJjZUVsZW1lbnRzTW9kZSk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgcGFyc2VTaW5nbGVGdW5jdGlvbihUcmVlQnVp
bGRlciYsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3Np
dGlvbik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVu
dHMgcGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyhUcmVlQnVpbGRl
ciYsIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJzZUNsYXNzRmllbGRJbml0aWFsaXpl
clNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9u
PiYpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJz
ZVN0YXRlbWVudExpc3RJdGVtKFRyZWVCdWlsZGVyJiwgY29uc3QgSWRlbnRpZmllciomIGRpcmVj
dGl2ZSwgdW5zaWduZWQqIGRpcmVjdGl2ZUxpdGVyYWxMZW5ndGgpOwogICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZVN0YXRlbWVudChUcmVlQnVpbGRl
ciYsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3RpdmUsIHVuc2lnbmVkKiBkaXJlY3RpdmVMaXRl
cmFsTGVuZ3RoID0gbnVsbHB0cik7CiAgICAgZW51bSBjbGFzcyBFeHBvcnRUeXBlIHsgRXhwb3J0
ZWQsIE5vdEV4cG9ydGVkIH07CkBAIC0yMDU1LDcgKzIwNTUsNyBAQCBwcml2YXRlOgogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+Ci1z
dGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlKFBhcnNl
ckVycm9yJiBlcnJvciwgY29uc3QgSWRlbnRpZmllciYgY2FsbGVlTmFtZSwgU291cmNlUGFyc2VN
b2RlIHBhcnNlTW9kZSwgUGFyc2luZ0NvbnRleHQgcGFyc2luZ0NvbnRleHQsIE9wdGlvbmFsPGlu
dD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgY29uc3QgVmFyaWFi
bGVFbnZpcm9ubWVudCogdmFyaWFibGVzVW5kZXJURFosIGNvbnN0IFZlY3RvcjxKU1RleHRQb3Np
dGlvbj4qIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpCitzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9k
ZT4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlKFBhcnNlckVycm9yJiBlcnJvciwgY29uc3QgSWRl
bnRpZmllciYgY2FsbGVlTmFtZSwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgUGFyc2luZ0Nv
bnRleHQgcGFyc2luZ0NvbnRleHQsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBh
cmFtZXRlcnNFbmRQb3NpdGlvbiwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCogdmFyaWFibGVz
VW5kZXJURFosIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGNsYXNzRmllbGRMb2NhdGlv
bnMpCiB7CiAgICAgaW50IGVyckxpbmU7CiAgICAgU3RyaW5nIGVyck1zZzsKQEAgLTIwNzUsNyAr
MjA3NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2UoUGFyc2VyRXJyb3ImIGVycm9yLCBjb25zdCBJCiAgICAgICAgIHZhcmlhYmxlc1VuZGVy
VERaLT5jb3B5UHJpdmF0ZU5hbWVzVG8oY3VycmVudFNjb3BlKCktPmxleGljYWxWYXJpYWJsZXMo
KSk7CiAgICAgfQogCi0gICAgYXV0byBwYXJzZVJlc3VsdCA9IHBhcnNlSW5uZXIoY2FsbGVlTmFt
ZSwgcGFyc2VNb2RlLCBwYXJzaW5nQ29udGV4dCwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRl
cnNFbmRQb3NpdGlvbiwgaW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7CisgICAgYXV0byBwYXJzZVJl
c3VsdCA9IHBhcnNlSW5uZXIoY2FsbGVlTmFtZSwgcGFyc2VNb2RlLCBwYXJzaW5nQ29udGV4dCwg
ZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgY2xhc3NGaWVsZExvY2F0
aW9ucyk7CiAKICAgICBpbnQgbGluZU51bWJlciA9IG1fbGV4ZXItPmxpbmVOdW1iZXIoKTsKICAg
ICBib29sIGxleEVycm9yID0gbV9sZXhlci0+c2F3RXJyb3IoKTsKQEAgLTIxNjAsNyArMjE2MCw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBwYXJzZSgKICAgICBFdmFsQ29udGV4dFR5
cGUgZXZhbENvbnRleHRUeXBlID0gRXZhbENvbnRleHRUeXBlOjpOb25lLAogICAgIERlYnVnZ2Vy
UGFyc2VEYXRhKiBkZWJ1Z2dlclBhcnNlRGF0YSA9IG51bGxwdHIsCiAgICAgY29uc3QgVmFyaWFi
bGVFbnZpcm9ubWVudCogdmFyaWFibGVzVW5kZXJURFogPSBudWxscHRyLAotICAgIGNvbnN0IFZl
Y3RvcjxKU1RleHRQb3NpdGlvbj4qIGluc3RhbmNlRmllbGRMb2NhdGlvbnMgPSBudWxscHRyLAor
ICAgIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGNsYXNzRmllbGRMb2NhdGlvbnMgPSBu
dWxscHRyLAogICAgIGJvb2wgaXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9uID0gZmFsc2UpCiB7CiAg
ICAgQVNTRVJUKCFzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXNOdWxsKCkpOwpAQCAtMjE3
Miw3ICsyMTcyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHBhcnNlKAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiByZXN1bHQ7CiAgICAgaWYgKHNvdXJjZS5wcm92aWRl
cigpLT5zb3VyY2UoKS5pczhCaXQoKSkgewogICAgICAgICBQYXJzZXI8TGV4ZXI8TENoYXI+PiBw
YXJzZXIodm0sIHNvdXJjZSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIHBh
cnNlTW9kZSwgc3VwZXJCaW5kaW5nLCBkZWZhdWx0Q29uc3RydWN0b3JLaW5kRm9yVG9wTGV2ZWxG
dW5jdGlvbiwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCksIGV2
YWxDb250ZXh0VHlwZSwgZGVidWdnZXJQYXJzZURhdGEsIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlv
bik7Ci0gICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvciwgbmFt
ZSwgcGFyc2VNb2RlLCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCkgPyBQYXJzaW5nQ29udGV4dDo6
RXZhbCA6IFBhcnNpbmdDb250ZXh0OjpQcm9ncmFtLCBXVEY6Om51bGxvcHQsIHZhcmlhYmxlc1Vu
ZGVyVERaLCBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2Vy
LnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yLCBuYW1lLCBwYXJzZU1vZGUsIGlzRXZhbE5vZGU8UGFy
c2VkTm9kZT4oKSA/IFBhcnNpbmdDb250ZXh0OjpFdmFsIDogUGFyc2luZ0NvbnRleHQ6OlByb2dy
YW0sIFdURjo6bnVsbG9wdCwgdmFyaWFibGVzVW5kZXJURFosIGNsYXNzRmllbGRMb2NhdGlvbnMp
OwogICAgICAgICBpZiAocG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSkKICAgICAgICAgICAgICpw
b3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gcGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xp
bmUoKTsKICAgICAgICAgaWYgKGJ1aWx0aW5Nb2RlID09IEpTUGFyc2VyQnVpbHRpbk1vZGU6OkJ1
aWx0aW4pIHsKQEAgLTIxODUsNyArMjE4NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2Rl
PiBwYXJzZSgKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGRlZmF1
bHRDb25zdHJ1Y3RvcktpbmRGb3JUb3BMZXZlbEZ1bmN0aW9uID09IENvbnN0cnVjdG9yS2luZDo6
Tm9uZSwgIkJ1aWx0aW5FeGVjdXRhYmxlcydzIHNwZWNpYWwgY29uc3RydWN0b3JzIHNob3VsZCBh
bHdheXMgdXNlIGEgOC1iaXQgc3RyaW5nIik7CiAgICAgICAgIFBhcnNlcjxMZXhlcjxVQ2hhcj4+
IHBhcnNlcih2bSwgc291cmNlLCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwg
cGFyc2VNb2RlLCBzdXBlckJpbmRpbmcsIGRlZmF1bHRDb25zdHJ1Y3RvcktpbmRGb3JUb3BMZXZl
bEZ1bmN0aW9uLCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4oKSwg
ZXZhbENvbnRleHRUeXBlLCBkZWJ1Z2dlclBhcnNlRGF0YSwgaXNJbnNpZGVPcmRpbmFyeUZ1bmN0
aW9uKTsKLSAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yLCBu
YW1lLCBwYXJzZU1vZGUsIGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4oKSA/IFBhcnNpbmdDb250ZXh0
OjpFdmFsIDogUGFyc2luZ0NvbnRleHQ6OlByb2dyYW0sIFdURjo6bnVsbG9wdCwgdmFyaWFibGVz
VW5kZXJURFosIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgICAgICByZXN1bHQgPSBwYXJz
ZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IsIG5hbWUsIHBhcnNlTW9kZSwgaXNFdmFsTm9kZTxQ
YXJzZWROb2RlPigpID8gUGFyc2luZ0NvbnRleHQ6OkV2YWwgOiBQYXJzaW5nQ29udGV4dDo6UHJv
Z3JhbSwgV1RGOjpudWxsb3B0LCB2YXJpYWJsZXNVbmRlclREWiwgY2xhc3NGaWVsZExvY2F0aW9u
cyk7CiAgICAgICAgIGlmIChwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKQogICAgICAgICAgICAg
KnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUgPSBwYXJzZXIucG9zaXRpb25CZWZvcmVMYXN0TmV3
bGluZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyTW9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMu
aAppbmRleCA2NDEzMTJjY2M5YmMuLjQxNTMwNjdmNjVmMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaApAQCAtNjYsNyArNjYsNyBAQCBlbnVtIGNsYXNzIFNv
dXJjZVBhcnNlTW9kZSA6IHVpbnQ4X3QgewogICAgIEFzeW5jR2VuZXJhdG9yV3JhcHBlckZ1bmN0
aW9uTW9kZSA9IDE2LAogICAgIEFzeW5jR2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGUgICA9IDE3
LAogICAgIEdlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlICAgICAgICA9IDE4LAotICAgIEluc3Rh
bmNlRmllbGRJbml0aWFsaXplck1vZGUgICAgICA9IDE5LAorICAgIENsYXNzRmllbGRJbml0aWFs
aXplck1vZGUgICAgICAgICA9IDE5LAogfTsKIAogY2xhc3MgU291cmNlUGFyc2VNb2RlU2V0IHsg
CkBAIC0xMTYsNyArMTE2LDcgQEAgQUxXQVlTX0lOTElORSBib29sIGlzRnVuY3Rpb25QYXJzZU1v
ZGUoU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSkKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpB
c3luY0dlbmVyYXRvckJvZHlNb2RlLAogICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2Vu
ZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZSwKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3lu
Y0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlLAotICAgICAgICBTb3VyY2VQYXJzZU1vZGU6Oklu
c3RhbmNlRmllbGRJbml0aWFsaXplck1vZGUpLmNvbnRhaW5zKHBhcnNlTW9kZSk7CisgICAgICAg
IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZSkuY29udGFpbnMocGFy
c2VNb2RlKTsKIH0gCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBpc0FzeW5jRnVuY3Rpb25QYXJzZU1v
ZGUoU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSkgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKaW5kZXggMjM2MWFkNzEzYmZmLi4w
MDBiYjcxOTA3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvblByb3RvdHlwZS5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iagogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1v
ZGU6OkFycm93RnVuY3Rpb25Nb2RlOgotICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6SW5z
dGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZToKKyAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6
OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU6CiAgICAgICAgICAgICBmdW5jdGlvbkhlYWRlciA9
ICIiOwogICAgICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5jcHAKaW5kZXggZDU1NmNkZWU2Mjk4Li5mZmVlOGY1MGRhMWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCkBAIC00MjYsNyAr
NDI2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1YKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9k
ZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlOgogICAgIGNhc2UgU291cmNlUGFy
c2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlOgogICAgIGNhc2UgU291cmNl
UGFyc2VNb2RlOjpHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZToKLSAgICBjYXNlIFNvdXJjZVBh
cnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZToKKyAgICBjYXNlIFNvdXJjZVBh
cnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZToKICAgICAgICAgaWYgKCFmdW5jdGlv
bi0+anNFeGVjdXRhYmxlKCktPmlzSW5TdHJpY3RDb250ZXh0KCkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxlcik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkZ1bmN0aW9uLmNhbGxlciB1
c2VkIHRvIHJldHJpZXZlIHN0cmljdCBjYWxsZXIiX3MpKTsKLS0gCjIuMjYuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405349</attachid>
            <date>2020-07-28 04:34:17 -0700</date>
            <delta_ts>2020-10-27 05:20:56 -0700</delta_ts>
            <desc>Add support for static public fields, v6</desc>
            <filename>0001-JSC-Add-support-for-static-public-class-fields.patch</filename>
            <type>text/plain</type>
            <size>74146</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBkMTUwOTE1NzZiYTViOGQyMDVmMWU1NWVhNmM5YTcxOGQyYTEyODA3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/WGFuPTIwTD1DMz1CM3Blej89IDx4YW5AaWdh
bGlhLmNvbT4KRGF0ZTogVGh1LCAxNiBBcHIgMjAyMCAxODoyMToxMyArMDIwMApTdWJqZWN0OiBb
UEFUQ0hdIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcwog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5NQoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpKU1Rlc3RzOgoKRW5hYmxlIHN0YXRpYyBwdWJsaWMgZmllbGRz
LCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJvbSB0aGUKVjggcHJvamVjdC4gQWxzbyBz
cGxpdCB0aGUgc3VwcG9ydCBjb2RlIGludG8gYSBzZXBhcmF0ZSBmaWxlCihoYXJtb255LXN1cHBv
cnQuanMpIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgoKKiB0ZXN0MjYyL2NvbmZpZy55YW1sOiBlbmFi
bGUgc3RhdGljIHB1YmxpYyBmaWVsZHMuCiogc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255Lmpz
OgoqIHN0cmVzcy9jbGFzcy1maWVsZHMtc3RhdGljLWhhcm1vbnkuanM6IEFkZGVkLgoobG9hZC5D
KToKKGxvYWQpOgooYXNzZXJ0RXF1YWxzLkMuaGFzT3duUHJvcGVydHkpOgooYXNzZXJ0RXF1YWxz
LkMpOgooYXNzZXJ0RXF1YWxzKToKKGFzc2VydEVxdWFscy5DLmQpOgooYXNzZXJ0RXF1YWxzLkMu
ZSk6Cihhc3NlcnRFcXVhbHMuQy5jKToKKGFzc2VydEVxdWFscy5sZXQuZCk6CihDKToKKEMuYy5B
KToKKEMuYyk6CihDLmMuQyk6Cihhc3NlcnRFcXVhbHMuQi5zZXQgZCk6Cihhc3NlcnRFcXVhbHMu
Qik6Cihhc3NlcnRFcXVhbHMuQy5ydW4pOgooeC4pOgooeC5DLnJ1bik6Cih4LkMpOgooeCk6Cihw
cm90b3R5cGUueCk6Cihwcm90b3R5cGUueC5DLnByb3RvdHlwZS5ydW4pOgoocHJvdG90eXBlLngu
Qy5ydW4pOgoocHJvdG90eXBlLnguQyk6Cih5Lik6Cih5LkMucHJvdG90eXBlLnJ1bik6Cih5LkMu
cnVuKToKKHkuQyk6Cih5KToKKHByb3RvdHlwZS55LkMpOgoocHJvdG90eXBlLnkuRCk6Cihhc3Nl
cnRFcXVhbHMuQy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpOgooYXNzZXJ0RXF1YWxzLlgucCk6
Cihhc3NlcnRFcXVhbHMuWCk6CihYLnQpOgooWCk6Ciogc3RyZXNzL2hhcm1vbnktc3VwcG9ydC5q
czogQWRkZWQuCihjbGFzc09mKToKKGRlZXBPYmplY3RFcXVhbHMpOgooZGVlcEVxdWFscyk6Cihm
YWlsKToKKGFzc2VydEluc3RhbmNlb2YpOgooYXNzZXJ0RXF1YWxzKToKKGFzc2VydE5vdEVxdWFs
cyk6Cihhc3NlcnRUcnVlKToKKGFzc2VydEZhbHNlKToKKGFzc2VydFRocm93cyk6CgpTb3VyY2Uv
SmF2YVNjcmlwdENvcmU6CgpBZGQgc3VwcG9ydCBmb3Igc3RhdGljIHB1YmxpYyBjbGFzcyBmaWVs
ZHMuIFdlIGNhbiByZXVzZSBtb3N0IG9mCnRoZSBleGlzdGluZyBtYWNoaW5lcnkgYXZhaWxhYmxl
IGZvciBpbnN0YW5jZSBmaWVsZHMsIHdpdGggYQpjb3VwbGUgb2YgaXNzdWVzIHRoYXQgbWVyaXQg
c3BlY2lhbCBjb21tZW50OgoKU3RhdGljIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIGxpa2UgaW5z
dGFuY2UgZmllbGRzLCB3aXRoIGEKc3ludGhldGljIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUgdG8g
YWxsb3cgdXMgdG8gdHJpdmlhbGx5IGZvbGxvdwp0aGUgc2NvcGluZyBydWxlcyBpbiB0aGUgc3Bl
Yy4gQXMgaXQgaGFwcGVucyB3aXRoIGluc3RhbmNlIGZpZWxkcwp0aGlzIGNvdWxkIGJlIGlubGlu
ZWQgaW4gYSBmdXR1cmUgcGF0Y2guCgpUaGUgd2F5IHdlIHN0b3JlIGNvbXB1dGVkIHByb3BlcnR5
IGtleXMgbmVlZHMgdG8gYmUKbW9kaWZpZWQuIEJlZm9yZSB3ZSBhc3N1bWVkIHRoZSBzb3VyY2Ug
Y29kZSBvcmRlciB3b3VsZCBiZQppZGVudGljYWwgdG8gdGhlIGV2YWx1YXRpb24gb3JkZXIgKHdo
aWNoIHdhcyB0cnVlIGZvciBpbnN0YW5jZQpmaWVsZHMpLiBXaXRoIHN0YXRpYyBmaWVsZHMgdGhp
cyBjYW4gbm90IGJlIHRoZSBjYXNlLCBzaW5jZSBzdGF0aWMKZmllbGRzIGFyZSBhbHdheXMgaW5p
dGlhbGl6ZWQgZmlyc3QuIFRvIGFsbG93IGZvciB0aGlzIG1pc21hdGNoCnRoZSBjb21wdXRlZCBw
cm9wZXJ0eSBrZXlzIGZvciBpbnN0YW5jZSBmaWVsZHMgYXJlIHN0b3JlZCB3aXRoIGFuCmV2ZW4g
aWRlbnRpZmllciwgYW5kIHRob3NlIGZvciBzdGF0aWMgZmllbGRzIGFyZSBzdG9yZWQgd2l0aCBh
bgpvZGQgaWRlbnRpZmllci4gVGhlIGZpZWxkIHBhcnNlciwgdXBvbiBmaWd1cmluZyBvdXQgd2hl
dGhlciBpdCdzCmluaXRpYWxpemluZyB0aGUgc3RhdGljIG9yIHRoZSBpbnN0YW5jZSBmaWVsZHMs
IHdpbGwga25vdyB3aGVyZSB0bwpsb29rIHVwIHRoZSBrZXkuCgpGb3IgZXhhbXBsZToKCmNsYXNz
IEZPTyB7CiAgWyJhIl0gPSAwOwogIHN0YXRpYyBbImIiXSA9IDE7CiAgc3RhdGljIFsiYyJdID0g
MjsKICBbImQiXSA9IDM7Cn0KCkhlcmUgd2Ugd2lsbCBldmFsdWF0ZSB0aGUgY29tcHV0ZWQgZmll
bGQgbmFtZXMgaW4gdGhlIGZvbGxvd2luZwpvcmRlcjogYSwgYiwgYywgZDsgYnV0IHdlIHdpbGwg
aW5pdGlhbGl6ZSB0aGUgZmllbGRzIGluIHRoZQpmb2xsb3dpbmcgb3JkZXI6IGIsIGMsIGEsIGQu
IFNpbmNlIGVhY2ggZ3JvdXAgb2YgZmllbGRzIGlzCmluaXRpYWxpemVkIGluZGVwZW5kZW50bHkg
d2UgY2FuIHRyaXZpYWxseSByZXRyaWV2ZSB0aGUgcHJvcGVydHkKa2V5cyBmb3IgZWFjaCBncm91
cCBqdXN0IGJ5IGdldHRpbmcgdGhlIG9kZCBwcm9wZXJ0eSBrZXlzIGZvcgpzdGF0aWMgZmllbGRz
IChpbmRleGVzIDEgYW5kIDMpIGFuZCB0aGUgZXZlbiBvbmVzIGZvciBpbnN0YW5jZQpmaWVsZHMg
KGluZGV4ZXMgMCBhbmQgMikuCgoqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmNwcDoKKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKiBieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgoqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHA6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZElu
aXRpYWxpemVyRnVuY3Rpb24pOgoqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgoq
IGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjpl
bWl0Qnl0ZWNvZGUpOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmll
bGROYW1lKToKKEpTQzo6RGVmaW5lRmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpDbGFz
c0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgoqIHBhcnNlci9BU1RCdWlsZGVyLmg6CihKU0M6OkFT
VEJ1aWxkZXI6OmNyZWF0ZURlZmluZUZpZWxkKToKKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5o
OgooSlNDOjpEZWZpbmVGaWVsZE5vZGU6OkRlZmluZUZpZWxkTm9kZSk6CiogcGFyc2VyL05vZGVz
Lmg6CiogcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlu
bmVyKToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MpOgooSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyk6
CiogcGFyc2VyL1BhcnNlci5oOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UpOgooSlND
OjpwYXJzZSk6CiogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKEpTQzo6U3ludGF4Q2hlY2tlcjo6
Y3JlYXRlRGVmaW5lRmllbGQpOgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpTRnVu
Y3Rpb246OnNldEZ1bmN0aW9uTmFtZSk6CgoqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcDoKKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKiBi
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgoqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHA6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcik6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxp
emVyRnVuY3Rpb24pOgooSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWRBcnJvd0Z1bmN0
aW9uTGV4aWNhbEVudmlyb25tZW50KToKKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aDoKKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKEpTQzo6ZW1pdEhvbWVPYmplY3RG
b3JDYWxsZWUpOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpQ
cm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1lKToKKEpTQzo6RGVmaW5l
RmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNv
ZGUpOgoqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKEpTQzo6ZXZhbCk6CiogcGFyc2Vy
L05vZGVzLmg6CiogcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUlubmVyKToKKEpTQzo6c3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZSk6CihKU0M6OnN0
cmluZ0ZvckZ1bmN0aW9uTW9kZSk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNz
KToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NGaWVsZEluaXRpYWxpemVyU291
cmNlRWxlbWVudHMpOgoqIHBhcnNlci9QYXJzZXIuaDoKKEpTQzo6U2NvcGU6OnNldFNvdXJjZVBh
cnNlTW9kZSk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZSk6CihKU0M6OnBhcnNlKToK
KiBwYXJzZXIvUGFyc2VyTW9kZXMuaDoKKEpTQzo6aXNGdW5jdGlvblBhcnNlTW9kZSk6CiogcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CihKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJp
bmcpOgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpTRnVuY3Rpb246OmNhbGxlckdl
dHRlcik6Ci0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDYyICsrKwogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanMgICAgICAg
IHwgMTY1ICstLS0tLQogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255
LmpzIHwgNTAzICsrKysrKysrKysrKysrKysrKwogSlNUZXN0cy9zdHJlc3MvaGFybW9ueS1zdXBw
b3J0LmpzICAgICAgICAgICAgIHwgMTk2ICsrKysrKysKIEpTVGVzdHMvdGVzdDI2Mi9jb25maWcu
eWFtbCAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgIHwgMTA2ICsrKysKIC4uLi9ieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5jcHAgICB8ICAgNCArLQogLi4uL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmggICAgIHwgIDEyICstCiAuLi4vYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCAgICAgICAgfCAgMTIgKy0KIC4uLi9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaCAgICAgICAgICB8ICAgNiArLQogLi4uL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwICAgICAgICAgICAgIHwgIDY1ICsrLQogLi4uL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcCAgICAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmggICAgICAgICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcCAgICAgICB8ICA2MiArKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmggICAgICAgICB8ICAxNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXJNb2Rlcy5oICAgIHwgICA0ICstCiAuLi4vcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAgICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwICB8ICAgMiArLQogMTggZmlsZXMgY2hhbmdlZCwgMTAwMiBpbnNlcnRpb25z
KCspLCAyMjcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy9zdHJlc3Mv
Y2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0
cy9zdHJlc3MvaGFybW9ueS1zdXBwb3J0LmpzCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBmMWFkM2FmMzIyMjIuLmQzYmNkYzUwNDhkMyAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw2NSBAQAorMjAyMC0wNi0wNSAgWGFuIEzDs3BleiAgPHhhbkBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxk
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxl
IHN0YXRpYyBwdWJsaWMgZmllbGRzLCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJvbSB0
aGUKKyAgICAgICAgVjggcHJvamVjdC4gQWxzbyBzcGxpdCB0aGUgc3VwcG9ydCBjb2RlIGludG8g
YSBzZXBhcmF0ZSBmaWxlCisgICAgICAgIChoYXJtb255LXN1cHBvcnQuanMpIHRvIGF2b2lkIGR1
cGxpY2F0aW9uLgorCisgICAgICAgICogdGVzdDI2Mi9jb25maWcueWFtbDogZW5hYmxlIHN0YXRp
YyBwdWJsaWMgZmllbGRzLgorICAgICAgICAqIHN0cmVzcy9jbGFzcy1maWVsZHMtaGFybW9ueS5q
czoKKyAgICAgICAgKiBzdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGxvYWQuQyk6CisgICAgICAgIChsb2FkKToKKyAgICAgICAgKGFzc2VydEVx
dWFscy5DLmhhc093blByb3BlcnR5KToKKyAgICAgICAgKGFzc2VydEVxdWFscy5DKToKKyAgICAg
ICAgKGFzc2VydEVxdWFscyk6CisgICAgICAgIChhc3NlcnRFcXVhbHMuQy5kKToKKyAgICAgICAg
KGFzc2VydEVxdWFscy5DLmUpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkMuYyk6CisgICAgICAg
IChhc3NlcnRFcXVhbHMubGV0LmQpOgorICAgICAgICAoQyk6CisgICAgICAgIChDLmMuQSk6Cisg
ICAgICAgIChDLmMpOgorICAgICAgICAoQy5jLkMpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkIu
c2V0IGQpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkIpOgorICAgICAgICAoYXNzZXJ0RXF1YWxz
LkMucnVuKToKKyAgICAgICAgKHguKToKKyAgICAgICAgKHguQy5ydW4pOgorICAgICAgICAoeC5D
KToKKyAgICAgICAgKHgpOgorICAgICAgICAocHJvdG90eXBlLngpOgorICAgICAgICAocHJvdG90
eXBlLnguQy5wcm90b3R5cGUucnVuKToKKyAgICAgICAgKHByb3RvdHlwZS54LkMucnVuKToKKyAg
ICAgICAgKHByb3RvdHlwZS54LkMpOgorICAgICAgICAoeS4pOgorICAgICAgICAoeS5DLnByb3Rv
dHlwZS5ydW4pOgorICAgICAgICAoeS5DLnJ1bik6CisgICAgICAgICh5LkMpOgorICAgICAgICAo
eSk6CisgICAgICAgIChwcm90b3R5cGUueS5DKToKKyAgICAgICAgKHByb3RvdHlwZS55LkQpOgor
ICAgICAgICAoYXNzZXJ0RXF1YWxzLkMucHJvdG90eXBlLmhhc093blByb3BlcnR5KToKKyAgICAg
ICAgKGFzc2VydEVxdWFscy5YLnApOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLlgpOgorICAgICAg
ICAoWC50KToKKyAgICAgICAgKFgpOgorICAgICAgICAqIHN0cmVzcy9oYXJtb255LXN1cHBvcnQu
anM6IEFkZGVkLgorICAgICAgICAoY2xhc3NPZik6CisgICAgICAgIChkZWVwT2JqZWN0RXF1YWxz
KToKKyAgICAgICAgKGRlZXBFcXVhbHMpOgorICAgICAgICAoZmFpbCk6CisgICAgICAgIChhc3Nl
cnRJbnN0YW5jZW9mKToKKyAgICAgICAgKGFzc2VydEVxdWFscyk6CisgICAgICAgIChhc3NlcnRO
b3RFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0VHJ1ZSk6CisgICAgICAgIChhc3NlcnRGYWxzZSk6
CisgICAgICAgIChhc3NlcnRUaHJvd3MpOgorCiAyMDIwLTA3LTI1ICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIHRlc3QyNjIKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255LmpzIGIvSlNUZXN0cy9zdHJlc3Mv
Y2xhc3MtZmllbGRzLWhhcm1vbnkuanMKaW5kZXggZGJmNDZkNTI3YjFlLi4wNjk2ODQ5ZWU2Y2Ug
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255LmpzCisrKyBi
L0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255LmpzCkBAIC0zMSwxNzAgKzMxLDcg
QEAKIAogInVzZSBzdHJpY3QiOwogCi1mdW5jdGlvbiBjbGFzc09mKG9iamVjdCkgewotICAgLy8g
QXJndW1lbnQgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuCi0gICB2YXIgc3RyaW5nID0g
T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCk7Ci0gICAvLyBTdHJpbmcgaGFz
IGZvcm1hdCBbb2JqZWN0IDxDbGFzc05hbWU+XS4KLSAgIHJldHVybiBzdHJpbmcuc3Vic3RyaW5n
KDgsIHN0cmluZy5sZW5ndGggLSAxKTsKLX0KLQotLyoqCi0gKiBDb21wYXJlcyB0d28gb2JqZWN0
cyBmb3Iga2V5L3ZhbHVlIGVxdWFsaXR5LgotICogUmV0dXJucyB0cnVlIGlmIHRoZXkgYXJlIGVx
dWFsLCBmYWxzZSBvdGhlcndpc2UuCi0gKi8KLWZ1bmN0aW9uIGRlZXBPYmplY3RFcXVhbHMoYSwg
YikgewotICB2YXIgYVByb3BzID0gT2JqZWN0LmtleXMoYSk7Ci0gIGFQcm9wcy5zb3J0KCk7Ci0g
IHZhciBiUHJvcHMgPSBPYmplY3Qua2V5cyhiKTsKLSAgYlByb3BzLnNvcnQoKTsKLSAgaWYgKCFk
ZWVwRXF1YWxzKGFQcm9wcywgYlByb3BzKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBm
b3IgKHZhciBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykgewotICAgIGlmICghZGVlcEVx
dWFscyhhW2FQcm9wc1tpXV0sIGJbYVByb3BzW2ldXSkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qKgotICogQ29tcGFyZXMgdHdvIEph
dmFTY3JpcHQgdmFsdWVzIGZvciB0eXBlIGFuZCB2YWx1ZSBlcXVhbGl0eS4KLSAqIEl0IGNoZWNr
cyBpbnRlcm5hbHMgb2YgYXJyYXlzIGFuZCBvYmplY3RzLgotICovCi1mdW5jdGlvbiBkZWVwRXF1
YWxzKGEsIGIpIHsKLSAgaWYgKGEgPT09IGIpIHsKLSAgICAvLyBDaGVjayBmb3IgLTAuCi0gICAg
aWYgKGEgPT09IDApIHJldHVybiAoMSAvIGEpID09PSAoMSAvIGIpOwotICAgIHJldHVybiB0cnVl
OwotICB9Ci0gIGlmICh0eXBlb2YgYSAhPSB0eXBlb2YgYikgcmV0dXJuIGZhbHNlOwotICBpZiAo
dHlwZW9mIGEgPT0gJ251bWJlcicpIHJldHVybiBpc05hTihhKSAmJiBpc05hTihiKTsKLSAgaWYg
KHR5cGVvZiBhICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJu
IGZhbHNlOwotICAvLyBOZWl0aGVyIGEgbm9yIGIgaXMgcHJpbWl0aXZlLgotICB2YXIgb2JqZWN0
Q2xhc3MgPSBjbGFzc09mKGEpOwotICBpZiAob2JqZWN0Q2xhc3MgIT09IGNsYXNzT2YoYikpIHJl
dHVybiBmYWxzZTsKLSAgaWYgKG9iamVjdENsYXNzID09PSAnUmVnRXhwJykgewotICAgIC8vIEZv
ciBSZWdFeHAsIGp1c3QgY29tcGFyZSBwYXR0ZXJuIGFuZCBmbGFncyB1c2luZyBpdHMgdG9TdHJp
bmcuCi0gICAgcmV0dXJuIChhLnRvU3RyaW5nKCkgPT09IGIudG9TdHJpbmcoKSk7Ci0gIH0KLSAg
Ly8gRnVuY3Rpb25zIGFyZSBvbmx5IGlkZW50aWNhbCB0byB0aGVtc2VsdmVzLgotICBpZiAob2Jq
ZWN0Q2xhc3MgPT09ICdGdW5jdGlvbicpIHJldHVybiBmYWxzZTsKLSAgaWYgKG9iamVjdENsYXNz
ID09PSAnQXJyYXknKSB7Ci0gICAgdmFyIGVsZW1lbnRDb3VudCA9IDA7Ci0gICAgaWYgKGEubGVu
Z3RoICE9IGIubGVuZ3RoKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKCFkZWVwRXF1YWxzKGFb
aV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0g
IGlmIChvYmplY3RDbGFzcyA9PSAnU3RyaW5nJyB8fCBvYmplY3RDbGFzcyA9PSAnTnVtYmVyJyB8
fAotICAgICAgb2JqZWN0Q2xhc3MgPT0gJ0Jvb2xlYW4nIHx8IG9iamVjdENsYXNzID09ICdEYXRl
JykgewotICAgIGlmIChhLnZhbHVlT2YoKSAhPT0gYi52YWx1ZU9mKCkpIHJldHVybiBmYWxzZTsK
LSAgfQotICByZXR1cm4gZGVlcE9iamVjdEVxdWFscyhhLCBiKTsKLX0KLQotLyoqCi0gKiBUaHJv
d3MgYW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgdGhlIHVzZXJfbWVzc2FnZSAoaWYgYW55KSBhbmQg
dGhlIHZhbHVlcy4KLSAqLwotZnVuY3Rpb24gZmFpbChleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVz
c2FnZSA9ICcnKSB7Ci0gIC8vIFRPRE8oY2lyYSk6IFJlcGxhY2UgU3RyaW5nIHdpdGggUHJldHR5
UHJpbnQgZm9yIG9iamVjdHMgYW5kIGFycmF5cy4KLSAgdmFyIG1lc3NhZ2UgPSAnRmFpbHVyZScg
KyAodXNlcl9tZXNzYWdlID8gJyAoJyArIHVzZXJfbWVzc2FnZSArICcpJyA6ICcnKSArCi0gICAg
ICAnOiBleHBlY3RlZCA8JyArIFN0cmluZyhleHBlY3RlZCkgKyAnPiwgZm91bmQgPCcgKyBTdHJp
bmcoZm91bmQpICsgJz4uJzsKLSAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpOwotfQotCi0vKioK
LSAqIFRocm93cyBpZiBvYmogaXMgbm90IG9mIGdpdmVuIHR5cGUuCi0gKi8KLWZ1bmN0aW9uIGFz
c2VydEluc3RhbmNlb2Yob2JqLCB0eXBlKSB7Ci0gIGlmICghKG9iaiBpbnN0YW5jZW9mIHR5cGUp
KSB7Ci0gICAgdmFyIGFjdHVhbFR5cGVOYW1lID0gbnVsbDsKLSAgICB2YXIgYWN0dWFsQ29uc3Ry
dWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKS5jb25zdHJ1Y3RvcjsKLSAgICBpZiAo
dHlwZW9mIGFjdHVhbENvbnN0cnVjdG9yID09ICJmdW5jdGlvbiIpIHsKLSAgICAgIGFjdHVhbFR5
cGVOYW1lID0gYWN0dWFsQ29uc3RydWN0b3IubmFtZSB8fCBTdHJpbmcoYWN0dWFsQ29uc3RydWN0
b3IpOwotICAgIH0KLSAgICB0aHJvdyBuZXcgRXJyb3IoJ09iamVjdCA8JyArIG9iaiArICc+IGlz
IG5vdCBhbiBpbnN0YW5jZSBvZiA8JyArCi0gICAgICAgICAgICAgICAgICAgICh0eXBlLm5hbWUg
fHwgdHlwZSkgKyAnPicgKwotICAgICAgICAgICAgICAgICAgICAoYWN0dWFsVHlwZU5hbWUgPyAn
IGJ1dCBvZiA8ICcgKyBhY3R1YWxUeXBlTmFtZSArICc+JyA6ICcnKSk7Ci0gIH0KLX0KLQotLyoq
Ci0gKiBUaHJvd3MgaWYgb2JqIGlzIG5vdCB0aGUgc2FtZSBhcyBleHBlY3RlZC4KLSAqLwotZnVu
Y3Rpb24gYXNzZXJ0U2FtZShleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7Ci0gIGlmIChmb3Vu
ZCA9PT0gZXhwZWN0ZWQpIHsKLSAgICBpZiAoZXhwZWN0ZWQgIT09IDAgfHwgKDEgLyBleHBlY3Rl
ZCkgPT09ICgxIC8gZm91bmQpKQotICAgICAgcmV0dXJuOwotICB9IGVsc2UgaWYgKChleHBlY3Rl
ZCAhPT0gZXhwZWN0ZWQpICYmIChmb3VuZCAhPT0gZm91bmQpKSB7Ci0gICAgICByZXR1cm47Ci0g
IH0KLSAgZmFpbChleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KTsKLX0KLQotLyoqCi0gKiBUaHJv
d3MgaWYgdHdvIHZhcmlhYmxlcyBoYXZlIGRpZmZlcmVudCB0eXBlcyBvciB2YWx1ZXMuCi0gKi8K
LQotZnVuY3Rpb24gYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlID0g
JycpIHsKLSAgaWYgKCFkZWVwRXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsKLSAgICBmYWlsKGV4
cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlKTsKLSAgfQotfQotCi0vKioKLSAqIFRocm93cyBp
ZiB0d28gdmFyaWFibGVzIGhhdmUgZXF1YWwgdHlwZXMgb3IgdmFsdWVzLgotICovCi0KLWZ1bmN0
aW9uIGFzc2VydE5vdEVxdWFscyhleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSA9ICcnKSB7
Ci0gIGlmIChkZWVwRXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsKLSAgICBmYWlsKGV4cGVjdGVk
LCBmb3VuZCwgdXNlcl9tZXNzYWdlKTsKLSAgfQotfQotCi0vKioKLSAqIFRocm93cyBpZiB2YWx1
ZSBpcyBmYWxzZS4KLSAqLwotZnVuY3Rpb24gYXNzZXJ0VHJ1ZSh2YWx1ZSwgdXNlcl9tZXNzYWdl
ID0gJycpIHsKLSAgYXNzZXJ0RXF1YWxzKHRydWUsIHZhbHVlLCB1c2VyX21lc3NhZ2UpOwotfQot
Ci0KLS8qKgotICogVGhyb3dzIGlmIHZhbHVlIGlzIHRydWUuCi0gKi8KLWZ1bmN0aW9uIGFzc2Vy
dEZhbHNlKHZhbHVlLCB1c2VyX21lc3NhZ2UgPSAnJykgewotICBhc3NlcnRFcXVhbHMoZmFsc2Us
IHZhbHVlLCB1c2VyX21lc3NhZ2UpOwotfQotCi0vKioKLSAqIFJ1bnMgY29kZSgpIGFuZCBhc3Nl
cnRzIHRoYXQgaXQgdGhyb3dzIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uLgotICovCi1mdW5jdGlv
biBhc3NlcnRUaHJvd3MoY29kZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgewotICB0cnkgewotICAg
IGlmICh0eXBlb2YgY29kZSA9PSAnZnVuY3Rpb24nKSB7Ci0gICAgICBjb2RlKCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIGV2YWwoY29kZSk7Ci0gICAgfQotICB9IGNhdGNoIChlKSB7Ci0gICAgaWYg
KHR5cGVvZiB0eXBlX29wdCA9PSAnZnVuY3Rpb24nKSB7Ci0gICAgICBhc3NlcnRJbnN0YW5jZW9m
KGUsIHR5cGVfb3B0KTsKLSAgICB9Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgewot
ICAgICAgYXNzZXJ0RXF1YWxzKGNhdXNlX29wdCwgZS50eXBlLCAndGhyb3duIGV4Y2VwdGlvbiB0
eXBlIG1pc21hdGNoJyk7Ci0gICAgfQotICAgIC8vIFN1Y2Nlc3MuCi0gICAgcmV0dXJuOwotICB9
Ci0gIHZhciBleHBlY3RlZCA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMyA/IGNhdXNlX29wdCA6Ci0g
ICAgICB0eXBlb2YgdHlwZV9vcHQgPT0gJ2Z1bmN0aW9uJyA/IHR5cGVfb3B0IDogJ2FueSBleGNl
cHRpb24nOwotICBmYWlsKGV4cGVjdGVkLCAnbm8gZXhjZXB0aW9uJywgJ2V4cGVjdGVkIHRocm93
biBleGNlcHRpb24nKTsKLX0KK2xvYWQoIi4vaGFybW9ueS1zdXBwb3J0LmpzIik7CiAKIHsKICAg
Y2xhc3MgQyB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtc3RhdGlj
LWhhcm1vbnkuanMgYi9KU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtc3RhdGljLWhhcm1vbnku
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45ODY3NGI1MWY5YTIK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtc3RhdGljLWhh
cm1vbnkuanMKQEAgLTAsMCArMSw1MDMgQEAKKy8vQCByZXF1aXJlT3B0aW9ucygiLS11c2VQdWJs
aWNDbGFzc0ZpZWxkcz0xIikKKy8vQCBkZWZhdWx0Tm9FYWdlclJ1bgorCisvLyBDb3B5cmlnaHQg
MjAxNyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyJ1c2Ugc3RyaWN0IjsKKworbG9hZCgiLi9oYXJtb255LXN1cHBvcnQuanMiKTsK
KworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYTsKKyAgfQorCisgIGFzc2VydEVxdWFscyh1
bmRlZmluZWQsIEMuYSk7CisgIGxldCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihDLCAnYScpOworICBhc3NlcnRUcnVlKEMuaGFzT3duUHJvcGVydHkoJ2EnKSk7
CisgIGFzc2VydFRydWUoZGVzY3JpcHRvci53cml0YWJsZSk7CisgIGFzc2VydFRydWUoZGVzY3Jp
cHRvci5lbnVtZXJhYmxlKTsKKyAgYXNzZXJ0VHJ1ZShkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSk7
CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5hKTsKK30K
KworeworICBsZXQgeCA9ICdhJzsKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGE7CisgICAgc3Rh
dGljIGhhc093blByb3BlcnR5ID0gZnVuY3Rpb24oKSB7IHJldHVybiAxOyB9CisgICAgc3RhdGlj
IGIgPSB4OworICAgIHN0YXRpYyBjID0gMTsKKyAgfQorCisgIGFzc2VydEVxdWFscyh1bmRlZmlu
ZWQsIEMuYSk7CisgIGFzc2VydEVxdWFscygnYScsIEMuYik7CisgIGFzc2VydEVxdWFscygxLCBD
LmMpOworICBhc3NlcnRFcXVhbHMoMSwgQy5oYXNPd25Qcm9wZXJ0eSgpKTsKKworICBsZXQgYyA9
IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmEpOworICBhc3NlcnRFcXVhbHMo
dW5kZWZpbmVkLCBjLmIpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmMpOworfQorCit7
CisgIGFzc2VydFRocm93cygoKSA9PiB7CisgICAgY2xhc3MgQyB7CisgICAgICBzdGF0aWMgeCA9
IE9iamVjdC5mcmVlemUodGhpcyk7CisgICAgICBzdGF0aWMgYyA9IDQyOworICAgIH0KKyAgfSwg
VHlwZUVycm9yKTsKK30KKworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYyA9IHRoaXM7Cisg
ICAgc3RhdGljIGQgPSAoKSA9PiB0aGlzOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKEMsIEMuYyk7
CisgIGFzc2VydEVxdWFscyhDLCBDLmQoKSk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0
RXF1YWxzKHVuZGVmaW5lZCwgYy5jKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5kKTsK
K30KKworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYyA9IDE7CisgICAgc3RhdGljIGQgPSB0
aGlzLmM7CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwgQy5jKTsKKyAgYXNzZXJ0RXF1YWxzKDEs
IEMuZCk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5j
KTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5kKTsKK30KKworeworICBjbGFzcyBDIHsK
KyAgICBzdGF0aWMgYiA9IDE7CisgICAgc3RhdGljIGMgPSAoKSA9PiB0aGlzLmI7CisgIH0KKwor
ICBhc3NlcnRFcXVhbHMoMSwgQy5iKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYygpKTsKKworICBs
ZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmMpOworfQorCit7Cisg
IGxldCB4ID0gJ2EnOworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYiA9IDE7CisgICAgc3RhdGlj
IGMgPSAoKSA9PiB0aGlzLmI7CisgICAgc3RhdGljIGUgPSAoKSA9PiB4OworICB9CisKKyAgYXNz
ZXJ0RXF1YWxzKDEsIEMuYik7CisgIGFzc2VydEVxdWFscygnYScsIEMuZSgpKTsKKworICBsZXQg
YSA9IHtiIDogMiB9OworICBhc3NlcnRFcXVhbHMoMSwgQy5jLmNhbGwoYSkpOworCisgIGxldCBj
ID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYik7CisgIGFzc2VydEVxdWFs
cyh1bmRlZmluZWQsIGMuYyk7Cit9CisKK3sKKyAgbGV0IHggPSAnYSc7CisgIGNsYXNzIEMgewor
ICAgIHN0YXRpYyBjID0gMTsKKyAgICBzdGF0aWMgZCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhp
cy5jOyB9OworICAgIHN0YXRpYyBlID0gZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9OworICB9CisK
KyAgYXNzZXJ0RXF1YWxzKDEsIEMuYyk7CisgIGFzc2VydEVxdWFscygxLCBDLmQoKSk7CisgIGFz
c2VydEVxdWFscygnYScsIEMuZSgpKTsKKworICBDLmMgPSAyOworICBhc3NlcnRFcXVhbHMoMiwg
Qy5kKCkpOworCisgIGxldCBhID0ge2MgOiAzIH07CisgIGFzc2VydEVxdWFscygzLCBDLmQuY2Fs
bChhKSk7CisKKyAgYXNzZXJ0VGhyb3dzKEMuZC5iaW5kKHVuZGVmaW5lZCkpOworCisgIGxldCBj
ID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYyk7CisgIGFzc2VydEVxdWFs
cyh1bmRlZmluZWQsIGMuZCk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuZSk7Cit9CisK
K3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDEgfTsK
KyAgfQorCisgIGFzc2VydEVxdWFscygnYycsIEMuYy5uYW1lKTsKK30KKworeworICBsZXQgZCA9
IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3LnRhcmdldDsgfQorICBjbGFzcyBDIHsKKyAgICBzdGF0
aWMgYyA9IGQ7CisgIH0KKworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmMoKSk7CisgIGFz
c2VydEVxdWFscyhuZXcgZCwgbmV3IEMuYygpKTsKK30KKworeworICBjbGFzcyBDIHsKKyAgICBz
dGF0aWMgYyA9ICgpID0+IG5ldy50YXJnZXQ7CisgIH0KKworICBhc3NlcnRFcXVhbHModW5kZWZp
bmVkLCBDLmMoKSk7Cit9CisKK3sKKyAgIGNsYXNzIEMgeworICAgICBzdGF0aWMgYyA9ICgpID0+
IHsKKyAgICAgICBsZXQgYjsKKyAgICAgICBjbGFzcyBBIHsKKyAgICAgICAgIGNvbnN0cnVjdG9y
KCkgeworICAgICAgICAgICBiID0gbmV3LnRhcmdldDsKKyAgICAgICAgIH0KKyAgICAgICB9Owor
ICAgICAgIG5ldyBBOworICAgICAgIGFzc2VydEVxdWFscyhBLCBiKTsKKyAgICAgfQorICB9CisK
KyAgQy5jKCk7Cit9CisKK3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSBuZXcudGFyZ2V0
OworICB9CisKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5jKTsKK30KKworeworICBjbGFz
cyBCIHsKKyAgICBzdGF0aWMgZCA9IDE7CisgICAgc3RhdGljIGIgPSAoKSA9PiB0aGlzLmQ7Cisg
IH0KKworICBjbGFzcyBDIGV4dGVuZHMgQiB7CisgICAgc3RhdGljIGMgPSBzdXBlci5kOworICAg
IHN0YXRpYyBkID0gKCkgPT4gc3VwZXIuZDsKKyAgICBzdGF0aWMgZSA9ICgpID0+IHN1cGVyLmIo
KTsKKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBDLmMpOworICBhc3NlcnRFcXVhbHMoMSwgQy5k
KCkpOworICBhc3NlcnRFcXVhbHMoMSwgQy5lKCkpOworfQorCit7CisgIGxldCBmb28gPSB1bmRl
ZmluZWQ7CisgIGNsYXNzIEIgeworICAgIHN0YXRpYyBzZXQgZCh4KSB7CisgICAgICBmb28gPSB4
OworICAgIH0KKyAgfQorCisgIGNsYXNzIEMgZXh0ZW5kcyBCIHsKKyAgICBzdGF0aWMgZCA9IDI7
CisgIH0KKworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBmb28pOworICBhc3NlcnRFcXVhbHMo
MiwgQy5kKTsKK30KKworCit7CisgIGxldCBDICA9IGNsYXNzIHsKKyAgICBzdGF0aWMgYzsKKyAg
fTsKKworICBhc3NlcnRFcXVhbHMoIkMiLCBDLm5hbWUpOworfQorCit7CisgIGNsYXNzIEMgewor
ICAgIHN0YXRpYyBjID0gbmV3IEM7CisgIH0KKworICBhc3NlcnRUcnVlKEMuYyBpbnN0YW5jZW9m
IEMpOworfQorCisoZnVuY3Rpb24gdGVzdCgpIHsKKyAgZnVuY3Rpb24gbWFrZUMoKSB7CisgICAg
dmFyIHggPSAxOworCisgICAgcmV0dXJuIGNsYXNzIHsKKyAgICAgIHN0YXRpYyBhID0gKCkgPT4g
KCkgPT4geDsKKyAgICB9CisgIH0KKworICBsZXQgQyA9IG1ha2VDKCk7CisgIGxldCBmID0gQy5h
KCk7CisgIGFzc2VydEVxdWFscygxLCBmKCkpOworfSkoKQorCit7CisgIGxldCBjID0gImMiOwor
ICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgWyJhIl0gPSAxOworICAgIHN0YXRpYyBbImIiXTsKKyAg
ICBzdGF0aWMgW2NdOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYSk7CisgIGFzc2VydEVx
dWFscyh1bmRlZmluZWQsIEMuYik7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIENbY10pOwor
fQorCit7CisgIGxldCBsb2cgPSBbXTsKKyAgZnVuY3Rpb24gcnVuKGkpIHsKKyAgICBsb2cucHVz
aChpKTsKKyAgICByZXR1cm4gaTsKKyAgfQorCisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBbcnVu
KDEpXSA9IHJ1big2KTsKKyAgICBzdGF0aWMgW3J1bigyKV0gPSBydW4oNyk7CisgICAgW3J1bigz
KV0oKSB7IHJ1big5KTt9CisgICAgc3RhdGljIFtydW4oNCldID0gcnVuKDgpOworICAgIHN0YXRp
YyBbcnVuKDUpXSgpIHsgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgbm90IGV4ZWN1dGUnKTt9Owor
ICB9CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgY1szXSgpOworICBhc3NlcnRFcXVhbHMoWzEsIDIs
IDMsIDQsIDUsIDYsIDcsIDgsIDldLCBsb2cpOworfQorCisKKworZnVuY3Rpb24geCgpIHsKKwor
ICAvLyBUaGlzIHRlc3RzIGxhenkgcGFyc2luZy4KKyAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAg
IGxldCBsb2cgPSBbXTsKKyAgICBmdW5jdGlvbiBydW4oaSkgeworICAgICAgbG9nLnB1c2goaSk7
CisgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICBjbGFzcyBDIHsKKyAgICAgIHN0YXRpYyBb
cnVuKDEpXSA9IHJ1big2KTsKKyAgICAgIHN0YXRpYyBbcnVuKDIpXSA9IHJ1big3KTsKKyAgICAg
IFtydW4oMyldKCkgeyBydW4oOSk7fQorICAgICAgc3RhdGljIFtydW4oNCldID0gcnVuKDgpOwor
ICAgICAgc3RhdGljIFtydW4oNSldKCkgeyB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgZXhl
Y3V0ZScpO307CisgICAgfQorCisgICAgbGV0IGMgPSBuZXcgQzsKKyAgICBjWzNdKCk7CisgICAg
YXNzZXJ0RXF1YWxzKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XSwgbG9nKTsKKyAgfQorfQor
eCgpKCk7CisKK3sKKyAgbGV0IGxvZyA9IFtdOworICBmdW5jdGlvbiBydW4oaSkgeworICAgIGxv
Zy5wdXNoKGkpOworICAgIHJldHVybiBpOworICB9CisKKyAgY2xhc3MgQyB7CisgICAgW3J1bigx
KV0gPSBydW4oNyk7CisgICAgW3J1bigyKV0gPSBydW4oOCk7CisgICAgW3J1bigzKV0oKSB7IHJ1
big5KTt9CisgICAgc3RhdGljIFtydW4oNCldID0gcnVuKDYpOworICAgIFtydW4oNSldKCkgeyB0
aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgZXhlY3V0ZScpO307CisgIH0KKworICBsZXQgYyA9
IG5ldyBDOworICBjWzNdKCk7CisgIGFzc2VydEVxdWFscyhbMSwgMiwgMywgNCwgNSwgNiwgNywg
OCwgOV0sIGxvZyk7Cit9CisKK2Z1bmN0aW9uIHkoKSB7CisgIC8vIFRoaXMgdGVzdHMgbGF6eSBw
YXJzaW5nLgorICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgbGV0IGxvZyA9IFtdOworICAgIGZ1
bmN0aW9uIHJ1bihpKSB7CisgICAgICBsb2cucHVzaChpKTsKKyAgICAgIHJldHVybiBpOworICAg
IH0KKworICAgIGNsYXNzIEMgeworICAgICAgW3J1bigxKV0gPSBydW4oNyk7CisgICAgICBbcnVu
KDIpXSA9IHJ1big4KTsKKyAgICAgIFtydW4oMyldKCkgeyBydW4oOSk7fQorICAgICAgc3RhdGlj
IFtydW4oNCldID0gcnVuKDYpOworICAgICAgW3J1big1KV0oKSB7IHRocm93IG5ldyBFcnJvcign
c2hvdWxkIG5vdCBleGVjdXRlJyk7fTsKKyAgICB9CisKKyAgICBsZXQgYyA9IG5ldyBDOworICAg
IGNbM10oKTsKKyAgICBhc3NlcnRFcXVhbHMoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldLCBs
b2cpOworICB9Cit9Cit5KCkoKTsKKworeworICBjbGFzcyBDIHt9CisgIGNsYXNzIEQgeworICAg
IHN0YXRpYyBbQ107CisgIH0KKworICBhc3NlcnRUaHJvd3MoKCkgPT4geyBjbGFzcyBYIHsgc3Rh
dGljIFtYXSB9IH0pOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBEW0NdKTsKK30KKworewor
ICBmdW5jdGlvbiB0KCkgeworICAgIHJldHVybiBjbGFzcyB7CisgICAgICBzdGF0aWMgWyd4J10g
PSAyOworICAgIH0KKyAgfQorCisgIGxldCBrbGFzcyA9IHQoKTsKKyAgbGV0IG9iaiA9IG5ldyBr
bGFzczsKKyAgYXNzZXJ0RXF1YWxzKDIsIGtsYXNzLngpOworfQorCit7CisgIGxldCB4ID0gJ2En
OworICBjbGFzcyBDIHsKKyAgICBhOworICAgIGIgPSB4OworICAgIGMgPSAxOworICAgIGhhc093
blByb3BlcnR5KCkgeyByZXR1cm4gMTt9CisgICAgc3RhdGljIFt4XSA9IDI7CisgICAgc3RhdGlj
IGIgPSAzOworICAgIHN0YXRpYyBkOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKDIsIEMuYSk7Cisg
IGFzc2VydEVxdWFscygzLCBDLmIpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmQpOwor
ICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmMpOworCisgIGxldCBjID0gbmV3IEM7CisgIGFz
c2VydEVxdWFscyh1bmRlZmluZWQsIGMuYSk7CisgIGFzc2VydEVxdWFscygnYScsIGMuYik7Cisg
IGFzc2VydEVxdWFscygxLCBjLmMpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmQpOwor
ICBhc3NlcnRFcXVhbHMoMSwgYy5oYXNPd25Qcm9wZXJ0eSgpKTsKK30KKworeworICBmdW5jdGlv
biB0KCkgeworICAgIHJldHVybiBjbGFzcyB7CisgICAgICBbJ3gnXSA9IDE7CisgICAgICBzdGF0
aWMgWyd4J10gPSAyOworICAgIH0KKyAgfQorCisgIGxldCBrbGFzcyA9IHQoKTsKKyAgbGV0IG9i
aiA9IG5ldyBrbGFzczsKKyAgYXNzZXJ0RXF1YWxzKDEsIG9iai54KTsKKyAgYXNzZXJ0RXF1YWxz
KDIsIGtsYXNzLngpOworfQorCisKK3sKKyAgY2xhc3MgWCB7CisgICAgc3RhdGljIHAgPSBmdW5j
dGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50c1swXTsgfQorICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEs
IFgucCgxKSk7Cit9CisKK3sKKyAgY2xhc3MgWCB7CisgICAgc3RhdGljIHQgPSAoKSA9PiB7Cisg
ICAgICBmdW5jdGlvbiBwKCkgeyByZXR1cm4gYXJndW1lbnRzWzBdOyB9OworICAgICAgcmV0dXJu
IHA7CisgICAgfQorICB9CisKKyAgbGV0IHAgPSBYLnQoKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIHAo
MSkpOworfQorCit7CisgIGNsYXNzIFggeworICAgIHN0YXRpYyB0ID0gKCkgPT4geworICAgICAg
ZnVuY3Rpb24gcCgpIHsgcmV0dXJuIGV2YWwoImFyZ3VtZW50c1swXSIpOyB9OworICAgICAgcmV0
dXJuIHA7CisgICAgfQorICB9CisKKyAgbGV0IHAgPSBYLnQoKTsKKyAgYXNzZXJ0RXF1YWxzKDEs
IHAoMSkpOworfQorCit7CisgIGNsYXNzIFggeworICAgIHN0YXRpYyBwID0gZXZhbCgiKGZ1bmN0
aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzWzBdOyB9KSgxKSIpOworICB9CisKKyAgYXNzZXJ0RXF1
YWxzKDEsIFgucCk7Cit9CisKKy8qCit7CisgIGxldCBwID0geyB6OiBjbGFzcyB7IHN0YXRpYyB5
ID0gdGhpcy5uYW1lIH0gfQorICBhc3NlcnRFcXVhbHMocC56LnksICd6Jyk7CisKKyAgbGV0IHEg
PSB7IFsieiJdOiBjbGFzcyB7IHN0YXRpYyB5ID0gdGhpcy5uYW1lIH0gfQorICBhc3NlcnRFcXVh
bHMocS56LnksICd6Jyk7CisKKyAgY29uc3QgQyA9IGNsYXNzIHsKKyAgICBzdGF0aWMgeCA9IHRo
aXMubmFtZTsKKyAgfQorICBhc3NlcnRFcXVhbHMoQy54LCAnQycpOworfQorKi8KZGlmZiAtLWdp
dCBhL0pTVGVzdHMvc3RyZXNzL2hhcm1vbnktc3VwcG9ydC5qcyBiL0pTVGVzdHMvc3RyZXNzL2hh
cm1vbnktc3VwcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjAyNGIzYjA4ODllMQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2hhcm1vbnkt
c3VwcG9ydC5qcwpAQCAtMCwwICsxLDE5NiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgdGhlIFY4IHBy
b2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisidXNl
IHN0cmljdCI7CisKK2Z1bmN0aW9uIGNsYXNzT2Yob2JqZWN0KSB7CisgICAvLyBBcmd1bWVudCBt
dXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4KKyAgIHZhciBzdHJpbmcgPSBPYmplY3QucHJv
dG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTsKKyAgIC8vIFN0cmluZyBoYXMgZm9ybWF0IFtv
YmplY3QgPENsYXNzTmFtZT5dLgorICAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoOCwgc3RyaW5n
Lmxlbmd0aCAtIDEpOworfQorCisvKioKKyAqIENvbXBhcmVzIHR3byBvYmplY3RzIGZvciBrZXkv
dmFsdWUgZXF1YWxpdHkuCisgKiBSZXR1cm5zIHRydWUgaWYgdGhleSBhcmUgZXF1YWwsIGZhbHNl
IG90aGVyd2lzZS4KKyAqLworZnVuY3Rpb24gZGVlcE9iamVjdEVxdWFscyhhLCBiKSB7CisgIHZh
ciBhUHJvcHMgPSBPYmplY3Qua2V5cyhhKTsKKyAgYVByb3BzLnNvcnQoKTsKKyAgdmFyIGJQcm9w
cyA9IE9iamVjdC5rZXlzKGIpOworICBiUHJvcHMuc29ydCgpOworICBpZiAoIWRlZXBFcXVhbHMo
YVByb3BzLCBiUHJvcHMpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGZvciAodmFyIGkg
PSAwOyBpIDwgYVByb3BzLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKCFkZWVwRXF1YWxzKGFbYVBy
b3BzW2ldXSwgYlthUHJvcHNbaV1dKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
fQorICByZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBDb21wYXJlcyB0d28gSmF2YVNjcmlwdCB2
YWx1ZXMgZm9yIHR5cGUgYW5kIHZhbHVlIGVxdWFsaXR5LgorICogSXQgY2hlY2tzIGludGVybmFs
cyBvZiBhcnJheXMgYW5kIG9iamVjdHMuCisgKi8KK2Z1bmN0aW9uIGRlZXBFcXVhbHMoYSwgYikg
eworICBpZiAoYSA9PT0gYikgeworICAgIC8vIENoZWNrIGZvciAtMC4KKyAgICBpZiAoYSA9PT0g
MCkgcmV0dXJuICgxIC8gYSkgPT09ICgxIC8gYik7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAg
aWYgKHR5cGVvZiBhICE9IHR5cGVvZiBiKSByZXR1cm4gZmFsc2U7CisgIGlmICh0eXBlb2YgYSA9
PSAnbnVtYmVyJykgcmV0dXJuIGlzTmFOKGEpICYmIGlzTmFOKGIpOworICBpZiAodHlwZW9mIGEg
IT09ICdvYmplY3QnICYmIHR5cGVvZiBhICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7Cisg
IC8vIE5laXRoZXIgYSBub3IgYiBpcyBwcmltaXRpdmUuCisgIHZhciBvYmplY3RDbGFzcyA9IGNs
YXNzT2YoYSk7CisgIGlmIChvYmplY3RDbGFzcyAhPT0gY2xhc3NPZihiKSkgcmV0dXJuIGZhbHNl
OworICBpZiAob2JqZWN0Q2xhc3MgPT09ICdSZWdFeHAnKSB7CisgICAgLy8gRm9yIFJlZ0V4cCwg
anVzdCBjb21wYXJlIHBhdHRlcm4gYW5kIGZsYWdzIHVzaW5nIGl0cyB0b1N0cmluZy4KKyAgICBy
ZXR1cm4gKGEudG9TdHJpbmcoKSA9PT0gYi50b1N0cmluZygpKTsKKyAgfQorICAvLyBGdW5jdGlv
bnMgYXJlIG9ubHkgaWRlbnRpY2FsIHRvIHRoZW1zZWx2ZXMuCisgIGlmIChvYmplY3RDbGFzcyA9
PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlOworICBpZiAob2JqZWN0Q2xhc3MgPT09ICdBcnJh
eScpIHsKKyAgICB2YXIgZWxlbWVudENvdW50ID0gMDsKKyAgICBpZiAoYS5sZW5ndGggIT0gYi5s
ZW5ndGgpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBhLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAoIWRlZXBFcXVhbHMoYVtpXSwgYltpXSkp
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgaWYgKG9iamVj
dENsYXNzID09ICdTdHJpbmcnIHx8IG9iamVjdENsYXNzID09ICdOdW1iZXInIHx8CisgICAgICBv
YmplY3RDbGFzcyA9PSAnQm9vbGVhbicgfHwgb2JqZWN0Q2xhc3MgPT0gJ0RhdGUnKSB7CisgICAg
aWYgKGEudmFsdWVPZigpICE9PSBiLnZhbHVlT2YoKSkgcmV0dXJuIGZhbHNlOworICB9CisgIHJl
dHVybiBkZWVwT2JqZWN0RXF1YWxzKGEsIGIpOworfQorCisvKioKKyAqIFRocm93cyBhbiBleGNl
cHRpb24gY29udGFpbmluZyB0aGUgdXNlcl9tZXNzYWdlIChpZiBhbnkpIGFuZCB0aGUgdmFsdWVz
LgorICovCitmdW5jdGlvbiBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlID0gJycp
IHsKKyAgLy8gVE9ETyhjaXJhKTogUmVwbGFjZSBTdHJpbmcgd2l0aCBQcmV0dHlQcmludCBmb3Ig
b2JqZWN0cyBhbmQgYXJyYXlzLgorICB2YXIgbWVzc2FnZSA9ICdGYWlsdXJlJyArICh1c2VyX21l
c3NhZ2UgPyAnICgnICsgdXNlcl9tZXNzYWdlICsgJyknIDogJycpICsKKyAgICAgICc6IGV4cGVj
dGVkIDwnICsgU3RyaW5nKGV4cGVjdGVkKSArICc+LCBmb3VuZCA8JyArIFN0cmluZyhmb3VuZCkg
KyAnPi4nOworICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7Cit9CisKKy8qKgorICogVGhyb3dz
IGlmIG9iaiBpcyBub3Qgb2YgZ2l2ZW4gdHlwZS4KKyAqLworZnVuY3Rpb24gYXNzZXJ0SW5zdGFu
Y2VvZihvYmosIHR5cGUpIHsKKyAgaWYgKCEob2JqIGluc3RhbmNlb2YgdHlwZSkpIHsKKyAgICB2
YXIgYWN0dWFsVHlwZU5hbWUgPSBudWxsOworICAgIHZhciBhY3R1YWxDb25zdHJ1Y3RvciA9IE9i
amVjdC5nZXRQcm90b3R5cGVPZihvYmopLmNvbnN0cnVjdG9yOworICAgIGlmICh0eXBlb2YgYWN0
dWFsQ29uc3RydWN0b3IgPT0gImZ1bmN0aW9uIikgeworICAgICAgYWN0dWFsVHlwZU5hbWUgPSBh
Y3R1YWxDb25zdHJ1Y3Rvci5uYW1lIHx8IFN0cmluZyhhY3R1YWxDb25zdHJ1Y3Rvcik7CisgICAg
fQorICAgIHRocm93IG5ldyBFcnJvcignT2JqZWN0IDwnICsgb2JqICsgJz4gaXMgbm90IGFuIGlu
c3RhbmNlIG9mIDwnICsKKyAgICAgICAgICAgICAgICAgICAgKHR5cGUubmFtZSB8fCB0eXBlKSAr
ICc+JyArCisgICAgICAgICAgICAgICAgICAgIChhY3R1YWxUeXBlTmFtZSA/ICcgYnV0IG9mIDwg
JyArIGFjdHVhbFR5cGVOYW1lICsgJz4nIDogJycpKTsKKyAgfQorfQorCisvKioKKyAqIFRocm93
cyBpZiBvYmogaXMgbm90IHRoZSBzYW1lIGFzIGV4cGVjdGVkLgorICovCitmdW5jdGlvbiBhc3Nl
cnRTYW1lKGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpIHsKKyAgaWYgKGZvdW5kID09PSBleHBl
Y3RlZCkgeworICAgIGlmIChleHBlY3RlZCAhPT0gMCB8fCAoMSAvIGV4cGVjdGVkKSA9PT0gKDEg
LyBmb3VuZCkpCisgICAgICByZXR1cm47CisgIH0gZWxzZSBpZiAoKGV4cGVjdGVkICE9PSBleHBl
Y3RlZCkgJiYgKGZvdW5kICE9PSBmb3VuZCkpIHsKKyAgICAgIHJldHVybjsKKyAgfQorICBmYWls
KGV4cGVjdGVkLCBmb3VuZCwgbmFtZV9vcHQpOworfQorCisvKioKKyAqIFRocm93cyBpZiB0d28g
dmFyaWFibGVzIGhhdmUgZGlmZmVyZW50IHR5cGVzIG9yIHZhbHVlcy4KKyAqLworCitmdW5jdGlv
biBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2UgPSAnJykgeworICBp
ZiAoIWRlZXBFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kKSkgeworICAgIGZhaWwoZXhwZWN0ZWQsIGZv
dW5kLCB1c2VyX21lc3NhZ2UpOworICB9Cit9CisKKy8qKgorICogVGhyb3dzIGlmIHR3byB2YXJp
YWJsZXMgaGF2ZSBlcXVhbCB0eXBlcyBvciB2YWx1ZXMuCisgKi8KKworZnVuY3Rpb24gYXNzZXJ0
Tm90RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlID0gJycpIHsKKyAgaWYgKGRl
ZXBFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kKSkgeworICAgIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCB1
c2VyX21lc3NhZ2UpOworICB9Cit9CisKKy8qKgorICogVGhyb3dzIGlmIHZhbHVlIGlzIGZhbHNl
LgorICovCitmdW5jdGlvbiBhc3NlcnRUcnVlKHZhbHVlLCB1c2VyX21lc3NhZ2UgPSAnJykgewor
ICBhc3NlcnRFcXVhbHModHJ1ZSwgdmFsdWUsIHVzZXJfbWVzc2FnZSk7Cit9CisKKworLyoqCisg
KiBUaHJvd3MgaWYgdmFsdWUgaXMgdHJ1ZS4KKyAqLworZnVuY3Rpb24gYXNzZXJ0RmFsc2UodmFs
dWUsIHVzZXJfbWVzc2FnZSA9ICcnKSB7CisgIGFzc2VydEVxdWFscyhmYWxzZSwgdmFsdWUsIHVz
ZXJfbWVzc2FnZSk7Cit9CisKKy8qKgorICogUnVucyBjb2RlKCkgYW5kIGFzc2VydHMgdGhhdCBp
dCB0aHJvd3MgdGhlIHNwZWNpZmllZCBleGNlcHRpb24uCisgKi8KK2Z1bmN0aW9uIGFzc2VydFRo
cm93cyhjb2RlLCB0eXBlX29wdCwgY2F1c2Vfb3B0KSB7CisgIHRyeSB7CisgICAgaWYgKHR5cGVv
ZiBjb2RlID09ICdmdW5jdGlvbicpIHsKKyAgICAgIGNvZGUoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgZXZhbChjb2RlKTsKKyAgICB9CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBpZiAodHlwZW9mIHR5
cGVfb3B0ID09ICdmdW5jdGlvbicpIHsKKyAgICAgIGFzc2VydEluc3RhbmNlb2YoZSwgdHlwZV9v
cHQpOworICAgIH0KKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSB7CisgICAgICBhc3Nl
cnRFcXVhbHMoY2F1c2Vfb3B0LCBlLnR5cGUsICd0aHJvd24gZXhjZXB0aW9uIHR5cGUgbWlzbWF0
Y2gnKTsKKyAgICB9CisgICAgLy8gU3VjY2Vzcy4KKyAgICByZXR1cm47CisgIH0KKyAgdmFyIGV4
cGVjdGVkID0gYXJndW1lbnRzLmxlbmd0aCA+PSAzID8gY2F1c2Vfb3B0IDoKKyAgICAgIHR5cGVv
ZiB0eXBlX29wdCA9PSAnZnVuY3Rpb24nID8gdHlwZV9vcHQgOiAnYW55IGV4Y2VwdGlvbic7Cisg
IGZhaWwoZXhwZWN0ZWQsICdubyBleGNlcHRpb24nLCAnZXhwZWN0ZWQgdGhyb3duIGV4Y2VwdGlv
bicpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sIGIvSlNUZXN0
cy90ZXN0MjYyL2NvbmZpZy55YW1sCmluZGV4IGZhOTNjYTg0YzNmZS4uZTNhYWU0Y2Y3Njg2IDEw
MDY0NAotLS0gYS9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwKKysrIGIvSlNUZXN0cy90ZXN0
MjYyL2NvbmZpZy55YW1sCkBAIC02LDYgKzYsNyBAQCBmbGFnczoKICAgRmluYWxpemF0aW9uUmVn
aXN0cnk6IHVzZVdlYWtSZWZzCiAgIGNsYXNzLWZpZWxkcy1wdWJsaWM6IHVzZVB1YmxpY0NsYXNz
RmllbGRzCiAgIGNsYXNzLWZpZWxkcy1wcml2YXRlOiB1c2VQcml2YXRlQ2xhc3NGaWVsZHMKKyAg
Y2xhc3Mtc3RhdGljLWZpZWxkcy1wdWJsaWM6IHVzZVB1YmxpY0NsYXNzRmllbGRzCiAgIEludGwu
RGlzcGxheU5hbWVzOiB1c2VJbnRsRGlzcGxheU5hbWVzCiBza2lwOgogICBmZWF0dXJlczoKQEAg
LTE2LDcgKzE3LDYgQEAgc2tpcDoKICAgICAtIHJlZ2V4cC1sb29rYmVoaW5kCiAKICAgICAtIGNs
YXNzLW1ldGhvZHMtcHJpdmF0ZQotICAgIC0gY2xhc3Mtc3RhdGljLWZpZWxkcy1wdWJsaWMKICAg
ICAtIGNsYXNzLXN0YXRpYy1maWVsZHMtcHJpdmF0ZQogICAgIC0gY2xhc3Mtc3RhdGljLW1ldGhv
ZHMtcHJpdmF0ZQogICAgIC0gY2xlYW51cFNvbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4
IDRmZjYzOGVhOWZlYS4uNTA0ZDFlMGUxYTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMDkgQEAKKzIwMjAtMDYtMDUgIFhhbiBMw7NwZXogIDx4YW5AaWdhbGlhLmNvbT4K
KworICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3Igc3RhdGljIHB1YmxpYyBjbGFzcyBmaWVs
ZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBz
dXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcy4gV2UgY2FuIHJldXNlIG1vc3Qg
b2YKKyAgICAgICAgdGhlIGV4aXN0aW5nIG1hY2hpbmVyeSBhdmFpbGFibGUgZm9yIGluc3RhbmNl
IGZpZWxkcywgd2l0aCBhCisgICAgICAgIGNvdXBsZSBvZiBpc3N1ZXMgdGhhdCBtZXJpdCBzcGVj
aWFsIGNvbW1lbnQ6CisKKyAgICAgICAgU3RhdGljIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIGxp
a2UgaW5zdGFuY2UgZmllbGRzLCB3aXRoIGEKKyAgICAgICAgc3ludGhldGljIGZ1bmN0aW9uLiBU
aGlzIGlzIGRvbmUgdG8gYWxsb3cgdXMgdG8gdHJpdmlhbGx5IGZvbGxvdworICAgICAgICB0aGUg
c2NvcGluZyBydWxlcyBpbiB0aGUgc3BlYy4gQXMgaXQgaGFwcGVucyB3aXRoIGluc3RhbmNlIGZp
ZWxkcworICAgICAgICB0aGlzIGNvdWxkIGJlIGlubGluZWQgaW4gYSBmdXR1cmUgcGF0Y2guCisK
KyAgICAgICAgVGhlIHdheSB3ZSBzdG9yZSBjb21wdXRlZCBwcm9wZXJ0eSBrZXlzIG5lZWRzIHRv
IGJlCisgICAgICAgIG1vZGlmaWVkLiBCZWZvcmUgd2UgYXNzdW1lZCB0aGUgc291cmNlIGNvZGUg
b3JkZXIgd291bGQgYmUKKyAgICAgICAgaWRlbnRpY2FsIHRvIHRoZSBldmFsdWF0aW9uIG9yZGVy
ICh3aGljaCB3YXMgdHJ1ZSBmb3IgaW5zdGFuY2UKKyAgICAgICAgZmllbGRzKS4gV2l0aCBzdGF0
aWMgZmllbGRzIHRoaXMgY2FuIG5vdCBiZSB0aGUgY2FzZSwgc2luY2Ugc3RhdGljCisgICAgICAg
IGZpZWxkcyBhcmUgYWx3YXlzIGluaXRpYWxpemVkIGZpcnN0LiBUbyBhbGxvdyBmb3IgdGhpcyBt
aXNtYXRjaAorICAgICAgICB0aGUgY29tcHV0ZWQgcHJvcGVydHkga2V5cyBmb3IgaW5zdGFuY2Ug
ZmllbGRzIGFyZSBzdG9yZWQgd2l0aCBhbgorICAgICAgICBldmVuIGlkZW50aWZpZXIsIGFuZCB0
aG9zZSBmb3Igc3RhdGljIGZpZWxkcyBhcmUgc3RvcmVkIHdpdGggYW4KKyAgICAgICAgb2RkIGlk
ZW50aWZpZXIuIFRoZSBmaWVsZCBwYXJzZXIsIHVwb24gZmlndXJpbmcgb3V0IHdoZXRoZXIgaXQn
cworICAgICAgICBpbml0aWFsaXppbmcgdGhlIHN0YXRpYyBvciB0aGUgaW5zdGFuY2UgZmllbGRz
LCB3aWxsIGtub3cgd2hlcmUgdG8KKyAgICAgICAgbG9vayB1cCB0aGUga2V5LgorCisgICAgICAg
IEZvciBleGFtcGxlOgorCisgICAgICAgIGNsYXNzIEZPTyB7CisgICAgICAgICAgWyJhIl0gPSAw
OworICAgICAgICAgIHN0YXRpYyBbImIiXSA9IDE7CisgICAgICAgICAgc3RhdGljIFsiYyJdID0g
MjsKKyAgICAgICAgICBbImQiXSA9IDM7CisgICAgICAgIH0KKworICAgICAgICBIZXJlIHdlIHdp
bGwgZXZhbHVhdGUgdGhlIGNvbXB1dGVkIGZpZWxkIG5hbWVzIGluIHRoZSBmb2xsb3dpbmcKKyAg
ICAgICAgb3JkZXI6IGEsIGIsIGMsIGQ7IGJ1dCB3ZSB3aWxsIGluaXRpYWxpemUgdGhlIGZpZWxk
cyBpbiB0aGUKKyAgICAgICAgZm9sbG93aW5nIG9yZGVyOiBiLCBjLCBhLCBkLiBTaW5jZSBlYWNo
IGdyb3VwIG9mIGZpZWxkcyBpcworICAgICAgICBpbml0aWFsaXplZCBpbmRlcGVuZGVudGx5IHdl
IGNhbiB0cml2aWFsbHkgcmV0cmlldmUgdGhlIHByb3BlcnR5CisgICAgICAgIGtleXMgZm9yIGVh
Y2ggZ3JvdXAganVzdCBieSBnZXR0aW5nIHRoZSBvZGQgcHJvcGVydHkga2V5cyBmb3IKKyAgICAg
ICAgc3RhdGljIGZpZWxkcyAoaW5kZXhlcyAxIGFuZCAzKSBhbmQgdGhlIGV2ZW4gb25lcyBmb3Ig
aW5zdGFuY2UKKyAgICAgICAgZmllbGRzIChpbmRleGVzIDAgYW5kIDIpLgorCisgICAgICAgICog
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpn
ZW5lcmF0ZVVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1Vu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRO
ZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRTYXZlQ29tcHV0ZWRGaWVsZE5hbWUp
OgorICAgICAgICAoSlNDOjpEZWZpbmVGaWVsZE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OkNsYXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogcGFyc2VyL0FT
VEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRGVmaW5lRmllbGQp
OgorICAgICAgICAqIHBhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6OkRl
ZmluZUZpZWxkTm9kZTo6RGVmaW5lRmllbGROb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMu
aDoKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlSW5uZXIpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VDbGFzcyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3Rh
bmNlRmllbGRJbml0aWFsaXplclNvdXJjZUVsZW1lbnRzKToKKyAgICAgICAgKiBwYXJzZXIvUGFy
c2VyLmg6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZSk6CisgICAgICAg
IChKU0M6OnBhcnNlKToKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAgICAg
ICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVEZWZpbmVGaWVsZCk6CisgICAgICAgICogcnVu
dGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6c2V0RnVuY3Rp
b25OYW1lKToKKworICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToK
KyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWRBcnJvd0Z1bmN0aW9uTGV4aWNh
bEVudmlyb25tZW50KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpT
Qzo6ZW1pdEhvbWVPYmplY3RGb3JDYWxsZWUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUxpc3RO
b2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0
U2F2ZUNvbXB1dGVkRmllbGROYW1lKToKKyAgICAgICAgKEpTQzo6RGVmaW5lRmllbGROb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
ZXZhbCk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgICogcGFyc2VyL1BhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZSk6CisgICAgICAgIChKU0M6
OnN0cmluZ0ZvckZ1bmN0aW9uTW9kZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUNsYXNzKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xh
c3NGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMpOgorICAgICAgICAqIHBhcnNlci9QYXJz
ZXIuaDoKKyAgICAgICAgKEpTQzo6U2NvcGU6OnNldFNvdXJjZVBhcnNlTW9kZSk6CisgICAgICAg
IChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZSk6CisgICAgICAgIChKU0M6OnBhcnNlKToK
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyTW9kZXMuaDoKKyAgICAgICAgKEpTQzo6aXNGdW5jdGlv
blBhcnNlTW9kZSk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6Cisg
ICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNhbGxlckdldHRl
cik6CisKIDIwMjAtMDctMjcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAg
ICAgIERpc2FsbG93Vk1FbnRyeSBuZWVkcyBhIGNvcHkgYXNzaWdubWVudCBvcGVyYXRvciwgZGV0
ZWN0ZWQgYnkgZ2NjJ3MgLVdkZXByZWNhdGVkLWNvcHkgd2FybmluZwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5jcHAKaW5kZXggNDYxZDlmYWRkNDhiLi5hZDE4OTlmNmVjODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmNwcApAQCAtNTYsOSArNTYsOSBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayogZ2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKAogICAgIEpTUGFyc2Vy
U3RyaWN0TW9kZSBzdHJpY3RNb2RlID0gZXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSA/
IEpTUGFyc2VyU3RyaWN0TW9kZTo6U3RyaWN0IDogSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJp
Y3Q7CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUgPSBleGVjdXRhYmxlLT5zY3Jp
cHRNb2RlKCk7CiAgICAgQVNTRVJUKGlzRnVuY3Rpb25QYXJzZU1vZGUoZXhlY3V0YWJsZS0+cGFy
c2VNb2RlKCkpKTsKLSAgICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9j
YXRpb25zID0gZXhlY3V0YWJsZS0+aW5zdGFuY2VGaWVsZExvY2F0aW9ucygpOworICAgIFZlY3Rv
cjxKU1RleHRQb3NpdGlvbj4qIGNsYXNzRmllbGRMb2NhdGlvbnMgPSBleGVjdXRhYmxlLT5jbGFz
c0ZpZWxkTG9jYXRpb25zKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uTm9kZT4gZnVu
Y3Rpb24gPSBwYXJzZTxGdW5jdGlvbk5vZGU+KAotICAgICAgICB2bSwgc291cmNlLCBleGVjdXRh
YmxlLT5uYW1lKCksIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBleGVjdXRh
YmxlLT5wYXJzZU1vZGUoKSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIGVycm9yLCBudWxs
cHRyLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgRXZh
bENvbnRleHRUeXBlOjpOb25lLCBudWxscHRyLCBudWxscHRyLCBpbnN0YW5jZUZpZWxkTG9jYXRp
b25zKTsKKyAgICAgICAgdm0sIHNvdXJjZSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBidWlsdGluTW9k
ZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZXhlY3V0YWJsZS0+cGFyc2VNb2RlKCksIGV4ZWN1
dGFibGUtPnN1cGVyQmluZGluZygpLCBlcnJvciwgbnVsbHB0ciwgQ29uc3RydWN0b3JLaW5kOjpO
b25lLCBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwgbnVs
bHB0ciwgbnVsbHB0ciwgY2xhc3NGaWVsZExvY2F0aW9ucyk7CiAKICAgICBpZiAoIWZ1bmN0aW9u
KSB7CiAgICAgICAgIEFTU0VSVChlcnJvci5pc1ZhbGlkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUu
aAppbmRleCA4ZmZlMzAwZDg0NDIuLjU4MDMyYWQ1ZWRkNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmgKQEAgLTIwOSwyMyArMjA5LDIzIEBAIHB1YmxpYzoKICAgICAgICAgU3RyaW5nIG1fc291cmNl
VVJMRGlyZWN0aXZlOwogICAgICAgICBTdHJpbmcgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZl
OwogICAgICAgICBDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZSBtX3BhcmVudFNjb3BlVERaVmFy
aWFibGVzOwotICAgICAgICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+IG1faW5zdGFuY2VGaWVsZExv
Y2F0aW9uczsKKyAgICAgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiBtX2NsYXNzRmllbGRMb2Nh
dGlvbnM7CiAgICAgfTsKIAogICAgIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyIG5lZWRzQ2xh
c3NGaWVsZEluaXRpYWxpemVyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TmVlZHNDbGFz
c0ZpZWxkSW5pdGlhbGl6ZXI+KG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIpOyB9CiAKLSAg
ICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKCkgY29uc3QK
KyAgICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBjbGFzc0ZpZWxkTG9jYXRpb25zKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIGlmIChtX3JhcmVEYXRhKQotICAgICAgICAgICAgcmV0dXJuICZtX3Jh
cmVEYXRhLT5tX2luc3RhbmNlRmllbGRMb2NhdGlvbnM7CisgICAgICAgICAgICByZXR1cm4gJm1f
cmFyZURhdGEtPm1fY2xhc3NGaWVsZExvY2F0aW9uczsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCi0gICAgdm9pZCBzZXRJbnN0YW5jZUZpZWxkTG9jYXRpb25zKFZlY3RvcjxKU1Rl
eHRQb3NpdGlvbj4mJiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQorICAgIHZvaWQgc2V0Q2xhc3NG
aWVsZExvY2F0aW9ucyhWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiYgY2xhc3NGaWVsZExvY2F0aW9u
cykKICAgICB7Ci0gICAgICAgIGlmIChpbnN0YW5jZUZpZWxkTG9jYXRpb25zLmlzRW1wdHkoKSkK
KyAgICAgICAgaWYgKGNsYXNzRmllbGRMb2NhdGlvbnMuaXNFbXB0eSgpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBlbnN1cmVSYXJlRGF0YSgpLm1faW5zdGFuY2VGaWVsZExvY2F0aW9u
cyA9IFdURk1vdmUoaW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7CisgICAgICAgIGVuc3VyZVJhcmVE
YXRhKCkubV9jbGFzc0ZpZWxkTG9jYXRpb25zID0gV1RGTW92ZShjbGFzc0ZpZWxkTG9jYXRpb25z
KTsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDg0NDBkOWIwNjFhYS4u
YWUyYjczZGJkN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMzc4LDcgKzM3OCw3IEBAIEJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEZ1bmN0aW9uTm9kZSogZnVu
Y3Rpb25Ob2RlLCBVbmxpbmtlCiAgICAgYm9vbCBzaG91bGRDYXB0dXJlU29tZU9mVGhlVGhpbmdz
ID0gc2hvdWxkRW1pdERlYnVnSG9va3MoKSB8fCBmdW5jdGlvbk5vZGUtPm5lZWRzQWN0aXZhdGlv
bigpIHx8IGNvbnRhaW5zQXJyb3dPckV2YWxCdXROb3RJbkFycm93QmxvY2s7CiAKICAgICBib29s
IHNob3VsZENhcHR1cmVBbGxPZlRoZVRoaW5ncyA9IHNob3VsZEVtaXREZWJ1Z0hvb2tzKCkgfHwg
Y29kZUJsb2NrLT51c2VzRXZhbCgpOwotICAgIGJvb2wgbmVlZHNBcmd1bWVudHMgPSAoKGZ1bmN0
aW9uTm9kZS0+dXNlc0FyZ3VtZW50cygpICYmICFjb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigp
KSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkgfHwgKGZ1bmN0aW9uTm9kZS0+dXNlc0Fycm93RnVu
Y3Rpb24oKSAmJiAhY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSAmJiBpc0FyZ3VtZW50c1Vz
ZWRJbklubmVyQXJyb3dGdW5jdGlvbigpKSkgJiYgcGFyc2VNb2RlICE9IFNvdXJjZVBhcnNlTW9k
ZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZTsKKyAgICBib29sIG5lZWRzQXJndW1lbnRz
ID0gKChmdW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSAmJiAhY29kZUJsb2NrLT5pc0Fycm93
RnVuY3Rpb24oKSkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpIHx8IChmdW5jdGlvbk5vZGUtPnVz
ZXNBcnJvd0Z1bmN0aW9uKCkgJiYgIWNvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgJiYgaXNB
cmd1bWVudHNVc2VkSW5Jbm5lckFycm93RnVuY3Rpb24oKSkpICYmIHBhcnNlTW9kZSAhPSBTb3Vy
Y2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU7CiAKICAgICBpZiAoaXNHZW5l
cmF0b3JPckFzeW5jRnVuY3Rpb25Cb2R5UGFyc2VNb2RlKHBhcnNlTW9kZSkpIHsKICAgICAgICAg
Ly8gR2VuZXJhdG9yIGFuZCBBc3luY0Z1bmN0aW9uIG5ldmVyIHByb3ZpZGVzICJhcmd1bWVudHMi
LiAiYXJndW1lbnRzIiByZWZlcmVuY2Ugd2lsbCBiZSByZXNvbHZlZCBpbiBhbiB1cHBlciBnZW5l
cmF0b3IgZnVuY3Rpb24gc2NvcGUuCkBAIC02MTAsNyArNjEwLDcgQEAgQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUs
IFVubGlua2UKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgc2hvdWxkQ3JlYXRlQXJndW1lbnNW
YXJpYWJsZSA9ICFoYXZlUGFyYW1ldGVyTmFtZWRBcmd1bWVudHMKLSAgICAgICAgICAgICYmICFT
b3VyY2VQYXJzZU1vZGVTZXQoU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSwgU291
cmNlUGFyc2VNb2RlOjpBc3luY0Fycm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6Oklu
c3RhbmNlRmllbGRJbml0aWFsaXplck1vZGUpLmNvbnRhaW5zKG1fY29kZUJsb2NrLT5wYXJzZU1v
ZGUoKSk7CisgICAgICAgICAgICAmJiAhU291cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9k
ZTo6QXJyb3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9u
TW9kZSwgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKS5jb250YWlu
cyhtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkpOwogICAgICAgICBzaG91bGRDcmVhdGVBcmd1bWVu
dHNWYXJpYWJsZUluUGFyYW1ldGVyU2NvcGUgPSBzaG91bGRDcmVhdGVBcmd1bWVuc1ZhcmlhYmxl
ICYmICFpc1NpbXBsZVBhcmFtZXRlckxpc3Q7CiAgICAgICAgIC8vIERvIG5vdCBjcmVhdGUgYXJn
dW1lbnRzIHZhcmlhYmxlIGluIGNhc2Ugb2YgQXJyb3cgZnVuY3Rpb24uIFZhbHVlIHdpbGwgYmUg
bG9hZGVkIGZyb20gcGFyZW50IHNjb3BlCiAgICAgICAgIGlmIChzaG91bGRDcmVhdGVBcmd1bWVu
c1ZhcmlhYmxlICYmICFzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJsZUluUGFyYW1ldGVyU2Nv
cGUpIHsKQEAgLTMxMjAsNyArMzEyMCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0TmV3RGVmYXVsdENvbnN0cnVjdG9yKFJlZ2lzdGVySUQqIGRzdCwgQ29uc3RyCiAgICAg
cmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdJ
bnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIFZlY3RvcjxK
U1RleHRQb3NpdGlvbj4mJiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zLCBib29sIGlzRGVyaXZlZCkK
K1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxp
emVyRnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiYgY2xh
c3NGaWVsZExvY2F0aW9ucywgYm9vbCBpc0Rlcml2ZWQpCiB7CiAgICAgRGVyaXZlZENvbnRleHRU
eXBlIG5ld0Rlcml2ZWRDb250ZXh0VHlwZTsKICAgICBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5n
OwpAQCAtMzEzMywxNCArMzEzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdE5ld0luc3RhbmNlRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKFJlZ2lzdGVySQogICAgIH0K
IAogICAgIE9wdGlvbmFsPENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlPiB2YXJpYWJsZXNVbmRl
clREWiA9IGdldFZhcmlhYmxlc1VuZGVyVERaKCk7Ci0gICAgU291cmNlUGFyc2VNb2RlIHBhcnNl
TW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZTsKKyAg
ICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxk
SW5pdGlhbGl6ZXJNb2RlOwogICAgIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSA9
IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKIAogICAgIGNvbnN0IGJvb2wgYWx3
YXlzU3RyaWN0SW5DbGFzcyA9IHRydWU7CiAgICAgRnVuY3Rpb25NZXRhZGF0YU5vZGUgbWV0YWRh
dGEocGFyc2VyQXJlbmEoKSwgSlNUb2tlbkxvY2F0aW9uKCksIEpTVG9rZW5Mb2NhdGlvbigpLCAw
LCAwLCAwLCAwLCAwLCBhbHdheXNTdHJpY3RJbkNsYXNzLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUs
IHN1cGVyQmluZGluZywgMCwgcGFyc2VNb2RlLCBmYWxzZSk7CiAgICAgbWV0YWRhdGEuZmluaXNo
UGFyc2luZyhtX3Njb3BlTm9kZS0+c291cmNlKCksIElkZW50aWZpZXIoKSwgRnVuY3Rpb25Nb2Rl
OjpNZXRob2REZWZpbml0aW9uKTsKICAgICBhdXRvIGluaXRpYWxpemVyID0gVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShtX3ZtLCBtX3Njb3BlTm9kZS0+c291cmNlKCksICZtZXRh
ZGF0YSwgaXNCdWlsdGluRnVuY3Rpb24oKSA/IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uIDogVW5s
aW5rZWROb3JtYWxGdW5jdGlvbiwgY29uc3RydWN0QWJpbGl0eSwgc2NyaXB0TW9kZSgpLCBXVEZN
b3ZlKHZhcmlhYmxlc1VuZGVyVERaKSwgbmV3RGVyaXZlZENvbnRleHRUeXBlLCBOZWVkc0NsYXNz
RmllbGRJbml0aWFsaXplcjo6Tm8pOwotICAgIGluaXRpYWxpemVyLT5zZXRJbnN0YW5jZUZpZWxk
TG9jYXRpb25zKFdURk1vdmUoaW5zdGFuY2VGaWVsZExvY2F0aW9ucykpOworICAgIGluaXRpYWxp
emVyLT5zZXRDbGFzc0ZpZWxkTG9jYXRpb25zKFdURk1vdmUoY2xhc3NGaWVsZExvY2F0aW9ucykp
OwogCiAgICAgdW5zaWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25FeHByKGlu
aXRpYWxpemVyKTsKICAgICBPcE5ld0Z1bmNFeHA6OmVtaXQodGhpcywgZHN0LCBzY29wZVJlZ2lz
dGVyKCksIGluZGV4KTsKQEAgLTQ0NTUsNyArNDQ1NSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OnBvcEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCiAKIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZEFycm93RnVuY3Rpb25MZXhpY2Fs
RW52aXJvbm1lbnQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBBU1NFUlQo
bV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpIHx8IG1fY29kZUJsb2NrLT5pc0Fycm93RnVu
Y3Rpb25Db250ZXh0KCkgfHwgY29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpF
eHRlbmRzIHx8IG1fY29kZVR5cGUgPT0gRXZhbENvZGUgfHwgbV9jb2RlQmxvY2stPnBhcnNlTW9k
ZSgpID09IFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSk7Cisg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBtX2NvZGVCbG9jay0+
aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpIHx8IGNvbnN0cnVjdG9yS2luZCgpID09IENvbnN0cnVj
dG9yS2luZDo6RXh0ZW5kcyB8fCBtX2NvZGVUeXBlID09IEV2YWxDb2RlIHx8IG1fY29kZUJsb2Nr
LT5wYXJzZU1vZGUoKSA9PSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1v
ZGUpOwogCiAgICAgcmV0dXJuIGVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyaWFibGUoaWRl
bnRpZmllciwgVGhpc1Jlc29sdXRpb25UeXBlOjpTY29wZWQpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRl
eCA0YTEwODRiZmE1NTYuLmM3N2I5NGRiYTZmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNTgxLDE0ICs1
ODEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZW1pdE5vZGVJblRh
aWxQb3NpdGlvbihudWxscHRyLCBuKTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZ2lzdGVySUQq
IGVtaXREZWZpbmVDbGFzc0VsZW1lbnRzKFByb3BlcnR5TGlzdE5vZGUqIG4sIFJlZ2lzdGVySUQq
IGNvbnN0cnVjdG9yLCBSZWdpc3RlcklEKiBwcm90b3R5cGUsIFZlY3RvcjxKU1RleHRQb3NpdGlv
bj4mIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpCisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXREZWZp
bmVDbGFzc0VsZW1lbnRzKFByb3BlcnR5TGlzdE5vZGUqIG4sIFJlZ2lzdGVySUQqIGNvbnN0cnVj
dG9yLCBSZWdpc3RlcklEKiBwcm90b3R5cGUsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIGluc3Rh
bmNlRmllbGRMb2NhdGlvbnMsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIHN0YXRpY0ZpZWxkTG9j
YXRpb25zKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoY29uc3RydWN0b3ItPnJlZkNv
dW50KCkgJiYgcHJvdG90eXBlLT5yZWZDb3VudCgpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VM
WSghbV92bS5pc1NhZmVUb1JlY3Vyc2UoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVtaXRU
aHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkobi0+bmVlZHNEZWJ1Z0hvb2soKSkpCiAgICAgICAgICAgICAgICAgZW1pdERlYnVnSG9vayhu
KTsKLSAgICAgICAgICAgIHJldHVybiBuLT5lbWl0Qnl0ZWNvZGUoKnRoaXMsIGNvbnN0cnVjdG9y
LCBwcm90b3R5cGUsICZpbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgICAgIHJldHVy
biBuLT5lbWl0Qnl0ZWNvZGUoKnRoaXMsIGNvbnN0cnVjdG9yLCBwcm90b3R5cGUsICZpbnN0YW5j
ZUZpZWxkTG9jYXRpb25zLCAmc3RhdGljRmllbGRMb2NhdGlvbnMpOwogICAgICAgICB9CiAKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdE5vZGVGb3JQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIEV4
cHJlc3Npb25Ob2RlKiBub2RlKQpAQCAtNzc1LDcgKzc3NSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5j
dGlvbk1ldGFkYXRhTm9kZSopOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb25F
eHByZXNzaW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVuY0V4cHJOb2RlKik7CiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXROZXdEZWZhdWx0Q29uc3RydWN0b3IoUmVnaXN0ZXJJRCogZHN0LCBDb25zdHJ1
Y3RvcktpbmQsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IElkZW50aWZpZXImIGVjbWFO
YW1lLCBjb25zdCBTb3VyY2VDb2RlJiBjbGFzc1NvdXJjZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlh
bGl6ZXIpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3SW5zdGFuY2VGaWVsZEluaXRpYWxp
emVyRnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiYgaW5z
dGFuY2VGaWVsZExvY2F0aW9ucywgYm9vbCBpc0Rlcml2ZWQpOworICAgICAgICBSZWdpc3RlcklE
KiBlbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBW
ZWN0b3I8SlNUZXh0UG9zaXRpb24+JiYgY2xhc3NGaWVsZExvY2F0aW9ucywgYm9vbCBpc0Rlcml2
ZWQpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3QXJyb3dGdW5jdGlvbkV4cHJlc3Npb24o
UmVnaXN0ZXJJRCosIEFycm93RnVuY0V4cHJOb2RlKik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXROZXdNZXRob2REZWZpbml0aW9uKFJlZ2lzdGVySUQqIGRzdCwgTWV0aG9kRGVmaW5pdGlvbk5v
ZGUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld1JlZ0V4cChSZWdpc3RlcklEKiBkc3Qs
IFJlZ0V4cCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwCmluZGV4IDJlMDNlODUxYmU4My4uYmYzODg3MjVmOWNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CkBAIC0xODYsNyArMTg2LDcgQEAgUmVnaXN0ZXJJRCogVGhpc05vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QKIAogc3RhdGljIFJl
Z2lzdGVySUQqIGVtaXRIb21lT2JqZWN0Rm9yQ2FsbGVlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IpCiB7Ci0gICAgaWYgKChnZW5lcmF0b3IuaXNEZXJpdmVkQ2xhc3NDb250ZXh0KCkgfHwg
Z2VuZXJhdG9yLmlzRGVyaXZlZENvbnN0cnVjdG9yQ29udGV4dCgpKSAmJiBnZW5lcmF0b3IucGFy
c2VNb2RlKCkgIT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2Rl
KSB7CisgICAgaWYgKChnZW5lcmF0b3IuaXNEZXJpdmVkQ2xhc3NDb250ZXh0KCkgfHwgZ2VuZXJh
dG9yLmlzRGVyaXZlZENvbnN0cnVjdG9yQ29udGV4dCgpKSAmJiBnZW5lcmF0b3IucGFyc2VNb2Rl
KCkgIT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKSB7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGRlcml2ZWRDb25zdHJ1Y3RvciA9IGdlbmVyYXRvci5lbWl0TG9hZERl
cml2ZWRDb25zdHJ1Y3RvckZyb21BcnJvd0Z1bmN0aW9uTGV4aWNhbEVudmlyb25tZW50KCk7CiAg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCBkZXJpdmVkQ29uc3RydWN0b3IsIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRp
bk5hbWVzKCkuaG9tZU9iamVjdFByaXZhdGVOYW1lKCkpOwogICAgIH0KQEAgLTU3Nyw3ICs1Nzcs
NyBAQCB2b2lkIFByb3BlcnR5TGlzdE5vZGU6OmVtaXREZWNsYXJlUHJpdmF0ZUZpZWxkTmFtZXMo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcgogICAgIH0KIH0KIAotUmVnaXN0ZXJJRCogUHJv
cGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdE9yQ29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3RvdHlwZSwgVmVj
dG9yPEpTVGV4dFBvc2l0aW9uPiogaW5zdGFuY2VGaWVsZExvY2F0aW9ucykKK1JlZ2lzdGVySUQq
IFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3RPckNvbnN0cnVjdG9yLCBSZWdpc3RlcklEKiBwcm90b3R5cGUs
IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGluc3RhbmNlRmllbGRMb2NhdGlvbnMsIFZlY3RvcjxK
U1RleHRQb3NpdGlvbj4qIHN0YXRpY0ZpZWxkTG9jYXRpb25zKQogewogICAgIFByb3BlcnR5TGlz
dE5vZGUqIHAgPSB0aGlzOwogICAgIFJlZ2lzdGVySUQqIGRzdCA9IG51bGxwdHI7CkBAIC01OTUs
NiArNTk1LDEyIEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChwLT5pc1N0YXRpY0NsYXNzRmllbGQoKSkgewor
ICAgICAgICAgICAgQVNTRVJUKHN0YXRpY0ZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgICAgIHN0
YXRpY0ZpZWxkTG9jYXRpb25zLT5hcHBlbmQocC0+cG9zaXRpb24oKSk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGVtaXRQdXRDb25zdGFudFByb3BlcnR5KGdl
bmVyYXRvciwgZHN0LCAqcC0+bV9ub2RlKTsKICAgICB9CiAKQEAgLTY1Miw2ICs2NTgsMTIgQEAg
UmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKHAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0YXRpY0ZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgICAg
ICAgICBzdGF0aWNGaWVsZExvY2F0aW9ucy0+YXBwZW5kKHAtPnBvc2l0aW9uKCkpOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBIYW5k
bGUgcmVndWxhciB2YWx1ZXMuCiAgICAgICAgICAgICBpZiAobm9kZS0+bV90eXBlICYgUHJvcGVy
dHlOb2RlOjpDb25zdGFudCkgewogICAgICAgICAgICAgICAgIGVtaXRQdXRDb25zdGFudFByb3Bl
cnR5KGdlbmVyYXRvciwgZHN0LCAqbm9kZSk7CkBAIC03NDQsNyArNzU2LDcgQEAgUmVnaXN0ZXJJ
RCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGUKIAogdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0UHV0Q29uc3RhbnRQ
cm9wZXJ0eShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBuZXdPYmos
IFByb3BlcnR5Tm9kZSYgbm9kZSkKIHsKLSAgICAvLyBQcml2YXRlIGZpZWxkcyBhcmUgaGFuZGxl
ZCBpbiB0aGUgc3ludGhldGljIGluc3RhbmNlRmllbGRJbml0aWFsaXplciBmdW5jdGlvbiwgbm90
IGhlcmUuCisgICAgLy8gUHJpdmF0ZSBmaWVsZHMgYXJlIGhhbmRsZWQgaW4gYSBzeW50aGV0aWMg
Y2xhc3NGaWVsZEluaXRpYWxpemVyIGZ1bmN0aW9uLCBub3QgaGVyZS4KICAgICBBU1NFUlQoIShu
b2RlLnR5cGUoKSAmIFByb3BlcnR5Tm9kZTo6UHJpdmF0ZSkpOwogCiAgICAgYm9vbCBzaG91bGRT
ZXRGdW5jdGlvbk5hbWUgPSBnZW5lcmF0b3Iuc2hvdWxkU2V0RnVuY3Rpb25OYW1lKG5vZGUubV9h
c3NpZ24pOwpAQCAtNzk0LDE4ICs4MDYsMjUgQEAgdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0
UHV0Q29uc3RhbnRQcm9wZXJ0eShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWcKIHZv
aWQgUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFNhdmVDb21wdXRlZEZpZWxkTmFtZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBQcm9wZXJ0eU5vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5v
ZGUuaXNDb21wdXRlZENsYXNzRmllbGQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3Bl
cnR5RXhwcjsKIAogICAgIC8vIFRoZSAnbmFtZScgcmVmZXJzIHRvIGEgc3ludGhldGljIG51bWVy
aWMgdmFyaWFibGUgbmFtZSBpbiB0aGUgcHJpdmF0ZSBuYW1lIHNjb3BlLCB3aGVyZSB0aGUgcHJv
cGVydHkga2V5IGlzIHNhdmVkIGZvciBsYXRlciB1c2UuCiAgICAgY29uc3QgSWRlbnRpZmllciYg
ZGVzY3JpcHRpb24gPSAqbm9kZS5uYW1lKCk7CiAgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9y
LnZhcmlhYmxlKGRlc2NyaXB0aW9uKTsKICAgICBBU1NFUlQoIXZhci5sb2NhbCgpKTsKIAotICAg
IHByb3BlcnR5RXhwciA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLm1fZXhwcmVzc2lvbik7Ci0g
ICAgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXRUb1Byb3BlcnR5S2V5
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlFeHByLmdldCgpKTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlFeHByID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUubV9l
eHByZXNzaW9uKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJh
dG9yLmVtaXRUb1Byb3BlcnR5S2V5KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlF
eHByLmdldCgpKTsKKworICAgIGlmIChub2RlLmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAg
ICAgIFJlZjxMYWJlbD4gdmFsaWRQcm9wZXJ0eU5hbWVMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdG90eXBlU3RyaW5nID0gZ2VuZXJh
dG9yLmVtaXRMb2FkKG51bGxwdHIsIEpTVmFsdWUoZ2VuZXJhdG9yLmFkZFN0cmluZ0NvbnN0YW50
KGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKSkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdEp1bXBJZkZhbHNlKGdlbmVyYXRvci5lbWl0QmluYXJ5T3A8T3BFcT4oZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBwcm90b3R5cGVTdHJpbmcuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQo
KSwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnN0cmluZ1R5cGUoKSwgUmVzdWx0VHlwZTo6c3Ry
aW5nVHlwZSgpKSksIHZhbGlkUHJvcGVydHlOYW1lTGFiZWwuZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdFRocm93VHlwZUVycm9yKCJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyBmaWVsZCBu
YW1lZCAncHJvdG90eXBlJyIpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHZhbGlkUHJv
cGVydHlOYW1lTGFiZWwuZ2V0KCkpOworICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBz
Y29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7Ci0gICAgZ2Vu
ZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCB2YXIsIHByb3BlcnR5TmFtZSwgVGhy
b3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbk1vZGU6OkNvbnN0SW5pdGlhbGl6YXRpb24pOwor
ICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFyLCBwcm9wZXJ0eU5h
bWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6YXRpb25Nb2RlOjpDb25zdEluaXRp
YWxpemF0aW9uKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyYWNr
ZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ5MjIs
MTMgKzQ5NDEsMTQgQEAgUmVnaXN0ZXJJRCogQ2xhc3NFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcHJvdG90eXBlTmFtZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIs
IHByb3BlcnR5TmFtZXMucHJvdG90eXBlKTsKICAgICBnZW5lcmF0b3IuZW1pdENhbGxEZWZpbmVQ
cm9wZXJ0eShjb25zdHJ1Y3Rvci5nZXQoKSwgcHJvdG90eXBlTmFtZVJlZ2lzdGVyLmdldCgpLCBw
cm90b3R5cGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIDAsIG1fcG9zaXRpb24pOwogCisgICAg
VmVjdG9yPEpTVGV4dFBvc2l0aW9uPiBzdGF0aWNGaWVsZExvY2F0aW9uczsKICAgICBpZiAobV9j
bGFzc0VsZW1lbnRzKSB7CiAgICAgICAgIG1fY2xhc3NFbGVtZW50cy0+ZW1pdERlY2xhcmVQcml2
YXRlRmllbGROYW1lcyhnZW5lcmF0b3IsIGdlbmVyYXRvci5zY29wZVJlZ2lzdGVyKCkpOwogCiAg
ICAgICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4gaW5zdGFuY2VGaWVsZExvY2F0aW9uczsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXREZWZpbmVDbGFzc0VsZW1lbnRzKG1fY2xhc3NFbGVtZW50cywg
Y29uc3RydWN0b3IuZ2V0KCksIHByb3RvdHlwZS5nZXQoKSwgaW5zdGFuY2VGaWVsZExvY2F0aW9u
cyk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGVmaW5lQ2xhc3NFbGVtZW50cyhtX2NsYXNzRWxl
bWVudHMsIGNvbnN0cnVjdG9yLmdldCgpLCBwcm90b3R5cGUuZ2V0KCksIGluc3RhbmNlRmllbGRM
b2NhdGlvbnMsIHN0YXRpY0ZpZWxkTG9jYXRpb25zKTsKICAgICAgICAgaWYgKCFpbnN0YW5jZUZp
ZWxkTG9jYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGluc3RhbmNlRmllbGRJbml0aWFsaXplciA9IGdlbmVyYXRvci5lbWl0TmV3SW5zdGFuY2VGaWVs
ZEluaXRpYWxpemVyRnVuY3Rpb24oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBXVEZNb3ZlKGlu
c3RhbmNlRmllbGRMb2NhdGlvbnMpLCBtX2NsYXNzSGVyaXRhZ2UpOworICAgICAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGluc3RhbmNlRmllbGRJbml0aWFsaXplciA9IGdlbmVyYXRvci5lbWl0
TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBXVEZNb3ZlKGluc3RhbmNlRmllbGRMb2NhdGlvbnMpLCBtX2NsYXNzSGVyaXRhZ2UpOwogCiAg
ICAgICAgICAgICAvLyBGSVhNRTogU2tpcCB0aGlzIGlmIHRoZSBpbml0aWFsaXplciBmdW5jdGlv
biBpc24ndCBnb2luZyB0byBuZWVkIGEgaG9tZSBvYmplY3QgKG5vIGV2YWwgb3Igc3VwZXIgcHJv
cGVydGllcykKICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTY4NjcKQEAgLTQ5MzgsMTYgKzQ5NTgsMjcgQEAgUmVnaXN0ZXJJRCogQ2xhc3NF
eHByTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX25lZWRzTGV4aWNhbFNjb3BlKSB7
Ci0gICAgICAgIGlmICghbV9uYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBWYXJpYWJsZSBj
bGFzc05hbWVWYXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9uYW1lKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNsYXNzTmFtZVZhci5pc1Jlc29sdmVkKCkpOwotICAgICAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0
ciwgY2xhc3NOYW1lVmFyKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShz
Y29wZS5nZXQoKSwgY2xhc3NOYW1lVmFyLCBjb25zdHJ1Y3Rvci5nZXQoKSwgVGhyb3dJZk5vdEZv
dW5kLCBJbml0aWFsaXphdGlvbk1vZGU6OkluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgfQotICAg
ICAgICBnZW5lcmF0b3IucG9wTGV4aWNhbFNjb3BlKHRoaXMpOworICAgIGlmIChtX25lZWRzTGV4
aWNhbFNjb3BlICYmICFtX25hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgVmFyaWFibGUgY2xhc3NO
YW1lVmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1fbmFtZSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNsYXNzTmFtZVZhci5pc1Jlc29sdmVkKCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBjbGFzc05hbWVW
YXIpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGNsYXNz
TmFtZVZhciwgY29uc3RydWN0b3IuZ2V0KCksIFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6YXRp
b25Nb2RlOjpJbml0aWFsaXphdGlvbik7CisgICAgfQorCisgICAgaWYgKCFzdGF0aWNGaWVsZExv
Y2F0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHN0YXRpY0Zp
ZWxkSW5pdGlhbGl6ZXIgPSBnZW5lcmF0b3IuZW1pdE5ld0NsYXNzRmllbGRJbml0aWFsaXplckZ1
bmN0aW9uKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgV1RGTW92ZShzdGF0aWNGaWVsZExvY2F0
aW9ucyksIG1fY2xhc3NIZXJpdGFnZSk7CisgICAgICAgIC8vIEZJWE1FOiBTa2lwIHRoaXMgaWYg
dGhlIGluaXRpYWxpemVyIGZ1bmN0aW9uIGlzbid0IGdvaW5nIHRvIG5lZWQgYSBob21lIG9iamVj
dCAobm8gZXZhbCBvciBzdXBlciBwcm9wZXJ0aWVzKQorICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2ODY3CisgICAgICAgIGVtaXRQdXRIb21lT2Jq
ZWN0KGdlbmVyYXRvciwgc3RhdGljRmllbGRJbml0aWFsaXplci5nZXQoKSwgY29uc3RydWN0b3Iu
Z2V0KCkpOworCisgICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51bGxwdHIp
OworICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdzLnRoaXNSZWdpc3RlcigpLCBjb25zdHJ1Y3Rv
ci5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIHN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXIuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwg
YXJncywgcG9zaXRpb24oKSwgcG9zaXRpb24oKSwgcG9zaXRpb24oKSwgRGVidWdnYWJsZUNhbGw6
Ok5vKTsKICAgICB9CiAKKyAgICBpZiAobV9uZWVkc0xleGljYWxTY29wZSkKKyAgICAgICAgZ2Vu
ZXJhdG9yLnBvcExleGljYWxTY29wZSh0aGlzKTsKKwogICAgIHJldHVybiBnZW5lcmF0b3IubW92
ZShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGNvbnN0cnVjdG9yLmdldCgpKSwgY29u
c3RydWN0b3IuZ2V0KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBkMTE4YmFjM2Y1ZGEuLmY1ZGNkM2EyZjU5YSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgSlNWYWx1ZSBldmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBFQ01BTW9kZSBlY21hTW8KICAgICB9CiAK
ICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlOwotICAgIGlmIChjYWxsZXJVbmxp
bmtlZENvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZp
ZWxkSW5pdGlhbGl6ZXJNb2RlKQorICAgIGlmIChjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+cGFy
c2VNb2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKQog
ICAgICAgICBldmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Okluc3RhbmNlRmllbGRF
dmFsQ29udGV4dDsKICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uUGFyc2VNb2RlKGNhbGxlclVubGlu
a2VkQ29kZUJsb2NrLT5wYXJzZU1vZGUoKSkpCiAgICAgICAgIGV2YWxDb250ZXh0VHlwZSA9IEV2
YWxDb250ZXh0VHlwZTo6RnVuY3Rpb25FdmFsQ29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZXMuaAppbmRleCBkNzY0NjZmMGFlNTcuLjcwYmE4OTNiM2Q5MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtNzM5LDYgKzczOSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIGlzSW5zdGFuY2VDbGFzc1Byb3BlcnR5KCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Q2xhc3NFbGVtZW50VGFnPihtX2NsYXNzRWxlbWVudFRhZykgPT0gQ2xhc3NF
bGVtZW50VGFnOjpJbnN0YW5jZTsgfQogICAgICAgICBib29sIGlzQ2xhc3NGaWVsZCgpIGNvbnN0
IHsgcmV0dXJuIGlzQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGluZygpOyB9CiAg
ICAgICAgIGJvb2wgaXNJbnN0YW5jZUNsYXNzRmllbGQoKSBjb25zdCB7IHJldHVybiBpc0luc3Rh
bmNlQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGluZygpOyB9CisgICAgICAgIGJv
b2wgaXNTdGF0aWNDbGFzc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gaXNTdGF0aWNDbGFzc1Byb3Bl
cnR5KCkgJiYgIW5lZWRzU3VwZXJCaW5kaW5nKCk7IH0KICAgICAgICAgYm9vbCBpc092ZXJyaWRk
ZW5CeUR1cGxpY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNPdmVycmlkZGVuQnlEdXBsaWNhdGU7
IH0KICAgICAgICAgYm9vbCBpc1ByaXZhdGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiBQcml2
YXRlOyB9CiAgICAgICAgIGJvb2wgaGFzQ29tcHV0ZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9l
eHByZXNzaW9uOyB9CkBAIC03NzUsMTYgKzc3NiwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfQogICAgICAgICBib29sIGhhc0luc3RhbmNlRmllbGRzKCkgY29uc3Q7CiAKKyAgICAgICAg
Ym9vbCBpc1N0YXRpY0NsYXNzRmllbGQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9ub2RlLT5pc1N0YXRpY0NsYXNzRmllbGQoKTsKKyAgICAgICAgfQorCiAgICAgICAg
IHN0YXRpYyBib29sIHNob3VsZENyZWF0ZUxleGljYWxTY29wZUZvckNsYXNzKFByb3BlcnR5TGlz
dE5vZGUqKTsKIAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4q
KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiwgVmVjdG9y
PEpTVGV4dFBvc2l0aW9uPiopOwogCiAgICAgICAgIHZvaWQgZW1pdERlY2xhcmVQcml2YXRlRmll
bGROYW1lcyhCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqIHNjb3BlKTsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QgPSBudWxscHRyKSBmaW5hbAogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEJ5dGVjb2RlKGdlbmVyYXRvciwgZHN0LCBudWxscHRy
LCBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBlbWl0Qnl0ZWNvZGUoZ2VuZXJhdG9yLCBk
c3QsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICB9CiAgICAgICAgIHZvaWQg
ZW1pdFB1dENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiwg
UHJvcGVydHlOb2RlJik7CiAgICAgICAgIHZvaWQgZW1pdFNhdmVDb21wdXRlZEZpZWxkTmFtZShC
eXRlY29kZUdlbmVyYXRvciYsIFByb3BlcnR5Tm9kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwCmluZGV4IGRiNTQwZTk5MWU4My4uOGU1ZWRhYTFhZDU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAgUGFy
c2VyPExleGVyVHlwZT46On5QYXJzZXIoKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJU
eXBlPgotRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlSW5uZXJSZXN1
bHQsIFN0cmluZz4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoY29uc3QgSWRlbnRpZmll
ciYgY2FsbGVlTmFtZSwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgUGFyc2luZ0NvbnRleHQg
cGFyc2luZ0NvbnRleHQsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRl
cnNFbmRQb3NpdGlvbiwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogaW5zdGFuY2VGaWVs
ZExvY2F0aW9ucykKK0V4cGVjdGVkPHR5cGVuYW1lIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZUlu
bmVyUmVzdWx0LCBTdHJpbmc+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKGNvbnN0IElk
ZW50aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFBhcnNpbmdD
b250ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQ
YXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGNsYXNz
RmllbGRMb2NhdGlvbnMpCiB7CiAgICAgQVNUQnVpbGRlciBjb250ZXh0KGNvbnN0X2Nhc3Q8Vk0m
PihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgY29uc3RfY2FzdDxTb3VyY2VDb2RlKj4obV9zb3VyY2Up
KTsKICAgICBTY29wZVJlZiBzY29wZSA9IGN1cnJlbnRTY29wZSgpOwpAQCAtMjIyLDcgKzIyMiw3
IEBAIEV4cGVjdGVkPHR5cGVuYW1lIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZUlubmVyUmVzdWx0
LCBTdHJpbmc+IFBhcnNlcjxMZXhlclR5cGU+CiAgICAgICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxB
U1RCdWlsZGVyPiBmdW5jdGlvbkluZm87CiAgICAgICAgIGlmIChpc0dlbmVyYXRvck9yQXN5bmNG
dW5jdGlvbkJvZHlQYXJzZU1vZGUocGFyc2VNb2RlKSkKICAgICAgICAgICAgIHBhcmFtZXRlcnMg
PSBjcmVhdGVHZW5lcmF0b3JQYXJhbWV0ZXJzKGNvbnRleHQsIGZ1bmN0aW9uSW5mby5wYXJhbWV0
ZXJDb3VudCk7Ci0gICAgICAgIGVsc2UgaWYgKHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6
Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGUpCisgICAgICAgIGVsc2UgaWYgKHBhcnNlTW9k
ZSA9PSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpCiAgICAgICAg
ICAgICBwYXJhbWV0ZXJzID0gY29udGV4dC5jcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJzZUZ1bmN0aW9uUGFyYW1l
dGVycyhjb250ZXh0LCBwYXJzZU1vZGUsIGZ1bmN0aW9uSW5mbyk7CkBAIC0yNTYsOSArMjU2LDkg
QEAgRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlSW5uZXJSZXN1bHQs
IFN0cmluZz4gUGFyc2VyPExleGVyVHlwZT4KICAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0g
cGFyc2VBc3luY0dlbmVyYXRvckZ1bmN0aW9uU291cmNlRWxlbWVudHMoY29udGV4dCwgcGFyc2VN
b2RlLCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiwgQ2hlY2tGb3JTdHJpY3RNb2RlKTsK
ICAgICAgICAgZWxzZSBpZiAocGFyc2luZ0NvbnRleHQgPT0gUGFyc2luZ0NvbnRleHQ6OkZ1bmN0
aW9uQ29uc3RydWN0b3IpCiAgICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBhcnNlU2luZ2xl
RnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlv
bik7Ci0gICAgICAgIGVsc2UgaWYgKHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6Okluc3Rh
bmNlRmllbGRJbml0aWFsaXplck1vZGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbnN0YW5jZUZp
ZWxkTG9jYXRpb25zICYmICFpbnN0YW5jZUZpZWxkTG9jYXRpb25zLT5pc0VtcHR5KCkpOwotICAg
ICAgICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZUluc3RhbmNlRmllbGRJbml0aWFsaXplclNv
dXJjZUVsZW1lbnRzKGNvbnRleHQsICppbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAg
ZWxzZSBpZiAocGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxp
emVyTW9kZSkgeworICAgICAgICAgICAgQVNTRVJUKGNsYXNzRmllbGRMb2NhdGlvbnMgJiYgIWNs
YXNzRmllbGRMb2NhdGlvbnMtPmlzRW1wdHkoKSk7CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50
cyA9IHBhcnNlQ2xhc3NGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoY29udGV4dCwgKmNs
YXNzRmllbGRMb2NhdGlvbnMpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHNvdXJjZUVs
ZW1lbnRzID0gcGFyc2VTb3VyY2VFbGVtZW50cyhjb250ZXh0LCBDaGVja0ZvclN0cmljdE1vZGUp
OwogICAgIH0KQEAgLTIxNzUsNyArMjE3NSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdB
cnRpY2xlRm9yRnVuY3Rpb25Nb2RlKFNvdXJjZVBhcnNlTW9kZSBtb2RlKQogICAgIGNhc2UgU291
cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6TW9k
dWxlQW5hbHl6ZU1vZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Ok1vZHVsZUV2YWx1YXRl
TW9kZToKLSAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVy
TW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9k
ZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
ICIiOwogICAgIH0KQEAgLTIyMTcsNyArMjIxNyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJp
bmdGb3JGdW5jdGlvbk1vZGUoU291cmNlUGFyc2VNb2RlIG1vZGUpCiAgICAgY2FzZSBTb3VyY2VQ
YXJzZU1vZGU6OlByb2dyYW1Nb2RlOgogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVB
bmFseXplTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlRXZhbHVhdGVNb2Rl
OgotICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2Rl
OgorICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlOgog
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gIiI7
CiAgICAgfQpAQCAtMjg3Myw3ICsyODczLDE2IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZUNsYXNzRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyhUCiAg
ICAgVHJlZUV4cHJlc3Npb24gY29uc3RydWN0b3IgPSAwOwogICAgIFRyZWVQcm9wZXJ0eUxpc3Qg
Y2xhc3NFbGVtZW50cyA9IDA7CiAgICAgVHJlZVByb3BlcnR5TGlzdCBjbGFzc0VsZW1lbnRzVGFp
bCA9IDA7Ci0gICAgdW5zaWduZWQgbnVtQ29tcHV0ZWRGaWVsZHMgPSAwOworICAgIC8vIFdlIHN0
b3JlIHRoZSBjb21wdXRlZCBmaWVsZCBwcm9wZXJ0eSBrZXlzIHNlcGFyYXRlZGx5IGZvcgorICAg
IC8vIGluc3RhbmNlIGFuZCBzdGF0aWMgZmllbGRzICh3aXRoIGV2ZW4gYW5kIG9kZCBpbmRleGVz
LAorICAgIC8vIHJlc3BlY3RpdmVseSkuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgcHJvcGVydHkg
bmFtZXMgYXJlCisgICAgLy8gZXZhbHVhdGVkIGluIHNvdXJjZSBjb2RlIG9yZGVyLCBzbyB3ZSBu
ZWVkIGFuIGVhc3kgd2F5IHRvCisgICAgLy8gY3JlYXRlIGFsbCB0aGUgaW5kZXhlcyBub3csIGJ1
dCB0aGUgZmllbGRzIHRoZW1zZWx2ZXMgYXJlCisgICAgLy8gaW5pdGlhbGl6ZWQgaW4gYSBkaWZm
ZXJlbnQgb3JkZXIgKHN0YXRpYyBmaXJzdCwgdGhlbiBpbnN0YW5jZSksCisgICAgLy8gc28gdGhl
cmUgbmVlZHMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgbWVjaGFuaXNtIHRvIHJldHJpZXZlCisg
ICAgLy8gdGhlIHJpZ2h0IGluZGV4IHdpdGhvdXQgdGhlIHdob2xlIGxpc3Qgb2YgZmllbGRzIGlu
IHNvdXJjZSBjb2RlCisgICAgLy8gb3JkZXIuCisgICAgdW5zaWduZWQgbmV4dEluc3RhbmNlQ29t
cHV0ZWRGaWVsZElEID0gMCwgbmV4dFN0YXRpY0NvbXB1dGVkRmllbGRJRCA9IDE7CiAgICAgd2hp
bGUgKCFtYXRjaChDTE9TRUJSQUNFKSkgewogICAgICAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSkg
ewogICAgICAgICAgICAgbmV4dCgpOwpAQCAtMjk4MywxNSArMjk5MiwyMyBAQCBwYXJzZU1ldGhv
ZDoKICAgICAgICAgICAgIHR5cGUgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eU5vZGU6OlR5cGU+KHR5
cGUgfCAoaXNHZXR0ZXIgPyBQcm9wZXJ0eU5vZGU6OkdldHRlciA6IFByb3BlcnR5Tm9kZTo6U2V0
dGVyKSk7CiAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlR2V0dGVyU2V0dGVyKGNvbnRleHQs
IGFsd2F5c1N0cmljdEluc2lkZUNsYXNzLCB0eXBlLCBtZXRob2RTdGFydCwgQ29uc3RydWN0b3JL
aW5kOjpOb25lLCB0YWcpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UocHJvcGVydHksICJDYW5u
b3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKLSAgICAgICAgfSBlbHNlIGlmIChPcHRpb25zOjp1c2VQ
dWJsaWNDbGFzc0ZpZWxkcygpICYmICFtYXRjaChPUEVOUEFSRU4pICYmIHRhZyA9PSBDbGFzc0Vs
ZW1lbnRUYWc6Okluc3RhbmNlICYmIHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhv
ZE1vZGUpIHsKKyAgICAgICAgfSBlbHNlIGlmIChPcHRpb25zOjp1c2VQdWJsaWNDbGFzc0ZpZWxk
cygpICYmICFtYXRjaChPUEVOUEFSRU4pICYmIHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6
Ok1ldGhvZE1vZGUpIHsKICAgICAgICAgICAgIEFTU0VSVCghaXNHZXR0ZXIgJiYgIWlzU2V0dGVy
KTsKICAgICAgICAgICAgIGlmIChpZGVudCkgewogICAgICAgICAgICAgICAgIHNlbWFudGljRmFp
bElmVHJ1ZSgqaWRlbnQgPT0gcHJvcGVydHlOYW1lcy5jb25zdHJ1Y3RvciwgIkNhbm5vdCBkZWNs
YXJlIGNsYXNzIGZpZWxkIG5hbWVkICdjb25zdHJ1Y3RvciciKTsKICAgICAgICAgICAgICAgICBz
ZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50ID09IHByb3BlcnR5TmFtZXMuY29uc3RydWN0b3JQcml2
YXRlRmllbGQsICJDYW5ub3QgZGVjbGFyZSBwcml2YXRlIGNsYXNzIGZpZWxkIG5hbWVkICcjY29u
c3RydWN0b3InIik7CisgICAgICAgICAgICAgICAgaWYgKHRhZyA9PSBDbGFzc0VsZW1lbnRUYWc6
OlN0YXRpYykKKyAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKCppZGVudCA9
PSBwcm9wZXJ0eU5hbWVzLnByb3RvdHlwZSwgIkNhbm5vdCBkZWNsYXJlIGEgc3RhdGljIGZpZWxk
IG5hbWVkICdwcm90b3R5cGUnIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChj
b21wdXRlZFByb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2Vy
QXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKG1fdm0sIG51bUNv
bXB1dGVkRmllbGRzKyspOworICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gQ2xhc3NFbGVtZW50
VGFnOjpJbnN0YW5jZSkgeworICAgICAgICAgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFy
ZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VOdW1lcmljSWRlbnRpZmllcihtX3ZtLCBuZXh0SW5z
dGFuY2VDb21wdXRlZEZpZWxkSUQpOworICAgICAgICAgICAgICAgICAgICBuZXh0SW5zdGFuY2VD
b21wdXRlZEZpZWxkSUQgKz0gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VO
dW1lcmljSWRlbnRpZmllcihtX3ZtLCBuZXh0U3RhdGljQ29tcHV0ZWRGaWVsZElEKTsKKyAgICAg
ICAgICAgICAgICAgICAgbmV4dFN0YXRpY0NvbXB1dGVkRmllbGRJRCArPSAyOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvblJlc3VsdE1hc2sgZGVjbGFyYXRp
b25SZXN1bHQgPSBjbGFzc1Njb3BlLT5kZWNsYXJlTGV4aWNhbFZhcmlhYmxlKGlkZW50LCB0cnVl
KTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGRlY2xhcmF0aW9uUmVzdWx0LCBkZWNs
YXJhdGlvblJlc3VsdCA9PSBEZWNsYXJhdGlvblJlc3VsdDo6VmFsaWQpOwogICAgICAgICAgICAg
ICAgIGNsYXNzU2NvcGUtPnVzZVZhcmlhYmxlKGlkZW50LCBmYWxzZSk7CkBAIC0zMDYyLDEzICsz
MDc5LDE3IEBAIHBhcnNlTWV0aG9kOgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBl
PgotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlSW5zdGFuY2VGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMo
VHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIGluc3Rh
bmNlRmllbGRMb2NhdGlvbnMpCit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3Vy
Y2VFbGVtZW50cyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJT
b3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYgY29udGV4dCwgY29uc3QgVmVjdG9yPEpTVGV4dFBv
c2l0aW9uPiYgY2xhc3NGaWVsZExvY2F0aW9ucykKIHsKICAgICBUcmVlU291cmNlRWxlbWVudHMg
c291cmNlRWxlbWVudHMgPSBjb250ZXh0LmNyZWF0ZVNvdXJjZUVsZW1lbnRzKCk7CiAgICAgY3Vy
cmVudFNjb3BlKCktPnNldElzQ2xhc3NTY29wZSgpOwogCi0gICAgdW5zaWduZWQgbnVtQ29tcHV0
ZWRGaWVsZHMgPSAwOwotICAgIGZvciAoYXV0byBsb2NhdGlvbiA6IGluc3RhbmNlRmllbGRMb2Nh
dGlvbnMpIHsKKyAgICAvLyBQcm9wZXJ0eSBrZXlzIGZvciBjb21wdXRlZCBmaWVsZHMgc3RhcnQg
YXQgMCBmb3IgaW5zdGFuY2UKKyAgICAvLyBmaWVsZHMsIGF0IDEgZm9yIHN0YXRpYyBmaWVsZHMu
IFdlJ2xsIGJ1bXAgdGhlIGNvdW50ZXIgYnkgb25lCisgICAgLy8gaWYgd2UgZXZlciBmaW5kIG9u
ZSBzdGF0aWMgZmllbGQsIHNpbmNlIHRoYXQgbWVhbnMgdGhleSdsbCBhbGwKKyAgICAvLyBiZSBz
dGF0aWMgZmllbGRzLgorICAgIHVuc2lnbmVkIG5leHRDb21wdXRlZEZpZWxkSUQgPSAwOworICAg
IGZvciAoYXV0byBsb2NhdGlvbiA6IGNsYXNzRmllbGRMb2NhdGlvbnMpIHsKICAgICAgICAgLy8g
V2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBoYXNMaW5lVGVybWluYXRvckJlZm9yZVRva2Vu
CiAgICAgICAgIC8vIG9uIGNsYXNzIGZpZWxkcywgc28gd2Ugc2V0IHRoaXMgdmFsdWUgdG8gZmFs
c2UuCiAgICAgICAgIExleGVyU3RhdGUgbGV4ZXJTdGF0ZSB7IGxvY2F0aW9uLm9mZnNldCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihsb2NhdGlvbi5saW5lKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvY2F0aW9u
LmxpbmUpLCBmYWxzZSB9OwpAQCAtMzA3OCw2ICszMDk5LDE3IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlu
c3RhbmNlCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbnVsbHB0cjsKICAgICAg
ICAgVHJlZUV4cHJlc3Npb24gY29tcHV0ZWRQcm9wZXJ0eU5hbWUgPSAwOwogICAgICAgICBEZWZp
bmVGaWVsZE5vZGU6OlR5cGUgdHlwZSA9IERlZmluZUZpZWxkTm9kZTo6VHlwZTo6TmFtZTsKKwor
ICAgICAgICBpZiAobWF0Y2goUkVTRVJWRURfSUZfU1RSSUNUKSAmJiAqbV90b2tlbi5tX2RhdGEu
aWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5zdGF0aWNLZXl3b3JkKSB7CisgICAgICAgICAg
ICBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OworICAgICAgICAgICAgQVNTRVJUKGlkZW50
KTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGlmIChtYXRjaChTRU1JQ09MT04p
IHx8IG1hdGNoIChFUVVBTCkgfHwgbWF0Y2goQ0xPU0VCUkFDRSkgfHwgbV9sZXhlci0+aGFzTGlu
ZVRlcm1pbmF0b3JCZWZvcmVUb2tlbigpKQorICAgICAgICAgICAgICAgIGdvdG8gdmFsaWRGaWVs
ZDsKKyAgICAgICAgICAgIGlmICghbmV4dENvbXB1dGVkRmllbGRJRCkKKyAgICAgICAgICAgICAg
ICBuZXh0Q29tcHV0ZWRGaWVsZElEKys7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG1f
dG9rZW4ubV90eXBlKSB7CiAgICAgICAgIGNhc2UgUFJJVkFURU5BTUU6CiAgICAgICAgICAgICB0
eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpQcml2YXRlTmFtZTsKQEAgLTMxMDUsNyArMzEz
Nyw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlCiAgICAgICAgICAgICBjb21wdXRlZFByb3Bl
cnR5TmFtZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CiAgICAgICAgICAg
ICBmYWlsSWZGYWxzZShjb21wdXRlZFByb3BlcnR5TmFtZSwgIkNhbm5vdCBwYXJzZSBjb21wdXRl
ZCBwcm9wZXJ0eSBuYW1lIik7CiAgICAgICAgICAgICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsKENM
T1NFQlJBQ0tFVCwgIl0iLCAiZW5kIiwgImNvbXB1dGVkIHByb3BlcnR5IG5hbWUiKTsKLSAgICAg
ICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZU51bWVy
aWNJZGVudGlmaWVyKG1fdm0sIG51bUNvbXB1dGVkRmllbGRzKyspOworICAgICAgICAgICAgaWRl
bnQgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZp
ZXIobV92bSwgbmV4dENvbXB1dGVkRmllbGRJRCk7CisgICAgICAgICAgICBuZXh0Q29tcHV0ZWRG
aWVsZElEICs9IDI7CiAgICAgICAgICAgICB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpD
b21wdXRlZE5hbWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTMx
MTQsNiArMzE0Nyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVs
ZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlCiAgICAgICAgICAgICBmYWls
RHVlVG9VbmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgfQogCisgICAgdmFsaWRGaWVsZDoKICAg
ICAgICAgLy8gT25seSB2YWxpZCBjbGFzcyBmaWVsZHMgYXJlIGhhbmRsZWQgaW4gdGhpcyBmdW5j
dGlvbi4KICAgICAgICAgQVNTRVJUKG1hdGNoKEVRVUFMKSB8fCBtYXRjaChTRU1JQ09MT04pIHx8
IG1hdGNoKENMT1NFQlJBQ0UpIHx8IG1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9r
ZW4oKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IDFmNWQ5MzJj
M2Y1Ny4uZDgwYjkyMjc3Y2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgK
QEAgLTI2MCw3ICsyNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2Rl
OjpHZXR0ZXJNb2RlOgogICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6U2V0dGVyTW9kZToK
ICAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGU6Ci0gICAgICAgIGNhc2Ug
U291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOgorICAgICAgICBj
YXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZToKICAgICAgICAg
ICAgIHNldElzRnVuY3Rpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0xNzEyLDcgKzE3
MTIsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNv
dXJjZUVsZW1lbnRzIHBhcnNlQXN5bmNGdW5jdGlvblNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVy
JiwgU291cmNlUGFyc2VNb2RlLCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uLCBT
b3VyY2VFbGVtZW50c01vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVNvdXJjZUVsZW1lbnRzIHBhcnNlQXN5bmNHZW5lcmF0b3JGdW5jdGlvblNvdXJjZUVsZW1lbnRz
KFRyZWVCdWlsZGVyJiwgU291cmNlUGFyc2VNb2RlLCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlF
eHByZXNzaW9uLCBTb3VyY2VFbGVtZW50c01vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNlU2luZ2xlRnVuY3Rpb24oVHJlZUJ1aWxk
ZXImLCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRp
b24pOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRz
IHBhcnNlSW5zdGFuY2VGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXIm
LCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgcGFyc2VDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJT
b3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYsIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4m
KTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VT
dGF0ZW1lbnRMaXN0SXRlbShUcmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3Rp
dmUsIHVuc2lnbmVkKiBkaXJlY3RpdmVMaXRlcmFsTGVuZ3RoKTsKICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1lbnQoVHJlZUJ1aWxkZXIm
LCBjb25zdCBJZGVudGlmaWVyKiYgZGlyZWN0aXZlLCB1bnNpZ25lZCogZGlyZWN0aXZlTGl0ZXJh
bExlbmd0aCA9IG51bGxwdHIpOwogICAgIGVudW0gY2xhc3MgRXhwb3J0VHlwZSB7IEV4cG9ydGVk
LCBOb3RFeHBvcnRlZCB9OwpAQCAtMjA1NSw3ICsyMDU1LDcgQEAgcHJpdmF0ZToKIAogdGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgotc3Rk
Ojp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShQYXJzZXJF
cnJvciYgZXJyb3IsIGNvbnN0IElkZW50aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9k
ZSBwYXJzZU1vZGUsIFBhcnNpbmdDb250ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+
IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZhcmlhYmxl
RW52aXJvbm1lbnQqIHZhcmlhYmxlc1VuZGVyVERaLCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRp
b24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQorc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShQYXJzZXJFcnJvciYgZXJyb3IsIGNvbnN0IElkZW50
aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFBhcnNpbmdDb250
ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJh
bWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHZhcmlhYmxlc1Vu
ZGVyVERaLCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBjbGFzc0ZpZWxkTG9jYXRpb25z
KQogewogICAgIGludCBlcnJMaW5lOwogICAgIFN0cmluZyBlcnJNc2c7CkBAIC0yMDc1LDcgKzIw
NzUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBh
cnNlKFBhcnNlckVycm9yJiBlcnJvciwgY29uc3QgSQogICAgICAgICB2YXJpYWJsZXNVbmRlclRE
Wi0+Y29weVByaXZhdGVOYW1lc1RvKGN1cnJlbnRTY29wZSgpLT5sZXhpY2FsVmFyaWFibGVzKCkp
OwogICAgIH0KIAotICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZUlubmVyKGNhbGxlZU5hbWUs
IHBhcnNlTW9kZSwgcGFyc2luZ0NvbnRleHQsIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJz
RW5kUG9zaXRpb24sIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgIGF1dG8gcGFyc2VSZXN1
bHQgPSBwYXJzZUlubmVyKGNhbGxlZU5hbWUsIHBhcnNlTW9kZSwgcGFyc2luZ0NvbnRleHQsIGZ1
bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNsYXNzRmllbGRMb2NhdGlv
bnMpOwogCiAgICAgaW50IGxpbmVOdW1iZXIgPSBtX2xleGVyLT5saW5lTnVtYmVyKCk7CiAgICAg
Ym9vbCBsZXhFcnJvciA9IG1fbGV4ZXItPnNhd0Vycm9yKCk7CkBAIC0yMTYwLDcgKzIxNjAsNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoCiAgICAgRXZhbENvbnRleHRUeXBl
IGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwKICAgICBEZWJ1Z2dlclBh
cnNlRGF0YSogZGVidWdnZXJQYXJzZURhdGEgPSBudWxscHRyLAogICAgIGNvbnN0IFZhcmlhYmxl
RW52aXJvbm1lbnQqIHZhcmlhYmxlc1VuZGVyVERaID0gbnVsbHB0ciwKLSAgICBjb25zdCBWZWN0
b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zID0gbnVsbHB0ciwKKyAg
ICBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBjbGFzc0ZpZWxkTG9jYXRpb25zID0gbnVs
bHB0ciwKICAgICBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbiA9IGZhbHNlKQogewogICAg
IEFTU0VSVCghc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlzTnVsbCgpKTsKQEAgLTIxNzIs
NyArMjE3Miw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBwYXJzZSgKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcmVzdWx0OwogICAgIGlmIChzb3VyY2UucHJvdmlkZXIo
KS0+c291cmNlKCkuaXM4Qml0KCkpIHsKICAgICAgICAgUGFyc2VyPExleGVyPExDaGFyPj4gcGFy
c2VyKHZtLCBzb3VyY2UsIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBwYXJz
ZU1vZGUsIHN1cGVyQmluZGluZywgZGVmYXVsdENvbnN0cnVjdG9yS2luZEZvclRvcExldmVsRnVu
Y3Rpb24sIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpLCBldmFs
Q29udGV4dFR5cGUsIGRlYnVnZ2VyUGFyc2VEYXRhLCBpc0luc2lkZU9yZGluYXJ5RnVuY3Rpb24p
OwotICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IsIG5hbWUs
IHBhcnNlTW9kZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpID8gUGFyc2luZ0NvbnRleHQ6OkV2
YWwgOiBQYXJzaW5nQ29udGV4dDo6UHJvZ3JhbSwgV1RGOjpudWxsb3B0LCB2YXJpYWJsZXNVbmRl
clREWiwgaW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7CisgICAgICAgIHJlc3VsdCA9IHBhcnNlci5w
YXJzZTxQYXJzZWROb2RlPihlcnJvciwgbmFtZSwgcGFyc2VNb2RlLCBpc0V2YWxOb2RlPFBhcnNl
ZE5vZGU+KCkgPyBQYXJzaW5nQ29udGV4dDo6RXZhbCA6IFBhcnNpbmdDb250ZXh0OjpQcm9ncmFt
LCBXVEY6Om51bGxvcHQsIHZhcmlhYmxlc1VuZGVyVERaLCBjbGFzc0ZpZWxkTG9jYXRpb25zKTsK
ICAgICAgICAgaWYgKHBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUpCiAgICAgICAgICAgICAqcG9z
aXRpb25CZWZvcmVMYXN0TmV3bGluZSA9IHBhcnNlci5wb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5l
KCk7CiAgICAgICAgIGlmIChidWlsdGluTW9kZSA9PSBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpCdWls
dGluKSB7CkBAIC0yMTg1LDcgKzIxODUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4g
cGFyc2UoCiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShkZWZhdWx0
Q29uc3RydWN0b3JLaW5kRm9yVG9wTGV2ZWxGdW5jdGlvbiA9PSBDb25zdHJ1Y3RvcktpbmQ6Ok5v
bmUsICJCdWlsdGluRXhlY3V0YWJsZXMncyBzcGVjaWFsIGNvbnN0cnVjdG9ycyBzaG91bGQgYWx3
YXlzIHVzZSBhIDgtYml0IHN0cmluZyIpOwogICAgICAgICBQYXJzZXI8TGV4ZXI8VUNoYXI+PiBw
YXJzZXIodm0sIHNvdXJjZSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIHBh
cnNlTW9kZSwgc3VwZXJCaW5kaW5nLCBkZWZhdWx0Q29uc3RydWN0b3JLaW5kRm9yVG9wTGV2ZWxG
dW5jdGlvbiwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCksIGV2
YWxDb250ZXh0VHlwZSwgZGVidWdnZXJQYXJzZURhdGEsIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlv
bik7Ci0gICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvciwgbmFt
ZSwgcGFyc2VNb2RlLCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCkgPyBQYXJzaW5nQ29udGV4dDo6
RXZhbCA6IFBhcnNpbmdDb250ZXh0OjpQcm9ncmFtLCBXVEY6Om51bGxvcHQsIHZhcmlhYmxlc1Vu
ZGVyVERaLCBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2Vy
LnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yLCBuYW1lLCBwYXJzZU1vZGUsIGlzRXZhbE5vZGU8UGFy
c2VkTm9kZT4oKSA/IFBhcnNpbmdDb250ZXh0OjpFdmFsIDogUGFyc2luZ0NvbnRleHQ6OlByb2dy
YW0sIFdURjo6bnVsbG9wdCwgdmFyaWFibGVzVW5kZXJURFosIGNsYXNzRmllbGRMb2NhdGlvbnMp
OwogICAgICAgICBpZiAocG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSkKICAgICAgICAgICAgICpw
b3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gcGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xp
bmUoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlck1vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmgK
aW5kZXggNjQxMzEyY2NjOWJjLi40MTUzMDY3ZjY1ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlck1vZGVzLmgKQEAgLTY2LDcgKzY2LDcgQEAgZW51bSBjbGFzcyBTb3Vy
Y2VQYXJzZU1vZGUgOiB1aW50OF90IHsKICAgICBBc3luY0dlbmVyYXRvcldyYXBwZXJGdW5jdGlv
bk1vZGUgPSAxNiwKICAgICBBc3luY0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlICAgPSAxNywK
ICAgICBHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZSAgICAgICAgPSAxOCwKLSAgICBJbnN0YW5j
ZUZpZWxkSW5pdGlhbGl6ZXJNb2RlICAgICAgPSAxOSwKKyAgICBDbGFzc0ZpZWxkSW5pdGlhbGl6
ZXJNb2RlICAgICAgICAgPSAxOSwKIH07CiAKIGNsYXNzIFNvdXJjZVBhcnNlTW9kZVNldCB7IApA
QCAtMTE2LDcgKzExNiw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Z1bmN0aW9uUGFyc2VNb2Rl
KFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5
bmNHZW5lcmF0b3JCb2R5TW9kZSwKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVy
YXRvcldyYXBwZXJGdW5jdGlvbk1vZGUsCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNH
ZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZSwKLSAgICAgICAgU291cmNlUGFyc2VNb2RlOjpJbnN0
YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlKS5jb250YWlucyhwYXJzZU1vZGUpOworICAgICAgICBT
b3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpLmNvbnRhaW5zKHBhcnNl
TW9kZSk7CiB9IAogCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNBc3luY0Z1bmN0aW9uUGFyc2VNb2Rl
KFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCmluZGV4IDIzNjFhZDcxM2JmZi4uMDAw
YmI3MTkwN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvblByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25Qcm90b3R5cGUuY3BwCkBAIC0xMDksNyArMTA5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmoKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2Rl
OjpBcnJvd0Z1bmN0aW9uTW9kZToKLSAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Okluc3Rh
bmNlRmllbGRJbml0aWFsaXplck1vZGU6CisgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpD
bGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlOgogICAgICAgICAgICAgZnVuY3Rpb25IZWFkZXIgPSAi
IjsKICAgICAgICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCmluZGV4IDg4ZDUzNjlhNDkxMS4uNzM1ZjQwOTk1MGI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcApAQCAtNDI2LDcgKzQy
Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTRnVuY3Rpb246OmNhbGxlckdldHRlcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWCiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6
OkFzeW5jR2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNl
TW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZToKICAgICBjYXNlIFNvdXJjZVBh
cnNlTW9kZTo6R2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGU6Ci0gICAgY2FzZSBTb3VyY2VQYXJz
ZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGU6CisgICAgY2FzZSBTb3VyY2VQYXJz
ZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU6CiAgICAgICAgIGlmICghZnVuY3Rpb24t
PmpzRXhlY3V0YWJsZSgpLT5pc0luU3RyaWN0Q29udGV4dCgpKQogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjYWxsZXIpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJGdW5jdGlvbi5jYWxsZXIgdXNl
ZCB0byByZXRyaWV2ZSBzdHJpY3QgY2FsbGVyIl9zKSk7Ci0tIAoyLjI2LjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412412</attachid>
            <date>2020-10-27 05:20:56 -0700</date>
            <delta_ts>2020-11-15 01:02:16 -0800</delta_ts>
            <desc>Add support for static public fields, v7</desc>
            <filename>0001-JSC-Add-support-for-static-public-class-fields.patch</filename>
            <type>text/plain</type>
            <size>71537</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBlMTUzMjgyNDI2NDcwOGUwMTU5NjRhNzQ3MGE2MzlhY2E0MzU3ZjY1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/WGFuPTIwTD1DMz1CM3Blej89IDx4YW5AaWdh
bGlhLmNvbT4KRGF0ZTogVGh1LCAxNiBBcHIgMjAyMCAxODoyMToxMyArMDIwMApTdWJqZWN0OiBb
UEFUQ0hdIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcwog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5NQoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpKU1Rlc3RzOgoKRW5hYmxlIHN0YXRpYyBwdWJsaWMgZmllbGRz
LCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJvbSB0aGUKVjggcHJvamVjdC4gQWxzbyBz
cGxpdCB0aGUgc3VwcG9ydCBjb2RlIGludG8gYSBzZXBhcmF0ZSBmaWxlCihoYXJtb255LXN1cHBv
cnQuanMpIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgoKKiB0ZXN0MjYyL2NvbmZpZy55YW1sOiBlbmFi
bGUgc3RhdGljIHB1YmxpYyBmaWVsZHMuCiogc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255Lmpz
OgoqIHN0cmVzcy9jbGFzcy1maWVsZHMtc3RhdGljLWhhcm1vbnkuanM6IEFkZGVkLgoobG9hZC5D
KToKKGxvYWQpOgooYXNzZXJ0RXF1YWxzLkMuaGFzT3duUHJvcGVydHkpOgooYXNzZXJ0RXF1YWxz
LkMpOgooYXNzZXJ0RXF1YWxzKToKKGFzc2VydEVxdWFscy5DLmQpOgooYXNzZXJ0RXF1YWxzLkMu
ZSk6Cihhc3NlcnRFcXVhbHMuQy5jKToKKGFzc2VydEVxdWFscy5sZXQuZCk6CihDKToKKEMuYy5B
KToKKEMuYyk6CihDLmMuQyk6Cihhc3NlcnRFcXVhbHMuQi5zZXQgZCk6Cihhc3NlcnRFcXVhbHMu
Qik6Cihhc3NlcnRFcXVhbHMuQy5ydW4pOgooeC4pOgooeC5DLnJ1bik6Cih4LkMpOgooeCk6Cihw
cm90b3R5cGUueCk6Cihwcm90b3R5cGUueC5DLnByb3RvdHlwZS5ydW4pOgoocHJvdG90eXBlLngu
Qy5ydW4pOgoocHJvdG90eXBlLnguQyk6Cih5Lik6Cih5LkMucHJvdG90eXBlLnJ1bik6Cih5LkMu
cnVuKToKKHkuQyk6Cih5KToKKHByb3RvdHlwZS55LkMpOgoocHJvdG90eXBlLnkuRCk6Cihhc3Nl
cnRFcXVhbHMuQy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpOgooYXNzZXJ0RXF1YWxzLlgucCk6
Cihhc3NlcnRFcXVhbHMuWCk6CihYLnQpOgooWCk6Ciogc3RyZXNzL2hhcm1vbnktc3VwcG9ydC5q
czogQWRkZWQuCihjbGFzc09mKToKKGRlZXBPYmplY3RFcXVhbHMpOgooZGVlcEVxdWFscyk6Cihm
YWlsKToKKGFzc2VydEluc3RhbmNlb2YpOgooYXNzZXJ0RXF1YWxzKToKKGFzc2VydE5vdEVxdWFs
cyk6Cihhc3NlcnRUcnVlKToKKGFzc2VydEZhbHNlKToKKGFzc2VydFRocm93cyk6CgpTb3VyY2Uv
SmF2YVNjcmlwdENvcmU6CgpBZGQgc3VwcG9ydCBmb3Igc3RhdGljIHB1YmxpYyBjbGFzcyBmaWVs
ZHMuIFdlIGNhbiByZXVzZSBtb3N0IG9mCnRoZSBleGlzdGluZyBtYWNoaW5lcnkgYXZhaWxhYmxl
IGZvciBpbnN0YW5jZSBmaWVsZHMsIHdpdGggYQpjb3VwbGUgb2YgaXNzdWVzIHRoYXQgbWVyaXQg
c3BlY2lhbCBjb21tZW50OgoKU3RhdGljIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIGxpa2UgaW5z
dGFuY2UgZmllbGRzLCB3aXRoIGEKc3ludGhldGljIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUgdG8g
YWxsb3cgdXMgdG8gdHJpdmlhbGx5IGZvbGxvdwp0aGUgc2NvcGluZyBydWxlcyBpbiB0aGUgc3Bl
Yy4gQXMgaXQgaGFwcGVucyB3aXRoIGluc3RhbmNlIGZpZWxkcwp0aGlzIGNvdWxkIGJlIGlubGlu
ZWQgaW4gYSBmdXR1cmUgcGF0Y2guCgoqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcDoKKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKiBieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgoqIGJ5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHA6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVs
ZEluaXRpYWxpemVyRnVuY3Rpb24pOgoqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
OgoqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2Rl
OjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVk
RmllbGROYW1lKToKKEpTQzo6RGVmaW5lRmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpD
bGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgoqIHBhcnNlci9BU1RCdWlsZGVyLmg6CihKU0M6
OkFTVEJ1aWxkZXI6OmNyZWF0ZURlZmluZUZpZWxkKToKKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9y
cy5oOgooSlNDOjpEZWZpbmVGaWVsZE5vZGU6OkRlZmluZUZpZWxkTm9kZSk6CiogcGFyc2VyL05v
ZGVzLmg6CiogcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUlubmVyKToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MpOgooSlNDOjpQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50
cyk6CiogcGFyc2VyL1BhcnNlci5oOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UpOgoo
SlNDOjpwYXJzZSk6CiogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKEpTQzo6U3ludGF4Q2hlY2tl
cjo6Y3JlYXRlRGVmaW5lRmllbGQpOgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpT
RnVuY3Rpb246OnNldEZ1bmN0aW9uTmFtZSk6CgoqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmNwcDoKKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToK
KiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgoqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcik6CihKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRp
YWxpemVyRnVuY3Rpb24pOgooSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWRBcnJvd0Z1
bmN0aW9uTGV4aWNhbEVudmlyb25tZW50KToKKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaDoKKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKEpTQzo6ZW1pdEhvbWVPYmpl
Y3RGb3JDYWxsZWUpOgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlND
OjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1lKToKKEpTQzo6RGVm
aW5lRmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgooSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0
ZWNvZGUpOgoqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKEpTQzo6ZXZhbCk6CiogcGFy
c2VyL05vZGVzLmg6CiogcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUlubmVyKToKKEpTQzo6c3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZSk6CihKU0M6
OnN0cmluZ0ZvckZ1bmN0aW9uTW9kZSk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNs
YXNzKToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NGaWVsZEluaXRpYWxpemVy
U291cmNlRWxlbWVudHMpOgoqIHBhcnNlci9QYXJzZXIuaDoKKEpTQzo6U2NvcGU6OnNldFNvdXJj
ZVBhcnNlTW9kZSk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZSk6CihKU0M6OnBhcnNl
KToKKiBwYXJzZXIvUGFyc2VyTW9kZXMuaDoKKEpTQzo6aXNGdW5jdGlvblBhcnNlTW9kZSk6Ciog
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CihKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jVG9T
dHJpbmcpOgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpTRnVuY3Rpb246OmNhbGxl
ckdldHRlcik6Ci0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgIDYyICsrKwogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanMgICAg
ICAgIHwgMTY1ICstLS0tLQogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJt
b255LmpzIHwgNTAzICsrKysrKysrKysrKysrKysrKwogSlNUZXN0cy9zdHJlc3MvaGFybW9ueS1z
dXBwb3J0LmpzICAgICAgICAgICAgIHwgMTk2ICsrKysrKysKIEpTVGVzdHMvdGVzdDI2Mi9jb25m
aWcueWFtbCAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZyAgICAgICAgICAgICAgIHwgIDc4ICsrKwogLi4uL2J5dGVjb2RlL1VubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlLmNwcCAgIHwgICA0ICstCiAuLi4vYnl0ZWNvZGUvVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUuaCAgICAgfCAgMTIgKy0KIC4uLi9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwICAgICAgICB8ICAxMiArLQogLi4uL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oICAgICAgICAgIHwgICA2ICstCiAuLi4vYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAgICAgICAgICAgICAgfCAgNjUgKystCiAuLi4vaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwICAgICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZXMuaCAgICAgICAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwICAgICAgIHwgIDQ2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5oICAgICAgICAgfCAgMTQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyTW9kZXMuaCAgICB8ICAgNCArLQogLi4uL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwICAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcCAgfCAgIDIgKy0KIDE4IGZpbGVzIGNoYW5nZWQsIDk1OSBpbnNlcnRpb25z
KCspLCAyMjYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy9zdHJlc3Mv
Y2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0
cy9zdHJlc3MvaGFybW9ueS1zdXBwb3J0LmpzCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA5NTcxMjg5MzczNTcuLmFmMWQ3NGY1NzMyZSAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw2NSBAQAorMjAyMC0wNi0wNSAgWGFuIEzDs3BleiAgPHhhbkBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxk
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxl
IHN0YXRpYyBwdWJsaWMgZmllbGRzLCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJvbSB0
aGUKKyAgICAgICAgVjggcHJvamVjdC4gQWxzbyBzcGxpdCB0aGUgc3VwcG9ydCBjb2RlIGludG8g
YSBzZXBhcmF0ZSBmaWxlCisgICAgICAgIChoYXJtb255LXN1cHBvcnQuanMpIHRvIGF2b2lkIGR1
cGxpY2F0aW9uLgorCisgICAgICAgICogdGVzdDI2Mi9jb25maWcueWFtbDogZW5hYmxlIHN0YXRp
YyBwdWJsaWMgZmllbGRzLgorICAgICAgICAqIHN0cmVzcy9jbGFzcy1maWVsZHMtaGFybW9ueS5q
czoKKyAgICAgICAgKiBzdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGxvYWQuQyk6CisgICAgICAgIChsb2FkKToKKyAgICAgICAgKGFzc2VydEVx
dWFscy5DLmhhc093blByb3BlcnR5KToKKyAgICAgICAgKGFzc2VydEVxdWFscy5DKToKKyAgICAg
ICAgKGFzc2VydEVxdWFscyk6CisgICAgICAgIChhc3NlcnRFcXVhbHMuQy5kKToKKyAgICAgICAg
KGFzc2VydEVxdWFscy5DLmUpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkMuYyk6CisgICAgICAg
IChhc3NlcnRFcXVhbHMubGV0LmQpOgorICAgICAgICAoQyk6CisgICAgICAgIChDLmMuQSk6Cisg
ICAgICAgIChDLmMpOgorICAgICAgICAoQy5jLkMpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkIu
c2V0IGQpOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLkIpOgorICAgICAgICAoYXNzZXJ0RXF1YWxz
LkMucnVuKToKKyAgICAgICAgKHguKToKKyAgICAgICAgKHguQy5ydW4pOgorICAgICAgICAoeC5D
KToKKyAgICAgICAgKHgpOgorICAgICAgICAocHJvdG90eXBlLngpOgorICAgICAgICAocHJvdG90
eXBlLnguQy5wcm90b3R5cGUucnVuKToKKyAgICAgICAgKHByb3RvdHlwZS54LkMucnVuKToKKyAg
ICAgICAgKHByb3RvdHlwZS54LkMpOgorICAgICAgICAoeS4pOgorICAgICAgICAoeS5DLnByb3Rv
dHlwZS5ydW4pOgorICAgICAgICAoeS5DLnJ1bik6CisgICAgICAgICh5LkMpOgorICAgICAgICAo
eSk6CisgICAgICAgIChwcm90b3R5cGUueS5DKToKKyAgICAgICAgKHByb3RvdHlwZS55LkQpOgor
ICAgICAgICAoYXNzZXJ0RXF1YWxzLkMucHJvdG90eXBlLmhhc093blByb3BlcnR5KToKKyAgICAg
ICAgKGFzc2VydEVxdWFscy5YLnApOgorICAgICAgICAoYXNzZXJ0RXF1YWxzLlgpOgorICAgICAg
ICAoWC50KToKKyAgICAgICAgKFgpOgorICAgICAgICAqIHN0cmVzcy9oYXJtb255LXN1cHBvcnQu
anM6IEFkZGVkLgorICAgICAgICAoY2xhc3NPZik6CisgICAgICAgIChkZWVwT2JqZWN0RXF1YWxz
KToKKyAgICAgICAgKGRlZXBFcXVhbHMpOgorICAgICAgICAoZmFpbCk6CisgICAgICAgIChhc3Nl
cnRJbnN0YW5jZW9mKToKKyAgICAgICAgKGFzc2VydEVxdWFscyk6CisgICAgICAgIChhc3NlcnRO
b3RFcXVhbHMpOgorICAgICAgICAoYXNzZXJ0VHJ1ZSk6CisgICAgICAgIChhc3NlcnRGYWxzZSk6
CisgICAgICAgIChhc3NlcnRUaHJvd3MpOgorCiAyMDIwLTEwLTI0ICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0VDTUEtNDAyXSBJbXBsZW1lbnQgSW50bC5M
aXN0Rm9ybWF0CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtaGFybW9u
eS5qcyBiL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255LmpzCmluZGV4IGRiZjQ2
ZDUyN2IxZS4uMDY5Njg0OWVlNmNlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9jbGFzcy1m
aWVsZHMtaGFybW9ueS5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtaGFybW9u
eS5qcwpAQCAtMzEsMTcwICszMSw3IEBACiAKICJ1c2Ugc3RyaWN0IjsKIAotZnVuY3Rpb24gY2xh
c3NPZihvYmplY3QpIHsKLSAgIC8vIEFyZ3VtZW50IG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZp
bmVkLgotICAgdmFyIHN0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmpl
Y3QpOwotICAgLy8gU3RyaW5nIGhhcyBmb3JtYXQgW29iamVjdCA8Q2xhc3NOYW1lPl0uCi0gICBy
ZXR1cm4gc3RyaW5nLnN1YnN0cmluZyg4LCBzdHJpbmcubGVuZ3RoIC0gMSk7Ci19Ci0KLS8qKgot
ICogQ29tcGFyZXMgdHdvIG9iamVjdHMgZm9yIGtleS92YWx1ZSBlcXVhbGl0eS4KLSAqIFJldHVy
bnMgdHJ1ZSBpZiB0aGV5IGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgotICovCi1mdW5jdGlv
biBkZWVwT2JqZWN0RXF1YWxzKGEsIGIpIHsKLSAgdmFyIGFQcm9wcyA9IE9iamVjdC5rZXlzKGEp
OwotICBhUHJvcHMuc29ydCgpOwotICB2YXIgYlByb3BzID0gT2JqZWN0LmtleXMoYik7Ci0gIGJQ
cm9wcy5zb3J0KCk7Ci0gIGlmICghZGVlcEVxdWFscyhhUHJvcHMsIGJQcm9wcykpIHsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0KLSAgZm9yICh2YXIgaSA9IDA7IGkgPCBhUHJvcHMubGVuZ3RoOyBp
KyspIHsKLSAgICBpZiAoIWRlZXBFcXVhbHMoYVthUHJvcHNbaV1dLCBiW2FQcm9wc1tpXV0pKSB7
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0v
KioKLSAqIENvbXBhcmVzIHR3byBKYXZhU2NyaXB0IHZhbHVlcyBmb3IgdHlwZSBhbmQgdmFsdWUg
ZXF1YWxpdHkuCi0gKiBJdCBjaGVja3MgaW50ZXJuYWxzIG9mIGFycmF5cyBhbmQgb2JqZWN0cy4K
LSAqLwotZnVuY3Rpb24gZGVlcEVxdWFscyhhLCBiKSB7Ci0gIGlmIChhID09PSBiKSB7Ci0gICAg
Ly8gQ2hlY2sgZm9yIC0wLgotICAgIGlmIChhID09PSAwKSByZXR1cm4gKDEgLyBhKSA9PT0gKDEg
LyBiKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBpZiAodHlwZW9mIGEgIT0gdHlwZW9mIGIp
IHJldHVybiBmYWxzZTsKLSAgaWYgKHR5cGVvZiBhID09ICdudW1iZXInKSByZXR1cm4gaXNOYU4o
YSkgJiYgaXNOYU4oYik7Ci0gIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGEg
IT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTsKLSAgLy8gTmVpdGhlciBhIG5vciBiIGlzIHBy
aW1pdGl2ZS4KLSAgdmFyIG9iamVjdENsYXNzID0gY2xhc3NPZihhKTsKLSAgaWYgKG9iamVjdENs
YXNzICE9PSBjbGFzc09mKGIpKSByZXR1cm4gZmFsc2U7Ci0gIGlmIChvYmplY3RDbGFzcyA9PT0g
J1JlZ0V4cCcpIHsKLSAgICAvLyBGb3IgUmVnRXhwLCBqdXN0IGNvbXBhcmUgcGF0dGVybiBhbmQg
ZmxhZ3MgdXNpbmcgaXRzIHRvU3RyaW5nLgotICAgIHJldHVybiAoYS50b1N0cmluZygpID09PSBi
LnRvU3RyaW5nKCkpOwotICB9Ci0gIC8vIEZ1bmN0aW9ucyBhcmUgb25seSBpZGVudGljYWwgdG8g
dGhlbXNlbHZlcy4KLSAgaWYgKG9iamVjdENsYXNzID09PSAnRnVuY3Rpb24nKSByZXR1cm4gZmFs
c2U7Ci0gIGlmIChvYmplY3RDbGFzcyA9PT0gJ0FycmF5JykgewotICAgIHZhciBlbGVtZW50Q291
bnQgPSAwOwotICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgewotICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKLSAg
ICAgIGlmICghZGVlcEVxdWFscyhhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQotICBpZiAob2JqZWN0Q2xhc3MgPT0gJ1N0cmluZycgfHwgb2Jq
ZWN0Q2xhc3MgPT0gJ051bWJlcicgfHwKLSAgICAgIG9iamVjdENsYXNzID09ICdCb29sZWFuJyB8
fCBvYmplY3RDbGFzcyA9PSAnRGF0ZScpIHsKLSAgICBpZiAoYS52YWx1ZU9mKCkgIT09IGIudmFs
dWVPZigpKSByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIGRlZXBPYmplY3RFcXVhbHMoYSwg
Yik7Ci19Ci0KLS8qKgotICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBjb250YWluaW5nIHRoZSB1c2Vy
X21lc3NhZ2UgKGlmIGFueSkgYW5kIHRoZSB2YWx1ZXMuCi0gKi8KLWZ1bmN0aW9uIGZhaWwoZXhw
ZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2UgPSAnJykgewotICAvLyBUT0RPKGNpcmEpOiBSZXBs
YWNlIFN0cmluZyB3aXRoIFByZXR0eVByaW50IGZvciBvYmplY3RzIGFuZCBhcnJheXMuCi0gIHZh
ciBtZXNzYWdlID0gJ0ZhaWx1cmUnICsgKHVzZXJfbWVzc2FnZSA/ICcgKCcgKyB1c2VyX21lc3Nh
Z2UgKyAnKScgOiAnJykgKwotICAgICAgJzogZXhwZWN0ZWQgPCcgKyBTdHJpbmcoZXhwZWN0ZWQp
ICsgJz4sIGZvdW5kIDwnICsgU3RyaW5nKGZvdW5kKSArICc+Lic7Ci0gIHRocm93IG5ldyBFcnJv
cihtZXNzYWdlKTsKLX0KLQotLyoqCi0gKiBUaHJvd3MgaWYgb2JqIGlzIG5vdCBvZiBnaXZlbiB0
eXBlLgotICovCi1mdW5jdGlvbiBhc3NlcnRJbnN0YW5jZW9mKG9iaiwgdHlwZSkgewotICBpZiAo
IShvYmogaW5zdGFuY2VvZiB0eXBlKSkgewotICAgIHZhciBhY3R1YWxUeXBlTmFtZSA9IG51bGw7
Ci0gICAgdmFyIGFjdHVhbENvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaiku
Y29uc3RydWN0b3I7Ci0gICAgaWYgKHR5cGVvZiBhY3R1YWxDb25zdHJ1Y3RvciA9PSAiZnVuY3Rp
b24iKSB7Ci0gICAgICBhY3R1YWxUeXBlTmFtZSA9IGFjdHVhbENvbnN0cnVjdG9yLm5hbWUgfHwg
U3RyaW5nKGFjdHVhbENvbnN0cnVjdG9yKTsKLSAgICB9Ci0gICAgdGhyb3cgbmV3IEVycm9yKCdP
YmplY3QgPCcgKyBvYmogKyAnPiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgPCcgKwotICAgICAgICAg
ICAgICAgICAgICAodHlwZS5uYW1lIHx8IHR5cGUpICsgJz4nICsKLSAgICAgICAgICAgICAgICAg
ICAgKGFjdHVhbFR5cGVOYW1lID8gJyBidXQgb2YgPCAnICsgYWN0dWFsVHlwZU5hbWUgKyAnPicg
OiAnJykpOwotICB9Ci19Ci0KLS8qKgotICogVGhyb3dzIGlmIG9iaiBpcyBub3QgdGhlIHNhbWUg
YXMgZXhwZWN0ZWQuCi0gKi8KLWZ1bmN0aW9uIGFzc2VydFNhbWUoZXhwZWN0ZWQsIGZvdW5kLCBu
YW1lX29wdCkgewotICBpZiAoZm91bmQgPT09IGV4cGVjdGVkKSB7Ci0gICAgaWYgKGV4cGVjdGVk
ICE9PSAwIHx8ICgxIC8gZXhwZWN0ZWQpID09PSAoMSAvIGZvdW5kKSkKLSAgICAgIHJldHVybjsK
LSAgfSBlbHNlIGlmICgoZXhwZWN0ZWQgIT09IGV4cGVjdGVkKSAmJiAoZm91bmQgIT09IGZvdW5k
KSkgewotICAgICAgcmV0dXJuOwotICB9Ci0gIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29w
dCk7Ci19Ci0KLS8qKgotICogVGhyb3dzIGlmIHR3byB2YXJpYWJsZXMgaGF2ZSBkaWZmZXJlbnQg
dHlwZXMgb3IgdmFsdWVzLgotICovCi0KLWZ1bmN0aW9uIGFzc2VydEVxdWFscyhleHBlY3RlZCwg
Zm91bmQsIHVzZXJfbWVzc2FnZSA9ICcnKSB7Ci0gIGlmICghZGVlcEVxdWFscyhleHBlY3RlZCwg
Zm91bmQpKSB7Ci0gICAgZmFpbChleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSk7Ci0gIH0K
LX0KLQotLyoqCi0gKiBUaHJvd3MgaWYgdHdvIHZhcmlhYmxlcyBoYXZlIGVxdWFsIHR5cGVzIG9y
IHZhbHVlcy4KLSAqLwotCi1mdW5jdGlvbiBhc3NlcnROb3RFcXVhbHMoZXhwZWN0ZWQsIGZvdW5k
LCB1c2VyX21lc3NhZ2UgPSAnJykgewotICBpZiAoZGVlcEVxdWFscyhleHBlY3RlZCwgZm91bmQp
KSB7Ci0gICAgZmFpbChleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSk7Ci0gIH0KLX0KLQot
LyoqCi0gKiBUaHJvd3MgaWYgdmFsdWUgaXMgZmFsc2UuCi0gKi8KLWZ1bmN0aW9uIGFzc2VydFRy
dWUodmFsdWUsIHVzZXJfbWVzc2FnZSA9ICcnKSB7Ci0gIGFzc2VydEVxdWFscyh0cnVlLCB2YWx1
ZSwgdXNlcl9tZXNzYWdlKTsKLX0KLQotCi0vKioKLSAqIFRocm93cyBpZiB2YWx1ZSBpcyB0cnVl
LgotICovCi1mdW5jdGlvbiBhc3NlcnRGYWxzZSh2YWx1ZSwgdXNlcl9tZXNzYWdlID0gJycpIHsK
LSAgYXNzZXJ0RXF1YWxzKGZhbHNlLCB2YWx1ZSwgdXNlcl9tZXNzYWdlKTsKLX0KLQotLyoqCi0g
KiBSdW5zIGNvZGUoKSBhbmQgYXNzZXJ0cyB0aGF0IGl0IHRocm93cyB0aGUgc3BlY2lmaWVkIGV4
Y2VwdGlvbi4KLSAqLwotZnVuY3Rpb24gYXNzZXJ0VGhyb3dzKGNvZGUsIHR5cGVfb3B0LCBjYXVz
ZV9vcHQpIHsKLSAgdHJ5IHsKLSAgICBpZiAodHlwZW9mIGNvZGUgPT0gJ2Z1bmN0aW9uJykgewot
ICAgICAgY29kZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBldmFsKGNvZGUpOwotICAgIH0KLSAg
fSBjYXRjaCAoZSkgewotICAgIGlmICh0eXBlb2YgdHlwZV9vcHQgPT0gJ2Z1bmN0aW9uJykgewot
ICAgICAgYXNzZXJ0SW5zdGFuY2VvZihlLCB0eXBlX29wdCk7Ci0gICAgfQotICAgIGlmIChhcmd1
bWVudHMubGVuZ3RoID49IDMpIHsKLSAgICAgIGFzc2VydEVxdWFscyhjYXVzZV9vcHQsIGUudHlw
ZSwgJ3Rocm93biBleGNlcHRpb24gdHlwZSBtaXNtYXRjaCcpOwotICAgIH0KLSAgICAvLyBTdWNj
ZXNzLgotICAgIHJldHVybjsKLSAgfQotICB2YXIgZXhwZWN0ZWQgPSBhcmd1bWVudHMubGVuZ3Ro
ID49IDMgPyBjYXVzZV9vcHQgOgotICAgICAgdHlwZW9mIHR5cGVfb3B0ID09ICdmdW5jdGlvbicg
PyB0eXBlX29wdCA6ICdhbnkgZXhjZXB0aW9uJzsKLSAgZmFpbChleHBlY3RlZCwgJ25vIGV4Y2Vw
dGlvbicsICdleHBlY3RlZCB0aHJvd24gZXhjZXB0aW9uJyk7Ci19Citsb2FkKCIuL2hhcm1vbnkt
c3VwcG9ydC5qcyIpOwogCiB7CiAgIGNsYXNzIEMgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzIGIvSlNUZXN0cy9zdHJlc3MvY2xhc3Mt
ZmllbGRzLXN0YXRpYy1oYXJtb255LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMC4uOTg2NzRiNTFmOWEyCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
Y2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzCkBAIC0wLDAgKzEsNTAzIEBACisvL0AgcmVx
dWlyZU9wdGlvbnMoIi0tdXNlUHVibGljQ2xhc3NGaWVsZHM9MSIpCisvL0AgZGVmYXVsdE5vRWFn
ZXJSdW4KKworLy8gQ29weXJpZ2h0IDIwMTcgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKworLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAg
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAg
ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisidXNlIHN0cmljdCI7CisKK2xvYWQoIi4v
aGFybW9ueS1zdXBwb3J0LmpzIik7CisKK3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGE7Cisg
IH0KKworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmEpOworICBsZXQgZGVzY3JpcHRvciA9
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQywgJ2EnKTsKKyAgYXNzZXJ0VHJ1ZShD
Lmhhc093blByb3BlcnR5KCdhJykpOworICBhc3NlcnRUcnVlKGRlc2NyaXB0b3Iud3JpdGFibGUp
OworICBhc3NlcnRUcnVlKGRlc2NyaXB0b3IuZW51bWVyYWJsZSk7CisgIGFzc2VydFRydWUoZGVz
Y3JpcHRvci5jb25maWd1cmFibGUpOworCisgIGxldCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFs
cyh1bmRlZmluZWQsIGMuYSk7Cit9CisKK3sKKyAgbGV0IHggPSAnYSc7CisgIGNsYXNzIEMgewor
ICAgIHN0YXRpYyBhOworICAgIHN0YXRpYyBoYXNPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gMTsgfQorICAgIHN0YXRpYyBiID0geDsKKyAgICBzdGF0aWMgYyA9IDE7CisgIH0KKwor
ICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmEpOworICBhc3NlcnRFcXVhbHMoJ2EnLCBDLmIp
OworICBhc3NlcnRFcXVhbHMoMSwgQy5jKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuaGFzT3duUHJv
cGVydHkoKSk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwg
Yy5hKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5iKTsKKyAgYXNzZXJ0RXF1YWxzKHVu
ZGVmaW5lZCwgYy5jKTsKK30KKworeworICBhc3NlcnRUaHJvd3MoKCkgPT4geworICAgIGNsYXNz
IEMgeworICAgICAgc3RhdGljIHggPSBPYmplY3QuZnJlZXplKHRoaXMpOworICAgICAgc3RhdGlj
IGMgPSA0MjsKKyAgICB9CisgIH0sIFR5cGVFcnJvcik7Cit9CisKK3sKKyAgY2xhc3MgQyB7Cisg
ICAgc3RhdGljIGMgPSB0aGlzOworICAgIHN0YXRpYyBkID0gKCkgPT4gdGhpczsKKyAgfQorCisg
IGFzc2VydEVxdWFscyhDLCBDLmMpOworICBhc3NlcnRFcXVhbHMoQywgQy5kKCkpOworCisgIGxl
dCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYyk7CisgIGFzc2VydEVx
dWFscyh1bmRlZmluZWQsIGMuZCk7Cit9CisKK3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMg
PSAxOworICAgIHN0YXRpYyBkID0gdGhpcy5jOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEsIEMu
Yyk7CisgIGFzc2VydEVxdWFscygxLCBDLmQpOworCisgIGxldCBjID0gbmV3IEM7CisgIGFzc2Vy
dEVxdWFscyh1bmRlZmluZWQsIGMuYyk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuZCk7
Cit9CisKK3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGIgPSAxOworICAgIHN0YXRpYyBjID0g
KCkgPT4gdGhpcy5iOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYik7CisgIGFzc2VydEVx
dWFscygxLCBDLmMoKSk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVm
aW5lZCwgYy5jKTsKK30KKworeworICBsZXQgeCA9ICdhJzsKKyAgY2xhc3MgQyB7CisgICAgc3Rh
dGljIGIgPSAxOworICAgIHN0YXRpYyBjID0gKCkgPT4gdGhpcy5iOworICAgIHN0YXRpYyBlID0g
KCkgPT4geDsKKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBDLmIpOworICBhc3NlcnRFcXVhbHMo
J2EnLCBDLmUoKSk7CisKKyAgbGV0IGEgPSB7YiA6IDIgfTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMu
Yy5jYWxsKGEpKTsKKworICBsZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVk
LCBjLmIpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmMpOworfQorCit7CisgIGxldCB4
ID0gJ2EnOworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYyA9IDE7CisgICAgc3RhdGljIGQgPSBm
dW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuYzsgfTsKKyAgICBzdGF0aWMgZSA9IGZ1bmN0aW9uKCkg
eyByZXR1cm4geDsgfTsKKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBDLmMpOworICBhc3NlcnRF
cXVhbHMoMSwgQy5kKCkpOworICBhc3NlcnRFcXVhbHMoJ2EnLCBDLmUoKSk7CisKKyAgQy5jID0g
MjsKKyAgYXNzZXJ0RXF1YWxzKDIsIEMuZCgpKTsKKworICBsZXQgYSA9IHtjIDogMyB9OworICBh
c3NlcnRFcXVhbHMoMywgQy5kLmNhbGwoYSkpOworCisgIGFzc2VydFRocm93cyhDLmQuYmluZCh1
bmRlZmluZWQpKTsKKworICBsZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVk
LCBjLmMpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmQpOworICBhc3NlcnRFcXVhbHMo
dW5kZWZpbmVkLCBjLmUpOworfQorCit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBjID0gZnVu
Y3Rpb24oKSB7IHJldHVybiAxIH07CisgIH0KKworICBhc3NlcnRFcXVhbHMoJ2MnLCBDLmMubmFt
ZSk7Cit9CisKK3sKKyAgbGV0IGQgPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldy50YXJnZXQ7IH0K
KyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSBkOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKHVu
ZGVmaW5lZCwgQy5jKCkpOworICBhc3NlcnRFcXVhbHMobmV3IGQsIG5ldyBDLmMoKSk7Cit9CisK
K3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSAoKSA9PiBuZXcudGFyZ2V0OworICB9CisK
KyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5jKCkpOworfQorCit7CisgICBjbGFzcyBDIHsK
KyAgICAgc3RhdGljIGMgPSAoKSA9PiB7CisgICAgICAgbGV0IGI7CisgICAgICAgY2xhc3MgQSB7
CisgICAgICAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAgICAgYiA9IG5ldy50YXJnZXQ7Cisg
ICAgICAgICB9CisgICAgICAgfTsKKyAgICAgICBuZXcgQTsKKyAgICAgICBhc3NlcnRFcXVhbHMo
QSwgYik7CisgICAgIH0KKyAgfQorCisgIEMuYygpOworfQorCit7CisgIGNsYXNzIEMgeworICAg
IHN0YXRpYyBjID0gbmV3LnRhcmdldDsKKyAgfQorCisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQs
IEMuYyk7Cit9CisKK3sKKyAgY2xhc3MgQiB7CisgICAgc3RhdGljIGQgPSAxOworICAgIHN0YXRp
YyBiID0gKCkgPT4gdGhpcy5kOworICB9CisKKyAgY2xhc3MgQyBleHRlbmRzIEIgeworICAgIHN0
YXRpYyBjID0gc3VwZXIuZDsKKyAgICBzdGF0aWMgZCA9ICgpID0+IHN1cGVyLmQ7CisgICAgc3Rh
dGljIGUgPSAoKSA9PiBzdXBlci5iKCk7CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwgQy5jKTsK
KyAgYXNzZXJ0RXF1YWxzKDEsIEMuZCgpKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuZSgpKTsKK30K
KworeworICBsZXQgZm9vID0gdW5kZWZpbmVkOworICBjbGFzcyBCIHsKKyAgICBzdGF0aWMgc2V0
IGQoeCkgeworICAgICAgZm9vID0geDsKKyAgICB9CisgIH0KKworICBjbGFzcyBDIGV4dGVuZHMg
QiB7CisgICAgc3RhdGljIGQgPSAyOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwg
Zm9vKTsKKyAgYXNzZXJ0RXF1YWxzKDIsIEMuZCk7Cit9CisKKworeworICBsZXQgQyAgPSBjbGFz
cyB7CisgICAgc3RhdGljIGM7CisgIH07CisKKyAgYXNzZXJ0RXF1YWxzKCJDIiwgQy5uYW1lKTsK
K30KKworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYyA9IG5ldyBDOworICB9CisKKyAgYXNz
ZXJ0VHJ1ZShDLmMgaW5zdGFuY2VvZiBDKTsKK30KKworKGZ1bmN0aW9uIHRlc3QoKSB7CisgIGZ1
bmN0aW9uIG1ha2VDKCkgeworICAgIHZhciB4ID0gMTsKKworICAgIHJldHVybiBjbGFzcyB7Cisg
ICAgICBzdGF0aWMgYSA9ICgpID0+ICgpID0+IHg7CisgICAgfQorICB9CisKKyAgbGV0IEMgPSBt
YWtlQygpOworICBsZXQgZiA9IEMuYSgpOworICBhc3NlcnRFcXVhbHMoMSwgZigpKTsKK30pKCkK
KworeworICBsZXQgYyA9ICJjIjsKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIFsiYSJdID0gMTsK
KyAgICBzdGF0aWMgWyJiIl07CisgICAgc3RhdGljIFtjXTsKKyAgfQorCisgIGFzc2VydEVxdWFs
cygxLCBDLmEpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmIpOworICBhc3NlcnRFcXVh
bHModW5kZWZpbmVkLCBDW2NdKTsKK30KKworeworICBsZXQgbG9nID0gW107CisgIGZ1bmN0aW9u
IHJ1bihpKSB7CisgICAgbG9nLnB1c2goaSk7CisgICAgcmV0dXJuIGk7CisgIH0KKworICBjbGFz
cyBDIHsKKyAgICBzdGF0aWMgW3J1bigxKV0gPSBydW4oNik7CisgICAgc3RhdGljIFtydW4oMild
ID0gcnVuKDcpOworICAgIFtydW4oMyldKCkgeyBydW4oOSk7fQorICAgIHN0YXRpYyBbcnVuKDQp
XSA9IHJ1big4KTsKKyAgICBzdGF0aWMgW3J1big1KV0oKSB7IHRocm93IG5ldyBFcnJvcignc2hv
dWxkIG5vdCBleGVjdXRlJyk7fTsKKyAgfQorCisgIGxldCBjID0gbmV3IEM7CisgIGNbM10oKTsK
KyAgYXNzZXJ0RXF1YWxzKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XSwgbG9nKTsKK30KKwor
CisKK2Z1bmN0aW9uIHgoKSB7CisKKyAgLy8gVGhpcyB0ZXN0cyBsYXp5IHBhcnNpbmcuCisgIHJl
dHVybiBmdW5jdGlvbigpIHsKKyAgICBsZXQgbG9nID0gW107CisgICAgZnVuY3Rpb24gcnVuKGkp
IHsKKyAgICAgIGxvZy5wdXNoKGkpOworICAgICAgcmV0dXJuIGk7CisgICAgfQorCisgICAgY2xh
c3MgQyB7CisgICAgICBzdGF0aWMgW3J1bigxKV0gPSBydW4oNik7CisgICAgICBzdGF0aWMgW3J1
bigyKV0gPSBydW4oNyk7CisgICAgICBbcnVuKDMpXSgpIHsgcnVuKDkpO30KKyAgICAgIHN0YXRp
YyBbcnVuKDQpXSA9IHJ1big4KTsKKyAgICAgIHN0YXRpYyBbcnVuKDUpXSgpIHsgdGhyb3cgbmV3
IEVycm9yKCdzaG91bGQgbm90IGV4ZWN1dGUnKTt9OworICAgIH0KKworICAgIGxldCBjID0gbmV3
IEM7CisgICAgY1szXSgpOworICAgIGFzc2VydEVxdWFscyhbMSwgMiwgMywgNCwgNSwgNiwgNywg
OCwgOV0sIGxvZyk7CisgIH0KK30KK3goKSgpOworCit7CisgIGxldCBsb2cgPSBbXTsKKyAgZnVu
Y3Rpb24gcnVuKGkpIHsKKyAgICBsb2cucHVzaChpKTsKKyAgICByZXR1cm4gaTsKKyAgfQorCisg
IGNsYXNzIEMgeworICAgIFtydW4oMSldID0gcnVuKDcpOworICAgIFtydW4oMildID0gcnVuKDgp
OworICAgIFtydW4oMyldKCkgeyBydW4oOSk7fQorICAgIHN0YXRpYyBbcnVuKDQpXSA9IHJ1big2
KTsKKyAgICBbcnVuKDUpXSgpIHsgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgbm90IGV4ZWN1dGUn
KTt9OworICB9CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgY1szXSgpOworICBhc3NlcnRFcXVhbHMo
WzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldLCBsb2cpOworfQorCitmdW5jdGlvbiB5KCkgewor
ICAvLyBUaGlzIHRlc3RzIGxhenkgcGFyc2luZy4KKyAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAg
IGxldCBsb2cgPSBbXTsKKyAgICBmdW5jdGlvbiBydW4oaSkgeworICAgICAgbG9nLnB1c2goaSk7
CisgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICBjbGFzcyBDIHsKKyAgICAgIFtydW4oMSld
ID0gcnVuKDcpOworICAgICAgW3J1bigyKV0gPSBydW4oOCk7CisgICAgICBbcnVuKDMpXSgpIHsg
cnVuKDkpO30KKyAgICAgIHN0YXRpYyBbcnVuKDQpXSA9IHJ1big2KTsKKyAgICAgIFtydW4oNSld
KCkgeyB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgZXhlY3V0ZScpO307CisgICAgfQorCisg
ICAgbGV0IGMgPSBuZXcgQzsKKyAgICBjWzNdKCk7CisgICAgYXNzZXJ0RXF1YWxzKFsxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5XSwgbG9nKTsKKyAgfQorfQoreSgpKCk7CisKK3sKKyAgY2xhc3Mg
QyB7fQorICBjbGFzcyBEIHsKKyAgICBzdGF0aWMgW0NdOworICB9CisKKyAgYXNzZXJ0VGhyb3dz
KCgpID0+IHsgY2xhc3MgWCB7IHN0YXRpYyBbWF0gfSB9KTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVm
aW5lZCwgRFtDXSk7Cit9CisKK3sKKyAgZnVuY3Rpb24gdCgpIHsKKyAgICByZXR1cm4gY2xhc3Mg
eworICAgICAgc3RhdGljIFsneCddID0gMjsKKyAgICB9CisgIH0KKworICBsZXQga2xhc3MgPSB0
KCk7CisgIGxldCBvYmogPSBuZXcga2xhc3M7CisgIGFzc2VydEVxdWFscygyLCBrbGFzcy54KTsK
K30KKworeworICBsZXQgeCA9ICdhJzsKKyAgY2xhc3MgQyB7CisgICAgYTsKKyAgICBiID0geDsK
KyAgICBjID0gMTsKKyAgICBoYXNPd25Qcm9wZXJ0eSgpIHsgcmV0dXJuIDE7fQorICAgIHN0YXRp
YyBbeF0gPSAyOworICAgIHN0YXRpYyBiID0gMzsKKyAgICBzdGF0aWMgZDsKKyAgfQorCisgIGFz
c2VydEVxdWFscygyLCBDLmEpOworICBhc3NlcnRFcXVhbHMoMywgQy5iKTsKKyAgYXNzZXJ0RXF1
YWxzKHVuZGVmaW5lZCwgQy5kKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5jKTsKKwor
ICBsZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmEpOworICBhc3Nl
cnRFcXVhbHMoJ2EnLCBjLmIpOworICBhc3NlcnRFcXVhbHMoMSwgYy5jKTsKKyAgYXNzZXJ0RXF1
YWxzKHVuZGVmaW5lZCwgYy5kKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGMuaGFzT3duUHJvcGVydHko
KSk7Cit9CisKK3sKKyAgZnVuY3Rpb24gdCgpIHsKKyAgICByZXR1cm4gY2xhc3MgeworICAgICAg
Wyd4J10gPSAxOworICAgICAgc3RhdGljIFsneCddID0gMjsKKyAgICB9CisgIH0KKworICBsZXQg
a2xhc3MgPSB0KCk7CisgIGxldCBvYmogPSBuZXcga2xhc3M7CisgIGFzc2VydEVxdWFscygxLCBv
YmoueCk7CisgIGFzc2VydEVxdWFscygyLCBrbGFzcy54KTsKK30KKworCit7CisgIGNsYXNzIFgg
eworICAgIHN0YXRpYyBwID0gZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHNbMF07IH0KKyAg
fQorCisgIGFzc2VydEVxdWFscygxLCBYLnAoMSkpOworfQorCit7CisgIGNsYXNzIFggeworICAg
IHN0YXRpYyB0ID0gKCkgPT4geworICAgICAgZnVuY3Rpb24gcCgpIHsgcmV0dXJuIGFyZ3VtZW50
c1swXTsgfTsKKyAgICAgIHJldHVybiBwOworICAgIH0KKyAgfQorCisgIGxldCBwID0gWC50KCk7
CisgIGFzc2VydEVxdWFscygxLCBwKDEpKTsKK30KKworeworICBjbGFzcyBYIHsKKyAgICBzdGF0
aWMgdCA9ICgpID0+IHsKKyAgICAgIGZ1bmN0aW9uIHAoKSB7IHJldHVybiBldmFsKCJhcmd1bWVu
dHNbMF0iKTsgfTsKKyAgICAgIHJldHVybiBwOworICAgIH0KKyAgfQorCisgIGxldCBwID0gWC50
KCk7CisgIGFzc2VydEVxdWFscygxLCBwKDEpKTsKK30KKworeworICBjbGFzcyBYIHsKKyAgICBz
dGF0aWMgcCA9IGV2YWwoIihmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50c1swXTsgfSkoMSki
KTsKKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBYLnApOworfQorCisvKgoreworICBsZXQgcCA9
IHsgejogY2xhc3MgeyBzdGF0aWMgeSA9IHRoaXMubmFtZSB9IH0KKyAgYXNzZXJ0RXF1YWxzKHAu
ei55LCAneicpOworCisgIGxldCBxID0geyBbInoiXTogY2xhc3MgeyBzdGF0aWMgeSA9IHRoaXMu
bmFtZSB9IH0KKyAgYXNzZXJ0RXF1YWxzKHEuei55LCAneicpOworCisgIGNvbnN0IEMgPSBjbGFz
cyB7CisgICAgc3RhdGljIHggPSB0aGlzLm5hbWU7CisgIH0KKyAgYXNzZXJ0RXF1YWxzKEMueCwg
J0MnKTsKK30KKyovCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9oYXJtb255LXN1cHBvcnQu
anMgYi9KU1Rlc3RzL3N0cmVzcy9oYXJtb255LXN1cHBvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wMjRiM2IwODg5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9K
U1Rlc3RzL3N0cmVzcy9oYXJtb255LXN1cHBvcnQuanMKQEAgLTAsMCArMSwxOTYgQEAKKy8vIENv
cHlyaWdodCAyMDE3IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisKKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
Ly8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8g
ICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAg
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBjbGFzc09mKG9iamVj
dCkgeworICAgLy8gQXJndW1lbnQgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuCisgICB2
YXIgc3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCk7CisgICAv
LyBTdHJpbmcgaGFzIGZvcm1hdCBbb2JqZWN0IDxDbGFzc05hbWU+XS4KKyAgIHJldHVybiBzdHJp
bmcuc3Vic3RyaW5nKDgsIHN0cmluZy5sZW5ndGggLSAxKTsKK30KKworLyoqCisgKiBDb21wYXJl
cyB0d28gb2JqZWN0cyBmb3Iga2V5L3ZhbHVlIGVxdWFsaXR5LgorICogUmV0dXJucyB0cnVlIGlm
IHRoZXkgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Z1bmN0aW9uIGRlZXBPYmpl
Y3RFcXVhbHMoYSwgYikgeworICB2YXIgYVByb3BzID0gT2JqZWN0LmtleXMoYSk7CisgIGFQcm9w
cy5zb3J0KCk7CisgIHZhciBiUHJvcHMgPSBPYmplY3Qua2V5cyhiKTsKKyAgYlByb3BzLnNvcnQo
KTsKKyAgaWYgKCFkZWVwRXF1YWxzKGFQcm9wcywgYlByb3BzKSkgeworICAgIHJldHVybiBmYWxz
ZTsKKyAgfQorICBmb3IgKHZhciBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykgeworICAg
IGlmICghZGVlcEVxdWFscyhhW2FQcm9wc1tpXV0sIGJbYVByb3BzW2ldXSkpIHsKKyAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogQ29t
cGFyZXMgdHdvIEphdmFTY3JpcHQgdmFsdWVzIGZvciB0eXBlIGFuZCB2YWx1ZSBlcXVhbGl0eS4K
KyAqIEl0IGNoZWNrcyBpbnRlcm5hbHMgb2YgYXJyYXlzIGFuZCBvYmplY3RzLgorICovCitmdW5j
dGlvbiBkZWVwRXF1YWxzKGEsIGIpIHsKKyAgaWYgKGEgPT09IGIpIHsKKyAgICAvLyBDaGVjayBm
b3IgLTAuCisgICAgaWYgKGEgPT09IDApIHJldHVybiAoMSAvIGEpID09PSAoMSAvIGIpOworICAg
IHJldHVybiB0cnVlOworICB9CisgIGlmICh0eXBlb2YgYSAhPSB0eXBlb2YgYikgcmV0dXJuIGZh
bHNlOworICBpZiAodHlwZW9mIGEgPT0gJ251bWJlcicpIHJldHVybiBpc05hTihhKSAmJiBpc05h
TihiKTsKKyAgaWYgKHR5cGVvZiBhICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYSAhPT0gJ2Z1bmN0
aW9uJykgcmV0dXJuIGZhbHNlOworICAvLyBOZWl0aGVyIGEgbm9yIGIgaXMgcHJpbWl0aXZlLgor
ICB2YXIgb2JqZWN0Q2xhc3MgPSBjbGFzc09mKGEpOworICBpZiAob2JqZWN0Q2xhc3MgIT09IGNs
YXNzT2YoYikpIHJldHVybiBmYWxzZTsKKyAgaWYgKG9iamVjdENsYXNzID09PSAnUmVnRXhwJykg
eworICAgIC8vIEZvciBSZWdFeHAsIGp1c3QgY29tcGFyZSBwYXR0ZXJuIGFuZCBmbGFncyB1c2lu
ZyBpdHMgdG9TdHJpbmcuCisgICAgcmV0dXJuIChhLnRvU3RyaW5nKCkgPT09IGIudG9TdHJpbmco
KSk7CisgIH0KKyAgLy8gRnVuY3Rpb25zIGFyZSBvbmx5IGlkZW50aWNhbCB0byB0aGVtc2VsdmVz
LgorICBpZiAob2JqZWN0Q2xhc3MgPT09ICdGdW5jdGlvbicpIHJldHVybiBmYWxzZTsKKyAgaWYg
KG9iamVjdENsYXNzID09PSAnQXJyYXknKSB7CisgICAgdmFyIGVsZW1lbnRDb3VudCA9IDA7Cisg
ICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKCFk
ZWVwRXF1YWxzKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworICB9CisgIGlmIChvYmplY3RDbGFzcyA9PSAnU3RyaW5nJyB8fCBvYmplY3RDbGFzcyA9
PSAnTnVtYmVyJyB8fAorICAgICAgb2JqZWN0Q2xhc3MgPT0gJ0Jvb2xlYW4nIHx8IG9iamVjdENs
YXNzID09ICdEYXRlJykgeworICAgIGlmIChhLnZhbHVlT2YoKSAhPT0gYi52YWx1ZU9mKCkpIHJl
dHVybiBmYWxzZTsKKyAgfQorICByZXR1cm4gZGVlcE9iamVjdEVxdWFscyhhLCBiKTsKK30KKwor
LyoqCisgKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgdGhlIHVzZXJfbWVzc2FnZSAo
aWYgYW55KSBhbmQgdGhlIHZhbHVlcy4KKyAqLworZnVuY3Rpb24gZmFpbChleHBlY3RlZCwgZm91
bmQsIHVzZXJfbWVzc2FnZSA9ICcnKSB7CisgIC8vIFRPRE8oY2lyYSk6IFJlcGxhY2UgU3RyaW5n
IHdpdGggUHJldHR5UHJpbnQgZm9yIG9iamVjdHMgYW5kIGFycmF5cy4KKyAgdmFyIG1lc3NhZ2Ug
PSAnRmFpbHVyZScgKyAodXNlcl9tZXNzYWdlID8gJyAoJyArIHVzZXJfbWVzc2FnZSArICcpJyA6
ICcnKSArCisgICAgICAnOiBleHBlY3RlZCA8JyArIFN0cmluZyhleHBlY3RlZCkgKyAnPiwgZm91
bmQgPCcgKyBTdHJpbmcoZm91bmQpICsgJz4uJzsKKyAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2Up
OworfQorCisvKioKKyAqIFRocm93cyBpZiBvYmogaXMgbm90IG9mIGdpdmVuIHR5cGUuCisgKi8K
K2Z1bmN0aW9uIGFzc2VydEluc3RhbmNlb2Yob2JqLCB0eXBlKSB7CisgIGlmICghKG9iaiBpbnN0
YW5jZW9mIHR5cGUpKSB7CisgICAgdmFyIGFjdHVhbFR5cGVOYW1lID0gbnVsbDsKKyAgICB2YXIg
YWN0dWFsQ29uc3RydWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKS5jb25zdHJ1Y3Rv
cjsKKyAgICBpZiAodHlwZW9mIGFjdHVhbENvbnN0cnVjdG9yID09ICJmdW5jdGlvbiIpIHsKKyAg
ICAgIGFjdHVhbFR5cGVOYW1lID0gYWN0dWFsQ29uc3RydWN0b3IubmFtZSB8fCBTdHJpbmcoYWN0
dWFsQ29uc3RydWN0b3IpOworICAgIH0KKyAgICB0aHJvdyBuZXcgRXJyb3IoJ09iamVjdCA8JyAr
IG9iaiArICc+IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiA8JyArCisgICAgICAgICAgICAgICAgICAg
ICh0eXBlLm5hbWUgfHwgdHlwZSkgKyAnPicgKworICAgICAgICAgICAgICAgICAgICAoYWN0dWFs
VHlwZU5hbWUgPyAnIGJ1dCBvZiA8ICcgKyBhY3R1YWxUeXBlTmFtZSArICc+JyA6ICcnKSk7Cisg
IH0KK30KKworLyoqCisgKiBUaHJvd3MgaWYgb2JqIGlzIG5vdCB0aGUgc2FtZSBhcyBleHBlY3Rl
ZC4KKyAqLworZnVuY3Rpb24gYXNzZXJ0U2FtZShleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7
CisgIGlmIChmb3VuZCA9PT0gZXhwZWN0ZWQpIHsKKyAgICBpZiAoZXhwZWN0ZWQgIT09IDAgfHwg
KDEgLyBleHBlY3RlZCkgPT09ICgxIC8gZm91bmQpKQorICAgICAgcmV0dXJuOworICB9IGVsc2Ug
aWYgKChleHBlY3RlZCAhPT0gZXhwZWN0ZWQpICYmIChmb3VuZCAhPT0gZm91bmQpKSB7CisgICAg
ICByZXR1cm47CisgIH0KKyAgZmFpbChleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KTsKK30KKwor
LyoqCisgKiBUaHJvd3MgaWYgdHdvIHZhcmlhYmxlcyBoYXZlIGRpZmZlcmVudCB0eXBlcyBvciB2
YWx1ZXMuCisgKi8KKworZnVuY3Rpb24gYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgdXNl
cl9tZXNzYWdlID0gJycpIHsKKyAgaWYgKCFkZWVwRXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsK
KyAgICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlKTsKKyAgfQorfQorCisvKioK
KyAqIFRocm93cyBpZiB0d28gdmFyaWFibGVzIGhhdmUgZXF1YWwgdHlwZXMgb3IgdmFsdWVzLgor
ICovCisKK2Z1bmN0aW9uIGFzc2VydE5vdEVxdWFscyhleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVz
c2FnZSA9ICcnKSB7CisgIGlmIChkZWVwRXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsKKyAgICBm
YWlsKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlKTsKKyAgfQorfQorCisvKioKKyAqIFRo
cm93cyBpZiB2YWx1ZSBpcyBmYWxzZS4KKyAqLworZnVuY3Rpb24gYXNzZXJ0VHJ1ZSh2YWx1ZSwg
dXNlcl9tZXNzYWdlID0gJycpIHsKKyAgYXNzZXJ0RXF1YWxzKHRydWUsIHZhbHVlLCB1c2VyX21l
c3NhZ2UpOworfQorCisKKy8qKgorICogVGhyb3dzIGlmIHZhbHVlIGlzIHRydWUuCisgKi8KK2Z1
bmN0aW9uIGFzc2VydEZhbHNlKHZhbHVlLCB1c2VyX21lc3NhZ2UgPSAnJykgeworICBhc3NlcnRF
cXVhbHMoZmFsc2UsIHZhbHVlLCB1c2VyX21lc3NhZ2UpOworfQorCisvKioKKyAqIFJ1bnMgY29k
ZSgpIGFuZCBhc3NlcnRzIHRoYXQgaXQgdGhyb3dzIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uLgor
ICovCitmdW5jdGlvbiBhc3NlcnRUaHJvd3MoY29kZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgewor
ICB0cnkgeworICAgIGlmICh0eXBlb2YgY29kZSA9PSAnZnVuY3Rpb24nKSB7CisgICAgICBjb2Rl
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGV2YWwoY29kZSk7CisgICAgfQorICB9IGNhdGNoIChl
KSB7CisgICAgaWYgKHR5cGVvZiB0eXBlX29wdCA9PSAnZnVuY3Rpb24nKSB7CisgICAgICBhc3Nl
cnRJbnN0YW5jZW9mKGUsIHR5cGVfb3B0KTsKKyAgICB9CisgICAgaWYgKGFyZ3VtZW50cy5sZW5n
dGggPj0gMykgeworICAgICAgYXNzZXJ0RXF1YWxzKGNhdXNlX29wdCwgZS50eXBlLCAndGhyb3du
IGV4Y2VwdGlvbiB0eXBlIG1pc21hdGNoJyk7CisgICAgfQorICAgIC8vIFN1Y2Nlc3MuCisgICAg
cmV0dXJuOworICB9CisgIHZhciBleHBlY3RlZCA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMyA/IGNh
dXNlX29wdCA6CisgICAgICB0eXBlb2YgdHlwZV9vcHQgPT0gJ2Z1bmN0aW9uJyA/IHR5cGVfb3B0
IDogJ2FueSBleGNlcHRpb24nOworICBmYWlsKGV4cGVjdGVkLCAnbm8gZXhjZXB0aW9uJywgJ2V4
cGVjdGVkIHRocm93biBleGNlcHRpb24nKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvdGVzdDI2
Mi9jb25maWcueWFtbCBiL0pTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbAppbmRleCBiOTE0OTY3
YmRiNzAuLjg3ZjBlZTQ3MzMzMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55
YW1sCisrKyBiL0pTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbApAQCAtNiw2ICs2LDcgQEAgZmxh
Z3M6CiAgIGNsYXNzLWZpZWxkcy1wdWJsaWM6IHVzZVB1YmxpY0NsYXNzRmllbGRzCiAgIGNsYXNz
LWZpZWxkcy1wcml2YXRlOiB1c2VQcml2YXRlQ2xhc3NGaWVsZHMKICAgSW50bC5EYXRlVGltZUZv
cm1hdC1kYXlQZXJpb2Q6IHVzZUludGxEYXRlVGltZUZvcm1hdERheVBlcmlvZAorICBjbGFzcy1z
dGF0aWMtZmllbGRzLXB1YmxpYzogdXNlUHVibGljQ2xhc3NGaWVsZHMKIHNraXA6CiAgIGZlYXR1
cmVzOgogICAgIC0gU2hhcmVkQXJyYXlCdWZmZXIKQEAgLTE3LDcgKzE4LDYgQEAgc2tpcDoKIAog
ICAgIC0gYXJiaXRyYXJ5LW1vZHVsZS1uYW1lc3BhY2UtbmFtZXMKICAgICAtIGNsYXNzLW1ldGhv
ZHMtcHJpdmF0ZQotICAgIC0gY2xhc3Mtc3RhdGljLWZpZWxkcy1wdWJsaWMKICAgICAtIGNsYXNz
LXN0YXRpYy1maWVsZHMtcHJpdmF0ZQogICAgIC0gY2xhc3Mtc3RhdGljLW1ldGhvZHMtcHJpdmF0
ZQogICAgIC0gY2xlYW51cFNvbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDE4MWNkMGM2
N2E2OC4uMTlkZmJmOGM5ZDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4
MSBAQAorMjAyMC0wNi0wNSAgWGFuIEzDs3BleiAgPHhhbkBpZ2FsaWEuY29tPgorCisgICAgICAg
IFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDk1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IHN0YXRpYyBwdWJsaWMgY2xhc3MgZmllbGRzLiBXZSBjYW4gcmV1c2UgbW9zdCBvZgorICAgICAg
ICB0aGUgZXhpc3RpbmcgbWFjaGluZXJ5IGF2YWlsYWJsZSBmb3IgaW5zdGFuY2UgZmllbGRzLCB3
aXRoIGEKKyAgICAgICAgY291cGxlIG9mIGlzc3VlcyB0aGF0IG1lcml0IHNwZWNpYWwgY29tbWVu
dDoKKworICAgICAgICBTdGF0aWMgZmllbGRzIGFyZSBpbml0aWFsaXplZCwgbGlrZSBpbnN0YW5j
ZSBmaWVsZHMsIHdpdGggYQorICAgICAgICBzeW50aGV0aWMgZnVuY3Rpb24uIFRoaXMgaXMgZG9u
ZSB0byBhbGxvdyB1cyB0byB0cml2aWFsbHkgZm9sbG93CisgICAgICAgIHRoZSBzY29waW5nIHJ1
bGVzIGluIHRoZSBzcGVjLiBBcyBpdCBoYXBwZW5zIHdpdGggaW5zdGFuY2UgZmllbGRzCisgICAg
ICAgIHRoaXMgY291bGQgYmUgaW5saW5lZCBpbiBhIGZ1dHVyZSBwYXRjaC4KKworICAgICAgICAq
IGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6
Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24pOgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2ZUNvbXB1dGVkRmllbGROYW1l
KToKKyAgICAgICAgKEpTQzo6RGVmaW5lRmllbGROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAg
ICAoSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIHBhcnNlci9B
U1RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZURlZmluZUZpZWxk
KToKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpE
ZWZpbmVGaWVsZE5vZGU6OkRlZmluZUZpZWxkTm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVz
Lmg6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZUlubmVyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46
OnBhcnNlQ2xhc3MpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbnN0
YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyk6CisgICAgICAgICogcGFyc2VyL1Bh
cnNlci5oOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UpOgorICAgICAg
ICAoSlNDOjpwYXJzZSk6CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAg
ICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6Y3JlYXRlRGVmaW5lRmllbGQpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnNldEZ1bmN0
aW9uTmFtZSk6CisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayk6
CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdE5ld0NsYXNzRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGlj
YWxFbnZpcm9ubWVudCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
Lmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChK
U0M6OmVtaXRIb21lT2JqZWN0Rm9yQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1p
dFNhdmVDb21wdXRlZEZpZWxkTmFtZSk6CisgICAgICAgIChKU0M6OkRlZmluZUZpZWxkTm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2xhc3NFeHByTm9kZTo6ZW1pdEJ5dGVjb2Rl
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6
OmV2YWwpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAqIHBhcnNlci9QYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcik6Cisg
ICAgICAgIChKU0M6OnN0cmluZ0FydGljbGVGb3JGdW5jdGlvbk1vZGUpOgorICAgICAgICAoSlND
OjpzdHJpbmdGb3JGdW5jdGlvbk1vZGUpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VDbGFzcyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNs
YXNzRmllbGRJbml0aWFsaXplclNvdXJjZUVsZW1lbnRzKToKKyAgICAgICAgKiBwYXJzZXIvUGFy
c2VyLmg6CisgICAgICAgIChKU0M6OlNjb3BlOjpzZXRTb3VyY2VQYXJzZU1vZGUpOgorICAgICAg
ICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpwYXJzZSk6
CisgICAgICAgICogcGFyc2VyL1BhcnNlck1vZGVzLmg6CisgICAgICAgIChKU0M6OmlzRnVuY3Rp
b25QYXJzZU1vZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50
aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxsZXJHZXR0
ZXIpOgorCiAyMDIwLTEwLTIxICBYYW4gTMOzcGV6ICA8eGFuQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0pTQ10gVXNlIHN5bWJvbHMgYXMgaWRlbnRpZmllcnMgZm9yIGNsYXNzIGZpZWxkcyBjb21w
dXRlZCBuYW1lcyBzdG9yYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAppbmRleCA0NjFkOWZh
ZGQ0OGIuLmFkMTg5OWY2ZWM4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCkBAIC01Niw5
ICs1Niw5IEBAIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZVVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2soCiAgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUg
PSBleGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4dCgpID8gSlNQYXJzZXJTdHJpY3RNb2RlOjpT
dHJpY3QgOiBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdDsKICAgICBKU1BhcnNlclNjcmlw
dE1vZGUgc2NyaXB0TW9kZSA9IGV4ZWN1dGFibGUtPnNjcmlwdE1vZGUoKTsKICAgICBBU1NFUlQo
aXNGdW5jdGlvblBhcnNlTW9kZShleGVjdXRhYmxlLT5wYXJzZU1vZGUoKSkpOwotICAgIFZlY3Rv
cjxKU1RleHRQb3NpdGlvbj4qIGluc3RhbmNlRmllbGRMb2NhdGlvbnMgPSBleGVjdXRhYmxlLT5p
bnN0YW5jZUZpZWxkTG9jYXRpb25zKCk7CisgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogY2xh
c3NGaWVsZExvY2F0aW9ucyA9IGV4ZWN1dGFibGUtPmNsYXNzRmllbGRMb2NhdGlvbnMoKTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Ob2RlPiBmdW5jdGlvbiA9IHBhcnNlPEZ1bmN0aW9u
Tm9kZT4oCi0gICAgICAgIHZtLCBzb3VyY2UsIGV4ZWN1dGFibGUtPm5hbWUoKSwgYnVpbHRpbk1v
ZGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGV4ZWN1dGFibGUtPnBhcnNlTW9kZSgpLCBleGVj
dXRhYmxlLT5zdXBlckJpbmRpbmcoKSwgZXJyb3IsIG51bGxwdHIsIENvbnN0cnVjdG9yS2luZDo6
Tm9uZSwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsIG51
bGxwdHIsIG51bGxwdHIsIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgICAgICB2bSwgc291
cmNlLCBleGVjdXRhYmxlLT5uYW1lKCksIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRN
b2RlLCBleGVjdXRhYmxlLT5wYXJzZU1vZGUoKSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCks
IGVycm9yLCBudWxscHRyLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlw
ZTo6Tm9uZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBudWxscHRyLCBudWxscHRyLCBjbGFzc0Zp
ZWxkTG9jYXRpb25zKTsKIAogICAgIGlmICghZnVuY3Rpb24pIHsKICAgICAgICAgQVNTRVJUKGVy
cm9yLmlzVmFsaWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4IDhmZmUzMDBkODQ0Mi4u
NTgwMzJhZDVlZGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtMjA5LDIzICsyMDksMjMg
QEAgcHVibGljOgogICAgICAgICBTdHJpbmcgbV9zb3VyY2VVUkxEaXJlY3RpdmU7CiAgICAgICAg
IFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7CiAgICAgICAgIENvbXBhY3RWYXJp
YWJsZU1hcDo6SGFuZGxlIG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXM7Ci0gICAgICAgIFZlY3Rv
cjxKU1RleHRQb3NpdGlvbj4gbV9pbnN0YW5jZUZpZWxkTG9jYXRpb25zOworICAgICAgICBWZWN0
b3I8SlNUZXh0UG9zaXRpb24+IG1fY2xhc3NGaWVsZExvY2F0aW9uczsKICAgICB9OwogCiAgICAg
TmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcj4obV9u
ZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcik7IH0KIAotICAgIFZlY3RvcjxKU1RleHRQb3NpdGlv
bj4qIGluc3RhbmNlRmllbGRMb2NhdGlvbnMoKSBjb25zdAorICAgIFZlY3RvcjxKU1RleHRQb3Np
dGlvbj4qIGNsYXNzRmllbGRMb2NhdGlvbnMoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1f
cmFyZURhdGEpCi0gICAgICAgICAgICByZXR1cm4gJm1fcmFyZURhdGEtPm1faW5zdGFuY2VGaWVs
ZExvY2F0aW9uczsKKyAgICAgICAgICAgIHJldHVybiAmbV9yYXJlRGF0YS0+bV9jbGFzc0ZpZWxk
TG9jYXRpb25zOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICB2b2lkIHNl
dEluc3RhbmNlRmllbGRMb2NhdGlvbnMoVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYmIGluc3RhbmNl
RmllbGRMb2NhdGlvbnMpCisgICAgdm9pZCBzZXRDbGFzc0ZpZWxkTG9jYXRpb25zKFZlY3RvcjxK
U1RleHRQb3NpdGlvbj4mJiBjbGFzc0ZpZWxkTG9jYXRpb25zKQogICAgIHsKLSAgICAgICAgaWYg
KGluc3RhbmNlRmllbGRMb2NhdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICBpZiAoY2xhc3NGaWVs
ZExvY2F0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuc3Vy
ZVJhcmVEYXRhKCkubV9pbnN0YW5jZUZpZWxkTG9jYXRpb25zID0gV1RGTW92ZShpbnN0YW5jZUZp
ZWxkTG9jYXRpb25zKTsKKyAgICAgICAgZW5zdXJlUmFyZURhdGEoKS5tX2NsYXNzRmllbGRMb2Nh
dGlvbnMgPSBXVEZNb3ZlKGNsYXNzRmllbGRMb2NhdGlvbnMpOwogICAgIH0KIAogcHJpdmF0ZToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKaW5kZXggNDY3NDBkYThlNTU1Li43Y2JiM2ZmOTQ2OTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCkBAIC0zNzksNyArMzc5LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAg
ICBib29sIHNob3VsZENhcHR1cmVTb21lT2ZUaGVUaGluZ3MgPSBzaG91bGRFbWl0RGVidWdIb29r
cygpIHx8IGZ1bmN0aW9uTm9kZS0+bmVlZHNBY3RpdmF0aW9uKCkgfHwgY29udGFpbnNBcnJvd09y
RXZhbEJ1dE5vdEluQXJyb3dCbG9jazsKIAogICAgIGJvb2wgc2hvdWxkQ2FwdHVyZUFsbE9mVGhl
VGhpbmdzID0gc2hvdWxkRW1pdERlYnVnSG9va3MoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCk7
Ci0gICAgYm9vbCBuZWVkc0FyZ3VtZW50cyA9ICgoZnVuY3Rpb25Ob2RlLT51c2VzQXJndW1lbnRz
KCkgJiYgIWNvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkpIHx8IGNvZGVCbG9jay0+dXNlc0V2
YWwoKSB8fCAoZnVuY3Rpb25Ob2RlLT51c2VzQXJyb3dGdW5jdGlvbigpICYmICFjb2RlQmxvY2st
PmlzQXJyb3dGdW5jdGlvbigpICYmIGlzQXJndW1lbnRzVXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9u
KCkpKSAmJiBwYXJzZU1vZGUgIT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlh
bGl6ZXJNb2RlOworICAgIGJvb2wgbmVlZHNBcmd1bWVudHMgPSAoKGZ1bmN0aW9uTm9kZS0+dXNl
c0FyZ3VtZW50cygpICYmICFjb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpKSB8fCBjb2RlQmxv
Y2stPnVzZXNFdmFsKCkgfHwgKGZ1bmN0aW9uTm9kZS0+dXNlc0Fycm93RnVuY3Rpb24oKSAmJiAh
Y29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSAmJiBpc0FyZ3VtZW50c1VzZWRJbklubmVyQXJy
b3dGdW5jdGlvbigpKSkgJiYgcGFyc2VNb2RlICE9IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVs
ZEluaXRpYWxpemVyTW9kZTsKIAogICAgIGlmIChpc0dlbmVyYXRvck9yQXN5bmNGdW5jdGlvbkJv
ZHlQYXJzZU1vZGUocGFyc2VNb2RlKSkgewogICAgICAgICAvLyBHZW5lcmF0b3IgYW5kIEFzeW5j
RnVuY3Rpb24gbmV2ZXIgcHJvdmlkZXMgImFyZ3VtZW50cyIuICJhcmd1bWVudHMiIHJlZmVyZW5j
ZSB3aWxsIGJlIHJlc29sdmVkIGluIGFuIHVwcGVyIGdlbmVyYXRvciBmdW5jdGlvbiBzY29wZS4K
QEAgLTYxMSw3ICs2MTEsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
Vk0mIHZtLCBGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogICAgICAgICB9CiAK
ICAgICAgICAgYm9vbCBzaG91bGRDcmVhdGVBcmd1bWVuc1ZhcmlhYmxlID0gIWhhdmVQYXJhbWV0
ZXJOYW1lZEFyZ3VtZW50cwotICAgICAgICAgICAgJiYgIVNvdXJjZVBhcnNlTW9kZVNldChTb3Vy
Y2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJy
b3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVy
TW9kZSkuY29udGFpbnMobV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpKTsKKyAgICAgICAgICAgICYm
ICFTb3VyY2VQYXJzZU1vZGVTZXQoU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSwg
U291cmNlUGFyc2VNb2RlOjpBc3luY0Fycm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6
OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpLmNvbnRhaW5zKG1fY29kZUJsb2NrLT5wYXJzZU1v
ZGUoKSk7CiAgICAgICAgIHNob3VsZENyZWF0ZUFyZ3VtZW50c1ZhcmlhYmxlSW5QYXJhbWV0ZXJT
Y29wZSA9IHNob3VsZENyZWF0ZUFyZ3VtZW5zVmFyaWFibGUgJiYgIWlzU2ltcGxlUGFyYW1ldGVy
TGlzdDsKICAgICAgICAgLy8gRG8gbm90IGNyZWF0ZSBhcmd1bWVudHMgdmFyaWFibGUgaW4gY2Fz
ZSBvZiBBcnJvdyBmdW5jdGlvbi4gVmFsdWUgd2lsbCBiZSBsb2FkZWQgZnJvbSBwYXJlbnQgc2Nv
cGUKICAgICAgICAgaWYgKHNob3VsZENyZWF0ZUFyZ3VtZW5zVmFyaWFibGUgJiYgIXNob3VsZENy
ZWF0ZUFyZ3VtZW50c1ZhcmlhYmxlSW5QYXJhbWV0ZXJTY29wZSkgewpAQCAtMzEzNSw3ICszMTM1
LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdEZWZhdWx0Q29uc3Ry
dWN0b3IoUmVnaXN0ZXJJRCogZHN0LCBDb25zdHIKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0luc3RhbmNlRmllbGRJbml0aWFsaXpl
ckZ1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYmIGluc3Rh
bmNlRmllbGRMb2NhdGlvbnMsIGJvb2wgaXNEZXJpdmVkKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXROZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlcklE
KiBkc3QsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mJiBjbGFzc0ZpZWxkTG9jYXRpb25zLCBib29s
IGlzRGVyaXZlZCkKIHsKICAgICBEZXJpdmVkQ29udGV4dFR5cGUgbmV3RGVyaXZlZENvbnRleHRU
eXBlOwogICAgIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmc7CkBAIC0zMTQ4LDE0ICszMTQ4LDE0
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3SW5zdGFuY2VGaWVsZElu
aXRpYWxpemVyRnVuY3Rpb24oUmVnaXN0ZXJJCiAgICAgfQogCiAgICAgT3B0aW9uYWw8Q29tcGFj
dFZhcmlhYmxlTWFwOjpIYW5kbGU+IHZhcmlhYmxlc1VuZGVyVERaID0gZ2V0VmFyaWFibGVzVW5k
ZXJURFooKTsKLSAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2Rl
OjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOworICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJz
ZU1vZGUgPSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU7CiAgICAg
Q29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5ID0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fu
bm90Q29uc3RydWN0OwogCiAgICAgY29uc3QgYm9vbCBhbHdheXNTdHJpY3RJbkNsYXNzID0gdHJ1
ZTsKICAgICBGdW5jdGlvbk1ldGFkYXRhTm9kZSBtZXRhZGF0YShwYXJzZXJBcmVuYSgpLCBKU1Rv
a2VuTG9jYXRpb24oKSwgSlNUb2tlbkxvY2F0aW9uKCksIDAsIDAsIDAsIDAsIDAsIGFsd2F5c1N0
cmljdEluQ2xhc3MsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgc3VwZXJCaW5kaW5nLCAwLCBwYXJz
ZU1vZGUsIGZhbHNlKTsKICAgICBtZXRhZGF0YS5maW5pc2hQYXJzaW5nKG1fc2NvcGVOb2RlLT5z
b3VyY2UoKSwgSWRlbnRpZmllcigpLCBGdW5jdGlvbk1vZGU6Ok1ldGhvZERlZmluaXRpb24pOwog
ICAgIGF1dG8gaW5pdGlhbGl6ZXIgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRl
KG1fdm0sIG1fc2NvcGVOb2RlLT5zb3VyY2UoKSwgJm1ldGFkYXRhLCBpc0J1aWx0aW5GdW5jdGlv
bigpID8gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24gOiBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLCBj
b25zdHJ1Y3RBYmlsaXR5LCBzY3JpcHRNb2RlKCksIFdURk1vdmUodmFyaWFibGVzVW5kZXJURFop
LCBuZXdEZXJpdmVkQ29udGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyOjpObyk7
Ci0gICAgaW5pdGlhbGl6ZXItPnNldEluc3RhbmNlRmllbGRMb2NhdGlvbnMoV1RGTW92ZShpbnN0
YW5jZUZpZWxkTG9jYXRpb25zKSk7CisgICAgaW5pdGlhbGl6ZXItPnNldENsYXNzRmllbGRMb2Nh
dGlvbnMoV1RGTW92ZShjbGFzc0ZpZWxkTG9jYXRpb25zKSk7CiAKICAgICB1bnNpZ25lZCBpbmRl
eCA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkV4cHIoaW5pdGlhbGl6ZXIpOwogICAgIE9wTmV3
RnVuY0V4cDo6ZW1pdCh0aGlzLCBkc3QsIHNjb3BlUmVnaXN0ZXIoKSwgaW5kZXgpOwpAQCAtNDQ3
Niw3ICs0NDc2LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2Nv
cGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudChjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aXNBcnJvd0Z1
bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSB8fCBjb25z
dHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMgfHwgbV9jb2RlVHlwZSA9
PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0gU291cmNlUGFyc2VNb2Rl
OjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKKyAgICBBU1NFUlQobV9jb2RlQmxvY2st
PmlzQXJyb3dGdW5jdGlvbigpIHx8IG1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0
KCkgfHwgY29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzIHx8IG1f
Y29kZVR5cGUgPT0gRXZhbENvZGUgfHwgbV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpID09IFNvdXJj
ZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZSk7CiAKICAgICByZXR1cm4gZW1p
dFJlc29sdmVTY29wZShudWxscHRyLCB2YXJpYWJsZShpZGVudGlmaWVyLCBUaGlzUmVzb2x1dGlv
blR5cGU6OlNjb3BlZCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGQyODI1MzRhOTZhOC4uYmQ3NTBm
NzRmNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC01ODEsMTQgKzU4MSwxNCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiBlbWl0Tm9kZUluVGFpbFBvc2l0aW9uKG51bGxwdHIsIG4p
OwogICAgICAgICB9CiAKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdERlZmluZUNsYXNzRWxlbWVu
dHMoUHJvcGVydHlMaXN0Tm9kZSogbiwgUmVnaXN0ZXJJRCogY29uc3RydWN0b3IsIFJlZ2lzdGVy
SUQqIHByb3RvdHlwZSwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYgaW5zdGFuY2VGaWVsZExvY2F0
aW9ucykKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdERlZmluZUNsYXNzRWxlbWVudHMoUHJvcGVy
dHlMaXN0Tm9kZSogbiwgUmVnaXN0ZXJJRCogY29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3Rv
dHlwZSwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYgaW5zdGFuY2VGaWVsZExvY2F0aW9ucywgVmVj
dG9yPEpTVGV4dFBvc2l0aW9uPiYgc3RhdGljRmllbGRMb2NhdGlvbnMpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChjb25zdHJ1Y3Rvci0+cmVmQ291bnQoKSAmJiBwcm90b3R5cGUtPnJl
ZkNvdW50KCkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3ZtLmlzU2FmZVRvUmVjdXJz
ZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZW1pdFRocm93RXhwcmVzc2lvblRvb0RlZXBF
eGNlcHRpb24oKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuLT5uZWVkc0RlYnVnSG9vaygp
KSkKICAgICAgICAgICAgICAgICBlbWl0RGVidWdIb29rKG4pOwotICAgICAgICAgICAgcmV0dXJu
IG4tPmVtaXRCeXRlY29kZSgqdGhpcywgY29uc3RydWN0b3IsIHByb3RvdHlwZSwgJmluc3RhbmNl
RmllbGRMb2NhdGlvbnMpOworICAgICAgICAgICAgcmV0dXJuIG4tPmVtaXRCeXRlY29kZSgqdGhp
cywgY29uc3RydWN0b3IsIHByb3RvdHlwZSwgJmluc3RhbmNlRmllbGRMb2NhdGlvbnMsICZzdGF0
aWNGaWVsZExvY2F0aW9ucyk7CiAgICAgICAgIH0KIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0
Tm9kZUZvclByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgRXhwcmVzc2lvbk5vZGUqIG5vZGUpCkBA
IC03NzUsNyArNzc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXROZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKik7CiAg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0ZXJJRCog
ZHN0LCBGdW5jRXhwck5vZGUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0RlZmF1bHRD
b25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIENvbnN0cnVjdG9yS2luZCwgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgY29uc3QgSWRlbnRpZmllciYgZWNtYU5hbWUsIGNvbnN0IFNvdXJjZUNvZGUm
IGNsYXNzU291cmNlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcik7Ci0gICAgICAgIFJlZ2lz
dGVySUQqIGVtaXROZXdJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlcklE
KiBkc3QsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mJiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zLCBi
b29sIGlzRGVyaXZlZCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdDbGFzc0ZpZWxkSW5p
dGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4m
JiBjbGFzc0ZpZWxkTG9jYXRpb25zLCBib29sIGlzRGVyaXZlZCk7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXROZXdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiwgQXJyb3dGdW5j
RXhwck5vZGUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld01ldGhvZERlZmluaXRpb24o
UmVnaXN0ZXJJRCogZHN0LCBNZXRob2REZWZpbml0aW9uTm9kZSopOwogICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0TmV3UmVnRXhwKFJlZ2lzdGVySUQqIGRzdCwgUmVnRXhwKik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXgg
ZjNmNDI5NzMyZjk2Li5kMGQyYmY5NmM2ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTE4Niw3ICsxODYsNyBAQCBS
ZWdpc3RlcklEKiBUaGlzTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdAogCiBzdGF0aWMgUmVnaXN0ZXJJRCogZW1pdEhvbWVPYmpl
Y3RGb3JDYWxsZWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICBpZiAoKGdl
bmVyYXRvci5pc0Rlcml2ZWRDbGFzc0NvbnRleHQoKSB8fCBnZW5lcmF0b3IuaXNEZXJpdmVkQ29u
c3RydWN0b3JDb250ZXh0KCkpICYmIGdlbmVyYXRvci5wYXJzZU1vZGUoKSAhPSBTb3VyY2VQYXJz
ZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGUpIHsKKyAgICBpZiAoKGdlbmVyYXRv
ci5pc0Rlcml2ZWRDbGFzc0NvbnRleHQoKSB8fCBnZW5lcmF0b3IuaXNEZXJpdmVkQ29uc3RydWN0
b3JDb250ZXh0KCkpICYmIGdlbmVyYXRvci5wYXJzZU1vZGUoKSAhPSBTb3VyY2VQYXJzZU1vZGU6
OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZGVyaXZl
ZENvbnN0cnVjdG9yID0gZ2VuZXJhdG9yLmVtaXRMb2FkRGVyaXZlZENvbnN0cnVjdG9yRnJvbUFy
cm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1lbnQoKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGRlcml2ZWRDb25zdHJ1Y3Rv
ciwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5ob21lT2JqZWN0UHJp
dmF0ZU5hbWUoKSk7CiAgICAgfQpAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgUHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdERlY2xhcmVQcml2YXRlRmllbGROYW1lcyhCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yCiAgICAgfQogfQogCi1SZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0T3JDb25z
dHJ1Y3RvciwgUmVnaXN0ZXJJRCogcHJvdG90eXBlLCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBp
bnN0YW5jZUZpZWxkTG9jYXRpb25zKQorUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdE9y
Q29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3RvdHlwZSwgVmVjdG9yPEpTVGV4dFBvc2l0aW9u
PiogaW5zdGFuY2VGaWVsZExvY2F0aW9ucywgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogc3RhdGlj
RmllbGRMb2NhdGlvbnMpCiB7CiAgICAgUHJvcGVydHlMaXN0Tm9kZSogcCA9IHRoaXM7CiAgICAg
UmVnaXN0ZXJJRCogZHN0ID0gbnVsbHB0cjsKQEAgLTU5NSw2ICs1OTUsMTIgQEAgUmVnaXN0ZXJJ
RCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKKyAgICAg
ICAgaWYgKHAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoc3Rh
dGljRmllbGRMb2NhdGlvbnMpOworICAgICAgICAgICAgc3RhdGljRmllbGRMb2NhdGlvbnMtPmFw
cGVuZChwLT5wb3NpdGlvbigpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
ICAgICAgICAgZW1pdFB1dENvbnN0YW50UHJvcGVydHkoZ2VuZXJhdG9yLCBkc3QsICpwLT5tX25v
ZGUpOwogICAgIH0KIApAQCAtNjUyLDYgKzY1OCwxMiBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxp
c3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCisgICAgICAgICAg
ICBpZiAocC0+aXNTdGF0aWNDbGFzc0ZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
c3RhdGljRmllbGRMb2NhdGlvbnMpOworICAgICAgICAgICAgICAgIHN0YXRpY0ZpZWxkTG9jYXRp
b25zLT5hcHBlbmQocC0+cG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIEhhbmRsZSByZWd1bGFyIHZhbHVlcy4KICAg
ICAgICAgICAgIGlmIChub2RlLT5tX3R5cGUgJiBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KSB7CiAg
ICAgICAgICAgICAgICAgZW1pdFB1dENvbnN0YW50UHJvcGVydHkoZ2VuZXJhdG9yLCBkc3QsICpu
b2RlKTsKQEAgLTc0NCw3ICs3NTYsNyBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogCiB2b2lk
IFByb3BlcnR5TGlzdE5vZGU6OmVtaXRQdXRDb25zdGFudFByb3BlcnR5KEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIG5ld09iaiwgUHJvcGVydHlOb2RlJiBub2RlKQog
ewotICAgIC8vIFByaXZhdGUgZmllbGRzIGFyZSBoYW5kbGVkIGluIHRoZSBzeW50aGV0aWMgaW5z
dGFuY2VGaWVsZEluaXRpYWxpemVyIGZ1bmN0aW9uLCBub3QgaGVyZS4KKyAgICAvLyBQcml2YXRl
IGZpZWxkcyBhcmUgaGFuZGxlZCBpbiBhIHN5bnRoZXRpYyBjbGFzc0ZpZWxkSW5pdGlhbGl6ZXIg
ZnVuY3Rpb24sIG5vdCBoZXJlLgogICAgIEFTU0VSVCghKG5vZGUudHlwZSgpICYgUHJvcGVydHlO
b2RlOjpQcml2YXRlKSk7CiAKICAgICBpZiAoUHJvcGVydHlOb2RlOjppc1VuZGVyc2NvcmVQcm90
b1NldHRlcihnZW5lcmF0b3Iudm0oKSwgbm9kZSkpIHsKQEAgLTgwMCwxOCArODEyLDI1IEBAIHZv
aWQgUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFB1dENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnCiB2b2lkIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRTYXZlQ29t
cHV0ZWRGaWVsZE5hbWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUHJvcGVydHlOb2Rl
JiBub2RlKQogewogICAgIEFTU0VSVChub2RlLmlzQ29tcHV0ZWRDbGFzc0ZpZWxkKCkpOwotICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eUV4cHI7CiAKICAgICAvLyBUaGUgJ25hbWUnIHJl
ZmVycyB0byBhIHN5bnRoZXRpYyBwcml2YXRlIG5hbWUgaW4gdGhlIGNsYXNzIHNjb3BlLCB3aGVy
ZSB0aGUgcHJvcGVydHkga2V5IGlzIHNhdmVkIGZvciBsYXRlciB1c2UuCiAgICAgY29uc3QgSWRl
bnRpZmllciYgZGVzY3JpcHRpb24gPSAqbm9kZS5uYW1lKCk7CiAgICAgVmFyaWFibGUgdmFyID0g
Z2VuZXJhdG9yLnZhcmlhYmxlKGRlc2NyaXB0aW9uKTsKICAgICBBU1NFUlQoIXZhci5sb2NhbCgp
KTsKIAotICAgIHByb3BlcnR5RXhwciA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLm1fZXhwcmVz
c2lvbik7Ci0gICAgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXRUb1By
b3BlcnR5S2V5KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlFeHByLmdldCgpKTsK
KyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlFeHByID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG5vZGUubV9leHByZXNzaW9uKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1l
ID0gZ2VuZXJhdG9yLmVtaXRUb1Byb3BlcnR5S2V5KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
cHJvcGVydHlFeHByLmdldCgpKTsKKworICAgIGlmIChub2RlLmlzU3RhdGljQ2xhc3NGaWVsZCgp
KSB7CisgICAgICAgIFJlZjxMYWJlbD4gdmFsaWRQcm9wZXJ0eU5hbWVMYWJlbCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdG90eXBlU3RyaW5n
ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIsIEpTVmFsdWUoZ2VuZXJhdG9yLmFkZFN0cmlu
Z0NvbnN0YW50KGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKSkpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGdlbmVyYXRvci5lbWl0QmluYXJ5T3A8T3BFcT4o
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm90b3R5cGVTdHJpbmcuZ2V0KCksIHByb3BlcnR5
TmFtZS5nZXQoKSwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnN0cmluZ1R5cGUoKSwgUmVzdWx0
VHlwZTo6c3RyaW5nVHlwZSgpKSksIHZhbGlkUHJvcGVydHlOYW1lTGFiZWwuZ2V0KCkpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdFRocm93VHlwZUVycm9yKCJDYW5ub3QgZGVjbGFyZSBhIHN0YXRp
YyBmaWVsZCBuYW1lZCAncHJvdG90eXBlJyIpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KHZhbGlkUHJvcGVydHlOYW1lTGFiZWwuZ2V0KCkpOworICAgIH0KIAogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7
Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCB2YXIsIHByb3BlcnR5
TmFtZSwgVGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbk1vZGU6OkNvbnN0SW5pdGlhbGl6
YXRpb24pOworICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFyLCBw
cm9wZXJ0eU5hbWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6YXRpb25Nb2RlOjpD
b25zdEluaXRpYWxpemF0aW9uKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
QEAgLTQ5NTEsMTMgKzQ5NzAsMTQgQEAgUmVnaXN0ZXJJRCogQ2xhc3NFeHByTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcHJvdG90eXBlTmFtZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRMb2Fk
KG51bGxwdHIsIHByb3BlcnR5TmFtZXMucHJvdG90eXBlKTsKICAgICBnZW5lcmF0b3IuZW1pdENh
bGxEZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3Rvci5nZXQoKSwgcHJvdG90eXBlTmFtZVJlZ2lzdGVy
LmdldCgpLCBwcm90b3R5cGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIDAsIG1fcG9zaXRpb24p
OwogCisgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiBzdGF0aWNGaWVsZExvY2F0aW9uczsKICAg
ICBpZiAobV9jbGFzc0VsZW1lbnRzKSB7CiAgICAgICAgIG1fY2xhc3NFbGVtZW50cy0+ZW1pdERl
Y2xhcmVQcml2YXRlRmllbGROYW1lcyhnZW5lcmF0b3IsIGdlbmVyYXRvci5zY29wZVJlZ2lzdGVy
KCkpOwogCiAgICAgICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4gaW5zdGFuY2VGaWVsZExvY2F0
aW9uczsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWZpbmVDbGFzc0VsZW1lbnRzKG1fY2xhc3NF
bGVtZW50cywgY29uc3RydWN0b3IuZ2V0KCksIHByb3RvdHlwZS5nZXQoKSwgaW5zdGFuY2VGaWVs
ZExvY2F0aW9ucyk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGVmaW5lQ2xhc3NFbGVtZW50cyht
X2NsYXNzRWxlbWVudHMsIGNvbnN0cnVjdG9yLmdldCgpLCBwcm90b3R5cGUuZ2V0KCksIGluc3Rh
bmNlRmllbGRMb2NhdGlvbnMsIHN0YXRpY0ZpZWxkTG9jYXRpb25zKTsKICAgICAgICAgaWYgKCFp
bnN0YW5jZUZpZWxkTG9jYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGluc3RhbmNlRmllbGRJbml0aWFsaXplciA9IGdlbmVyYXRvci5lbWl0TmV3SW5z
dGFuY2VGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBX
VEZNb3ZlKGluc3RhbmNlRmllbGRMb2NhdGlvbnMpLCBtX2NsYXNzSGVyaXRhZ2UpOworICAgICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGluc3RhbmNlRmllbGRJbml0aWFsaXplciA9IGdlbmVy
YXRvci5lbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24oZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCBXVEZNb3ZlKGluc3RhbmNlRmllbGRMb2NhdGlvbnMpLCBtX2NsYXNzSGVyaXRh
Z2UpOwogCiAgICAgICAgICAgICAvLyBGSVhNRTogU2tpcCB0aGlzIGlmIHRoZSBpbml0aWFsaXpl
ciBmdW5jdGlvbiBpc24ndCBnb2luZyB0byBuZWVkIGEgaG9tZSBvYmplY3QgKG5vIGV2YWwgb3Ig
c3VwZXIgcHJvcGVydGllcykKICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTY4NjcKQEAgLTQ5NjcsMTYgKzQ5ODcsMjcgQEAgUmVnaXN0ZXJJ
RCogQ2xhc3NFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX25lZWRzTGV4aWNh
bFNjb3BlKSB7Ci0gICAgICAgIGlmICghbV9uYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBW
YXJpYWJsZSBjbGFzc05hbWVWYXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9uYW1lKTsKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNzTmFtZVZhci5pc1Jlc29sdmVkKCkpOwotICAgICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2Nv
cGUobnVsbHB0ciwgY2xhc3NOYW1lVmFyKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0
VG9TY29wZShzY29wZS5nZXQoKSwgY2xhc3NOYW1lVmFyLCBjb25zdHJ1Y3Rvci5nZXQoKSwgVGhy
b3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbk1vZGU6OkluaXRpYWxpemF0aW9uKTsKLSAgICAg
ICAgfQotICAgICAgICBnZW5lcmF0b3IucG9wTGV4aWNhbFNjb3BlKHRoaXMpOworICAgIGlmICht
X25lZWRzTGV4aWNhbFNjb3BlICYmICFtX25hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgVmFyaWFi
bGUgY2xhc3NOYW1lVmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1fbmFtZSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGNsYXNzTmFtZVZhci5pc1Jlc29sdmVkKCkpOworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBj
bGFzc05hbWVWYXIpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0
KCksIGNsYXNzTmFtZVZhciwgY29uc3RydWN0b3IuZ2V0KCksIFRocm93SWZOb3RGb3VuZCwgSW5p
dGlhbGl6YXRpb25Nb2RlOjpJbml0aWFsaXphdGlvbik7CisgICAgfQorCisgICAgaWYgKCFzdGF0
aWNGaWVsZExvY2F0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXIgPSBnZW5lcmF0b3IuZW1pdE5ld0NsYXNzRmllbGRJbml0
aWFsaXplckZ1bmN0aW9uKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgV1RGTW92ZShzdGF0aWNG
aWVsZExvY2F0aW9ucyksIG1fY2xhc3NIZXJpdGFnZSk7CisgICAgICAgIC8vIEZJWE1FOiBTa2lw
IHRoaXMgaWYgdGhlIGluaXRpYWxpemVyIGZ1bmN0aW9uIGlzbid0IGdvaW5nIHRvIG5lZWQgYSBo
b21lIG9iamVjdCAobm8gZXZhbCBvciBzdXBlciBwcm9wZXJ0aWVzKQorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2ODY3CisgICAgICAgIGVtaXRQ
dXRIb21lT2JqZWN0KGdlbmVyYXRvciwgc3RhdGljRmllbGRJbml0aWFsaXplci5nZXQoKSwgY29u
c3RydWN0b3IuZ2V0KCkpOworCisgICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3Is
IG51bGxwdHIpOworICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdzLnRoaXNSZWdpc3RlcigpLCBj
b25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIHN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXIuZ2V0KCksIE5vRXhwZWN0ZWRG
dW5jdGlvbiwgYXJncywgcG9zaXRpb24oKSwgcG9zaXRpb24oKSwgcG9zaXRpb24oKSwgRGVidWdn
YWJsZUNhbGw6Ok5vKTsKICAgICB9CiAKKyAgICBpZiAobV9uZWVkc0xleGljYWxTY29wZSkKKyAg
ICAgICAgZ2VuZXJhdG9yLnBvcExleGljYWxTY29wZSh0aGlzKTsKKwogICAgIHJldHVybiBnZW5l
cmF0b3IubW92ZShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGNvbnN0cnVjdG9yLmdl
dCgpKSwgY29uc3RydWN0b3IuZ2V0KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBkMTQ5Zjc3NjMzZGYuLmI5NWZi
MzVjMGZiOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgSlNWYWx1ZSBldmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBFQ01BTW9kZSBlY21hTW8K
ICAgICB9CiAKICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlOwotICAgIGlmIChj
YWxsZXJVbmxpbmtlZENvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpJ
bnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlKQorICAgIGlmIChjYWxsZXJVbmxpbmtlZENvZGVC
bG9jay0+cGFyc2VNb2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6
ZXJNb2RlKQogICAgICAgICBldmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Okluc3Rh
bmNlRmllbGRFdmFsQ29udGV4dDsKICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uUGFyc2VNb2RlKGNh
bGxlclVubGlua2VkQ29kZUJsb2NrLT5wYXJzZU1vZGUoKSkpCiAgICAgICAgIGV2YWxDb250ZXh0
VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6RnVuY3Rpb25FdmFsQ29udGV4dDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCA3MzU4YmIzMjUyN2UuLjE3MDk3ZWE5ZjI3MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtNzM4LDYgKzczOCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIGlzSW5zdGFuY2VDbGFzc1Byb3BlcnR5KCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Q2xhc3NFbGVtZW50VGFnPihtX2NsYXNzRWxlbWVudFRhZykg
PT0gQ2xhc3NFbGVtZW50VGFnOjpJbnN0YW5jZTsgfQogICAgICAgICBib29sIGlzQ2xhc3NGaWVs
ZCgpIGNvbnN0IHsgcmV0dXJuIGlzQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGlu
ZygpOyB9CiAgICAgICAgIGJvb2wgaXNJbnN0YW5jZUNsYXNzRmllbGQoKSBjb25zdCB7IHJldHVy
biBpc0luc3RhbmNlQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGluZygpOyB9Cisg
ICAgICAgIGJvb2wgaXNTdGF0aWNDbGFzc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gaXNTdGF0aWND
bGFzc1Byb3BlcnR5KCkgJiYgIW5lZWRzU3VwZXJCaW5kaW5nKCk7IH0KICAgICAgICAgYm9vbCBp
c092ZXJyaWRkZW5CeUR1cGxpY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNPdmVycmlkZGVuQnlE
dXBsaWNhdGU7IH0KICAgICAgICAgYm9vbCBpc1ByaXZhdGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgJiBQcml2YXRlOyB9CiAgICAgICAgIGJvb2wgaGFzQ29tcHV0ZWROYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9leHByZXNzaW9uOyB9CkBAIC03ODIsMTYgKzc4MywyMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogICAgICAgICBib29sIGhhc0luc3RhbmNlRmllbGRzKCkgY29uc3Q7CiAK
KyAgICAgICAgYm9vbCBpc1N0YXRpY0NsYXNzRmllbGQoKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9ub2RlLT5pc1N0YXRpY0NsYXNzRmllbGQoKTsKKyAgICAgICAgfQor
CiAgICAgICAgIHN0YXRpYyBib29sIHNob3VsZENyZWF0ZUxleGljYWxTY29wZUZvckNsYXNzKFBy
b3BlcnR5TGlzdE5vZGUqKTsKIAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIFZlY3RvcjxKU1RleHRQ
b3NpdGlvbj4qKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+
KiwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiopOwogCiAgICAgICAgIHZvaWQgZW1pdERlY2xhcmVQ
cml2YXRlRmllbGROYW1lcyhCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqIHNjb3BlKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QgPSBudWxscHRyKSBmaW5hbAog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEJ5dGVjb2RlKGdlbmVyYXRvciwgZHN0
LCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBlbWl0Qnl0ZWNvZGUoZ2Vu
ZXJhdG9yLCBkc3QsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICB9CiAgICAg
ICAgIHZvaWQgZW1pdFB1dENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiwgUHJvcGVydHlOb2RlJik7CiAgICAgICAgIHZvaWQgZW1pdFNhdmVDb21wdXRlZEZp
ZWxkTmFtZShCeXRlY29kZUdlbmVyYXRvciYsIFByb3BlcnR5Tm9kZSYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDkxOTVlY2E2MWJjOC4uZTg5ZGNkMzNhMjI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC0yMDksNyArMjA5
LDcgQEAgUGFyc2VyPExleGVyVHlwZT46On5QYXJzZXIoKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgTGV4ZXJUeXBlPgotRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBhcnNl
SW5uZXJSZXN1bHQsIFN0cmluZz4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoY29uc3Qg
SWRlbnRpZmllciYgY2FsbGVlTmFtZSwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgUGFyc2lu
Z0NvbnRleHQgcGFyc2luZ0NvbnRleHQsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3Rv
clBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogaW5z
dGFuY2VGaWVsZExvY2F0aW9ucykKK0V4cGVjdGVkPHR5cGVuYW1lIFBhcnNlcjxMZXhlclR5cGU+
OjpQYXJzZUlubmVyUmVzdWx0LCBTdHJpbmc+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVy
KGNvbnN0IElkZW50aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUs
IFBhcnNpbmdDb250ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29u
c3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlv
bj4qIGNsYXNzRmllbGRMb2NhdGlvbnMpCiB7CiAgICAgQVNUQnVpbGRlciBjb250ZXh0KGNvbnN0
X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgY29uc3RfY2FzdDxTb3VyY2VDb2RlKj4o
bV9zb3VyY2UpKTsKICAgICBTY29wZVJlZiBzY29wZSA9IGN1cnJlbnRTY29wZSgpOwpAQCAtMjIy
LDcgKzIyMiw3IEBAIEV4cGVjdGVkPHR5cGVuYW1lIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZUlu
bmVyUmVzdWx0LCBTdHJpbmc+IFBhcnNlcjxMZXhlclR5cGU+CiAgICAgICAgIFBhcnNlckZ1bmN0
aW9uSW5mbzxBU1RCdWlsZGVyPiBmdW5jdGlvbkluZm87CiAgICAgICAgIGlmIChpc0dlbmVyYXRv
ck9yQXN5bmNGdW5jdGlvbkJvZHlQYXJzZU1vZGUocGFyc2VNb2RlKSkKICAgICAgICAgICAgIHBh
cmFtZXRlcnMgPSBjcmVhdGVHZW5lcmF0b3JQYXJhbWV0ZXJzKGNvbnRleHQsIGZ1bmN0aW9uSW5m
by5wYXJhbWV0ZXJDb3VudCk7Ci0gICAgICAgIGVsc2UgaWYgKHBhcnNlTW9kZSA9PSBTb3VyY2VQ
YXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGUpCisgICAgICAgIGVsc2UgaWYg
KHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUp
CiAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gY29udGV4dC5jcmVhdGVGb3JtYWxQYXJhbWV0ZXJM
aXN0KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJzZUZ1bmN0
aW9uUGFyYW1ldGVycyhjb250ZXh0LCBwYXJzZU1vZGUsIGZ1bmN0aW9uSW5mbyk7CkBAIC0yNTYs
OSArMjU2LDkgQEAgRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlSW5u
ZXJSZXN1bHQsIFN0cmluZz4gUGFyc2VyPExleGVyVHlwZT4KICAgICAgICAgICAgIHNvdXJjZUVs
ZW1lbnRzID0gcGFyc2VBc3luY0dlbmVyYXRvckZ1bmN0aW9uU291cmNlRWxlbWVudHMoY29udGV4
dCwgcGFyc2VNb2RlLCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiwgQ2hlY2tGb3JTdHJp
Y3RNb2RlKTsKICAgICAgICAgZWxzZSBpZiAocGFyc2luZ0NvbnRleHQgPT0gUGFyc2luZ0NvbnRl
eHQ6OkZ1bmN0aW9uQ29uc3RydWN0b3IpCiAgICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBh
cnNlU2luZ2xlRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNF
bmRQb3NpdGlvbik7Ci0gICAgICAgIGVsc2UgaWYgKHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1v
ZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChp
bnN0YW5jZUZpZWxkTG9jYXRpb25zICYmICFpbnN0YW5jZUZpZWxkTG9jYXRpb25zLT5pc0VtcHR5
KCkpOwotICAgICAgICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZUluc3RhbmNlRmllbGRJbml0
aWFsaXplclNvdXJjZUVsZW1lbnRzKGNvbnRleHQsICppbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsK
KyAgICAgICAgZWxzZSBpZiAocGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVs
ZEluaXRpYWxpemVyTW9kZSkgeworICAgICAgICAgICAgQVNTRVJUKGNsYXNzRmllbGRMb2NhdGlv
bnMgJiYgIWNsYXNzRmllbGRMb2NhdGlvbnMtPmlzRW1wdHkoKSk7CisgICAgICAgICAgICBzb3Vy
Y2VFbGVtZW50cyA9IHBhcnNlQ2xhc3NGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoY29u
dGV4dCwgKmNsYXNzRmllbGRMb2NhdGlvbnMpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IHNvdXJjZUVsZW1lbnRzID0gcGFyc2VTb3VyY2VFbGVtZW50cyhjb250ZXh0LCBDaGVja0ZvclN0
cmljdE1vZGUpOwogICAgIH0KQEAgLTIxNzgsNyArMjE3OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFy
KiBzdHJpbmdBcnRpY2xlRm9yRnVuY3Rpb25Nb2RlKFNvdXJjZVBhcnNlTW9kZSBtb2RlKQogICAg
IGNhc2UgU291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNl
TW9kZTo6TW9kdWxlQW5hbHl6ZU1vZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Ok1vZHVs
ZUV2YWx1YXRlTW9kZToKLSAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZElu
aXRpYWxpemVyTW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRp
YWxpemVyTW9kZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuICIiOwogICAgIH0KQEAgLTIyMjAsNyArMjIyMCw3IEBAIHN0YXRpYyBjb25zdCBj
aGFyKiBzdHJpbmdGb3JGdW5jdGlvbk1vZGUoU291cmNlUGFyc2VNb2RlIG1vZGUpCiAgICAgY2Fz
ZSBTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlOgogICAgIGNhc2UgU291cmNlUGFyc2VNb2Rl
OjpNb2R1bGVBbmFseXplTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlRXZh
bHVhdGVNb2RlOgotICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlh
bGl6ZXJNb2RlOgorICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6
ZXJNb2RlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4gIiI7CiAgICAgfQpAQCAtMjgzOCw2ICsyODM4LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzRGVj
bGFyYXQKIH0KIAogI2RlZmluZSBJTlNUQU5DRV9DT01QVVRFRF9OQU1FX1BSRUZJWCAiaW5zdGFu
Y2VDb21wdXRlZE5hbWUiCisjZGVmaW5lIFNUQVRJQ19DT01QVVRFRF9OQU1FX1BSRUZJWCAgICJz
dGF0aWNDb21wdXRlZE5hbWUiCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4cHJlc3Npb24gUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlQ2xhc3MoVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVp
cmVtZW50cyByZXF1aXJlbWVudHMsIFBhcnNlckNsYXNzSW5mbzxUcmVlQnVpbGRlcj4mIGluZm8p
CkBAIC0yODgxLDcgKzI4ODIsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVD
bGFzc0V4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MoVAogICAgIFRyZWVF
eHByZXNzaW9uIGNvbnN0cnVjdG9yID0gMDsKICAgICBUcmVlUHJvcGVydHlMaXN0IGNsYXNzRWxl
bWVudHMgPSAwOwogICAgIFRyZWVQcm9wZXJ0eUxpc3QgY2xhc3NFbGVtZW50c1RhaWwgPSAwOwot
ICAgIHVuc2lnbmVkIG51bUNvbXB1dGVkRmllbGRzID0gMDsKKyAgICB1bnNpZ25lZCBuZXh0SW5z
dGFuY2VDb21wdXRlZEZpZWxkSUQgPSAwLCBuZXh0U3RhdGljQ29tcHV0ZWRGaWVsZElEID0gMDsK
ICAgICB3aGlsZSAoIW1hdGNoKENMT1NFQlJBQ0UpKSB7CiAgICAgICAgIGlmIChtYXRjaChTRU1J
Q09MT04pKSB7CiAgICAgICAgICAgICBuZXh0KCk7CkBAIC0yOTkwLDE1ICsyOTkxLDIwIEBAIHBh
cnNlTWV0aG9kOgogICAgICAgICAgICAgdHlwZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5Tm9kZTo6
VHlwZT4odHlwZSB8IChpc0dldHRlciA/IFByb3BlcnR5Tm9kZTo6R2V0dGVyIDogUHJvcGVydHlO
b2RlOjpTZXR0ZXIpKTsKICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VHZXR0ZXJTZXR0ZXIo
Y29udGV4dCwgdHlwZSwgbWV0aG9kU3RhcnQsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgdGFnKTsK
ICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0
aG9kIik7Ci0gICAgICAgIH0gZWxzZSBpZiAoT3B0aW9uczo6dXNlUHVibGljQ2xhc3NGaWVsZHMo
KSAmJiAhbWF0Y2goT1BFTlBBUkVOKSAmJiB0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpJbnN0YW5j
ZSAmJiBwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlKSB7CisgICAgICAg
IH0gZWxzZSBpZiAoT3B0aW9uczo6dXNlUHVibGljQ2xhc3NGaWVsZHMoKSAmJiAhbWF0Y2goT1BF
TlBBUkVOKSAmJiBwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlKSB7CiAg
ICAgICAgICAgICBBU1NFUlQoIWlzR2V0dGVyICYmICFpc1NldHRlcik7CiAgICAgICAgICAgICBp
ZiAoaWRlbnQpIHsKICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50ID09
IHByb3BlcnR5TmFtZXMuY29uc3RydWN0b3IsICJDYW5ub3QgZGVjbGFyZSBjbGFzcyBmaWVsZCBu
YW1lZCAnY29uc3RydWN0b3InIik7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVl
KCppZGVudCA9PSBwcm9wZXJ0eU5hbWVzLmNvbnN0cnVjdG9yUHJpdmF0ZUZpZWxkLCAiQ2Fubm90
IGRlY2xhcmUgcHJpdmF0ZSBjbGFzcyBmaWVsZCBuYW1lZCAnI2NvbnN0cnVjdG9yJyIpOworICAg
ICAgICAgICAgICAgIGlmICh0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpTdGF0aWMpCisgICAgICAg
ICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gcHJvcGVydHlOYW1lcy5w
cm90b3R5cGUsICJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyBmaWVsZCBuYW1lZCAncHJvdG90eXBl
JyIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY29tcHV0ZWRQcm9wZXJ0eU5h
bWUpIHsKLSAgICAgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJB
cmVuYSgpLm1ha2VQcml2YXRlSWRlbnRpZmllcihtX3ZtLCBJTlNUQU5DRV9DT01QVVRFRF9OQU1F
X1BSRUZJWCwgbnVtQ29tcHV0ZWRGaWVsZHMrKyk7CisgICAgICAgICAgICAgICAgaWYgKHRhZyA9
PSBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlKQorICAgICAgICAgICAgICAgICAgICBpZGVudCA9
ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VQcml2YXRlSWRlbnRpZmllciht
X3ZtLCBJTlNUQU5DRV9DT01QVVRFRF9OQU1FX1BSRUZJWCwgbmV4dEluc3RhbmNlQ29tcHV0ZWRG
aWVsZElEKyspOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaWRl
bnQgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlUHJpdmF0ZUlkZW50aWZp
ZXIobV92bSwgU1RBVElDX0NPTVBVVEVEX05BTUVfUFJFRklYLCBuZXh0U3RhdGljQ29tcHV0ZWRG
aWVsZElEKyspOwogICAgICAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJh
dGlvblJlc3VsdCA9IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFibGUoaWRlbnQsIHRy
dWUpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGVjbGFyYXRpb25SZXN1bHQsIGRl
Y2xhcmF0aW9uUmVzdWx0ID09IERlY2xhcmF0aW9uUmVzdWx0OjpWYWxpZCk7CiAgICAgICAgICAg
ICAgICAgY2xhc3NTY29wZS0+dXNlVmFyaWFibGUoaWRlbnQsIGZhbHNlKTsKQEAgLTMwNjUsMTMg
KzMwNzEsMTQgQEAgcGFyc2VNZXRob2Q6CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5
cGU+Ci10ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50
cyhUcmVlQnVpbGRlciYgY29udGV4dCwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYgaW5z
dGFuY2VGaWVsZExvY2F0aW9ucykKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNv
dXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzRmllbGRJbml0aWFsaXpl
clNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBWZWN0b3I8SlNUZXh0
UG9zaXRpb24+JiBjbGFzc0ZpZWxkTG9jYXRpb25zKQogewogICAgIFRyZWVTb3VyY2VFbGVtZW50
cyBzb3VyY2VFbGVtZW50cyA9IGNvbnRleHQuY3JlYXRlU291cmNlRWxlbWVudHMoKTsKICAgICBj
dXJyZW50U2NvcGUoKS0+c2V0SXNDbGFzc1Njb3BlKCk7CiAKICAgICB1bnNpZ25lZCBudW1Db21w
dXRlZEZpZWxkcyA9IDA7Ci0gICAgZm9yIChhdXRvIGxvY2F0aW9uIDogaW5zdGFuY2VGaWVsZExv
Y2F0aW9ucykgeworICAgIGJvb2wgaXNTdGF0aWNGaWVsZCA9IGZhbHNlOworICAgIGZvciAoYXV0
byBsb2NhdGlvbiA6IGNsYXNzRmllbGRMb2NhdGlvbnMpIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qg
bmVlZCB0byB3b3JyeSBhYm91dCBoYXNMaW5lVGVybWluYXRvckJlZm9yZVRva2VuCiAgICAgICAg
IC8vIG9uIGNsYXNzIGZpZWxkcywgc28gd2Ugc2V0IHRoaXMgdmFsdWUgdG8gZmFsc2UuCiAgICAg
ICAgIExleGVyU3RhdGUgbGV4ZXJTdGF0ZSB7IGxvY2F0aW9uLm9mZnNldCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihsb2NhdGlvbi5saW5lKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvY2F0aW9uLmxpbmUpLCBm
YWxzZSB9OwpAQCAtMzA4MCw2ICszMDg3LDE2IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlCiAg
ICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBmaWVsZExvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwog
ICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG51bGxwdHI7CiAgICAgICAgIERlZmlu
ZUZpZWxkTm9kZTo6VHlwZSB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpOYW1lOworCisg
ICAgICAgIGlmIChtYXRjaChSRVNFUlZFRF9JRl9TVFJJQ1QpICYmICptX3Rva2VuLm1fZGF0YS5p
ZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPnN0YXRpY0tleXdvcmQpIHsKKyAgICAgICAgICAg
IGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CisgICAgICAgICAgICBBU1NFUlQoaWRlbnQp
OworICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgaWYgKG1hdGNoKFNFTUlDT0xPTikg
fHwgbWF0Y2ggKEVRVUFMKSB8fCBtYXRjaChDTE9TRUJSQUNFKSB8fCBtX2xleGVyLT5oYXNMaW5l
VGVybWluYXRvckJlZm9yZVRva2VuKCkpCisgICAgICAgICAgICAgICAgZ290byB2YWxpZEZpZWxk
OworICAgICAgICAgICAgaXNTdGF0aWNGaWVsZCA9IHRydWU7CisgICAgICAgIH0KKwogICAgICAg
ICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7CiAgICAgICAgIGNhc2UgUFJJVkFURU5BTUU6CiAg
ICAgICAgICAgICB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpQcml2YXRlTmFtZTsKQEAg
LTMxMDcsNyArMzEyNCw5IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJj
ZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlCiAgICAgICAgICAgICBU
cmVlRXhwcmVzc2lvbiBjb21wdXRlZFByb3BlcnR5TmFtZSA9IHBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24oY29udGV4dCk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShjb21wdXRlZFByb3BlcnR5
TmFtZSwgIkNhbm5vdCBwYXJzZSBjb21wdXRlZCBwcm9wZXJ0eSBuYW1lIik7CiAgICAgICAgICAg
ICBoYW5kbGVQcm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5kIiwgImNvbXB1
dGVkIHByb3BlcnR5IG5hbWUiKTsKLSAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEu
aWRlbnRpZmllckFyZW5hKCkubWFrZVByaXZhdGVJZGVudGlmaWVyKG1fdm0sIElOU1RBTkNFX0NP
TVBVVEVEX05BTUVfUFJFRklYLCBudW1Db21wdXRlZEZpZWxkcysrKTsKKyAgICAgICAgICAgIGlk
ZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZVByaXZhdGVJZGVudGlm
aWVyKG1fdm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N0YXRpY0ZpZWxkID8gU1RBVElDX0NPTVBV
VEVEX05BTUVfUFJFRklYIDogSU5TVEFOQ0VfQ09NUFVURURfTkFNRV9QUkVGSVgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1Db21wdXRlZEZpZWxkcysrKTsKICAgICAgICAgICAgIHR5cGUgPSBEZWZp
bmVGaWVsZE5vZGU6OlR5cGU6OkNvbXB1dGVkTmFtZTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0zMTE3LDYgKzMxMzYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZQogICAg
ICAgICAgICAgZmFpbER1ZVRvVW5leHBlY3RlZFRva2VuKCk7CiAgICAgICAgIH0KIAorICAgIHZh
bGlkRmllbGQ6CiAgICAgICAgIC8vIE9ubHkgdmFsaWQgY2xhc3MgZmllbGRzIGFyZSBoYW5kbGVk
IGluIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgIEFTU0VSVChtYXRjaChFUVVBTCkgfHwgbWF0Y2go
U0VNSUNPTE9OKSB8fCBtYXRjaChDTE9TRUJSQUNFKSB8fCBtX2xleGVyLT5oYXNMaW5lVGVybWlu
YXRvckJlZm9yZVRva2VuKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApp
bmRleCBkYjhlYjczY2I5YTkuLmZkMjk1ZjdiMzVkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oCkBAIC0yNjAsNyArMjYwLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFNv
dXJjZVBhcnNlTW9kZTo6R2V0dGVyTW9kZToKICAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6
OlNldHRlck1vZGU6CiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlOgot
ICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9k
ZToKKyAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1v
ZGU6CiAgICAgICAgICAgICBzZXRJc0Z1bmN0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsKIApA
QCAtMTcxMiw3ICsxNzEyLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJzZUFzeW5jRnVuY3Rpb25Tb3VyY2VFbGVtZW50
cyhUcmVlQnVpbGRlciYsIFNvdXJjZVBhcnNlTW9kZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Cb2R5
RXhwcmVzc2lvbiwgU291cmNlRWxlbWVudHNNb2RlKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJzZUFzeW5jR2VuZXJhdG9yRnVuY3Rpb25T
b3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYsIFNvdXJjZVBhcnNlTW9kZSwgYm9vbCBpc0Fycm93
RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiwgU291cmNlRWxlbWVudHNNb2RlKTsKICAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJzZVNpbmdsZUZ1bmN0
aW9uKFRyZWVCdWlsZGVyJiwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1l
dGVyc0VuZFBvc2l0aW9uKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
b3VyY2VFbGVtZW50cyBwYXJzZUluc3RhbmNlRmllbGRJbml0aWFsaXplclNvdXJjZUVsZW1lbnRz
KFRyZWVCdWlsZGVyJiwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYpOworICAgIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNlQ2xhc3NGaWVs
ZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXImLCBjb25zdCBWZWN0b3I8SlNU
ZXh0UG9zaXRpb24+Jik7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZW50IHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oVHJlZUJ1aWxkZXImLCBjb25zdCBJZGVudGlm
aWVyKiYgZGlyZWN0aXZlLCB1bnNpZ25lZCogZGlyZWN0aXZlTGl0ZXJhbExlbmd0aCk7CiAgICAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNlU3RhdGVtZW50
KFRyZWVCdWlsZGVyJiwgY29uc3QgSWRlbnRpZmllciomIGRpcmVjdGl2ZSwgdW5zaWduZWQqIGRp
cmVjdGl2ZUxpdGVyYWxMZW5ndGggPSBudWxscHRyKTsKICAgICBlbnVtIGNsYXNzIEV4cG9ydFR5
cGUgeyBFeHBvcnRlZCwgTm90RXhwb3J0ZWQgfTsKQEAgLTIwNTMsNyArMjA1Myw3IEBAIHByaXZh
dGU6CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgUGFy
c2VkTm9kZT4KLXN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2UoUGFyc2VyRXJyb3ImIGVycm9yLCBjb25zdCBJZGVudGlmaWVyJiBjYWxsZWVOYW1lLCBT
b3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBQYXJzaW5nQ29udGV4dCBwYXJzaW5nQ29udGV4dCwg
T3B0aW9uYWw8aW50PiBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBj
b25zdCBWYXJpYWJsZUVudmlyb25tZW50KiB2YXJpYWJsZXNVbmRlclREWiwgY29uc3QgVmVjdG9y
PEpTVGV4dFBvc2l0aW9uPiogaW5zdGFuY2VGaWVsZExvY2F0aW9ucykKK3N0ZDo6dW5pcXVlX3B0
cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UoUGFyc2VyRXJyb3ImIGVycm9y
LCBjb25zdCBJZGVudGlmaWVyJiBjYWxsZWVOYW1lLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2Rl
LCBQYXJzaW5nQ29udGV4dCBwYXJzaW5nQ29udGV4dCwgT3B0aW9uYWw8aW50PiBmdW5jdGlvbkNv
bnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50
KiB2YXJpYWJsZXNVbmRlclREWiwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogY2xhc3NG
aWVsZExvY2F0aW9ucykKIHsKICAgICBpbnQgZXJyTGluZTsKICAgICBTdHJpbmcgZXJyTXNnOwpA
QCAtMjA3Myw3ICsyMDczLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZShQYXJzZXJFcnJvciYgZXJyb3IsIGNvbnN0IEkKICAgICAgICAgdmFy
aWFibGVzVW5kZXJURFotPmNvcHlQcml2YXRlTmFtZXNUbyhjdXJyZW50U2NvcGUoKS0+bGV4aWNh
bFZhcmlhYmxlcygpKTsKICAgICB9CiAKLSAgICBhdXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VJbm5l
cihjYWxsZWVOYW1lLCBwYXJzZU1vZGUsIHBhcnNpbmdDb250ZXh0LCBmdW5jdGlvbkNvbnN0cnVj
dG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAgICBh
dXRvIHBhcnNlUmVzdWx0ID0gcGFyc2VJbm5lcihjYWxsZWVOYW1lLCBwYXJzZU1vZGUsIHBhcnNp
bmdDb250ZXh0LCBmdW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBjbGFz
c0ZpZWxkTG9jYXRpb25zKTsKIAogICAgIGludCBsaW5lTnVtYmVyID0gbV9sZXhlci0+bGluZU51
bWJlcigpOwogICAgIGJvb2wgbGV4RXJyb3IgPSBtX2xleGVyLT5zYXdFcnJvcigpOwpAQCAtMjE1
OCw3ICsyMTU4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHBhcnNlKAogICAgIEV2
YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsCiAg
ICAgRGVidWdnZXJQYXJzZURhdGEqIGRlYnVnZ2VyUGFyc2VEYXRhID0gbnVsbHB0ciwKICAgICBj
b25zdCBWYXJpYWJsZUVudmlyb25tZW50KiB2YXJpYWJsZXNVbmRlclREWiA9IG51bGxwdHIsCi0g
ICAgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogaW5zdGFuY2VGaWVsZExvY2F0aW9ucyA9
IG51bGxwdHIsCisgICAgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogY2xhc3NGaWVsZExv
Y2F0aW9ucyA9IG51bGxwdHIsCiAgICAgYm9vbCBpc0luc2lkZU9yZGluYXJ5RnVuY3Rpb24gPSBm
YWxzZSkKIHsKICAgICBBU1NFUlQoIXNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2UoKS5pc051bGwo
KSk7CkBAIC0yMTcwLDcgKzIxNzAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFy
c2UoCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IHJlc3VsdDsKICAgICBpZiAoc291
cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlzOEJpdCgpKSB7CiAgICAgICAgIFBhcnNlcjxMZXhl
cjxMQ2hhcj4+IHBhcnNlcih2bSwgc291cmNlLCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgc2Ny
aXB0TW9kZSwgcGFyc2VNb2RlLCBzdXBlckJpbmRpbmcsIGRlZmF1bHRDb25zdHJ1Y3RvcktpbmRG
b3JUb3BMZXZlbEZ1bmN0aW9uLCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzRXZhbE5vZGU8UGFyc2Vk
Tm9kZT4oKSwgZXZhbENvbnRleHRUeXBlLCBkZWJ1Z2dlclBhcnNlRGF0YSwgaXNJbnNpZGVPcmRp
bmFyeUZ1bmN0aW9uKTsKLSAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+
KGVycm9yLCBuYW1lLCBwYXJzZU1vZGUsIGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4oKSA/IFBhcnNp
bmdDb250ZXh0OjpFdmFsIDogUGFyc2luZ0NvbnRleHQ6OlByb2dyYW0sIFdURjo6bnVsbG9wdCwg
dmFyaWFibGVzVW5kZXJURFosIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgICAgICByZXN1
bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IsIG5hbWUsIHBhcnNlTW9kZSwgaXNF
dmFsTm9kZTxQYXJzZWROb2RlPigpID8gUGFyc2luZ0NvbnRleHQ6OkV2YWwgOiBQYXJzaW5nQ29u
dGV4dDo6UHJvZ3JhbSwgV1RGOjpudWxsb3B0LCB2YXJpYWJsZXNVbmRlclREWiwgY2xhc3NGaWVs
ZExvY2F0aW9ucyk7CiAgICAgICAgIGlmIChwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKQogICAg
ICAgICAgICAgKnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUgPSBwYXJzZXIucG9zaXRpb25CZWZv
cmVMYXN0TmV3bGluZSgpOwogICAgICAgICBpZiAoYnVpbHRpbk1vZGUgPT0gSlNQYXJzZXJCdWls
dGluTW9kZTo6QnVpbHRpbikgewpAQCAtMjE4Myw3ICsyMTgzLDcgQEAgc3RkOjp1bmlxdWVfcHRy
PFBhcnNlZE5vZGU+IHBhcnNlKAogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoZGVmYXVsdENvbnN0cnVjdG9yS2luZEZvclRvcExldmVsRnVuY3Rpb24gPT0gQ29uc3Ry
dWN0b3JLaW5kOjpOb25lLCAiQnVpbHRpbkV4ZWN1dGFibGVzJ3Mgc3BlY2lhbCBjb25zdHJ1Y3Rv
cnMgc2hvdWxkIGFsd2F5cyB1c2UgYSA4LWJpdCBzdHJpbmciKTsKICAgICAgICAgUGFyc2VyPExl
eGVyPFVDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBz
Y3JpcHRNb2RlLCBwYXJzZU1vZGUsIHN1cGVyQmluZGluZywgZGVmYXVsdENvbnN0cnVjdG9yS2lu
ZEZvclRvcExldmVsRnVuY3Rpb24sIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNFdmFsTm9kZTxQYXJz
ZWROb2RlPigpLCBldmFsQ29udGV4dFR5cGUsIGRlYnVnZ2VyUGFyc2VEYXRhLCBpc0luc2lkZU9y
ZGluYXJ5RnVuY3Rpb24pOwotICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9k
ZT4oZXJyb3IsIG5hbWUsIHBhcnNlTW9kZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpID8gUGFy
c2luZ0NvbnRleHQ6OkV2YWwgOiBQYXJzaW5nQ29udGV4dDo6UHJvZ3JhbSwgV1RGOjpudWxsb3B0
LCB2YXJpYWJsZXNVbmRlclREWiwgaW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7CisgICAgICAgIHJl
c3VsdCA9IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvciwgbmFtZSwgcGFyc2VNb2RlLCBp
c0V2YWxOb2RlPFBhcnNlZE5vZGU+KCkgPyBQYXJzaW5nQ29udGV4dDo6RXZhbCA6IFBhcnNpbmdD
b250ZXh0OjpQcm9ncmFtLCBXVEY6Om51bGxvcHQsIHZhcmlhYmxlc1VuZGVyVERaLCBjbGFzc0Zp
ZWxkTG9jYXRpb25zKTsKICAgICAgICAgaWYgKHBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUpCiAg
ICAgICAgICAgICAqcG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSA9IHBhcnNlci5wb3NpdGlvbkJl
Zm9yZUxhc3ROZXdsaW5lKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXJNb2Rlcy5oCmluZGV4IGVhZmZkZTIxYzE1OS4uNzk1MThhMzA1NGQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCkBAIC02Niw3ICs2Niw3IEBAIGVu
dW0gY2xhc3MgU291cmNlUGFyc2VNb2RlIDogdWludDhfdCB7CiAgICAgQXN5bmNHZW5lcmF0b3JX
cmFwcGVyRnVuY3Rpb25Nb2RlID0gMTYsCiAgICAgQXN5bmNHZW5lcmF0b3JXcmFwcGVyTWV0aG9k
TW9kZSAgID0gMTcsCiAgICAgR2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGUgICAgICAgID0gMTgs
Ci0gICAgSW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSAgICAgID0gMTksCisgICAgQ2xhc3NG
aWVsZEluaXRpYWxpemVyTW9kZSAgICAgICAgID0gMTksCiB9OwogCiBjbGFzcyBTb3VyY2VQYXJz
ZU1vZGVTZXQgeyAKQEAgLTExNiw3ICsxMTYsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaXNGdW5j
dGlvblBhcnNlTW9kZShTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKQogICAgICAgICBTb3VyY2VQ
YXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yQm9keU1vZGUsCiAgICAgICAgIFNvdXJjZVBhcnNlTW9k
ZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlLAogICAgICAgICBTb3VyY2VQYXJz
ZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGUsCi0gICAgICAgIFNvdXJjZVBh
cnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSkuY29udGFpbnMocGFyc2VNb2Rl
KTsKKyAgICAgICAgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKS5j
b250YWlucyhwYXJzZU1vZGUpOwogfSAKIAogQUxXQVlTX0lOTElORSBib29sIGlzQXN5bmNGdW5j
dGlvblBhcnNlTW9kZShTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKSAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAppbmRleCAzMzI4
ZGY2Y2MzOTcuLjE0ZjM3M2E4ZmEwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNv
dXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGU6Ci0gICAgICAgIGNhc2UgU291cmNlUGFy
c2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOgorICAgICAgICBjYXNlIFNvdXJj
ZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZToKICAgICAgICAgICAgIGZ1bmN0
aW9uSGVhZGVyID0gIiI7CiAgICAgICAgICAgICBicmVhazsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAppbmRleCAzMWRkODczMmU5ZTIuLjBmZGQ5YmZl
NWYwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAK
QEAgLTQyMSw3ICs0MjEsNyBAQCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoY2FsbGVyR2V0dGVy
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVgogICAgIGNhc2UgU291
cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGU6CiAgICAgY2Fz
ZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGU6CiAgICAg
Y2FzZSBTb3VyY2VQYXJzZU1vZGU6OkdlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlOgotICAgIGNh
c2UgU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOgorICAgIGNh
c2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlOgogICAgICAgICBp
ZiAoIWZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKS0+aXNJblN0cmljdENvbnRleHQoKSkKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbGVyKTsKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRnVuY3Rp
b24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUgc3RyaWN0IGNhbGxlciJfcykpOwotLSAKMi4yOC4w
Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414161</attachid>
            <date>2020-11-15 01:02:16 -0800</date>
            <delta_ts>2020-11-15 08:37:24 -0800</delta_ts>
            <desc>Add support for static public fields, v8</desc>
            <filename>0001-JSC-Add-support-for-static-public-class-fields.patch</filename>
            <type>text/plain</type>
            <size>68431</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA3ZmQwMzhkYjVjYmEzNjdhZThkYmMyYjBhYmZhNzA2MGEwZWZmM2Y0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/WGFuPTIwTD1DMz1CM3Blej89IDx4YW5AaWdh
bGlhLmNvbT4KRGF0ZTogVGh1LCAxNiBBcHIgMjAyMCAxODoyMToxMyArMDIwMApTdWJqZWN0OiBb
UEFUQ0hdIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcwog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5NQoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpKU1Rlc3RzOgoKRW5hYmxlIHN0YXRpYyBwdWJsaWMgZmllbGRz
LCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJvbSB0aGUKVjggcHJvamVjdC4gQWxzbyBz
cGxpdCB0aGUgc3VwcG9ydCBjb2RlIGludG8gYSBzZXBhcmF0ZSBmaWxlCihoYXJtb255LXN1cHBv
cnQuanMpIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgoKKiB0ZXN0MjYyL2NvbmZpZy55YW1sOiBlbmFi
bGUgc3RhdGljIHB1YmxpYyBmaWVsZHMuCiogc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255Lmpz
OiB1c2UgdGhlIG5ldyBzdXBwb3J0IGZpbGUuCiogc3RyZXNzL2NsYXNzLWZpZWxkcy1zdGF0aWMt
aGFybW9ueS5qczogQWRkZWQuCiogc3RyZXNzL2hhcm1vbnktc3VwcG9ydC5qczogQWRkZWQuCgpT
b3VyY2UvSmF2YVNjcmlwdENvcmU6CgpBZGQgc3VwcG9ydCBmb3Igc3RhdGljIHB1YmxpYyBjbGFz
cyBmaWVsZHMuIFdlIGNhbiByZXVzZSBtb3N0IG9mCnRoZSBleGlzdGluZyBtYWNoaW5lcnkgYXZh
aWxhYmxlIGZvciBpbnN0YW5jZSBmaWVsZHMsIHdpdGggYSBvbmUKaXNzdWVzIHRoYXQgbWVyaXQg
c3BlY2lhbCBjb21tZW50OgoKU3RhdGljIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIGxpa2UgaW5z
dGFuY2UgZmllbGRzLCB3aXRoIGEKc3ludGhldGljIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUgdG8g
YWxsb3cgdXMgdG8gdHJpdmlhbGx5IGZvbGxvdwp0aGUgc2NvcGluZyBydWxlcyBpbiB0aGUgc3Bl
Yy4gQXMgaXQgaGFwcGVucyB3aXRoIGluc3RhbmNlIGZpZWxkcwp0aGlzIGNvdWxkIGJlIGlubGlu
ZWQgaW4gYSBmdXR1cmUgcGF0Y2guCgpBIGxvdCBvZiBzbWFsbCBjaGFuZ2VzIGluIG1hbnkgZmls
ZXMgYXJlIGp1c3QgYSBtYXR0ZXIgb2YgZG9pbmcKcy9pbnN0YW5jZS9jbGFzcy8gZm9yIHZhcmlh
YmxlcyByZWxhdGVkIHRvIGNsYXNzIGZpZWxkcywgd2hpY2gKYmVmb3JlIHdlcmUgYXNzdW1pbmcg
dGhlcmUgYXJlIG9ubHkgaW5zdGFuY2UgZmllbGRzIGltcGxlbWVudGVkLgoKKiBieXRlY29kZS9V
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHA6CihKU0M6OmdlbmVyYXRlVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayk6IGRvIHMvaW5zdGFuY2VGaWVsZC9jbGFzc0ZpZWxkLy4KKiBieXRlY29k
ZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOiBkaXR0by4KKiBieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwOgooSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0NsYXNz
RmllbGRJbml0aWFsaXplckZ1bmN0aW9uKTogZGl0dG8uCiogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmg6IGRpdHRvLCBwbHVzIGFkZCBhIHBhcmFtZXRlcgpmb3Igc3RhdGljIGZpZWxk
IGxvY2F0aW9ucyBpbiBlbWl0RGVmaW5lQ2xhc3NFbGVtZW50cy4KKiBieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcDoKKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogc2F2
ZSBzdGF0aWMgZmllbGRzCmxvY2F0aW9ucyB3aGVuIGdvaW5nIHRocm91Z2ggdGhlIHByb3BlcnR5
IGxpc3QuCihKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRTYXZlQ29tcHV0ZWRGaWVsZE5hbWUp
OiBjb25zaWRlcgpzdGF0aWMgZmllbGRzIGhlcmUgdG9vLgooSlNDOjpDbGFzc0V4cHJOb2RlOjpl
bWl0Qnl0ZWNvZGUpOiBjYWxsIHRoZSBpbml0aWFsaXplciBmb3IKc3RhdGljIGZpZWxkcyBhcyB0
aGUgdmVyeSBsYXN0IGFjdGlvbiBvZiB0aGUgY2xhc3MgY3JlYXRpb24uCiogcGFyc2VyL0FTVEJ1
aWxkZXIuaDoKKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRGVmaW5lRmllbGQpOiBmaWVsZCBub2Rl
cyBjYW4gYmUgc3RhdGljCnRvbyBub3cuCiogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKEpT
Qzo6RGVmaW5lRmllbGROb2RlOjpEZWZpbmVGaWVsZE5vZGUpOiBkaXR0by4KKiBwYXJzZXIvTm9k
ZXMuaDogZGl0dG8uCiogcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUlubmVyKTogcy9pbnN0YW5jZUZpZWxkL2NsYXNzRmllbGQvCihKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZUNsYXNzKTogY29uc2lkZXIgc3RhdGljIGZpZWxkcy4KKEpTQzo6UGFy
c2VyPExleGVyVHlwZT46OnBhcnNlSW5zdGFuY2VGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVu
dHMpOgpzL2luc3RhbmNlRmllbGQvY2xhc3NGaWVsZC8sIGFuZCBjb25zaWRlciBzdGF0aWMgZmll
bGRzLgoqIHBhcnNlci9QYXJzZXIuaDoKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlKTog
cy9pbnN0YW5jZUZpZWxkL2NsYXNzRmllbGQvCihKU0M6OnBhcnNlKTogZGl0dG8uCiogcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcDoKKEpTQzo6SlNGdW5jdGlvbjo6c2V0RnVuY3Rpb25OYW1lKTogcy9p
bnN0YW5jZUZpZWxkL2NsYXNzRmllbGQvCi0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1o
YXJtb255LmpzICAgICAgICB8IDE2NSArLS0tLS0KIEpTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxk
cy1zdGF0aWMtaGFybW9ueS5qcyB8IDUwMyArKysrKysrKysrKysrKysrKysKIEpTVGVzdHMvc3Ry
ZXNzL2hhcm1vbnktc3VwcG9ydC5qcyAgICAgICAgICAgICB8IDE5NiArKysrKysrCiBKU1Rlc3Rz
L3Rlc3QyNjIvY29uZmlnLnlhbWwgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICB8ICA1MSArKwogLi4uL2J5dGVj
b2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcCAgIHwgICA0ICstCiAuLi4vYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCAgICAgfCAgMTIgKy0KIC4uLi9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwICAgICAgICB8ICAxMiArLQogLi4uL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oICAgICAgICAgIHwgICA2ICstCiAuLi4vYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAgICAgICAgICAgICAgfCAgNjUgKystCiAuLi4vaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwICAgICAgICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZXMuaCAgICAgICAgICB8ICAxMCArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwICAgICAgIHwgIDQ2ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5oICAgICAgICAgfCAgMTQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaCAgICB8ICAgNCArLQogLi4uL3J1bnRpbWUvRnVuY3Rp
b25Qcm90b3R5cGUuY3BwICAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcCAgfCAgIDIgKy0KIDE4IGZpbGVzIGNoYW5nZWQsIDg4
NiBpbnNlcnRpb25zKCspLCAyMjYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNU
ZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzCiBjcmVhdGUgbW9kZSAx
MDA2NDQgSlNUZXN0cy9zdHJlc3MvaGFybW9ueS1zdXBwb3J0LmpzCgpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBiZDZlMDAwYzM2N2YuLjk2
MDU5MTdkOWNjZSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAyMC0wNi0wNSAgWGFuIEzDs3BleiAgPHhhbkBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGlj
IGNsYXNzIGZpZWxkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk0MDk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRW5hYmxlIHN0YXRpYyBwdWJsaWMgZmllbGRzLCBhbmQgaW1wb3J0IG5ldyBzdHJlc3Mg
dGVzdHMgZnJvbSB0aGUKKyAgICAgICAgVjggcHJvamVjdC4gQWxzbyBzcGxpdCB0aGUgc3VwcG9y
dCBjb2RlIGludG8gYSBzZXBhcmF0ZSBmaWxlCisgICAgICAgIChoYXJtb255LXN1cHBvcnQuanMp
IHRvIGF2b2lkIGR1cGxpY2F0aW9uLgorCisgICAgICAgICogdGVzdDI2Mi9jb25maWcueWFtbDog
ZW5hYmxlIHN0YXRpYyBwdWJsaWMgZmllbGRzLgorICAgICAgICAqIHN0cmVzcy9jbGFzcy1maWVs
ZHMtaGFybW9ueS5qczogdXNlIHRoZSBuZXcgc3VwcG9ydCBmaWxlLgorICAgICAgICAqIHN0cmVz
cy9jbGFzcy1maWVsZHMtc3RhdGljLWhhcm1vbnkuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVz
cy9oYXJtb255LXN1cHBvcnQuanM6IEFkZGVkLgorCiAyMDIwLTExLTEzICBYYW4gTMOzcGV6ICA8
eGFuQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0pTQ10gVXNlIHN5bWJvbHMgYXMgaWRlbnRpZmll
cnMgZm9yIGNsYXNzIGZpZWxkcyBjb21wdXRlZCBuYW1lcyBzdG9yYWdlCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtaGFybW9ueS5qcyBiL0pTVGVzdHMvc3RyZXNzL2Ns
YXNzLWZpZWxkcy1oYXJtb255LmpzCmluZGV4IDJmZWFjODJkYTkxYS4uMDY0OGVkMmYzYzljIDEw
MDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtaGFybW9ueS5qcworKysgYi9K
U1Rlc3RzL3N0cmVzcy9jbGFzcy1maWVsZHMtaGFybW9ueS5qcwpAQCAtMzEsMTcwICszMSw3IEBA
CiAKICJ1c2Ugc3RyaWN0IjsKIAotZnVuY3Rpb24gY2xhc3NPZihvYmplY3QpIHsKLSAgIC8vIEFy
Z3VtZW50IG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLgotICAgdmFyIHN0cmluZyA9IE9i
amVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpOwotICAgLy8gU3RyaW5nIGhhcyBm
b3JtYXQgW29iamVjdCA8Q2xhc3NOYW1lPl0uCi0gICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyg4
LCBzdHJpbmcubGVuZ3RoIC0gMSk7Ci19Ci0KLS8qKgotICogQ29tcGFyZXMgdHdvIG9iamVjdHMg
Zm9yIGtleS92YWx1ZSBlcXVhbGl0eS4KLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGV5IGFyZSBlcXVh
bCwgZmFsc2Ugb3RoZXJ3aXNlLgotICovCi1mdW5jdGlvbiBkZWVwT2JqZWN0RXF1YWxzKGEsIGIp
IHsKLSAgdmFyIGFQcm9wcyA9IE9iamVjdC5rZXlzKGEpOwotICBhUHJvcHMuc29ydCgpOwotICB2
YXIgYlByb3BzID0gT2JqZWN0LmtleXMoYik7Ci0gIGJQcm9wcy5zb3J0KCk7Ci0gIGlmICghZGVl
cEVxdWFscyhhUHJvcHMsIGJQcm9wcykpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBhUHJvcHMubGVuZ3RoOyBpKyspIHsKLSAgICBpZiAoIWRlZXBFcXVh
bHMoYVthUHJvcHNbaV1dLCBiW2FQcm9wc1tpXV0pKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0vKioKLSAqIENvbXBhcmVzIHR3byBKYXZh
U2NyaXB0IHZhbHVlcyBmb3IgdHlwZSBhbmQgdmFsdWUgZXF1YWxpdHkuCi0gKiBJdCBjaGVja3Mg
aW50ZXJuYWxzIG9mIGFycmF5cyBhbmQgb2JqZWN0cy4KLSAqLwotZnVuY3Rpb24gZGVlcEVxdWFs
cyhhLCBiKSB7Ci0gIGlmIChhID09PSBiKSB7Ci0gICAgLy8gQ2hlY2sgZm9yIC0wLgotICAgIGlm
IChhID09PSAwKSByZXR1cm4gKDEgLyBhKSA9PT0gKDEgLyBiKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfQotICBpZiAodHlwZW9mIGEgIT0gdHlwZW9mIGIpIHJldHVybiBmYWxzZTsKLSAgaWYgKHR5
cGVvZiBhID09ICdudW1iZXInKSByZXR1cm4gaXNOYU4oYSkgJiYgaXNOYU4oYik7Ci0gIGlmICh0
eXBlb2YgYSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGEgIT09ICdmdW5jdGlvbicpIHJldHVybiBm
YWxzZTsKLSAgLy8gTmVpdGhlciBhIG5vciBiIGlzIHByaW1pdGl2ZS4KLSAgdmFyIG9iamVjdENs
YXNzID0gY2xhc3NPZihhKTsKLSAgaWYgKG9iamVjdENsYXNzICE9PSBjbGFzc09mKGIpKSByZXR1
cm4gZmFsc2U7Ci0gIGlmIChvYmplY3RDbGFzcyA9PT0gJ1JlZ0V4cCcpIHsKLSAgICAvLyBGb3Ig
UmVnRXhwLCBqdXN0IGNvbXBhcmUgcGF0dGVybiBhbmQgZmxhZ3MgdXNpbmcgaXRzIHRvU3RyaW5n
LgotICAgIHJldHVybiAoYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCkpOwotICB9Ci0gIC8v
IEZ1bmN0aW9ucyBhcmUgb25seSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcy4KLSAgaWYgKG9iamVj
dENsYXNzID09PSAnRnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7Ci0gIGlmIChvYmplY3RDbGFzcyA9
PT0gJ0FycmF5JykgewotICAgIHZhciBlbGVtZW50Q291bnQgPSAwOwotICAgIGlmIChhLmxlbmd0
aCAhPSBiLmxlbmd0aCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmICghZGVlcEVxdWFscyhhW2ld
LCBiW2ldKSkgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBp
ZiAob2JqZWN0Q2xhc3MgPT0gJ1N0cmluZycgfHwgb2JqZWN0Q2xhc3MgPT0gJ051bWJlcicgfHwK
LSAgICAgIG9iamVjdENsYXNzID09ICdCb29sZWFuJyB8fCBvYmplY3RDbGFzcyA9PSAnRGF0ZScp
IHsKLSAgICBpZiAoYS52YWx1ZU9mKCkgIT09IGIudmFsdWVPZigpKSByZXR1cm4gZmFsc2U7Ci0g
IH0KLSAgcmV0dXJuIGRlZXBPYmplY3RFcXVhbHMoYSwgYik7Ci19Ci0KLS8qKgotICogVGhyb3dz
IGFuIGV4Y2VwdGlvbiBjb250YWluaW5nIHRoZSB1c2VyX21lc3NhZ2UgKGlmIGFueSkgYW5kIHRo
ZSB2YWx1ZXMuCi0gKi8KLWZ1bmN0aW9uIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3Nh
Z2UgPSAnJykgewotICAvLyBUT0RPKGNpcmEpOiBSZXBsYWNlIFN0cmluZyB3aXRoIFByZXR0eVBy
aW50IGZvciBvYmplY3RzIGFuZCBhcnJheXMuCi0gIHZhciBtZXNzYWdlID0gJ0ZhaWx1cmUnICsg
KHVzZXJfbWVzc2FnZSA/ICcgKCcgKyB1c2VyX21lc3NhZ2UgKyAnKScgOiAnJykgKwotICAgICAg
JzogZXhwZWN0ZWQgPCcgKyBTdHJpbmcoZXhwZWN0ZWQpICsgJz4sIGZvdW5kIDwnICsgU3RyaW5n
KGZvdW5kKSArICc+Lic7Ci0gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTsKLX0KLQotLyoqCi0g
KiBUaHJvd3MgaWYgb2JqIGlzIG5vdCBvZiBnaXZlbiB0eXBlLgotICovCi1mdW5jdGlvbiBhc3Nl
cnRJbnN0YW5jZW9mKG9iaiwgdHlwZSkgewotICBpZiAoIShvYmogaW5zdGFuY2VvZiB0eXBlKSkg
ewotICAgIHZhciBhY3R1YWxUeXBlTmFtZSA9IG51bGw7Ci0gICAgdmFyIGFjdHVhbENvbnN0cnVj
dG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikuY29uc3RydWN0b3I7Ci0gICAgaWYgKHR5
cGVvZiBhY3R1YWxDb25zdHJ1Y3RvciA9PSAiZnVuY3Rpb24iKSB7Ci0gICAgICBhY3R1YWxUeXBl
TmFtZSA9IGFjdHVhbENvbnN0cnVjdG9yLm5hbWUgfHwgU3RyaW5nKGFjdHVhbENvbnN0cnVjdG9y
KTsKLSAgICB9Ci0gICAgdGhyb3cgbmV3IEVycm9yKCdPYmplY3QgPCcgKyBvYmogKyAnPiBpcyBu
b3QgYW4gaW5zdGFuY2Ugb2YgPCcgKwotICAgICAgICAgICAgICAgICAgICAodHlwZS5uYW1lIHx8
IHR5cGUpICsgJz4nICsKLSAgICAgICAgICAgICAgICAgICAgKGFjdHVhbFR5cGVOYW1lID8gJyBi
dXQgb2YgPCAnICsgYWN0dWFsVHlwZU5hbWUgKyAnPicgOiAnJykpOwotICB9Ci19Ci0KLS8qKgot
ICogVGhyb3dzIGlmIG9iaiBpcyBub3QgdGhlIHNhbWUgYXMgZXhwZWN0ZWQuCi0gKi8KLWZ1bmN0
aW9uIGFzc2VydFNhbWUoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCkgewotICBpZiAoZm91bmQg
PT09IGV4cGVjdGVkKSB7Ci0gICAgaWYgKGV4cGVjdGVkICE9PSAwIHx8ICgxIC8gZXhwZWN0ZWQp
ID09PSAoMSAvIGZvdW5kKSkKLSAgICAgIHJldHVybjsKLSAgfSBlbHNlIGlmICgoZXhwZWN0ZWQg
IT09IGV4cGVjdGVkKSAmJiAoZm91bmQgIT09IGZvdW5kKSkgewotICAgICAgcmV0dXJuOwotICB9
Ci0gIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCk7Ci19Ci0KLS8qKgotICogVGhyb3dz
IGlmIHR3byB2YXJpYWJsZXMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMgb3IgdmFsdWVzLgotICovCi0K
LWZ1bmN0aW9uIGFzc2VydEVxdWFscyhleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSA9ICcn
KSB7Ci0gIGlmICghZGVlcEVxdWFscyhleHBlY3RlZCwgZm91bmQpKSB7Ci0gICAgZmFpbChleHBl
Y3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSk7Ci0gIH0KLX0KLQotLyoqCi0gKiBUaHJvd3MgaWYg
dHdvIHZhcmlhYmxlcyBoYXZlIGVxdWFsIHR5cGVzIG9yIHZhbHVlcy4KLSAqLwotCi1mdW5jdGlv
biBhc3NlcnROb3RFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2UgPSAnJykgewot
ICBpZiAoZGVlcEVxdWFscyhleHBlY3RlZCwgZm91bmQpKSB7Ci0gICAgZmFpbChleHBlY3RlZCwg
Zm91bmQsIHVzZXJfbWVzc2FnZSk7Ci0gIH0KLX0KLQotLyoqCi0gKiBUaHJvd3MgaWYgdmFsdWUg
aXMgZmFsc2UuCi0gKi8KLWZ1bmN0aW9uIGFzc2VydFRydWUodmFsdWUsIHVzZXJfbWVzc2FnZSA9
ICcnKSB7Ci0gIGFzc2VydEVxdWFscyh0cnVlLCB2YWx1ZSwgdXNlcl9tZXNzYWdlKTsKLX0KLQot
Ci0vKioKLSAqIFRocm93cyBpZiB2YWx1ZSBpcyB0cnVlLgotICovCi1mdW5jdGlvbiBhc3NlcnRG
YWxzZSh2YWx1ZSwgdXNlcl9tZXNzYWdlID0gJycpIHsKLSAgYXNzZXJ0RXF1YWxzKGZhbHNlLCB2
YWx1ZSwgdXNlcl9tZXNzYWdlKTsKLX0KLQotLyoqCi0gKiBSdW5zIGNvZGUoKSBhbmQgYXNzZXJ0
cyB0aGF0IGl0IHRocm93cyB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbi4KLSAqLwotZnVuY3Rpb24g
YXNzZXJ0VGhyb3dzKGNvZGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQpIHsKLSAgdHJ5IHsKLSAgICBp
ZiAodHlwZW9mIGNvZGUgPT0gJ2Z1bmN0aW9uJykgewotICAgICAgY29kZSgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBldmFsKGNvZGUpOwotICAgIH0KLSAgfSBjYXRjaCAoZSkgewotICAgIGlmICh0
eXBlb2YgdHlwZV9vcHQgPT0gJ2Z1bmN0aW9uJykgewotICAgICAgYXNzZXJ0SW5zdGFuY2VvZihl
LCB0eXBlX29wdCk7Ci0gICAgfQotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDMpIHsKLSAg
ICAgIGFzc2VydEVxdWFscyhjYXVzZV9vcHQsIGUudHlwZSwgJ3Rocm93biBleGNlcHRpb24gdHlw
ZSBtaXNtYXRjaCcpOwotICAgIH0KLSAgICAvLyBTdWNjZXNzLgotICAgIHJldHVybjsKLSAgfQot
ICB2YXIgZXhwZWN0ZWQgPSBhcmd1bWVudHMubGVuZ3RoID49IDMgPyBjYXVzZV9vcHQgOgotICAg
ICAgdHlwZW9mIHR5cGVfb3B0ID09ICdmdW5jdGlvbicgPyB0eXBlX29wdCA6ICdhbnkgZXhjZXB0
aW9uJzsKLSAgZmFpbChleHBlY3RlZCwgJ25vIGV4Y2VwdGlvbicsICdleHBlY3RlZCB0aHJvd24g
ZXhjZXB0aW9uJyk7Ci19Citsb2FkKCIuL2hhcm1vbnktc3VwcG9ydC5qcyIpOwogCiB7CiAgIGNs
YXNzIEMgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1o
YXJtb255LmpzIGIvSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255Lmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTg2NzRiNTFmOWEyCi0t
LSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJt
b255LmpzCkBAIC0wLDAgKzEsNTAzIEBACisvL0AgcmVxdWlyZU9wdGlvbnMoIi0tdXNlUHVibGlj
Q2xhc3NGaWVsZHM9MSIpCisvL0AgZGVmYXVsdE5vRWFnZXJSdW4KKworLy8gQ29weXJpZ2h0IDIw
MTcgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
Ky8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisidXNlIHN0cmljdCI7CisKK2xvYWQoIi4vaGFybW9ueS1zdXBwb3J0LmpzIik7CisK
K3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGE7CisgIH0KKworICBhc3NlcnRFcXVhbHModW5k
ZWZpbmVkLCBDLmEpOworICBsZXQgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoQywgJ2EnKTsKKyAgYXNzZXJ0VHJ1ZShDLmhhc093blByb3BlcnR5KCdhJykpOwor
ICBhc3NlcnRUcnVlKGRlc2NyaXB0b3Iud3JpdGFibGUpOworICBhc3NlcnRUcnVlKGRlc2NyaXB0
b3IuZW51bWVyYWJsZSk7CisgIGFzc2VydFRydWUoZGVzY3JpcHRvci5jb25maWd1cmFibGUpOwor
CisgIGxldCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYSk7Cit9CisK
K3sKKyAgbGV0IHggPSAnYSc7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBhOworICAgIHN0YXRp
YyBoYXNPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMTsgfQorICAgIHN0YXRpYyBi
ID0geDsKKyAgICBzdGF0aWMgYyA9IDE7CisgIH0KKworICBhc3NlcnRFcXVhbHModW5kZWZpbmVk
LCBDLmEpOworICBhc3NlcnRFcXVhbHMoJ2EnLCBDLmIpOworICBhc3NlcnRFcXVhbHMoMSwgQy5j
KTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuaGFzT3duUHJvcGVydHkoKSk7CisKKyAgbGV0IGMgPSBu
ZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5hKTsKKyAgYXNzZXJ0RXF1YWxzKHVu
ZGVmaW5lZCwgYy5iKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5jKTsKK30KKworewor
ICBhc3NlcnRUaHJvd3MoKCkgPT4geworICAgIGNsYXNzIEMgeworICAgICAgc3RhdGljIHggPSBP
YmplY3QuZnJlZXplKHRoaXMpOworICAgICAgc3RhdGljIGMgPSA0MjsKKyAgICB9CisgIH0sIFR5
cGVFcnJvcik7Cit9CisKK3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSB0aGlzOworICAg
IHN0YXRpYyBkID0gKCkgPT4gdGhpczsKKyAgfQorCisgIGFzc2VydEVxdWFscyhDLCBDLmMpOwor
ICBhc3NlcnRFcXVhbHMoQywgQy5kKCkpOworCisgIGxldCBjID0gbmV3IEM7CisgIGFzc2VydEVx
dWFscyh1bmRlZmluZWQsIGMuYyk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuZCk7Cit9
CisKK3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSAxOworICAgIHN0YXRpYyBkID0gdGhp
cy5jOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYyk7CisgIGFzc2VydEVxdWFscygxLCBD
LmQpOworCisgIGxldCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYyk7
CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuZCk7Cit9CisKK3sKKyAgY2xhc3MgQyB7Cisg
ICAgc3RhdGljIGIgPSAxOworICAgIHN0YXRpYyBjID0gKCkgPT4gdGhpcy5iOworICB9CisKKyAg
YXNzZXJ0RXF1YWxzKDEsIEMuYik7CisgIGFzc2VydEVxdWFscygxLCBDLmMoKSk7CisKKyAgbGV0
IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5jKTsKK30KKworeworICBs
ZXQgeCA9ICdhJzsKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGIgPSAxOworICAgIHN0YXRpYyBj
ID0gKCkgPT4gdGhpcy5iOworICAgIHN0YXRpYyBlID0gKCkgPT4geDsKKyAgfQorCisgIGFzc2Vy
dEVxdWFscygxLCBDLmIpOworICBhc3NlcnRFcXVhbHMoJ2EnLCBDLmUoKSk7CisKKyAgbGV0IGEg
PSB7YiA6IDIgfTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYy5jYWxsKGEpKTsKKworICBsZXQgYyA9
IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmIpOworICBhc3NlcnRFcXVhbHMo
dW5kZWZpbmVkLCBjLmMpOworfQorCit7CisgIGxldCB4ID0gJ2EnOworICBjbGFzcyBDIHsKKyAg
ICBzdGF0aWMgYyA9IDE7CisgICAgc3RhdGljIGQgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMu
YzsgfTsKKyAgICBzdGF0aWMgZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfTsKKyAgfQorCisg
IGFzc2VydEVxdWFscygxLCBDLmMpOworICBhc3NlcnRFcXVhbHMoMSwgQy5kKCkpOworICBhc3Nl
cnRFcXVhbHMoJ2EnLCBDLmUoKSk7CisKKyAgQy5jID0gMjsKKyAgYXNzZXJ0RXF1YWxzKDIsIEMu
ZCgpKTsKKworICBsZXQgYSA9IHtjIDogMyB9OworICBhc3NlcnRFcXVhbHMoMywgQy5kLmNhbGwo
YSkpOworCisgIGFzc2VydFRocm93cyhDLmQuYmluZCh1bmRlZmluZWQpKTsKKworICBsZXQgYyA9
IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmMpOworICBhc3NlcnRFcXVhbHMo
dW5kZWZpbmVkLCBjLmQpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmUpOworfQorCit7
CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBjID0gZnVuY3Rpb24oKSB7IHJldHVybiAxIH07Cisg
IH0KKworICBhc3NlcnRFcXVhbHMoJ2MnLCBDLmMubmFtZSk7Cit9CisKK3sKKyAgbGV0IGQgPSBm
dW5jdGlvbigpIHsgcmV0dXJuIG5ldy50YXJnZXQ7IH0KKyAgY2xhc3MgQyB7CisgICAgc3RhdGlj
IGMgPSBkOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5jKCkpOworICBhc3Nl
cnRFcXVhbHMobmV3IGQsIG5ldyBDLmMoKSk7Cit9CisKK3sKKyAgY2xhc3MgQyB7CisgICAgc3Rh
dGljIGMgPSAoKSA9PiBuZXcudGFyZ2V0OworICB9CisKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5l
ZCwgQy5jKCkpOworfQorCit7CisgICBjbGFzcyBDIHsKKyAgICAgc3RhdGljIGMgPSAoKSA9PiB7
CisgICAgICAgbGV0IGI7CisgICAgICAgY2xhc3MgQSB7CisgICAgICAgICBjb25zdHJ1Y3Rvcigp
IHsKKyAgICAgICAgICAgYiA9IG5ldy50YXJnZXQ7CisgICAgICAgICB9CisgICAgICAgfTsKKyAg
ICAgICBuZXcgQTsKKyAgICAgICBhc3NlcnRFcXVhbHMoQSwgYik7CisgICAgIH0KKyAgfQorCisg
IEMuYygpOworfQorCit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBjID0gbmV3LnRhcmdldDsK
KyAgfQorCisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIEMuYyk7Cit9CisKK3sKKyAgY2xhc3Mg
QiB7CisgICAgc3RhdGljIGQgPSAxOworICAgIHN0YXRpYyBiID0gKCkgPT4gdGhpcy5kOworICB9
CisKKyAgY2xhc3MgQyBleHRlbmRzIEIgeworICAgIHN0YXRpYyBjID0gc3VwZXIuZDsKKyAgICBz
dGF0aWMgZCA9ICgpID0+IHN1cGVyLmQ7CisgICAgc3RhdGljIGUgPSAoKSA9PiBzdXBlci5iKCk7
CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwgQy5jKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuZCgp
KTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuZSgpKTsKK30KKworeworICBsZXQgZm9vID0gdW5kZWZp
bmVkOworICBjbGFzcyBCIHsKKyAgICBzdGF0aWMgc2V0IGQoeCkgeworICAgICAgZm9vID0geDsK
KyAgICB9CisgIH0KKworICBjbGFzcyBDIGV4dGVuZHMgQiB7CisgICAgc3RhdGljIGQgPSAyOwor
ICB9CisKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgZm9vKTsKKyAgYXNzZXJ0RXF1YWxzKDIs
IEMuZCk7Cit9CisKKworeworICBsZXQgQyAgPSBjbGFzcyB7CisgICAgc3RhdGljIGM7CisgIH07
CisKKyAgYXNzZXJ0RXF1YWxzKCJDIiwgQy5uYW1lKTsKK30KKworeworICBjbGFzcyBDIHsKKyAg
ICBzdGF0aWMgYyA9IG5ldyBDOworICB9CisKKyAgYXNzZXJ0VHJ1ZShDLmMgaW5zdGFuY2VvZiBD
KTsKK30KKworKGZ1bmN0aW9uIHRlc3QoKSB7CisgIGZ1bmN0aW9uIG1ha2VDKCkgeworICAgIHZh
ciB4ID0gMTsKKworICAgIHJldHVybiBjbGFzcyB7CisgICAgICBzdGF0aWMgYSA9ICgpID0+ICgp
ID0+IHg7CisgICAgfQorICB9CisKKyAgbGV0IEMgPSBtYWtlQygpOworICBsZXQgZiA9IEMuYSgp
OworICBhc3NlcnRFcXVhbHMoMSwgZigpKTsKK30pKCkKKworeworICBsZXQgYyA9ICJjIjsKKyAg
Y2xhc3MgQyB7CisgICAgc3RhdGljIFsiYSJdID0gMTsKKyAgICBzdGF0aWMgWyJiIl07CisgICAg
c3RhdGljIFtjXTsKKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBDLmEpOworICBhc3NlcnRFcXVh
bHModW5kZWZpbmVkLCBDLmIpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBDW2NdKTsKK30K
KworeworICBsZXQgbG9nID0gW107CisgIGZ1bmN0aW9uIHJ1bihpKSB7CisgICAgbG9nLnB1c2go
aSk7CisgICAgcmV0dXJuIGk7CisgIH0KKworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgW3J1bigx
KV0gPSBydW4oNik7CisgICAgc3RhdGljIFtydW4oMildID0gcnVuKDcpOworICAgIFtydW4oMyld
KCkgeyBydW4oOSk7fQorICAgIHN0YXRpYyBbcnVuKDQpXSA9IHJ1big4KTsKKyAgICBzdGF0aWMg
W3J1big1KV0oKSB7IHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5vdCBleGVjdXRlJyk7fTsKKyAg
fQorCisgIGxldCBjID0gbmV3IEM7CisgIGNbM10oKTsKKyAgYXNzZXJ0RXF1YWxzKFsxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5XSwgbG9nKTsKK30KKworCisKK2Z1bmN0aW9uIHgoKSB7CisKKyAg
Ly8gVGhpcyB0ZXN0cyBsYXp5IHBhcnNpbmcuCisgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICBs
ZXQgbG9nID0gW107CisgICAgZnVuY3Rpb24gcnVuKGkpIHsKKyAgICAgIGxvZy5wdXNoKGkpOwor
ICAgICAgcmV0dXJuIGk7CisgICAgfQorCisgICAgY2xhc3MgQyB7CisgICAgICBzdGF0aWMgW3J1
bigxKV0gPSBydW4oNik7CisgICAgICBzdGF0aWMgW3J1bigyKV0gPSBydW4oNyk7CisgICAgICBb
cnVuKDMpXSgpIHsgcnVuKDkpO30KKyAgICAgIHN0YXRpYyBbcnVuKDQpXSA9IHJ1big4KTsKKyAg
ICAgIHN0YXRpYyBbcnVuKDUpXSgpIHsgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgbm90IGV4ZWN1
dGUnKTt9OworICAgIH0KKworICAgIGxldCBjID0gbmV3IEM7CisgICAgY1szXSgpOworICAgIGFz
c2VydEVxdWFscyhbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0sIGxvZyk7CisgIH0KK30KK3go
KSgpOworCit7CisgIGxldCBsb2cgPSBbXTsKKyAgZnVuY3Rpb24gcnVuKGkpIHsKKyAgICBsb2cu
cHVzaChpKTsKKyAgICByZXR1cm4gaTsKKyAgfQorCisgIGNsYXNzIEMgeworICAgIFtydW4oMSld
ID0gcnVuKDcpOworICAgIFtydW4oMildID0gcnVuKDgpOworICAgIFtydW4oMyldKCkgeyBydW4o
OSk7fQorICAgIHN0YXRpYyBbcnVuKDQpXSA9IHJ1big2KTsKKyAgICBbcnVuKDUpXSgpIHsgdGhy
b3cgbmV3IEVycm9yKCdzaG91bGQgbm90IGV4ZWN1dGUnKTt9OworICB9CisKKyAgbGV0IGMgPSBu
ZXcgQzsKKyAgY1szXSgpOworICBhc3NlcnRFcXVhbHMoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgs
IDldLCBsb2cpOworfQorCitmdW5jdGlvbiB5KCkgeworICAvLyBUaGlzIHRlc3RzIGxhenkgcGFy
c2luZy4KKyAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgIGxldCBsb2cgPSBbXTsKKyAgICBmdW5j
dGlvbiBydW4oaSkgeworICAgICAgbG9nLnB1c2goaSk7CisgICAgICByZXR1cm4gaTsKKyAgICB9
CisKKyAgICBjbGFzcyBDIHsKKyAgICAgIFtydW4oMSldID0gcnVuKDcpOworICAgICAgW3J1bigy
KV0gPSBydW4oOCk7CisgICAgICBbcnVuKDMpXSgpIHsgcnVuKDkpO30KKyAgICAgIHN0YXRpYyBb
cnVuKDQpXSA9IHJ1big2KTsKKyAgICAgIFtydW4oNSldKCkgeyB0aHJvdyBuZXcgRXJyb3IoJ3No
b3VsZCBub3QgZXhlY3V0ZScpO307CisgICAgfQorCisgICAgbGV0IGMgPSBuZXcgQzsKKyAgICBj
WzNdKCk7CisgICAgYXNzZXJ0RXF1YWxzKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XSwgbG9n
KTsKKyAgfQorfQoreSgpKCk7CisKK3sKKyAgY2xhc3MgQyB7fQorICBjbGFzcyBEIHsKKyAgICBz
dGF0aWMgW0NdOworICB9CisKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IHsgY2xhc3MgWCB7IHN0YXRp
YyBbWF0gfSB9KTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgRFtDXSk7Cit9CisKK3sKKyAg
ZnVuY3Rpb24gdCgpIHsKKyAgICByZXR1cm4gY2xhc3MgeworICAgICAgc3RhdGljIFsneCddID0g
MjsKKyAgICB9CisgIH0KKworICBsZXQga2xhc3MgPSB0KCk7CisgIGxldCBvYmogPSBuZXcga2xh
c3M7CisgIGFzc2VydEVxdWFscygyLCBrbGFzcy54KTsKK30KKworeworICBsZXQgeCA9ICdhJzsK
KyAgY2xhc3MgQyB7CisgICAgYTsKKyAgICBiID0geDsKKyAgICBjID0gMTsKKyAgICBoYXNPd25Q
cm9wZXJ0eSgpIHsgcmV0dXJuIDE7fQorICAgIHN0YXRpYyBbeF0gPSAyOworICAgIHN0YXRpYyBi
ID0gMzsKKyAgICBzdGF0aWMgZDsKKyAgfQorCisgIGFzc2VydEVxdWFscygyLCBDLmEpOworICBh
c3NlcnRFcXVhbHMoMywgQy5iKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5kKTsKKyAg
YXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5jKTsKKworICBsZXQgYyA9IG5ldyBDOworICBhc3Nl
cnRFcXVhbHModW5kZWZpbmVkLCBjLmEpOworICBhc3NlcnRFcXVhbHMoJ2EnLCBjLmIpOworICBh
c3NlcnRFcXVhbHMoMSwgYy5jKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5kKTsKKyAg
YXNzZXJ0RXF1YWxzKDEsIGMuaGFzT3duUHJvcGVydHkoKSk7Cit9CisKK3sKKyAgZnVuY3Rpb24g
dCgpIHsKKyAgICByZXR1cm4gY2xhc3MgeworICAgICAgWyd4J10gPSAxOworICAgICAgc3RhdGlj
IFsneCddID0gMjsKKyAgICB9CisgIH0KKworICBsZXQga2xhc3MgPSB0KCk7CisgIGxldCBvYmog
PSBuZXcga2xhc3M7CisgIGFzc2VydEVxdWFscygxLCBvYmoueCk7CisgIGFzc2VydEVxdWFscygy
LCBrbGFzcy54KTsKK30KKworCit7CisgIGNsYXNzIFggeworICAgIHN0YXRpYyBwID0gZnVuY3Rp
b24oKSB7IHJldHVybiBhcmd1bWVudHNbMF07IH0KKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBY
LnAoMSkpOworfQorCit7CisgIGNsYXNzIFggeworICAgIHN0YXRpYyB0ID0gKCkgPT4geworICAg
ICAgZnVuY3Rpb24gcCgpIHsgcmV0dXJuIGFyZ3VtZW50c1swXTsgfTsKKyAgICAgIHJldHVybiBw
OworICAgIH0KKyAgfQorCisgIGxldCBwID0gWC50KCk7CisgIGFzc2VydEVxdWFscygxLCBwKDEp
KTsKK30KKworeworICBjbGFzcyBYIHsKKyAgICBzdGF0aWMgdCA9ICgpID0+IHsKKyAgICAgIGZ1
bmN0aW9uIHAoKSB7IHJldHVybiBldmFsKCJhcmd1bWVudHNbMF0iKTsgfTsKKyAgICAgIHJldHVy
biBwOworICAgIH0KKyAgfQorCisgIGxldCBwID0gWC50KCk7CisgIGFzc2VydEVxdWFscygxLCBw
KDEpKTsKK30KKworeworICBjbGFzcyBYIHsKKyAgICBzdGF0aWMgcCA9IGV2YWwoIihmdW5jdGlv
bigpIHsgcmV0dXJuIGFyZ3VtZW50c1swXTsgfSkoMSkiKTsKKyAgfQorCisgIGFzc2VydEVxdWFs
cygxLCBYLnApOworfQorCisvKgoreworICBsZXQgcCA9IHsgejogY2xhc3MgeyBzdGF0aWMgeSA9
IHRoaXMubmFtZSB9IH0KKyAgYXNzZXJ0RXF1YWxzKHAuei55LCAneicpOworCisgIGxldCBxID0g
eyBbInoiXTogY2xhc3MgeyBzdGF0aWMgeSA9IHRoaXMubmFtZSB9IH0KKyAgYXNzZXJ0RXF1YWxz
KHEuei55LCAneicpOworCisgIGNvbnN0IEMgPSBjbGFzcyB7CisgICAgc3RhdGljIHggPSB0aGlz
Lm5hbWU7CisgIH0KKyAgYXNzZXJ0RXF1YWxzKEMueCwgJ0MnKTsKK30KKyovCmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3N0cmVzcy9oYXJtb255LXN1cHBvcnQuanMgYi9KU1Rlc3RzL3N0cmVzcy9oYXJt
b255LXN1cHBvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4w
MjRiM2IwODg5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9oYXJtb255LXN1
cHBvcnQuanMKQEAgLTAsMCArMSwxOTYgQEAKKy8vIENvcHlyaWdodCAyMDE3IHRoZSBWOCBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworInVzZSBz
dHJpY3QiOworCitmdW5jdGlvbiBjbGFzc09mKG9iamVjdCkgeworICAgLy8gQXJndW1lbnQgbXVz
dCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuCisgICB2YXIgc3RyaW5nID0gT2JqZWN0LnByb3Rv
dHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCk7CisgICAvLyBTdHJpbmcgaGFzIGZvcm1hdCBbb2Jq
ZWN0IDxDbGFzc05hbWU+XS4KKyAgIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDgsIHN0cmluZy5s
ZW5ndGggLSAxKTsKK30KKworLyoqCisgKiBDb21wYXJlcyB0d28gb2JqZWN0cyBmb3Iga2V5L3Zh
bHVlIGVxdWFsaXR5LgorICogUmV0dXJucyB0cnVlIGlmIHRoZXkgYXJlIGVxdWFsLCBmYWxzZSBv
dGhlcndpc2UuCisgKi8KK2Z1bmN0aW9uIGRlZXBPYmplY3RFcXVhbHMoYSwgYikgeworICB2YXIg
YVByb3BzID0gT2JqZWN0LmtleXMoYSk7CisgIGFQcm9wcy5zb3J0KCk7CisgIHZhciBiUHJvcHMg
PSBPYmplY3Qua2V5cyhiKTsKKyAgYlByb3BzLnNvcnQoKTsKKyAgaWYgKCFkZWVwRXF1YWxzKGFQ
cm9wcywgYlByb3BzKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBmb3IgKHZhciBpID0g
MDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykgeworICAgIGlmICghZGVlcEVxdWFscyhhW2FQcm9w
c1tpXV0sIGJbYVByb3BzW2ldXSkpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0K
KyAgcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogQ29tcGFyZXMgdHdvIEphdmFTY3JpcHQgdmFs
dWVzIGZvciB0eXBlIGFuZCB2YWx1ZSBlcXVhbGl0eS4KKyAqIEl0IGNoZWNrcyBpbnRlcm5hbHMg
b2YgYXJyYXlzIGFuZCBvYmplY3RzLgorICovCitmdW5jdGlvbiBkZWVwRXF1YWxzKGEsIGIpIHsK
KyAgaWYgKGEgPT09IGIpIHsKKyAgICAvLyBDaGVjayBmb3IgLTAuCisgICAgaWYgKGEgPT09IDAp
IHJldHVybiAoMSAvIGEpID09PSAoMSAvIGIpOworICAgIHJldHVybiB0cnVlOworICB9CisgIGlm
ICh0eXBlb2YgYSAhPSB0eXBlb2YgYikgcmV0dXJuIGZhbHNlOworICBpZiAodHlwZW9mIGEgPT0g
J251bWJlcicpIHJldHVybiBpc05hTihhKSAmJiBpc05hTihiKTsKKyAgaWYgKHR5cGVvZiBhICE9
PSAnb2JqZWN0JyAmJiB0eXBlb2YgYSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlOworICAv
LyBOZWl0aGVyIGEgbm9yIGIgaXMgcHJpbWl0aXZlLgorICB2YXIgb2JqZWN0Q2xhc3MgPSBjbGFz
c09mKGEpOworICBpZiAob2JqZWN0Q2xhc3MgIT09IGNsYXNzT2YoYikpIHJldHVybiBmYWxzZTsK
KyAgaWYgKG9iamVjdENsYXNzID09PSAnUmVnRXhwJykgeworICAgIC8vIEZvciBSZWdFeHAsIGp1
c3QgY29tcGFyZSBwYXR0ZXJuIGFuZCBmbGFncyB1c2luZyBpdHMgdG9TdHJpbmcuCisgICAgcmV0
dXJuIChhLnRvU3RyaW5nKCkgPT09IGIudG9TdHJpbmcoKSk7CisgIH0KKyAgLy8gRnVuY3Rpb25z
IGFyZSBvbmx5IGlkZW50aWNhbCB0byB0aGVtc2VsdmVzLgorICBpZiAob2JqZWN0Q2xhc3MgPT09
ICdGdW5jdGlvbicpIHJldHVybiBmYWxzZTsKKyAgaWYgKG9iamVjdENsYXNzID09PSAnQXJyYXkn
KSB7CisgICAgdmFyIGVsZW1lbnRDb3VudCA9IDA7CisgICAgaWYgKGEubGVuZ3RoICE9IGIubGVu
Z3RoKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYS5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKCFkZWVwRXF1YWxzKGFbaV0sIGJbaV0pKSBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisgIGlmIChvYmplY3RD
bGFzcyA9PSAnU3RyaW5nJyB8fCBvYmplY3RDbGFzcyA9PSAnTnVtYmVyJyB8fAorICAgICAgb2Jq
ZWN0Q2xhc3MgPT0gJ0Jvb2xlYW4nIHx8IG9iamVjdENsYXNzID09ICdEYXRlJykgeworICAgIGlm
IChhLnZhbHVlT2YoKSAhPT0gYi52YWx1ZU9mKCkpIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1
cm4gZGVlcE9iamVjdEVxdWFscyhhLCBiKTsKK30KKworLyoqCisgKiBUaHJvd3MgYW4gZXhjZXB0
aW9uIGNvbnRhaW5pbmcgdGhlIHVzZXJfbWVzc2FnZSAoaWYgYW55KSBhbmQgdGhlIHZhbHVlcy4K
KyAqLworZnVuY3Rpb24gZmFpbChleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSA9ICcnKSB7
CisgIC8vIFRPRE8oY2lyYSk6IFJlcGxhY2UgU3RyaW5nIHdpdGggUHJldHR5UHJpbnQgZm9yIG9i
amVjdHMgYW5kIGFycmF5cy4KKyAgdmFyIG1lc3NhZ2UgPSAnRmFpbHVyZScgKyAodXNlcl9tZXNz
YWdlID8gJyAoJyArIHVzZXJfbWVzc2FnZSArICcpJyA6ICcnKSArCisgICAgICAnOiBleHBlY3Rl
ZCA8JyArIFN0cmluZyhleHBlY3RlZCkgKyAnPiwgZm91bmQgPCcgKyBTdHJpbmcoZm91bmQpICsg
Jz4uJzsKKyAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpOworfQorCisvKioKKyAqIFRocm93cyBp
ZiBvYmogaXMgbm90IG9mIGdpdmVuIHR5cGUuCisgKi8KK2Z1bmN0aW9uIGFzc2VydEluc3RhbmNl
b2Yob2JqLCB0eXBlKSB7CisgIGlmICghKG9iaiBpbnN0YW5jZW9mIHR5cGUpKSB7CisgICAgdmFy
IGFjdHVhbFR5cGVOYW1lID0gbnVsbDsKKyAgICB2YXIgYWN0dWFsQ29uc3RydWN0b3IgPSBPYmpl
Y3QuZ2V0UHJvdG90eXBlT2Yob2JqKS5jb25zdHJ1Y3RvcjsKKyAgICBpZiAodHlwZW9mIGFjdHVh
bENvbnN0cnVjdG9yID09ICJmdW5jdGlvbiIpIHsKKyAgICAgIGFjdHVhbFR5cGVOYW1lID0gYWN0
dWFsQ29uc3RydWN0b3IubmFtZSB8fCBTdHJpbmcoYWN0dWFsQ29uc3RydWN0b3IpOworICAgIH0K
KyAgICB0aHJvdyBuZXcgRXJyb3IoJ09iamVjdCA8JyArIG9iaiArICc+IGlzIG5vdCBhbiBpbnN0
YW5jZSBvZiA8JyArCisgICAgICAgICAgICAgICAgICAgICh0eXBlLm5hbWUgfHwgdHlwZSkgKyAn
PicgKworICAgICAgICAgICAgICAgICAgICAoYWN0dWFsVHlwZU5hbWUgPyAnIGJ1dCBvZiA8ICcg
KyBhY3R1YWxUeXBlTmFtZSArICc+JyA6ICcnKSk7CisgIH0KK30KKworLyoqCisgKiBUaHJvd3Mg
aWYgb2JqIGlzIG5vdCB0aGUgc2FtZSBhcyBleHBlY3RlZC4KKyAqLworZnVuY3Rpb24gYXNzZXJ0
U2FtZShleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7CisgIGlmIChmb3VuZCA9PT0gZXhwZWN0
ZWQpIHsKKyAgICBpZiAoZXhwZWN0ZWQgIT09IDAgfHwgKDEgLyBleHBlY3RlZCkgPT09ICgxIC8g
Zm91bmQpKQorICAgICAgcmV0dXJuOworICB9IGVsc2UgaWYgKChleHBlY3RlZCAhPT0gZXhwZWN0
ZWQpICYmIChmb3VuZCAhPT0gZm91bmQpKSB7CisgICAgICByZXR1cm47CisgIH0KKyAgZmFpbChl
eHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KTsKK30KKworLyoqCisgKiBUaHJvd3MgaWYgdHdvIHZh
cmlhYmxlcyBoYXZlIGRpZmZlcmVudCB0eXBlcyBvciB2YWx1ZXMuCisgKi8KKworZnVuY3Rpb24g
YXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlID0gJycpIHsKKyAgaWYg
KCFkZWVwRXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsKKyAgICBmYWlsKGV4cGVjdGVkLCBmb3Vu
ZCwgdXNlcl9tZXNzYWdlKTsKKyAgfQorfQorCisvKioKKyAqIFRocm93cyBpZiB0d28gdmFyaWFi
bGVzIGhhdmUgZXF1YWwgdHlwZXMgb3IgdmFsdWVzLgorICovCisKK2Z1bmN0aW9uIGFzc2VydE5v
dEVxdWFscyhleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSA9ICcnKSB7CisgIGlmIChkZWVw
RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsKKyAgICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgdXNl
cl9tZXNzYWdlKTsKKyAgfQorfQorCisvKioKKyAqIFRocm93cyBpZiB2YWx1ZSBpcyBmYWxzZS4K
KyAqLworZnVuY3Rpb24gYXNzZXJ0VHJ1ZSh2YWx1ZSwgdXNlcl9tZXNzYWdlID0gJycpIHsKKyAg
YXNzZXJ0RXF1YWxzKHRydWUsIHZhbHVlLCB1c2VyX21lc3NhZ2UpOworfQorCisKKy8qKgorICog
VGhyb3dzIGlmIHZhbHVlIGlzIHRydWUuCisgKi8KK2Z1bmN0aW9uIGFzc2VydEZhbHNlKHZhbHVl
LCB1c2VyX21lc3NhZ2UgPSAnJykgeworICBhc3NlcnRFcXVhbHMoZmFsc2UsIHZhbHVlLCB1c2Vy
X21lc3NhZ2UpOworfQorCisvKioKKyAqIFJ1bnMgY29kZSgpIGFuZCBhc3NlcnRzIHRoYXQgaXQg
dGhyb3dzIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uLgorICovCitmdW5jdGlvbiBhc3NlcnRUaHJv
d3MoY29kZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgeworICB0cnkgeworICAgIGlmICh0eXBlb2Yg
Y29kZSA9PSAnZnVuY3Rpb24nKSB7CisgICAgICBjb2RlKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
IGV2YWwoY29kZSk7CisgICAgfQorICB9IGNhdGNoIChlKSB7CisgICAgaWYgKHR5cGVvZiB0eXBl
X29wdCA9PSAnZnVuY3Rpb24nKSB7CisgICAgICBhc3NlcnRJbnN0YW5jZW9mKGUsIHR5cGVfb3B0
KTsKKyAgICB9CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgeworICAgICAgYXNzZXJ0
RXF1YWxzKGNhdXNlX29wdCwgZS50eXBlLCAndGhyb3duIGV4Y2VwdGlvbiB0eXBlIG1pc21hdGNo
Jyk7CisgICAgfQorICAgIC8vIFN1Y2Nlc3MuCisgICAgcmV0dXJuOworICB9CisgIHZhciBleHBl
Y3RlZCA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMyA/IGNhdXNlX29wdCA6CisgICAgICB0eXBlb2Yg
dHlwZV9vcHQgPT0gJ2Z1bmN0aW9uJyA/IHR5cGVfb3B0IDogJ2FueSBleGNlcHRpb24nOworICBm
YWlsKGV4cGVjdGVkLCAnbm8gZXhjZXB0aW9uJywgJ2V4cGVjdGVkIHRocm93biBleGNlcHRpb24n
KTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbCBiL0pTVGVzdHMv
dGVzdDI2Mi9jb25maWcueWFtbAppbmRleCA2NGRhNTIzM2ZjNzQuLjM5MzQ0NjFhZjA2NCAxMDA2
NDQKLS0tIGEvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sCisrKyBiL0pTVGVzdHMvdGVzdDI2
Mi9jb25maWcueWFtbApAQCAtNSw2ICs1LDcgQEAgZmxhZ3M6CiAgIEZpbmFsaXphdGlvblJlZ2lz
dHJ5OiB1c2VXZWFrUmVmcwogICBjbGFzcy1maWVsZHMtcHVibGljOiB1c2VQdWJsaWNDbGFzc0Zp
ZWxkcwogICBjbGFzcy1maWVsZHMtcHJpdmF0ZTogdXNlUHJpdmF0ZUNsYXNzRmllbGRzCisgIGNs
YXNzLXN0YXRpYy1maWVsZHMtcHVibGljOiB1c2VQdWJsaWNDbGFzc0ZpZWxkcyAgCiAgIEludGwu
RGF0ZVRpbWVGb3JtYXQtZGF5UGVyaW9kOiB1c2VJbnRsRGF0ZVRpbWVGb3JtYXREYXlQZXJpb2QK
ICAgU2hhcmVkQXJyYXlCdWZmZXI6IHVzZVNoYXJlZEFycmF5QnVmZmVyCiAgIEF0b21pY3M6IHVz
ZVNoYXJlZEFycmF5QnVmZmVyCkBAIC0xNyw3ICsxOCw2IEBAIHNraXA6CiAKICAgICAtIGFyYml0
cmFyeS1tb2R1bGUtbmFtZXNwYWNlLW5hbWVzCiAgICAgLSBjbGFzcy1tZXRob2RzLXByaXZhdGUK
LSAgICAtIGNsYXNzLXN0YXRpYy1maWVsZHMtcHVibGljCiAgICAgLSBjbGFzcy1zdGF0aWMtZmll
bGRzLXByaXZhdGUKICAgICAtIGNsYXNzLXN0YXRpYy1tZXRob2RzLXByaXZhdGUKICAgICAtIGNs
ZWFudXBTb21lCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBiYjNmOGM4ZDRkNWQuLmViYThl
NWIwOTEyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMjAt
MDYtMDUgIFhhbiBMw7NwZXogIDx4YW5AaWdhbGlhLmNvbT4KKworICAgICAgICBbSlNDXSBBZGQg
c3VwcG9ydCBmb3Igc3RhdGljIHB1YmxpYyBjbGFzcyBmaWVsZHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVi
bGljIGNsYXNzIGZpZWxkcy4gV2UgY2FuIHJldXNlIG1vc3Qgb2YKKyAgICAgICAgdGhlIGV4aXN0
aW5nIG1hY2hpbmVyeSBhdmFpbGFibGUgZm9yIGluc3RhbmNlIGZpZWxkcywgd2l0aCBhIG9uZQor
ICAgICAgICBpc3N1ZXMgdGhhdCBtZXJpdCBzcGVjaWFsIGNvbW1lbnQ6CisKKyAgICAgICAgU3Rh
dGljIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQsIGxpa2UgaW5zdGFuY2UgZmllbGRzLCB3aXRoIGEK
KyAgICAgICAgc3ludGhldGljIGZ1bmN0aW9uLiBUaGlzIGlzIGRvbmUgdG8gYWxsb3cgdXMgdG8g
dHJpdmlhbGx5IGZvbGxvdworICAgICAgICB0aGUgc2NvcGluZyBydWxlcyBpbiB0aGUgc3BlYy4g
QXMgaXQgaGFwcGVucyB3aXRoIGluc3RhbmNlIGZpZWxkcworICAgICAgICB0aGlzIGNvdWxkIGJl
IGlubGluZWQgaW4gYSBmdXR1cmUgcGF0Y2guCisKKyAgICAgICAgQSBsb3Qgb2Ygc21hbGwgY2hh
bmdlcyBpbiBtYW55IGZpbGVzIGFyZSBqdXN0IGEgbWF0dGVyIG9mIGRvaW5nCisgICAgICAgIHMv
aW5zdGFuY2UvY2xhc3MvIGZvciB2YXJpYWJsZXMgcmVsYXRlZCB0byBjbGFzcyBmaWVsZHMsIHdo
aWNoCisgICAgICAgIGJlZm9yZSB3ZXJlIGFzc3VtaW5nIHRoZXJlIGFyZSBvbmx5IGluc3RhbmNl
IGZpZWxkcyBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKTogZG8gcy9pbnN0YW5jZUZpZWxkL2NsYXNzRmllbGQvLgorICAgICAgICAqIGJ5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg6IGRpdHRvLgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24pOiBkaXR0by4K
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDogZGl0dG8sIHBsdXMg
YWRkIGEgcGFyYW1ldGVyCisgICAgICAgIGZvciBzdGF0aWMgZmllbGQgbG9jYXRpb25zIGluIGVt
aXREZWZpbmVDbGFzc0VsZW1lbnRzLgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUpOiBz
YXZlIHN0YXRpYyBmaWVsZHMKKyAgICAgICAgbG9jYXRpb25zIHdoZW4gZ29pbmcgdGhyb3VnaCB0
aGUgcHJvcGVydHkgbGlzdC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFNh
dmVDb21wdXRlZEZpZWxkTmFtZSk6IGNvbnNpZGVyCisgICAgICAgIHN0YXRpYyBmaWVsZHMgaGVy
ZSB0b28uCisgICAgICAgIChKU0M6OkNsYXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZSk6IGNhbGwg
dGhlIGluaXRpYWxpemVyIGZvcgorICAgICAgICBzdGF0aWMgZmllbGRzIGFzIHRoZSB2ZXJ5IGxh
c3QgYWN0aW9uIG9mIHRoZSBjbGFzcyBjcmVhdGlvbi4KKyAgICAgICAgKiBwYXJzZXIvQVNUQnVp
bGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVEZWZpbmVGaWVsZCk6IGZp
ZWxkIG5vZGVzIGNhbiBiZSBzdGF0aWMKKyAgICAgICAgdG9vIG5vdy4KKyAgICAgICAgKiBwYXJz
ZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpEZWZpbmVGaWVsZE5vZGU6OkRl
ZmluZUZpZWxkTm9kZSk6IGRpdHRvLgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOiBkaXR0by4K
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVy
VHlwZT46OnBhcnNlSW5uZXIpOiBzL2luc3RhbmNlRmllbGQvY2xhc3NGaWVsZC8KKyAgICAgICAg
KEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MpOiBjb25zaWRlciBzdGF0aWMgZmll
bGRzLgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZUZpZWxk
SW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyk6CisgICAgICAgIHMvaW5zdGFuY2VGaWVsZC9jbGFz
c0ZpZWxkLywgYW5kIGNvbnNpZGVyIHN0YXRpYyBmaWVsZHMuCisgICAgICAgICogcGFyc2VyL1Bh
cnNlci5oOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2UpOiBzL2luc3Rh
bmNlRmllbGQvY2xhc3NGaWVsZC8KKyAgICAgICAgKEpTQzo6cGFyc2UpOiBkaXR0by4KKyAgICAg
ICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpz
ZXRGdW5jdGlvbk5hbWUpOiBzL2luc3RhbmNlRmllbGQvY2xhc3NGaWVsZC8KKwogMjAyMC0xMS0x
NCAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtjbGFu
Zy10aWR5XSBSdW4gbW9kZXJuaXplLXVzZS1vdmVycmlkZSB0aHJvdWdoIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5jcHAKaW5kZXggNmIzNzFmNTM5NTdhLi4zMDdkMzQ2MGIwZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmNwcApAQCAtNTYsOSArNTYsOSBAQCBzdGF0aWMgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayogZ2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKAogICAgIEpT
UGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlID0gZXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRl
eHQoKSA/IEpTUGFyc2VyU3RyaWN0TW9kZTo6U3RyaWN0IDogSlNQYXJzZXJTdHJpY3RNb2RlOjpO
b3RTdHJpY3Q7CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUgPSBleGVjdXRhYmxl
LT5zY3JpcHRNb2RlKCk7CiAgICAgQVNTRVJUKGlzRnVuY3Rpb25QYXJzZU1vZGUoZXhlY3V0YWJs
ZS0+cGFyc2VNb2RlKCkpKTsKLSAgICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZp
ZWxkTG9jYXRpb25zID0gZXhlY3V0YWJsZS0+aW5zdGFuY2VGaWVsZExvY2F0aW9ucygpOworICAg
IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGNsYXNzRmllbGRMb2NhdGlvbnMgPSBleGVjdXRhYmxl
LT5jbGFzc0ZpZWxkTG9jYXRpb25zKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uTm9k
ZT4gZnVuY3Rpb24gPSBwYXJzZTxGdW5jdGlvbk5vZGU+KAotICAgICAgICB2bSwgc291cmNlLCBl
eGVjdXRhYmxlLT5uYW1lKCksIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBl
eGVjdXRhYmxlLT5wYXJzZU1vZGUoKSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIGVycm9y
LCBudWxscHRyLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9u
ZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBudWxscHRyLCBudWxscHRyLCBpbnN0YW5jZUZpZWxk
TG9jYXRpb25zKTsKKyAgICAgICAgdm0sIHNvdXJjZSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBidWls
dGluTW9kZSwgc3RyaWN0TW9kZSwgc2NyaXB0TW9kZSwgZXhlY3V0YWJsZS0+cGFyc2VNb2RlKCks
IGV4ZWN1dGFibGUtPnN1cGVyQmluZGluZygpLCBlcnJvciwgbnVsbHB0ciwgQ29uc3RydWN0b3JL
aW5kOjpOb25lLCBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIEV2YWxDb250ZXh0VHlwZTo6Tm9u
ZSwgbnVsbHB0ciwgbnVsbHB0ciwgY2xhc3NGaWVsZExvY2F0aW9ucyk7CiAKICAgICBpZiAoIWZ1
bmN0aW9uKSB7CiAgICAgICAgIEFTU0VSVChlcnJvci5pc1ZhbGlkKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUuaAppbmRleCBiNjI3ZWFiN2M2ZGIuLmE1ZGQ5MjY0ODFmOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmgKQEAgLTIwOSwyMyArMjA5LDIzIEBAIHB1YmxpYzoKICAgICAgICAgU3RyaW5nIG1f
c291cmNlVVJMRGlyZWN0aXZlOwogICAgICAgICBTdHJpbmcgbV9zb3VyY2VNYXBwaW5nVVJMRGly
ZWN0aXZlOwogICAgICAgICBWZWN0b3I8Q29tcGFjdFREWkVudmlyb25tZW50TWFwOjpIYW5kbGU+
IG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXM7Ci0gICAgICAgIFZlY3RvcjxKU1RleHRQb3NpdGlv
bj4gbV9pbnN0YW5jZUZpZWxkTG9jYXRpb25zOworICAgICAgICBWZWN0b3I8SlNUZXh0UG9zaXRp
b24+IG1fY2xhc3NGaWVsZExvY2F0aW9uczsKICAgICB9OwogCiAgICAgTmVlZHNDbGFzc0ZpZWxk
SW5pdGlhbGl6ZXIgbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcj4obV9uZWVkc0NsYXNzRmllbGRJ
bml0aWFsaXplcik7IH0KIAotICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGluc3RhbmNlRmll
bGRMb2NhdGlvbnMoKSBjb25zdAorICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGNsYXNzRmll
bGRMb2NhdGlvbnMoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fcmFyZURhdGEpCi0gICAg
ICAgICAgICByZXR1cm4gJm1fcmFyZURhdGEtPm1faW5zdGFuY2VGaWVsZExvY2F0aW9uczsKKyAg
ICAgICAgICAgIHJldHVybiAmbV9yYXJlRGF0YS0+bV9jbGFzc0ZpZWxkTG9jYXRpb25zOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICB2b2lkIHNldEluc3RhbmNlRmllbGRM
b2NhdGlvbnMoVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYmIGluc3RhbmNlRmllbGRMb2NhdGlvbnMp
CisgICAgdm9pZCBzZXRDbGFzc0ZpZWxkTG9jYXRpb25zKFZlY3RvcjxKU1RleHRQb3NpdGlvbj4m
JiBjbGFzc0ZpZWxkTG9jYXRpb25zKQogICAgIHsKLSAgICAgICAgaWYgKGluc3RhbmNlRmllbGRM
b2NhdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICBpZiAoY2xhc3NGaWVsZExvY2F0aW9ucy5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVuc3VyZVJhcmVEYXRhKCkubV9p
bnN0YW5jZUZpZWxkTG9jYXRpb25zID0gV1RGTW92ZShpbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsK
KyAgICAgICAgZW5zdXJlUmFyZURhdGEoKS5tX2NsYXNzRmllbGRMb2NhdGlvbnMgPSBXVEZNb3Zl
KGNsYXNzRmllbGRMb2NhdGlvbnMpOwogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
aW5kZXggYzllNWVhNjZmOTJhLi5kYTVjYWYxYzEwMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0z
ODEsNyArMzgxLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2
bSwgRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAgICBib29sIHNob3VsZENh
cHR1cmVTb21lT2ZUaGVUaGluZ3MgPSBzaG91bGRFbWl0RGVidWdIb29rcygpIHx8IGZ1bmN0aW9u
Tm9kZS0+bmVlZHNBY3RpdmF0aW9uKCkgfHwgY29udGFpbnNBcnJvd09yRXZhbEJ1dE5vdEluQXJy
b3dCbG9jazsKIAogICAgIGJvb2wgc2hvdWxkQ2FwdHVyZUFsbE9mVGhlVGhpbmdzID0gc2hvdWxk
RW1pdERlYnVnSG9va3MoKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCk7Ci0gICAgYm9vbCBuZWVk
c0FyZ3VtZW50cyA9ICgoZnVuY3Rpb25Ob2RlLT51c2VzQXJndW1lbnRzKCkgJiYgIWNvZGVCbG9j
ay0+aXNBcnJvd0Z1bmN0aW9uKCkpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSB8fCAoZnVuY3Rp
b25Ob2RlLT51c2VzQXJyb3dGdW5jdGlvbigpICYmICFjb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlv
bigpICYmIGlzQXJndW1lbnRzVXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCkpKSAmJiBwYXJzZU1v
ZGUgIT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOworICAg
IGJvb2wgbmVlZHNBcmd1bWVudHMgPSAoKGZ1bmN0aW9uTm9kZS0+dXNlc0FyZ3VtZW50cygpICYm
ICFjb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpKSB8fCBjb2RlQmxvY2stPnVzZXNFdmFsKCkg
fHwgKGZ1bmN0aW9uTm9kZS0+dXNlc0Fycm93RnVuY3Rpb24oKSAmJiAhY29kZUJsb2NrLT5pc0Fy
cm93RnVuY3Rpb24oKSAmJiBpc0FyZ3VtZW50c1VzZWRJbklubmVyQXJyb3dGdW5jdGlvbigpKSkg
JiYgcGFyc2VNb2RlICE9IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9k
ZTsKIAogICAgIGlmIChpc0dlbmVyYXRvck9yQXN5bmNGdW5jdGlvbkJvZHlQYXJzZU1vZGUocGFy
c2VNb2RlKSkgewogICAgICAgICAvLyBHZW5lcmF0b3IgYW5kIEFzeW5jRnVuY3Rpb24gbmV2ZXIg
cHJvdmlkZXMgImFyZ3VtZW50cyIuICJhcmd1bWVudHMiIHJlZmVyZW5jZSB3aWxsIGJlIHJlc29s
dmVkIGluIGFuIHVwcGVyIGdlbmVyYXRvciBmdW5jdGlvbiBzY29wZS4KQEAgLTYxMyw3ICs2MTMs
NyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBGdW5jdGlv
bk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBz
aG91bGRDcmVhdGVBcmd1bWVuc1ZhcmlhYmxlID0gIWhhdmVQYXJhbWV0ZXJOYW1lZEFyZ3VtZW50
cwotICAgICAgICAgICAgJiYgIVNvdXJjZVBhcnNlTW9kZVNldChTb3VyY2VQYXJzZU1vZGU6OkFy
cm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUs
IFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSkuY29udGFpbnMo
bV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpKTsKKyAgICAgICAgICAgICYmICFTb3VyY2VQYXJzZU1v
ZGVTZXQoU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSwgU291cmNlUGFyc2VNb2Rl
OjpBc3luY0Fycm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0
aWFsaXplck1vZGUpLmNvbnRhaW5zKG1fY29kZUJsb2NrLT5wYXJzZU1vZGUoKSk7CiAgICAgICAg
IHNob3VsZENyZWF0ZUFyZ3VtZW50c1ZhcmlhYmxlSW5QYXJhbWV0ZXJTY29wZSA9IHNob3VsZENy
ZWF0ZUFyZ3VtZW5zVmFyaWFibGUgJiYgIWlzU2ltcGxlUGFyYW1ldGVyTGlzdDsKICAgICAgICAg
Ly8gRG8gbm90IGNyZWF0ZSBhcmd1bWVudHMgdmFyaWFibGUgaW4gY2FzZSBvZiBBcnJvdyBmdW5j
dGlvbi4gVmFsdWUgd2lsbCBiZSBsb2FkZWQgZnJvbSBwYXJlbnQgc2NvcGUKICAgICAgICAgaWYg
KHNob3VsZENyZWF0ZUFyZ3VtZW5zVmFyaWFibGUgJiYgIXNob3VsZENyZWF0ZUFyZ3VtZW50c1Zh
cmlhYmxlSW5QYXJhbWV0ZXJTY29wZSkgewpAQCAtMzEzMyw3ICszMTMzLDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdEZWZhdWx0Q29uc3RydWN0b3IoUmVnaXN0ZXJJ
RCogZHN0LCBDb25zdHIKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdE5ld0luc3RhbmNlRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKFJlZ2lz
dGVySUQqIGRzdCwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYmIGluc3RhbmNlRmllbGRMb2NhdGlv
bnMsIGJvb2wgaXNEZXJpdmVkKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRO
ZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIFZlY3RvcjxK
U1RleHRQb3NpdGlvbj4mJiBjbGFzc0ZpZWxkTG9jYXRpb25zLCBib29sIGlzRGVyaXZlZCkKIHsK
ICAgICBEZXJpdmVkQ29udGV4dFR5cGUgbmV3RGVyaXZlZENvbnRleHRUeXBlOwogICAgIFN1cGVy
QmluZGluZyBzdXBlckJpbmRpbmc7CkBAIC0zMTQ2LDE0ICszMTQ2LDE0IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyRnVuY3Rp
b24oUmVnaXN0ZXJJCiAgICAgfQogCiAgICAgYXV0byB2YXJpYWJsZXNVbmRlclREWiA9IGdldFZh
cmlhYmxlc1VuZGVyVERaKCk7Ci0gICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSA9IFNvdXJj
ZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZTsKKyAgICBTb3VyY2VQYXJz
ZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJN
b2RlOwogICAgIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSA9IENvbnN0cnVjdEFi
aWxpdHk6OkNhbm5vdENvbnN0cnVjdDsKIAogICAgIGNvbnN0IGJvb2wgYWx3YXlzU3RyaWN0SW5D
bGFzcyA9IHRydWU7CiAgICAgRnVuY3Rpb25NZXRhZGF0YU5vZGUgbWV0YWRhdGEocGFyc2VyQXJl
bmEoKSwgSlNUb2tlbkxvY2F0aW9uKCksIEpTVG9rZW5Mb2NhdGlvbigpLCAwLCAwLCAwLCAwLCAw
LCBhbHdheXNTdHJpY3RJbkNsYXNzLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIHN1cGVyQmluZGlu
ZywgMCwgcGFyc2VNb2RlLCBmYWxzZSk7CiAgICAgbWV0YWRhdGEuZmluaXNoUGFyc2luZyhtX3Nj
b3BlTm9kZS0+c291cmNlKCksIElkZW50aWZpZXIoKSwgRnVuY3Rpb25Nb2RlOjpNZXRob2REZWZp
bml0aW9uKTsKICAgICBhdXRvIGluaXRpYWxpemVyID0gVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZShtX3ZtLCBtX3Njb3BlTm9kZS0+c291cmNlKCksICZtZXRhZGF0YSwgaXNCdWls
dGluRnVuY3Rpb24oKSA/IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uIDogVW5saW5rZWROb3JtYWxG
dW5jdGlvbiwgY29uc3RydWN0QWJpbGl0eSwgc2NyaXB0TW9kZSgpLCBXVEZNb3ZlKHZhcmlhYmxl
c1VuZGVyVERaKSwgbmV3RGVyaXZlZENvbnRleHRUeXBlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFs
aXplcjo6Tm8pOwotICAgIGluaXRpYWxpemVyLT5zZXRJbnN0YW5jZUZpZWxkTG9jYXRpb25zKFdU
Rk1vdmUoaW5zdGFuY2VGaWVsZExvY2F0aW9ucykpOworICAgIGluaXRpYWxpemVyLT5zZXRDbGFz
c0ZpZWxkTG9jYXRpb25zKFdURk1vdmUoY2xhc3NGaWVsZExvY2F0aW9ucykpOwogCiAgICAgdW5z
aWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25FeHByKGluaXRpYWxpemVyKTsK
ICAgICBPcE5ld0Z1bmNFeHA6OmVtaXQodGhpcywgZHN0LCBzY29wZVJlZ2lzdGVyKCksIGluZGV4
KTsKQEAgLTQ0NzQsNyArNDQ3NCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEluZGV4
ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCiAKIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZEFycm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1lbnQo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2st
PmlzQXJyb3dGdW5jdGlvbigpIHx8IG1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0
KCkgfHwgY29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzIHx8IG1f
Y29kZVR5cGUgPT0gRXZhbENvZGUgfHwgbV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpID09IFNvdXJj
ZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSk7CisgICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0
aW9uQ29udGV4dCgpIHx8IGNvbnN0cnVjdG9yS2luZCgpID09IENvbnN0cnVjdG9yS2luZDo6RXh0
ZW5kcyB8fCBtX2NvZGVUeXBlID09IEV2YWxDb2RlIHx8IG1fY29kZUJsb2NrLT5wYXJzZU1vZGUo
KSA9PSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpOwogCiAgICAg
cmV0dXJuIGVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFyaWFibGUoaWRlbnRpZmllciwgVGhp
c1Jlc29sdXRpb25UeXBlOjpTY29wZWQpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCA0YTU3YTRmYTky
YjQuLjk2YTY0ZTBmODJjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNTgyLDE0ICs1ODIsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZW1pdE5vZGVJblRhaWxQb3NpdGlvbihu
dWxscHRyLCBuKTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXREZWZpbmVD
bGFzc0VsZW1lbnRzKFByb3BlcnR5TGlzdE5vZGUqIG4sIFJlZ2lzdGVySUQqIGNvbnN0cnVjdG9y
LCBSZWdpc3RlcklEKiBwcm90b3R5cGUsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIGluc3RhbmNl
RmllbGRMb2NhdGlvbnMpCisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXREZWZpbmVDbGFzc0VsZW1l
bnRzKFByb3BlcnR5TGlzdE5vZGUqIG4sIFJlZ2lzdGVySUQqIGNvbnN0cnVjdG9yLCBSZWdpc3Rl
cklEKiBwcm90b3R5cGUsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIGluc3RhbmNlRmllbGRMb2Nh
dGlvbnMsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIHN0YXRpY0ZpZWxkTG9jYXRpb25zKQogICAg
ICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoY29uc3RydWN0b3ItPnJlZkNvdW50KCkgJiYgcHJv
dG90eXBlLT5yZWZDb3VudCgpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghbV92bS5pc1Nh
ZmVUb1JlY3Vyc2UoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0V4cHJlc3Np
b25Ub29EZWVwRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobi0+bmVlZHNE
ZWJ1Z0hvb2soKSkpCiAgICAgICAgICAgICAgICAgZW1pdERlYnVnSG9vayhuKTsKLSAgICAgICAg
ICAgIHJldHVybiBuLT5lbWl0Qnl0ZWNvZGUoKnRoaXMsIGNvbnN0cnVjdG9yLCBwcm90b3R5cGUs
ICZpbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgICAgIHJldHVybiBuLT5lbWl0Qnl0
ZWNvZGUoKnRoaXMsIGNvbnN0cnVjdG9yLCBwcm90b3R5cGUsICZpbnN0YW5jZUZpZWxkTG9jYXRp
b25zLCAmc3RhdGljRmllbGRMb2NhdGlvbnMpOwogICAgICAgICB9CiAKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdE5vZGVGb3JQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIEV4cHJlc3Npb25Ob2Rl
KiBub2RlKQpAQCAtNzc2LDcgKzc3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jdGlvbk1ldGFkYXRh
Tm9kZSopOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKFJl
Z2lzdGVySUQqIGRzdCwgRnVuY0V4cHJOb2RlKik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRO
ZXdEZWZhdWx0Q29uc3RydWN0b3IoUmVnaXN0ZXJJRCogZHN0LCBDb25zdHJ1Y3RvcktpbmQsIGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IElkZW50aWZpZXImIGVjbWFOYW1lLCBjb25zdCBT
b3VyY2VDb2RlJiBjbGFzc1NvdXJjZSwgTmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0TmV3SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24o
UmVnaXN0ZXJJRCogZHN0LCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiYgaW5zdGFuY2VGaWVsZExv
Y2F0aW9ucywgYm9vbCBpc0Rlcml2ZWQpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3Q2xh
c3NGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBWZWN0b3I8SlNUZXh0
UG9zaXRpb24+JiYgY2xhc3NGaWVsZExvY2F0aW9ucywgYm9vbCBpc0Rlcml2ZWQpOwogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0TmV3QXJyb3dGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0ZXJJRCos
IEFycm93RnVuY0V4cHJOb2RlKik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdNZXRob2RE
ZWZpbml0aW9uKFJlZ2lzdGVySUQqIGRzdCwgTWV0aG9kRGVmaW5pdGlvbk5vZGUqKTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdE5ld1JlZ0V4cChSZWdpc3RlcklEKiBkc3QsIFJlZ0V4cCopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCmluZGV4IDFlMjVkOGRjMGU4Yy4uOThkYTMwNWEzNDNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0xODYsNyAr
MTg2LDcgQEAgUmVnaXN0ZXJJRCogVGhpc05vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QKIAogc3RhdGljIFJlZ2lzdGVySUQqIGVt
aXRIb21lT2JqZWN0Rm9yQ2FsbGVlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCiB7Ci0g
ICAgaWYgKChnZW5lcmF0b3IuaXNEZXJpdmVkQ2xhc3NDb250ZXh0KCkgfHwgZ2VuZXJhdG9yLmlz
RGVyaXZlZENvbnN0cnVjdG9yQ29udGV4dCgpKSAmJiBnZW5lcmF0b3IucGFyc2VNb2RlKCkgIT0g
U291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlKSB7CisgICAgaWYg
KChnZW5lcmF0b3IuaXNEZXJpdmVkQ2xhc3NDb250ZXh0KCkgfHwgZ2VuZXJhdG9yLmlzRGVyaXZl
ZENvbnN0cnVjdG9yQ29udGV4dCgpKSAmJiBnZW5lcmF0b3IucGFyc2VNb2RlKCkgIT0gU291cmNl
UGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKSB7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGRlcml2ZWRDb25zdHJ1Y3RvciA9IGdlbmVyYXRvci5lbWl0TG9hZERlcml2ZWRDb25zdHJ1
Y3RvckZyb21BcnJvd0Z1bmN0aW9uTGV4aWNhbEVudmlyb25tZW50KCk7CiAgICAgICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBkZXJpdmVk
Q29uc3RydWN0b3IsIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuaG9t
ZU9iamVjdFByaXZhdGVOYW1lKCkpOwogICAgIH0KQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIFBy
b3BlcnR5TGlzdE5vZGU6OmVtaXREZWNsYXJlUHJpdmF0ZUZpZWxkTmFtZXMoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvcgogICAgIH0KIH0KIAotUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdE9yQ29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3RvdHlwZSwgVmVjdG9yPEpTVGV4dFBv
c2l0aW9uPiogaW5zdGFuY2VGaWVsZExvY2F0aW9ucykKK1JlZ2lzdGVySUQqIFByb3BlcnR5TGlz
dE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3RPckNvbnN0cnVjdG9yLCBSZWdpc3RlcklEKiBwcm90b3R5cGUsIFZlY3RvcjxKU1Rl
eHRQb3NpdGlvbj4qIGluc3RhbmNlRmllbGRMb2NhdGlvbnMsIFZlY3RvcjxKU1RleHRQb3NpdGlv
bj4qIHN0YXRpY0ZpZWxkTG9jYXRpb25zKQogewogICAgIFByb3BlcnR5TGlzdE5vZGUqIHAgPSB0
aGlzOwogICAgIFJlZ2lzdGVySUQqIGRzdCA9IG51bGxwdHI7CkBAIC01OTUsNiArNTk1LDEyIEBA
IFJlZ2lzdGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCisgICAgICAgIGlmIChwLT5pc1N0YXRpY0NsYXNzRmllbGQoKSkgeworICAgICAgICAgICAg
QVNTRVJUKHN0YXRpY0ZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgICAgIHN0YXRpY0ZpZWxkTG9j
YXRpb25zLT5hcHBlbmQocC0+cG9zaXRpb24oKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCiAgICAgICAgIGVtaXRQdXRDb25zdGFudFByb3BlcnR5KGdlbmVyYXRvciwgZHN0
LCAqcC0+bV9ub2RlKTsKICAgICB9CiAKQEAgLTY1Miw2ICs2NTgsMTIgQEAgUmVnaXN0ZXJJRCog
UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAor
ICAgICAgICAgICAgaWYgKHAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0YXRpY0ZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNG
aWVsZExvY2F0aW9ucy0+YXBwZW5kKHAtPnBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBIYW5kbGUgcmVndWxhciB2
YWx1ZXMuCiAgICAgICAgICAgICBpZiAobm9kZS0+bV90eXBlICYgUHJvcGVydHlOb2RlOjpDb25z
dGFudCkgewogICAgICAgICAgICAgICAgIGVtaXRQdXRDb25zdGFudFByb3BlcnR5KGdlbmVyYXRv
ciwgZHN0LCAqbm9kZSk7CkBAIC03NDQsNyArNzU2LDcgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlM
aXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGUKIAogdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0UHV0Q29uc3RhbnRQcm9wZXJ0eShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBuZXdPYmosIFByb3BlcnR5Tm9k
ZSYgbm9kZSkKIHsKLSAgICAvLyBQcml2YXRlIGZpZWxkcyBhcmUgaGFuZGxlZCBpbiB0aGUgc3lu
dGhldGljIGluc3RhbmNlRmllbGRJbml0aWFsaXplciBmdW5jdGlvbiwgbm90IGhlcmUuCisgICAg
Ly8gUHJpdmF0ZSBmaWVsZHMgYXJlIGhhbmRsZWQgaW4gYSBzeW50aGV0aWMgY2xhc3NGaWVsZElu
aXRpYWxpemVyIGZ1bmN0aW9uLCBub3QgaGVyZS4KICAgICBBU1NFUlQoIShub2RlLnR5cGUoKSAm
IFByb3BlcnR5Tm9kZTo6UHJpdmF0ZSkpOwogCiAgICAgaWYgKFByb3BlcnR5Tm9kZTo6aXNVbmRl
cnNjb3JlUHJvdG9TZXR0ZXIoZ2VuZXJhdG9yLnZtKCksIG5vZGUpKSB7CkBAIC04MDAsMTggKzgx
MiwyNSBAQCB2b2lkIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRQdXRDb25zdGFudFByb3BlcnR5KEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZwogdm9pZCBQcm9wZXJ0eUxpc3ROb2RlOjpl
bWl0U2F2ZUNvbXB1dGVkRmllbGROYW1lKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFBy
b3BlcnR5Tm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZS5pc0NvbXB1dGVkQ2xhc3NGaWVs
ZCgpKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlFeHByOwogCiAgICAgLy8gVGhl
ICduYW1lJyByZWZlcnMgdG8gYSBzeW50aGV0aWMgcHJpdmF0ZSBuYW1lIGluIHRoZSBjbGFzcyBz
Y29wZSwgd2hlcmUgdGhlIHByb3BlcnR5IGtleSBpcyBzYXZlZCBmb3IgbGF0ZXIgdXNlLgogICAg
IGNvbnN0IElkZW50aWZpZXImIGRlc2NyaXB0aW9uID0gKm5vZGUubmFtZSgpOwogICAgIFZhcmlh
YmxlIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShkZXNjcmlwdGlvbik7CiAgICAgQVNTRVJUKCF2
YXIubG9jYWwoKSk7CiAKLSAgICBwcm9wZXJ0eUV4cHIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9k
ZS5tX2V4cHJlc3Npb24pOwotICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRv
ci5lbWl0VG9Qcm9wZXJ0eUtleShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5RXhw
ci5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5RXhwciA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShub2RlLm1fZXhwcmVzc2lvbik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHBy
b3BlcnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0VG9Qcm9wZXJ0eUtleShnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIHByb3BlcnR5RXhwci5nZXQoKSk7CisKKyAgICBpZiAobm9kZS5pc1N0YXRpY0Ns
YXNzRmllbGQoKSkgeworICAgICAgICBSZWY8TGFiZWw+IHZhbGlkUHJvcGVydHlOYW1lTGFiZWwg
PSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3Rv
dHlwZVN0cmluZyA9IGdlbmVyYXRvci5lbWl0TG9hZChudWxscHRyLCBKU1ZhbHVlKGdlbmVyYXRv
ci5hZGRTdHJpbmdDb25zdGFudChnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSkp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShnZW5lcmF0b3IuZW1pdEJpbmFy
eU9wPE9wRXE+KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvdG90eXBlU3RyaW5nLmdldCgp
LCBwcm9wZXJ0eU5hbWUuZ2V0KCksIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjpzdHJpbmdUeXBl
KCksIFJlc3VsdFR5cGU6OnN0cmluZ1R5cGUoKSkpLCB2YWxpZFByb3BlcnR5TmFtZUxhYmVsLmdl
dCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRUaHJvd1R5cGVFcnJvcigiQ2Fubm90IGRlY2xh
cmUgYSBzdGF0aWMgZmllbGQgbmFtZWQgJ3Byb3RvdHlwZSciKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRMYWJlbCh2YWxpZFByb3BlcnR5TmFtZUxhYmVsLmdldCgpKTsKKyAgICB9CiAKICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxs
cHRyLCB2YXIpOwotICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFy
LCBwcm9wZXJ0eU5hbWUsIFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6YXRpb25Nb2RlOjpDb25z
dEluaXRpYWxpemF0aW9uKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0
KCksIHZhciwgcHJvcGVydHlOYW1lLmdldCgpLCBUaHJvd0lmTm90Rm91bmQsIEluaXRpYWxpemF0
aW9uTW9kZTo6Q29uc3RJbml0aWFsaXphdGlvbik7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBCcmFja2V0QWNjZXNzb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC00OTQ2LDEzICs0OTY1LDE0IEBAIFJlZ2lzdGVySUQqIENsYXNzRXhwck5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RvdHlwZU5hbWVSZWdpc3RlciA9IGdlbmVyYXRv
ci5lbWl0TG9hZChudWxscHRyLCBwcm9wZXJ0eU5hbWVzLnByb3RvdHlwZSk7CiAgICAgZ2VuZXJh
dG9yLmVtaXRDYWxsRGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IuZ2V0KCksIHByb3RvdHlwZU5h
bWVSZWdpc3Rlci5nZXQoKSwgcHJvdG90eXBlLmdldCgpLCBudWxscHRyLCBudWxscHRyLCAwLCBt
X3Bvc2l0aW9uKTsKIAorICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4gc3RhdGljRmllbGRMb2Nh
dGlvbnM7CiAgICAgaWYgKG1fY2xhc3NFbGVtZW50cykgewogICAgICAgICBtX2NsYXNzRWxlbWVu
dHMtPmVtaXREZWNsYXJlUHJpdmF0ZUZpZWxkTmFtZXMoZ2VuZXJhdG9yLCBnZW5lcmF0b3Iuc2Nv
cGVSZWdpc3RlcigpKTsKIAogICAgICAgICBWZWN0b3I8SlNUZXh0UG9zaXRpb24+IGluc3RhbmNl
RmllbGRMb2NhdGlvbnM7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVmaW5lQ2xhc3NFbGVtZW50
cyhtX2NsYXNzRWxlbWVudHMsIGNvbnN0cnVjdG9yLmdldCgpLCBwcm90b3R5cGUuZ2V0KCksIGlu
c3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgICAgICBnZW5lcmF0b3IuZW1pdERlZmluZUNsYXNz
RWxlbWVudHMobV9jbGFzc0VsZW1lbnRzLCBjb25zdHJ1Y3Rvci5nZXQoKSwgcHJvdG90eXBlLmdl
dCgpLCBpbnN0YW5jZUZpZWxkTG9jYXRpb25zLCBzdGF0aWNGaWVsZExvY2F0aW9ucyk7CiAgICAg
ICAgIGlmICghaW5zdGFuY2VGaWVsZExvY2F0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBpbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXIgPSBnZW5lcmF0b3Iu
ZW1pdE5ld0luc3RhbmNlRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgV1RGTW92ZShpbnN0YW5jZUZpZWxkTG9jYXRpb25zKSwgbV9jbGFzc0hlcml0YWdl
KTsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbnN0YW5jZUZpZWxkSW5pdGlhbGl6
ZXIgPSBnZW5lcmF0b3IuZW1pdE5ld0NsYXNzRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgV1RGTW92ZShpbnN0YW5jZUZpZWxkTG9jYXRpb25zKSwgbV9j
bGFzc0hlcml0YWdlKTsKIAogICAgICAgICAgICAgLy8gRklYTUU6IFNraXAgdGhpcyBpZiB0aGUg
aW5pdGlhbGl6ZXIgZnVuY3Rpb24gaXNuJ3QgZ29pbmcgdG8gbmVlZCBhIGhvbWUgb2JqZWN0IChu
byBldmFsIG9yIHN1cGVyIHByb3BlcnRpZXMpCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2ODY3CkBAIC00OTYyLDE2ICs0OTgyLDI3IEBA
IFJlZ2lzdGVySUQqIENsYXNzRXhwck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklECiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9u
ZWVkc0xleGljYWxTY29wZSkgewotICAgICAgICBpZiAoIW1fbmFtZS5pc051bGwoKSkgewotICAg
ICAgICAgICAgVmFyaWFibGUgY2xhc3NOYW1lVmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1fbmFt
ZSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjbGFzc05hbWVWYXIuaXNSZXNvbHZlZCgp
KTsKLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0
UmVzb2x2ZVNjb3BlKG51bGxwdHIsIGNsYXNzTmFtZVZhcik7Ci0gICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGNsYXNzTmFtZVZhciwgY29uc3RydWN0b3Iu
Z2V0KCksIFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6YXRpb25Nb2RlOjpJbml0aWFsaXphdGlv
bik7Ci0gICAgICAgIH0KLSAgICAgICAgZ2VuZXJhdG9yLnBvcExleGljYWxTY29wZSh0aGlzKTsK
KyAgICBpZiAobV9uZWVkc0xleGljYWxTY29wZSAmJiAhbV9uYW1lLmlzTnVsbCgpKSB7CisgICAg
ICAgIFZhcmlhYmxlIGNsYXNzTmFtZVZhciA9IGdlbmVyYXRvci52YXJpYWJsZShtX25hbWUpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjbGFzc05hbWVWYXIuaXNSZXNvbHZlZCgpKTsKKyAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUo
bnVsbHB0ciwgY2xhc3NOYW1lVmFyKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3Bl
KHNjb3BlLmdldCgpLCBjbGFzc05hbWVWYXIsIGNvbnN0cnVjdG9yLmdldCgpLCBUaHJvd0lmTm90
Rm91bmQsIEluaXRpYWxpemF0aW9uTW9kZTo6SW5pdGlhbGl6YXRpb24pOworICAgIH0KKworICAg
IGlmICghc3RhdGljRmllbGRMb2NhdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBzdGF0aWNGaWVsZEluaXRpYWxpemVyID0gZ2VuZXJhdG9yLmVtaXROZXdDbGFz
c0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIFdURk1v
dmUoc3RhdGljRmllbGRMb2NhdGlvbnMpLCBtX2NsYXNzSGVyaXRhZ2UpOworICAgICAgICAvLyBG
SVhNRTogU2tpcCB0aGlzIGlmIHRoZSBpbml0aWFsaXplciBmdW5jdGlvbiBpc24ndCBnb2luZyB0
byBuZWVkIGEgaG9tZSBvYmplY3QgKG5vIGV2YWwgb3Igc3VwZXIgcHJvcGVydGllcykKKyAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Njg2NworICAg
ICAgICBlbWl0UHV0SG9tZU9iamVjdChnZW5lcmF0b3IsIHN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXIu
Z2V0KCksIGNvbnN0cnVjdG9yLmdldCgpKTsKKworICAgICAgICBDYWxsQXJndW1lbnRzIGFyZ3Mo
Z2VuZXJhdG9yLCBudWxscHRyKTsKKyAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy50aGlzUmVn
aXN0ZXIoKSwgY29uc3RydWN0b3IuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzdGF0aWNGaWVsZEluaXRpYWxpemVyLmdldCgpLCBO
b0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3MsIHBvc2l0aW9uKCksIHBvc2l0aW9uKCksIHBvc2l0aW9u
KCksIERlYnVnZ2FibGVDYWxsOjpObyk7CiAgICAgfQogCisgICAgaWYgKG1fbmVlZHNMZXhpY2Fs
U2NvcGUpCisgICAgICAgIGdlbmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CisKICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBjb25z
dHJ1Y3Rvci5nZXQoKSksIGNvbnN0cnVjdG9yLmdldCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggYzA3ZmRlMDc5
OTBiLi5iMDUxN2JkOTc3YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIEpTVmFsdWUgZXZhbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRUNNQU1v
ZGUgZWNtYU1vCiAgICAgfQogCiAgICAgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZTsK
LSAgICBpZiAoY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPnBhcnNlTW9kZSgpID09IFNvdXJjZVBh
cnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZSkKKyAgICBpZiAoY2FsbGVyVW5s
aW5rZWRDb2RlQmxvY2stPnBhcnNlTW9kZSgpID09IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVs
ZEluaXRpYWxpemVyTW9kZSkKICAgICAgICAgZXZhbENvbnRleHRUeXBlID0gRXZhbENvbnRleHRU
eXBlOjpJbnN0YW5jZUZpZWxkRXZhbENvbnRleHQ7CiAgICAgZWxzZSBpZiAoaXNGdW5jdGlvblBh
cnNlTW9kZShjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+cGFyc2VNb2RlKCkpKQogICAgICAgICBl
dmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6OkZ1bmN0aW9uRXZhbENvbnRleHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5kZXggNzM1OGJiMzI1MjdlLi4xNzA5N2Vh
OWYyNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTczOCw2ICs3Mzgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc0luc3RhbmNlQ2xhc3NQcm9wZXJ0
eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENsYXNzRWxlbWVudFRhZz4obV9jbGFzc0Vs
ZW1lbnRUYWcpID09IENsYXNzRWxlbWVudFRhZzo6SW5zdGFuY2U7IH0KICAgICAgICAgYm9vbCBp
c0NsYXNzRmllbGQoKSBjb25zdCB7IHJldHVybiBpc0NsYXNzUHJvcGVydHkoKSAmJiAhbmVlZHNT
dXBlckJpbmRpbmcoKTsgfQogICAgICAgICBib29sIGlzSW5zdGFuY2VDbGFzc0ZpZWxkKCkgY29u
c3QgeyByZXR1cm4gaXNJbnN0YW5jZUNsYXNzUHJvcGVydHkoKSAmJiAhbmVlZHNTdXBlckJpbmRp
bmcoKTsgfQorICAgICAgICBib29sIGlzU3RhdGljQ2xhc3NGaWVsZCgpIGNvbnN0IHsgcmV0dXJu
IGlzU3RhdGljQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGluZygpOyB9CiAgICAg
ICAgIGJvb2wgaXNPdmVycmlkZGVuQnlEdXBsaWNhdGUoKSBjb25zdCB7IHJldHVybiBtX2lzT3Zl
cnJpZGRlbkJ5RHVwbGljYXRlOyB9CiAgICAgICAgIGJvb2wgaXNQcml2YXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlICYgUHJpdmF0ZTsgfQogICAgICAgICBib29sIGhhc0NvbXB1dGVkTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbjsgfQpAQCAtNzgyLDE2ICs3ODMsMjEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBoYXNJbnN0YW5jZUZpZWxkcygp
IGNvbnN0OwogCisgICAgICAgIGJvb2wgaXNTdGF0aWNDbGFzc0ZpZWxkKCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fbm9kZS0+aXNTdGF0aWNDbGFzc0ZpZWxkKCk7Cisg
ICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVMZXhpY2FsU2NvcGVG
b3JDbGFzcyhQcm9wZXJ0eUxpc3ROb2RlKik7CiAKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBWZWN0
b3I8SlNUZXh0UG9zaXRpb24+Kik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgVmVjdG9yPEpTVGV4
dFBvc2l0aW9uPiosIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qKTsKIAogICAgICAgICB2b2lkIGVt
aXREZWNsYXJlUHJpdmF0ZUZpZWxkTmFtZXMoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiBzY29wZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0ID0gbnVsbHB0
cikgZmluYWwKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVtaXRCeXRlY29kZShnZW5l
cmF0b3IsIGRzdCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm4gZW1pdEJ5
dGVjb2RlKGdlbmVyYXRvciwgZHN0LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKICAgICAg
ICAgfQogICAgICAgICB2b2lkIGVtaXRQdXRDb25zdGFudFByb3BlcnR5KEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCosIFByb3BlcnR5Tm9kZSYpOwogICAgICAgICB2b2lkIGVtaXRTYXZl
Q29tcHV0ZWRGaWVsZE5hbWUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBQcm9wZXJ0eU5vZGUmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCA1MDAxNDBjNWMzYWIuLmRj
MmU4OGFhNDYyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcApAQCAt
MjA5LDcgKzIwOSw3IEBAIFBhcnNlcjxMZXhlclR5cGU+Ojp+UGFyc2VyKCkKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLUV4cGVjdGVkPHR5cGVuYW1lIFBhcnNlcjxMZXhlclR5
cGU+OjpQYXJzZUlubmVyUmVzdWx0LCBTdHJpbmc+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlu
bmVyKGNvbnN0IElkZW50aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1v
ZGUsIFBhcnNpbmdDb250ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9u
Q29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZlY3RvcjxKU1RleHRQb3Np
dGlvbj4qIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpCitFeHBlY3RlZDx0eXBlbmFtZSBQYXJzZXI8
TGV4ZXJUeXBlPjo6UGFyc2VJbm5lclJlc3VsdCwgU3RyaW5nPiBQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VJbm5lcihjb25zdCBJZGVudGlmaWVyJiBjYWxsZWVOYW1lLCBTb3VyY2VQYXJzZU1vZGUg
cGFyc2VNb2RlLCBQYXJzaW5nQ29udGV4dCBwYXJzaW5nQ29udGV4dCwgT3B0aW9uYWw8aW50PiBm
dW5jdGlvbkNvbnN0cnVjdG9yUGFyYW1ldGVyc0VuZFBvc2l0aW9uLCBjb25zdCBWZWN0b3I8SlNU
ZXh0UG9zaXRpb24+KiBjbGFzc0ZpZWxkTG9jYXRpb25zKQogewogICAgIEFTVEJ1aWxkZXIgY29u
dGV4dChjb25zdF9jYXN0PFZNJj4obV92bSksIG1fcGFyc2VyQXJlbmEsIGNvbnN0X2Nhc3Q8U291
cmNlQ29kZSo+KG1fc291cmNlKSk7CiAgICAgU2NvcGVSZWYgc2NvcGUgPSBjdXJyZW50U2NvcGUo
KTsKQEAgLTIyMiw3ICsyMjIsNyBAQCBFeHBlY3RlZDx0eXBlbmFtZSBQYXJzZXI8TGV4ZXJUeXBl
Pjo6UGFyc2VJbm5lclJlc3VsdCwgU3RyaW5nPiBQYXJzZXI8TGV4ZXJUeXBlPgogICAgICAgICBQ
YXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4gZnVuY3Rpb25JbmZvOwogICAgICAgICBpZiAo
aXNHZW5lcmF0b3JPckFzeW5jRnVuY3Rpb25Cb2R5UGFyc2VNb2RlKHBhcnNlTW9kZSkpCiAgICAg
ICAgICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlR2VuZXJhdG9yUGFyYW1ldGVycyhjb250ZXh0LCBm
dW5jdGlvbkluZm8ucGFyYW1ldGVyQ291bnQpOwotICAgICAgICBlbHNlIGlmIChwYXJzZU1vZGUg
PT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlKQorICAgICAg
ICBlbHNlIGlmIChwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlh
bGl6ZXJNb2RlKQogICAgICAgICAgICAgcGFyYW1ldGVycyA9IGNvbnRleHQuY3JlYXRlRm9ybWFs
UGFyYW1ldGVyTGlzdCgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwYXJhbWV0ZXJzID0g
cGFyc2VGdW5jdGlvblBhcmFtZXRlcnMoY29udGV4dCwgcGFyc2VNb2RlLCBmdW5jdGlvbkluZm8p
OwpAQCAtMjU2LDkgKzI1Niw5IEBAIEV4cGVjdGVkPHR5cGVuYW1lIFBhcnNlcjxMZXhlclR5cGU+
OjpQYXJzZUlubmVyUmVzdWx0LCBTdHJpbmc+IFBhcnNlcjxMZXhlclR5cGU+CiAgICAgICAgICAg
ICBzb3VyY2VFbGVtZW50cyA9IHBhcnNlQXN5bmNHZW5lcmF0b3JGdW5jdGlvblNvdXJjZUVsZW1l
bnRzKGNvbnRleHQsIHBhcnNlTW9kZSwgaXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24sIENo
ZWNrRm9yU3RyaWN0TW9kZSk7CiAgICAgICAgIGVsc2UgaWYgKHBhcnNpbmdDb250ZXh0ID09IFBh
cnNpbmdDb250ZXh0OjpGdW5jdGlvbkNvbnN0cnVjdG9yKQogICAgICAgICAgICAgc291cmNlRWxl
bWVudHMgPSBwYXJzZVNpbmdsZUZ1bmN0aW9uKGNvbnRleHQsIGZ1bmN0aW9uQ29uc3RydWN0b3JQ
YXJhbWV0ZXJzRW5kUG9zaXRpb24pOwotICAgICAgICBlbHNlIGlmIChwYXJzZU1vZGUgPT0gU291
cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoaW5zdGFuY2VGaWVsZExvY2F0aW9ucyAmJiAhaW5zdGFuY2VGaWVsZExvY2F0aW9u
cy0+aXNFbXB0eSgpKTsKLSAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VJbnN0YW5j
ZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyhjb250ZXh0LCAqaW5zdGFuY2VGaWVsZExv
Y2F0aW9ucyk7CisgICAgICAgIGVsc2UgaWYgKHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6
OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChjbGFzc0Zp
ZWxkTG9jYXRpb25zICYmICFjbGFzc0ZpZWxkTG9jYXRpb25zLT5pc0VtcHR5KCkpOworICAgICAg
ICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZUNsYXNzRmllbGRJbml0aWFsaXplclNvdXJjZUVs
ZW1lbnRzKGNvbnRleHQsICpjbGFzc0ZpZWxkTG9jYXRpb25zKTsKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBhcnNlU291cmNlRWxlbWVudHMoY29udGV4dCwg
Q2hlY2tGb3JTdHJpY3RNb2RlKTsKICAgICB9CkBAIC0yMTc4LDcgKzIxNzgsNyBAQCBzdGF0aWMg
Y29uc3QgY2hhciogc3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZShTb3VyY2VQYXJzZU1vZGUg
bW9kZSkKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6UHJvZ3JhbU1vZGU6CiAgICAgY2FzZSBT
b3VyY2VQYXJzZU1vZGU6Ok1vZHVsZUFuYWx5emVNb2RlOgogICAgIGNhc2UgU291cmNlUGFyc2VN
b2RlOjpNb2R1bGVFdmFsdWF0ZU1vZGU6Ci0gICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Okluc3Rh
bmNlRmllbGRJbml0aWFsaXplck1vZGU6CisgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNz
RmllbGRJbml0aWFsaXplck1vZGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybiAiIjsKICAgICB9CkBAIC0yMjIwLDcgKzIyMjAsNyBAQCBzdGF0
aWMgY29uc3QgY2hhciogc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKFNvdXJjZVBhcnNlTW9kZSBtb2Rl
KQogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZToKICAgICBjYXNlIFNvdXJj
ZVBhcnNlTW9kZTo6TW9kdWxlQW5hbHl6ZU1vZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6
Ok1vZHVsZUV2YWx1YXRlTW9kZToKLSAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VG
aWVsZEluaXRpYWxpemVyTW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVs
ZEluaXRpYWxpemVyTW9kZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuICIiOwogICAgIH0KQEAgLTI4MzgsNiArMjgzOCw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VDbGFzc0RlY2xhcmF0CiB9CiAKIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIGluc3Rh
bmNlQ29tcHV0ZWROYW1lUHJlZml4IHsgImluc3RhbmNlQ29tcHV0ZWROYW1lIl9zIH07CitzdGF0
aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBzdGF0aWNDb21wdXRlZE5hbWVQcmVmaXggeyAic3Rh
dGljQ29tcHV0ZWROYW1lIl9zIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4cHJlc3Npb24gUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlQ2xhc3MoVHJlZUJ1aWxkZXImIGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJl
cXVpcmVtZW50cyByZXF1aXJlbWVudHMsIFBhcnNlckNsYXNzSW5mbzxUcmVlQnVpbGRlcj4mIGlu
Zm8pCkBAIC0yODgxLDcgKzI4ODIsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVDbGFzc0V4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MoVAogICAgIFRy
ZWVFeHByZXNzaW9uIGNvbnN0cnVjdG9yID0gMDsKICAgICBUcmVlUHJvcGVydHlMaXN0IGNsYXNz
RWxlbWVudHMgPSAwOwogICAgIFRyZWVQcm9wZXJ0eUxpc3QgY2xhc3NFbGVtZW50c1RhaWwgPSAw
OwotICAgIHVuc2lnbmVkIG51bUNvbXB1dGVkRmllbGRzID0gMDsKKyAgICB1bnNpZ25lZCBuZXh0
SW5zdGFuY2VDb21wdXRlZEZpZWxkSUQgPSAwLCBuZXh0U3RhdGljQ29tcHV0ZWRGaWVsZElEID0g
MDsKICAgICB3aGlsZSAoIW1hdGNoKENMT1NFQlJBQ0UpKSB7CiAgICAgICAgIGlmIChtYXRjaChT
RU1JQ09MT04pKSB7CiAgICAgICAgICAgICBuZXh0KCk7CkBAIC0yOTkwLDE1ICsyOTkxLDIwIEBA
IHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgdHlwZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5Tm9k
ZTo6VHlwZT4odHlwZSB8IChpc0dldHRlciA/IFByb3BlcnR5Tm9kZTo6R2V0dGVyIDogUHJvcGVy
dHlOb2RlOjpTZXR0ZXIpKTsKICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VHZXR0ZXJTZXR0
ZXIoY29udGV4dCwgdHlwZSwgbWV0aG9kU3RhcnQsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgdGFn
KTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHByb3BlcnR5LCAiQ2Fubm90IHBhcnNlIHRoaXMg
bWV0aG9kIik7Ci0gICAgICAgIH0gZWxzZSBpZiAoT3B0aW9uczo6dXNlUHVibGljQ2xhc3NGaWVs
ZHMoKSAmJiAhbWF0Y2goT1BFTlBBUkVOKSAmJiB0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpJbnN0
YW5jZSAmJiBwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlKSB7CisgICAg
ICAgIH0gZWxzZSBpZiAoT3B0aW9uczo6dXNlUHVibGljQ2xhc3NGaWVsZHMoKSAmJiAhbWF0Y2go
T1BFTlBBUkVOKSAmJiBwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlKSB7
CiAgICAgICAgICAgICBBU1NFUlQoIWlzR2V0dGVyICYmICFpc1NldHRlcik7CiAgICAgICAgICAg
ICBpZiAoaWRlbnQpIHsKICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50
ID09IHByb3BlcnR5TmFtZXMuY29uc3RydWN0b3IsICJDYW5ub3QgZGVjbGFyZSBjbGFzcyBmaWVs
ZCBuYW1lZCAnY29uc3RydWN0b3InIik7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZU
cnVlKCppZGVudCA9PSBwcm9wZXJ0eU5hbWVzLmNvbnN0cnVjdG9yUHJpdmF0ZUZpZWxkLCAiQ2Fu
bm90IGRlY2xhcmUgcHJpdmF0ZSBjbGFzcyBmaWVsZCBuYW1lZCAnI2NvbnN0cnVjdG9yJyIpOwor
ICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpTdGF0aWMpCisgICAg
ICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gcHJvcGVydHlOYW1l
cy5wcm90b3R5cGUsICJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyBmaWVsZCBuYW1lZCAncHJvdG90
eXBlJyIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY29tcHV0ZWRQcm9wZXJ0
eU5hbWUpIHsKLSAgICAgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZp
ZXJBcmVuYSgpLm1ha2VQcml2YXRlSWRlbnRpZmllcihtX3ZtLCBpbnN0YW5jZUNvbXB1dGVkTmFt
ZVByZWZpeCwgbnVtQ29tcHV0ZWRGaWVsZHMrKyk7CisgICAgICAgICAgICAgICAgaWYgKHRhZyA9
PSBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlKQorICAgICAgICAgICAgICAgICAgICBpZGVudCA9
ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VQcml2YXRlSWRlbnRpZmllciht
X3ZtLCBpbnN0YW5jZUNvbXB1dGVkTmFtZVByZWZpeCwgbmV4dEluc3RhbmNlQ29tcHV0ZWRGaWVs
ZElEKyspOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaWRlbnQg
PSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlUHJpdmF0ZUlkZW50aWZpZXIo
bV92bSwgc3RhdGljQ29tcHV0ZWROYW1lUHJlZml4LCBuZXh0U3RhdGljQ29tcHV0ZWRGaWVsZElE
KyspOwogICAgICAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJl
c3VsdCA9IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFibGUoaWRlbnQsIHRydWUpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGVjbGFyYXRpb25SZXN1bHQsIGRlY2xhcmF0
aW9uUmVzdWx0ID09IERlY2xhcmF0aW9uUmVzdWx0OjpWYWxpZCk7CiAgICAgICAgICAgICAgICAg
Y2xhc3NTY29wZS0+dXNlVmFyaWFibGUoaWRlbnQsIGZhbHNlKTsKQEAgLTMwNjUsMTMgKzMwNzEs
MTQgQEAgcGFyc2VNZXRob2Q6CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyhUcmVl
QnVpbGRlciYgY29udGV4dCwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYgaW5zdGFuY2VG
aWVsZExvY2F0aW9ucykKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVs
ZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzRmllbGRJbml0aWFsaXplclNvdXJj
ZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRp
b24+JiBjbGFzc0ZpZWxkTG9jYXRpb25zKQogewogICAgIFRyZWVTb3VyY2VFbGVtZW50cyBzb3Vy
Y2VFbGVtZW50cyA9IGNvbnRleHQuY3JlYXRlU291cmNlRWxlbWVudHMoKTsKICAgICBjdXJyZW50
U2NvcGUoKS0+c2V0SXNDbGFzc1Njb3BlKCk7CiAKICAgICB1bnNpZ25lZCBudW1Db21wdXRlZEZp
ZWxkcyA9IDA7Ci0gICAgZm9yIChhdXRvIGxvY2F0aW9uIDogaW5zdGFuY2VGaWVsZExvY2F0aW9u
cykgeworICAgIGJvb2wgaXNTdGF0aWNGaWVsZCA9IGZhbHNlOworICAgIGZvciAoYXV0byBsb2Nh
dGlvbiA6IGNsYXNzRmllbGRMb2NhdGlvbnMpIHsKICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0
byB3b3JyeSBhYm91dCBoYXNMaW5lVGVybWluYXRvckJlZm9yZVRva2VuCiAgICAgICAgIC8vIG9u
IGNsYXNzIGZpZWxkcywgc28gd2Ugc2V0IHRoaXMgdmFsdWUgdG8gZmFsc2UuCiAgICAgICAgIExl
eGVyU3RhdGUgbGV4ZXJTdGF0ZSB7IGxvY2F0aW9uLm9mZnNldCwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2Nh
dGlvbi5saW5lKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvY2F0aW9uLmxpbmUpLCBmYWxzZSB9
OwpAQCAtMzA4MCw2ICszMDg3LDE2IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlCiAgICAgICAg
IEpTVG9rZW5Mb2NhdGlvbiBmaWVsZExvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwogICAgICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG51bGxwdHI7CiAgICAgICAgIERlZmluZUZpZWxk
Tm9kZTo6VHlwZSB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpOYW1lOworCisgICAgICAg
IGlmIChtYXRjaChSRVNFUlZFRF9JRl9TVFJJQ1QpICYmICptX3Rva2VuLm1fZGF0YS5pZGVudCA9
PSBtX3ZtLnByb3BlcnR5TmFtZXMtPnN0YXRpY0tleXdvcmQpIHsKKyAgICAgICAgICAgIGlkZW50
ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CisgICAgICAgICAgICBBU1NFUlQoaWRlbnQpOworICAg
ICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgaWYgKG1hdGNoKFNFTUlDT0xPTikgfHwgbWF0
Y2ggKEVRVUFMKSB8fCBtYXRjaChDTE9TRUJSQUNFKSB8fCBtX2xleGVyLT5oYXNMaW5lVGVybWlu
YXRvckJlZm9yZVRva2VuKCkpCisgICAgICAgICAgICAgICAgZ290byB2YWxpZEZpZWxkOworICAg
ICAgICAgICAgaXNTdGF0aWNGaWVsZCA9IHRydWU7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0
Y2ggKG1fdG9rZW4ubV90eXBlKSB7CiAgICAgICAgIGNhc2UgUFJJVkFURU5BTUU6CiAgICAgICAg
ICAgICB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpQcml2YXRlTmFtZTsKQEAgLTMxMDcs
NyArMzEyNCw5IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1l
bnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlCiAgICAgICAgICAgICBUcmVlRXhw
cmVzc2lvbiBjb21wdXRlZFByb3BlcnR5TmFtZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24o
Y29udGV4dCk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShjb21wdXRlZFByb3BlcnR5TmFtZSwg
IkNhbm5vdCBwYXJzZSBjb21wdXRlZCBwcm9wZXJ0eSBuYW1lIik7CiAgICAgICAgICAgICBoYW5k
bGVQcm9kdWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5kIiwgImNvbXB1dGVkIHBy
b3BlcnR5IG5hbWUiKTsKLSAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRlbnRp
ZmllckFyZW5hKCkubWFrZVByaXZhdGVJZGVudGlmaWVyKG1fdm0sIGluc3RhbmNlQ29tcHV0ZWRO
YW1lUHJlZml4LCBudW1Db21wdXRlZEZpZWxkcysrKTsKKyAgICAgICAgICAgIGlkZW50ID0gJm1f
cGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZVByaXZhdGVJZGVudGlmaWVyKG1fdm0s
CisgICAgICAgICAgICAgICAgaXNTdGF0aWNGaWVsZCA/IHN0YXRpY0NvbXB1dGVkTmFtZVByZWZp
eCA6IGluc3RhbmNlQ29tcHV0ZWROYW1lUHJlZml4LAorICAgICAgICAgICAgICAgIG51bUNvbXB1
dGVkRmllbGRzKyspOwogICAgICAgICAgICAgdHlwZSA9IERlZmluZUZpZWxkTm9kZTo6VHlwZTo6
Q29tcHV0ZWROYW1lOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTMxMTcsNiAr
MzEzNiw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRz
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlCiAgICAgICAgICAgICBmYWlsRHVlVG9V
bmV4cGVjdGVkVG9rZW4oKTsKICAgICAgICAgfQogCisgICAgdmFsaWRGaWVsZDoKICAgICAgICAg
Ly8gT25seSB2YWxpZCBjbGFzcyBmaWVsZHMgYXJlIGhhbmRsZWQgaW4gdGhpcyBmdW5jdGlvbi4K
ICAgICAgICAgQVNTRVJUKG1hdGNoKEVRVUFMKSB8fCBtYXRjaChTRU1JQ09MT04pIHx8IG1hdGNo
KENMT1NFQlJBQ0UpIHx8IG1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9rZW4oKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IGNlY2NmODE2MzI4ZC4u
MGU4MjAzNTk1Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTI2
MCw3ICsyNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpHZXR0
ZXJNb2RlOgogICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6U2V0dGVyTW9kZToKICAgICAg
ICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGU6Ci0gICAgICAgIGNhc2UgU291cmNl
UGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOgorICAgICAgICBjYXNlIFNv
dXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZToKICAgICAgICAgICAgIHNl
dElzRnVuY3Rpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0xNzEyLDcgKzE3MTIsNyBA
QCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVs
ZW1lbnRzIHBhcnNlQXN5bmNGdW5jdGlvblNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiwgU291
cmNlUGFyc2VNb2RlLCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uLCBTb3VyY2VF
bGVtZW50c01vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJj
ZUVsZW1lbnRzIHBhcnNlQXN5bmNHZW5lcmF0b3JGdW5jdGlvblNvdXJjZUVsZW1lbnRzKFRyZWVC
dWlsZGVyJiwgU291cmNlUGFyc2VNb2RlLCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNz
aW9uLCBTb3VyY2VFbGVtZW50c01vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNlU2luZ2xlRnVuY3Rpb24oVHJlZUJ1aWxkZXImLCBP
cHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pOwot
ICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNl
SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXImLCBjb25z
dCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU291cmNlRWxlbWVudHMgcGFyc2VDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VF
bGVtZW50cyhUcmVlQnVpbGRlciYsIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mKTsKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1l
bnRMaXN0SXRlbShUcmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3RpdmUsIHVu
c2lnbmVkKiBkaXJlY3RpdmVMaXRlcmFsTGVuZ3RoKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImLCBjb25z
dCBJZGVudGlmaWVyKiYgZGlyZWN0aXZlLCB1bnNpZ25lZCogZGlyZWN0aXZlTGl0ZXJhbExlbmd0
aCA9IG51bGxwdHIpOwogICAgIGVudW0gY2xhc3MgRXhwb3J0VHlwZSB7IEV4cG9ydGVkLCBOb3RF
eHBvcnRlZCB9OwpAQCAtMjA1Myw3ICsyMDUzLDcgQEAgcHJpdmF0ZToKIAogdGVtcGxhdGUgPHR5
cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgotc3RkOjp1bmlx
dWVfcHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShQYXJzZXJFcnJvciYg
ZXJyb3IsIGNvbnN0IElkZW50aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJz
ZU1vZGUsIFBhcnNpbmdDb250ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0
aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZhcmlhYmxlRW52aXJv
bm1lbnQqIHBhcmVudFNjb3BlUHJpdmF0ZU5hbWVzLCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRp
b24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQorc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShQYXJzZXJFcnJvciYgZXJyb3IsIGNvbnN0IElkZW50
aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFBhcnNpbmdDb250
ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJh
bWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3Bl
UHJpdmF0ZU5hbWVzLCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBjbGFzc0ZpZWxkTG9j
YXRpb25zKQogewogICAgIGludCBlcnJMaW5lOwogICAgIFN0cmluZyBlcnJNc2c7CkBAIC0yMDcz
LDcgKzIwNzMsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlKFBhcnNlckVycm9yJiBlcnJvciwgY29uc3QgSQogICAgICAgICBwYXJlbnRTY29w
ZVByaXZhdGVOYW1lcy0+Y29weVByaXZhdGVOYW1lc1RvKGN1cnJlbnRTY29wZSgpLT5sZXhpY2Fs
VmFyaWFibGVzKCkpOwogICAgIH0KIAotICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZUlubmVy
KGNhbGxlZU5hbWUsIHBhcnNlTW9kZSwgcGFyc2luZ0NvbnRleHQsIGZ1bmN0aW9uQ29uc3RydWN0
b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgIGF1
dG8gcGFyc2VSZXN1bHQgPSBwYXJzZUlubmVyKGNhbGxlZU5hbWUsIHBhcnNlTW9kZSwgcGFyc2lu
Z0NvbnRleHQsIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNsYXNz
RmllbGRMb2NhdGlvbnMpOwogCiAgICAgaW50IGxpbmVOdW1iZXIgPSBtX2xleGVyLT5saW5lTnVt
YmVyKCk7CiAgICAgYm9vbCBsZXhFcnJvciA9IG1fbGV4ZXItPnNhd0Vycm9yKCk7CkBAIC0yMTU4
LDcgKzIxNTgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoCiAgICAgRXZh
bENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwKICAg
ICBEZWJ1Z2dlclBhcnNlRGF0YSogZGVidWdnZXJQYXJzZURhdGEgPSBudWxscHRyLAogICAgIGNv
bnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3BlUHJpdmF0ZU5hbWVzID0gbnVsbHB0
ciwKLSAgICBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRp
b25zID0gbnVsbHB0ciwKKyAgICBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBjbGFzc0Zp
ZWxkTG9jYXRpb25zID0gbnVsbHB0ciwKICAgICBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlv
biA9IGZhbHNlKQogewogICAgIEFTU0VSVCghc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlz
TnVsbCgpKTsKQEAgLTIxNzAsNyArMjE3MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2Rl
PiBwYXJzZSgKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcmVzdWx0OwogICAgIGlm
IChzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXM4Qml0KCkpIHsKICAgICAgICAgUGFyc2Vy
PExleGVyPExDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2Rl
LCBzY3JpcHRNb2RlLCBwYXJzZU1vZGUsIHN1cGVyQmluZGluZywgZGVmYXVsdENvbnN0cnVjdG9y
S2luZEZvclRvcExldmVsRnVuY3Rpb24sIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNFdmFsTm9kZTxQ
YXJzZWROb2RlPigpLCBldmFsQ29udGV4dFR5cGUsIGRlYnVnZ2VyUGFyc2VEYXRhLCBpc0luc2lk
ZU9yZGluYXJ5RnVuY3Rpb24pOwotICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2Vk
Tm9kZT4oZXJyb3IsIG5hbWUsIHBhcnNlTW9kZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpID8g
UGFyc2luZ0NvbnRleHQ6OkV2YWwgOiBQYXJzaW5nQ29udGV4dDo6UHJvZ3JhbSwgV1RGOjpudWxs
b3B0LCBwYXJlbnRTY29wZVByaXZhdGVOYW1lcywgaW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7Cisg
ICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvciwgbmFtZSwgcGFy
c2VNb2RlLCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCkgPyBQYXJzaW5nQ29udGV4dDo6RXZhbCA6
IFBhcnNpbmdDb250ZXh0OjpQcm9ncmFtLCBXVEY6Om51bGxvcHQsIHBhcmVudFNjb3BlUHJpdmF0
ZU5hbWVzLCBjbGFzc0ZpZWxkTG9jYXRpb25zKTsKICAgICAgICAgaWYgKHBvc2l0aW9uQmVmb3Jl
TGFzdE5ld2xpbmUpCiAgICAgICAgICAgICAqcG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSA9IHBh
cnNlci5wb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKCk7CiAgICAgICAgIGlmIChidWlsdGluTW9k
ZSA9PSBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpCdWlsdGluKSB7CkBAIC0yMTgzLDcgKzIxODMsNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShkZWZhdWx0Q29uc3RydWN0b3JLaW5kRm9yVG9wTGV2ZWxG
dW5jdGlvbiA9PSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsICJCdWlsdGluRXhlY3V0YWJsZXMncyBz
cGVjaWFsIGNvbnN0cnVjdG9ycyBzaG91bGQgYWx3YXlzIHVzZSBhIDgtYml0IHN0cmluZyIpOwog
ICAgICAgICBQYXJzZXI8TGV4ZXI8VUNoYXI+PiBwYXJzZXIodm0sIHNvdXJjZSwgYnVpbHRpbk1v
ZGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIHBhcnNlTW9kZSwgc3VwZXJCaW5kaW5nLCBkZWZh
dWx0Q29uc3RydWN0b3JLaW5kRm9yVG9wTGV2ZWxGdW5jdGlvbiwgZGVyaXZlZENvbnRleHRUeXBl
LCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCksIGV2YWxDb250ZXh0VHlwZSwgZGVidWdnZXJQYXJz
ZURhdGEsIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbik7Ci0gICAgICAgIHJlc3VsdCA9IHBhcnNl
ci5wYXJzZTxQYXJzZWROb2RlPihlcnJvciwgbmFtZSwgcGFyc2VNb2RlLCBpc0V2YWxOb2RlPFBh
cnNlZE5vZGU+KCkgPyBQYXJzaW5nQ29udGV4dDo6RXZhbCA6IFBhcnNpbmdDb250ZXh0OjpQcm9n
cmFtLCBXVEY6Om51bGxvcHQsIHBhcmVudFNjb3BlUHJpdmF0ZU5hbWVzLCBpbnN0YW5jZUZpZWxk
TG9jYXRpb25zKTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGVy
cm9yLCBuYW1lLCBwYXJzZU1vZGUsIGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4oKSA/IFBhcnNpbmdD
b250ZXh0OjpFdmFsIDogUGFyc2luZ0NvbnRleHQ6OlByb2dyYW0sIFdURjo6bnVsbG9wdCwgcGFy
ZW50U2NvcGVQcml2YXRlTmFtZXMsIGNsYXNzRmllbGRMb2NhdGlvbnMpOwogICAgICAgICBpZiAo
cG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSkKICAgICAgICAgICAgICpwb3NpdGlvbkJlZm9yZUxh
c3ROZXdsaW5lID0gcGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUoKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmgKaW5kZXggZWFmZmRlMjFj
MTU5Li43OTUxOGEzMDU0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyTW9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ck1vZGVzLmgKQEAgLTY2LDcgKzY2LDcgQEAgZW51bSBjbGFzcyBTb3VyY2VQYXJzZU1vZGUgOiB1
aW50OF90IHsKICAgICBBc3luY0dlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGUgPSAxNiwKICAg
ICBBc3luY0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlICAgPSAxNywKICAgICBHZW5lcmF0b3JX
cmFwcGVyTWV0aG9kTW9kZSAgICAgICAgPSAxOCwKLSAgICBJbnN0YW5jZUZpZWxkSW5pdGlhbGl6
ZXJNb2RlICAgICAgPSAxOSwKKyAgICBDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlICAgICAgICAg
PSAxOSwKIH07CiAKIGNsYXNzIFNvdXJjZVBhcnNlTW9kZVNldCB7IApAQCAtMTE2LDcgKzExNiw3
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Z1bmN0aW9uUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9k
ZSBwYXJzZU1vZGUpCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JCb2R5
TW9kZSwKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBwZXJGdW5j
dGlvbk1vZGUsCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVy
TWV0aG9kTW9kZSwKLSAgICAgICAgU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlh
bGl6ZXJNb2RlKS5jb250YWlucyhwYXJzZU1vZGUpOworICAgICAgICBTb3VyY2VQYXJzZU1vZGU6
OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpLmNvbnRhaW5zKHBhcnNlTW9kZSk7CiB9IAogCiBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNBc3luY0Z1bmN0aW9uUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9k
ZSBwYXJzZU1vZGUpIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25Qcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25Qcm90b3R5cGUuY3BwCmluZGV4IDMzMjhkZjZjYzM5Ny4uMTRmMzczYThmYTAzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9u
UHJvdG9GdW5jVG9TdHJpbmcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9u
TW9kZToKLSAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFs
aXplck1vZGU6CisgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlh
bGl6ZXJNb2RlOgogICAgICAgICAgICAgZnVuY3Rpb25IZWFkZXIgPSAiIjsKICAgICAgICAgICAg
IGJyZWFrOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
CmluZGV4IDMxZGQ4NzMyZTllMi4uMGZkZDliZmU1ZjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcApAQCAtNDIxLDcgKzQyMSw3IEBAIEpTQ19ERUZJ
TkVfQ1VTVE9NX0dFVFRFUihjYWxsZXJHZXR0ZXIsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWCiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9y
V3JhcHBlckZ1bmN0aW9uTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5l
cmF0b3JXcmFwcGVyTWV0aG9kTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJh
dG9yV3JhcHBlck1ldGhvZE1vZGU6Ci0gICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNl
RmllbGRJbml0aWFsaXplck1vZGU6CisgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmll
bGRJbml0aWFsaXplck1vZGU6CiAgICAgICAgIGlmICghZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgp
LT5pc0luU3RyaWN0Q29udGV4dCgpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjYWxsZXIpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJGdW5jdGlvbi5jYWxsZXIgdXNlZCB0byByZXRyaWV2ZSBz
dHJpY3QgY2FsbGVyIl9zKSk7Ci0tIAoyLjI4LjAKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414165</attachid>
            <date>2020-11-15 08:37:24 -0800</date>
            <delta_ts>2020-11-17 01:01:06 -0800</delta_ts>
            <desc>Add support for static public fields, v9</desc>
            <filename>0001-JSC-Add-support-for-static-public-class-fields.patch</filename>
            <type>text/plain</type>
            <size>69411</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBhNmJmYTljNjZlZTQzYmJlMmZkZDA2NTUyYmQzZjNkMTBmNWQxNzY0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/WGFuPTIwTD1DMz1CM3Blej89IDx4YW5AaWdh
bGlhLmNvbT4KRGF0ZTogVGh1LCAxNiBBcHIgMjAyMCAxODoyMToxMyArMDIwMApTdWJqZWN0OiBb
UEFUQ0hdIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcwog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5NQoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpKU1Rlc3RzOgoKRW5hYmxlIHN0YXRpYyBwdWJsaWMgZmllbGRz
LCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJvbSB0aGUKVjggcHJvamVjdC4gQWxzbyBz
cGxpdCB0aGUgc3VwcG9ydCBjb2RlIGludG8gYSBzZXBhcmF0ZSBmaWxlCihoYXJtb255LXN1cHBv
cnQuanMpIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgoKKiB0ZXN0MjYyL2NvbmZpZy55YW1sOiBlbmFi
bGUgc3RhdGljIHB1YmxpYyBmaWVsZHMuCiogc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255Lmpz
OiB1c2UgdGhlIG5ldyBzdXBwb3J0IGZpbGUuCiogc3RyZXNzL2NsYXNzLWZpZWxkcy1zdGF0aWMt
aGFybW9ueS5qczogQWRkZWQuCiogc3RyZXNzL3Jlc291cmNlcy9oYXJtb255LXN1cHBvcnQuanM6
IEFkZGVkLgoKU291cmNlL0phdmFTY3JpcHRDb3JlOgoKQWRkIHN1cHBvcnQgZm9yIHN0YXRpYyBw
dWJsaWMgY2xhc3MgZmllbGRzLiBXZSBjYW4gcmV1c2UgbW9zdCBvZgp0aGUgZXhpc3RpbmcgbWFj
aGluZXJ5IGF2YWlsYWJsZSBmb3IgaW5zdGFuY2UgZmllbGRzLiBMaWtlCmluc3RhbmNlIGZpZWxk
cywgc3RhdGljIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBhIHN5bnRoZXRpYwpmdW5jdGlv
bi4gVGhpcyBpcyBkb25lIHRvIGFsbG93IHVzIHRvIHRyaXZpYWxseSBmb2xsb3cgdGhlIHNjb3Bp
bmcKcnVsZXMgaW4gdGhlIHNwZWMuIEFzIGl0IGhhcHBlbnMgd2l0aCBpbnN0YW5jZSBmaWVsZHMg
dGhpcyBjb3VsZApiZSBpbmxpbmVkIGluIGEgZnV0dXJlIHBhdGNoLgoKQSBsb3Qgb2Ygc21hbGwg
Y2hhbmdlcyBpbiBtYW55IGZpbGVzIGFyZSBqdXN0IGEgbWF0dGVyIG9mIGRvaW5nCnMvaW5zdGFu
Y2UvY2xhc3MvIGZvciB2YXJpYWJsZXMgcmVsYXRlZCB0byBjbGFzcyBmaWVsZHMsIHdoaWNoCmJl
Zm9yZSB3ZXJlIGFzc3VtaW5nIHRoZXJlIGFyZSBvbmx5IGluc3RhbmNlIGZpZWxkcyBpbXBsZW1l
bnRlZC4KCiogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgooSlNDOjpn
ZW5lcmF0ZVVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spOiBkbyBzL2luc3RhbmNlRmllbGQvY2xh
c3NGaWVsZC8uCiogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDogZGl0dG8u
CiogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXROZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbik6IGRpdHRvLgoqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOiBkaXR0bywgcGx1cyBhZGQgYSBwYXJhbWV0
ZXIKZm9yIHN0YXRpYyBmaWVsZCBsb2NhdGlvbnMgaW4gZW1pdERlZmluZUNsYXNzRWxlbWVudHMu
CiogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CihKU0M6OlByb3BlcnR5TGlzdE5vZGU6
OmVtaXRCeXRlY29kZSk6IHNhdmUgc3RhdGljIGZpZWxkcwpsb2NhdGlvbnMgd2hlbiBnb2luZyB0
aHJvdWdoIHRoZSBwcm9wZXJ0eSBsaXN0LgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2
ZUNvbXB1dGVkRmllbGROYW1lKTogY29uc2lkZXIKc3RhdGljIGZpZWxkcyBoZXJlIHRvby4KKEpT
Qzo6Q2xhc3NFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKTogY2FsbCB0aGUgaW5pdGlhbGl6ZXIgZm9y
CnN0YXRpYyBmaWVsZHMgYXMgdGhlIHZlcnkgbGFzdCBhY3Rpb24gb2YgdGhlIGNsYXNzIGNyZWF0
aW9uLgoqIHBhcnNlci9BU1RCdWlsZGVyLmg6CihKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZURlZmlu
ZUZpZWxkKTogZmllbGQgbm9kZXMgY2FuIGJlIHN0YXRpYwp0b28gbm93LgoqIHBhcnNlci9Ob2Rl
Q29uc3RydWN0b3JzLmg6CihKU0M6OkRlZmluZUZpZWxkTm9kZTo6RGVmaW5lRmllbGROb2RlKTog
ZGl0dG8uCiogcGFyc2VyL05vZGVzLmg6IGRpdHRvLgoqIHBhcnNlci9QYXJzZXIuY3BwOgooSlND
OjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcik6IHMvaW5zdGFuY2VGaWVsZC9jbGFzc0Zp
ZWxkLwooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyk6IGNvbnNpZGVyIHN0YXRp
YyBmaWVsZHMuCihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlRmllbGRJbml0
aWFsaXplclNvdXJjZUVsZW1lbnRzKToKcy9pbnN0YW5jZUZpZWxkL2NsYXNzRmllbGQvLCBhbmQg
Y29uc2lkZXIgc3RhdGljIGZpZWxkcy4KKiBwYXJzZXIvUGFyc2VyLmg6CihKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZSk6IHMvaW5zdGFuY2VGaWVsZC9jbGFzc0ZpZWxkLwooSlNDOjpwYXJz
ZSk6IGRpdHRvLgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpTRnVuY3Rpb246OnNl
dEZ1bmN0aW9uTmFtZSk6IHMvaW5zdGFuY2VGaWVsZC9jbGFzc0ZpZWxkLwoqIHJ1bnRpbWUvT3B0
aW9uc0xpc3QuaDogYWRkIG9wdGlvbiB0byBlbmFibGUvZGlzYWJsZSBzdGF0aWMgcHVibGljIGZp
ZWxkcy4KLS0tCiBKU1Rlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgMTYgKwogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanMgICAgICAgIHwg
MTY1ICstLS0tLQogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255Lmpz
IHwgNTAzICsrKysrKysrKysrKysrKysrKwogSlNUZXN0cy9zdHJlc3MvcmVzb3VyY2VzL2hhcm1v
bnktc3VwcG9ydC5qcyAgIHwgMTk2ICsrKysrKysKIEpTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFt
bCAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgIHwgIDUwICsrCiAuLi4vYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuY3BwICAgfCAgIDQgKy0KIC4uLi9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5oICAgICB8ICAxMiArLQogLi4uL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAgICAgICAgIHwgIDEyICstCiAuLi4vYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmggICAgICAgICAgfCAgIDYgKy0KIC4uLi9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cCAgICAgICAgICAgICB8ICA2NSArKy0KIC4uLi9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAg
ICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5oICAgICAgICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5jcHAgICAgICAgfCAgNDYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmggICAgICAgICB8ICAxNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJN
b2Rlcy5oICAgIHwgICA0ICstCiAuLi4vcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAgICAg
ICAgICAgICAgfCAgIDIgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaCAgIHwgICAxICsKIDE5IGZpbGVzIGNoYW5nZWQsIDg4NiBpbnNlcnRpb25zKCspLCAyMjYg
ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmll
bGRzLXN0YXRpYy1oYXJtb255LmpzCiBjcmVhdGUgbW9kZSAxMDA2NDQgSlNUZXN0cy9zdHJlc3Mv
cmVzb3VyY2VzL2hhcm1vbnktc3VwcG9ydC5qcwoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdl
TG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmQ2ZTAwMGMzNjdmLi5mMTA0YzE3MTllMzAg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMjAtMTEtMTUgIFhhbiBMw7NwZXogIDx4YW5AaWdhbGlhLmNvbT4K
KworICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3Igc3RhdGljIHB1YmxpYyBjbGFzcyBmaWVs
ZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJs
ZSBzdGF0aWMgcHVibGljIGZpZWxkcywgYW5kIGltcG9ydCBuZXcgc3RyZXNzIHRlc3RzIGZyb20g
dGhlCisgICAgICAgIFY4IHByb2plY3QuIEFsc28gc3BsaXQgdGhlIHN1cHBvcnQgY29kZSBpbnRv
IGEgc2VwYXJhdGUgZmlsZQorICAgICAgICAoaGFybW9ueS1zdXBwb3J0LmpzKSB0byBhdm9pZCBk
dXBsaWNhdGlvbi4KKworICAgICAgICAqIHRlc3QyNjIvY29uZmlnLnlhbWw6IGVuYWJsZSBzdGF0
aWMgcHVibGljIGZpZWxkcy4KKyAgICAgICAgKiBzdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnku
anM6IHVzZSB0aGUgbmV3IHN1cHBvcnQgZmlsZS4KKyAgICAgICAgKiBzdHJlc3MvY2xhc3MtZmll
bGRzLXN0YXRpYy1oYXJtb255LmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcmVzb3VyY2Vz
L2hhcm1vbnktc3VwcG9ydC5qczogQWRkZWQuCisKIDIwMjAtMTEtMTMgIFhhbiBMw7NwZXogIDx4
YW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2Ugc3ltYm9scyBhcyBpZGVudGlmaWVy
cyBmb3IgY2xhc3MgZmllbGRzIGNvbXB1dGVkIG5hbWVzIHN0b3JhZ2UKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255LmpzIGIvSlNUZXN0cy9zdHJlc3MvY2xh
c3MtZmllbGRzLWhhcm1vbnkuanMKaW5kZXggMmZlYWM4MmRhOTFhLi44NmY5MWMzYjAxZGUgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255LmpzCisrKyBiL0pT
VGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255LmpzCkBAIC0zMSwxNzAgKzMxLDcgQEAK
IAogInVzZSBzdHJpY3QiOwogCi1mdW5jdGlvbiBjbGFzc09mKG9iamVjdCkgewotICAgLy8gQXJn
dW1lbnQgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuCi0gICB2YXIgc3RyaW5nID0gT2Jq
ZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCk7Ci0gICAvLyBTdHJpbmcgaGFzIGZv
cm1hdCBbb2JqZWN0IDxDbGFzc05hbWU+XS4KLSAgIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDgs
IHN0cmluZy5sZW5ndGggLSAxKTsKLX0KLQotLyoqCi0gKiBDb21wYXJlcyB0d28gb2JqZWN0cyBm
b3Iga2V5L3ZhbHVlIGVxdWFsaXR5LgotICogUmV0dXJucyB0cnVlIGlmIHRoZXkgYXJlIGVxdWFs
LCBmYWxzZSBvdGhlcndpc2UuCi0gKi8KLWZ1bmN0aW9uIGRlZXBPYmplY3RFcXVhbHMoYSwgYikg
ewotICB2YXIgYVByb3BzID0gT2JqZWN0LmtleXMoYSk7Ci0gIGFQcm9wcy5zb3J0KCk7Ci0gIHZh
ciBiUHJvcHMgPSBPYmplY3Qua2V5cyhiKTsKLSAgYlByb3BzLnNvcnQoKTsKLSAgaWYgKCFkZWVw
RXF1YWxzKGFQcm9wcywgYlByb3BzKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBmb3Ig
KHZhciBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykgewotICAgIGlmICghZGVlcEVxdWFs
cyhhW2FQcm9wc1tpXV0sIGJbYVByb3BzW2ldXSkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qKgotICogQ29tcGFyZXMgdHdvIEphdmFT
Y3JpcHQgdmFsdWVzIGZvciB0eXBlIGFuZCB2YWx1ZSBlcXVhbGl0eS4KLSAqIEl0IGNoZWNrcyBp
bnRlcm5hbHMgb2YgYXJyYXlzIGFuZCBvYmplY3RzLgotICovCi1mdW5jdGlvbiBkZWVwRXF1YWxz
KGEsIGIpIHsKLSAgaWYgKGEgPT09IGIpIHsKLSAgICAvLyBDaGVjayBmb3IgLTAuCi0gICAgaWYg
KGEgPT09IDApIHJldHVybiAoMSAvIGEpID09PSAoMSAvIGIpOwotICAgIHJldHVybiB0cnVlOwot
ICB9Ci0gIGlmICh0eXBlb2YgYSAhPSB0eXBlb2YgYikgcmV0dXJuIGZhbHNlOwotICBpZiAodHlw
ZW9mIGEgPT0gJ251bWJlcicpIHJldHVybiBpc05hTihhKSAmJiBpc05hTihiKTsKLSAgaWYgKHR5
cGVvZiBhICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZh
bHNlOwotICAvLyBOZWl0aGVyIGEgbm9yIGIgaXMgcHJpbWl0aXZlLgotICB2YXIgb2JqZWN0Q2xh
c3MgPSBjbGFzc09mKGEpOwotICBpZiAob2JqZWN0Q2xhc3MgIT09IGNsYXNzT2YoYikpIHJldHVy
biBmYWxzZTsKLSAgaWYgKG9iamVjdENsYXNzID09PSAnUmVnRXhwJykgewotICAgIC8vIEZvciBS
ZWdFeHAsIGp1c3QgY29tcGFyZSBwYXR0ZXJuIGFuZCBmbGFncyB1c2luZyBpdHMgdG9TdHJpbmcu
Ci0gICAgcmV0dXJuIChhLnRvU3RyaW5nKCkgPT09IGIudG9TdHJpbmcoKSk7Ci0gIH0KLSAgLy8g
RnVuY3Rpb25zIGFyZSBvbmx5IGlkZW50aWNhbCB0byB0aGVtc2VsdmVzLgotICBpZiAob2JqZWN0
Q2xhc3MgPT09ICdGdW5jdGlvbicpIHJldHVybiBmYWxzZTsKLSAgaWYgKG9iamVjdENsYXNzID09
PSAnQXJyYXknKSB7Ci0gICAgdmFyIGVsZW1lbnRDb3VudCA9IDA7Ci0gICAgaWYgKGEubGVuZ3Ro
ICE9IGIubGVuZ3RoKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKCFkZWVwRXF1YWxzKGFbaV0s
IGJbaV0pKSByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGlm
IChvYmplY3RDbGFzcyA9PSAnU3RyaW5nJyB8fCBvYmplY3RDbGFzcyA9PSAnTnVtYmVyJyB8fAot
ICAgICAgb2JqZWN0Q2xhc3MgPT0gJ0Jvb2xlYW4nIHx8IG9iamVjdENsYXNzID09ICdEYXRlJykg
ewotICAgIGlmIChhLnZhbHVlT2YoKSAhPT0gYi52YWx1ZU9mKCkpIHJldHVybiBmYWxzZTsKLSAg
fQotICByZXR1cm4gZGVlcE9iamVjdEVxdWFscyhhLCBiKTsKLX0KLQotLyoqCi0gKiBUaHJvd3Mg
YW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgdGhlIHVzZXJfbWVzc2FnZSAoaWYgYW55KSBhbmQgdGhl
IHZhbHVlcy4KLSAqLwotZnVuY3Rpb24gZmFpbChleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2Fn
ZSA9ICcnKSB7Ci0gIC8vIFRPRE8oY2lyYSk6IFJlcGxhY2UgU3RyaW5nIHdpdGggUHJldHR5UHJp
bnQgZm9yIG9iamVjdHMgYW5kIGFycmF5cy4KLSAgdmFyIG1lc3NhZ2UgPSAnRmFpbHVyZScgKyAo
dXNlcl9tZXNzYWdlID8gJyAoJyArIHVzZXJfbWVzc2FnZSArICcpJyA6ICcnKSArCi0gICAgICAn
OiBleHBlY3RlZCA8JyArIFN0cmluZyhleHBlY3RlZCkgKyAnPiwgZm91bmQgPCcgKyBTdHJpbmco
Zm91bmQpICsgJz4uJzsKLSAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpOwotfQotCi0vKioKLSAq
IFRocm93cyBpZiBvYmogaXMgbm90IG9mIGdpdmVuIHR5cGUuCi0gKi8KLWZ1bmN0aW9uIGFzc2Vy
dEluc3RhbmNlb2Yob2JqLCB0eXBlKSB7Ci0gIGlmICghKG9iaiBpbnN0YW5jZW9mIHR5cGUpKSB7
Ci0gICAgdmFyIGFjdHVhbFR5cGVOYW1lID0gbnVsbDsKLSAgICB2YXIgYWN0dWFsQ29uc3RydWN0
b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKS5jb25zdHJ1Y3RvcjsKLSAgICBpZiAodHlw
ZW9mIGFjdHVhbENvbnN0cnVjdG9yID09ICJmdW5jdGlvbiIpIHsKLSAgICAgIGFjdHVhbFR5cGVO
YW1lID0gYWN0dWFsQ29uc3RydWN0b3IubmFtZSB8fCBTdHJpbmcoYWN0dWFsQ29uc3RydWN0b3Ip
OwotICAgIH0KLSAgICB0aHJvdyBuZXcgRXJyb3IoJ09iamVjdCA8JyArIG9iaiArICc+IGlzIG5v
dCBhbiBpbnN0YW5jZSBvZiA8JyArCi0gICAgICAgICAgICAgICAgICAgICh0eXBlLm5hbWUgfHwg
dHlwZSkgKyAnPicgKwotICAgICAgICAgICAgICAgICAgICAoYWN0dWFsVHlwZU5hbWUgPyAnIGJ1
dCBvZiA8ICcgKyBhY3R1YWxUeXBlTmFtZSArICc+JyA6ICcnKSk7Ci0gIH0KLX0KLQotLyoqCi0g
KiBUaHJvd3MgaWYgb2JqIGlzIG5vdCB0aGUgc2FtZSBhcyBleHBlY3RlZC4KLSAqLwotZnVuY3Rp
b24gYXNzZXJ0U2FtZShleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KSB7Ci0gIGlmIChmb3VuZCA9
PT0gZXhwZWN0ZWQpIHsKLSAgICBpZiAoZXhwZWN0ZWQgIT09IDAgfHwgKDEgLyBleHBlY3RlZCkg
PT09ICgxIC8gZm91bmQpKQotICAgICAgcmV0dXJuOwotICB9IGVsc2UgaWYgKChleHBlY3RlZCAh
PT0gZXhwZWN0ZWQpICYmIChmb3VuZCAhPT0gZm91bmQpKSB7Ci0gICAgICByZXR1cm47Ci0gIH0K
LSAgZmFpbChleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KTsKLX0KLQotLyoqCi0gKiBUaHJvd3Mg
aWYgdHdvIHZhcmlhYmxlcyBoYXZlIGRpZmZlcmVudCB0eXBlcyBvciB2YWx1ZXMuCi0gKi8KLQot
ZnVuY3Rpb24gYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlID0gJycp
IHsKLSAgaWYgKCFkZWVwRXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsKLSAgICBmYWlsKGV4cGVj
dGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlKTsKLSAgfQotfQotCi0vKioKLSAqIFRocm93cyBpZiB0
d28gdmFyaWFibGVzIGhhdmUgZXF1YWwgdHlwZXMgb3IgdmFsdWVzLgotICovCi0KLWZ1bmN0aW9u
IGFzc2VydE5vdEVxdWFscyhleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSA9ICcnKSB7Ci0g
IGlmIChkZWVwRXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsKLSAgICBmYWlsKGV4cGVjdGVkLCBm
b3VuZCwgdXNlcl9tZXNzYWdlKTsKLSAgfQotfQotCi0vKioKLSAqIFRocm93cyBpZiB2YWx1ZSBp
cyBmYWxzZS4KLSAqLwotZnVuY3Rpb24gYXNzZXJ0VHJ1ZSh2YWx1ZSwgdXNlcl9tZXNzYWdlID0g
JycpIHsKLSAgYXNzZXJ0RXF1YWxzKHRydWUsIHZhbHVlLCB1c2VyX21lc3NhZ2UpOwotfQotCi0K
LS8qKgotICogVGhyb3dzIGlmIHZhbHVlIGlzIHRydWUuCi0gKi8KLWZ1bmN0aW9uIGFzc2VydEZh
bHNlKHZhbHVlLCB1c2VyX21lc3NhZ2UgPSAnJykgewotICBhc3NlcnRFcXVhbHMoZmFsc2UsIHZh
bHVlLCB1c2VyX21lc3NhZ2UpOwotfQotCi0vKioKLSAqIFJ1bnMgY29kZSgpIGFuZCBhc3NlcnRz
IHRoYXQgaXQgdGhyb3dzIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uLgotICovCi1mdW5jdGlvbiBh
c3NlcnRUaHJvd3MoY29kZSwgdHlwZV9vcHQsIGNhdXNlX29wdCkgewotICB0cnkgewotICAgIGlm
ICh0eXBlb2YgY29kZSA9PSAnZnVuY3Rpb24nKSB7Ci0gICAgICBjb2RlKCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIGV2YWwoY29kZSk7Ci0gICAgfQotICB9IGNhdGNoIChlKSB7Ci0gICAgaWYgKHR5
cGVvZiB0eXBlX29wdCA9PSAnZnVuY3Rpb24nKSB7Ci0gICAgICBhc3NlcnRJbnN0YW5jZW9mKGUs
IHR5cGVfb3B0KTsKLSAgICB9Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgewotICAg
ICAgYXNzZXJ0RXF1YWxzKGNhdXNlX29wdCwgZS50eXBlLCAndGhyb3duIGV4Y2VwdGlvbiB0eXBl
IG1pc21hdGNoJyk7Ci0gICAgfQotICAgIC8vIFN1Y2Nlc3MuCi0gICAgcmV0dXJuOwotICB9Ci0g
IHZhciBleHBlY3RlZCA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMyA/IGNhdXNlX29wdCA6Ci0gICAg
ICB0eXBlb2YgdHlwZV9vcHQgPT0gJ2Z1bmN0aW9uJyA/IHR5cGVfb3B0IDogJ2FueSBleGNlcHRp
b24nOwotICBmYWlsKGV4cGVjdGVkLCAnbm8gZXhjZXB0aW9uJywgJ2V4cGVjdGVkIHRocm93biBl
eGNlcHRpb24nKTsKLX0KK2xvYWQoIi4vcmVzb3VyY2VzL2hhcm1vbnktc3VwcG9ydC5qcyIpOwog
CiB7CiAgIGNsYXNzIEMgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRz
LXN0YXRpYy1oYXJtb255LmpzIGIvSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1o
YXJtb255LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZmQ1ZDU5
MmRiZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0
YXRpYy1oYXJtb255LmpzCkBAIC0wLDAgKzEsNTAzIEBACisvL0AgcmVxdWlyZU9wdGlvbnMoIi0t
dXNlUHVibGljU3RhdGljQ2xhc3NGaWVsZHM9MSIpCisvL0AgZGVmYXVsdE5vRWFnZXJSdW4KKwor
Ly8gQ29weXJpZ2h0IDIwMTcgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKworLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
Ky8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisidXNlIHN0cmljdCI7CisKK2xvYWQoIi4vcmVzb3VyY2Vz
L2hhcm1vbnktc3VwcG9ydC5qcyIpOworCit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBhOwor
ICB9CisKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5hKTsKKyAgbGV0IGRlc2NyaXB0b3Ig
PSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEMsICdhJyk7CisgIGFzc2VydFRydWUo
Qy5oYXNPd25Qcm9wZXJ0eSgnYScpKTsKKyAgYXNzZXJ0VHJ1ZShkZXNjcmlwdG9yLndyaXRhYmxl
KTsKKyAgYXNzZXJ0VHJ1ZShkZXNjcmlwdG9yLmVudW1lcmFibGUpOworICBhc3NlcnRUcnVlKGRl
c2NyaXB0b3IuY29uZmlndXJhYmxlKTsKKworICBsZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVh
bHModW5kZWZpbmVkLCBjLmEpOworfQorCit7CisgIGxldCB4ID0gJ2EnOworICBjbGFzcyBDIHsK
KyAgICBzdGF0aWMgYTsKKyAgICBzdGF0aWMgaGFzT3duUHJvcGVydHkgPSBmdW5jdGlvbigpIHsg
cmV0dXJuIDE7IH0KKyAgICBzdGF0aWMgYiA9IHg7CisgICAgc3RhdGljIGMgPSAxOworICB9CisK
KyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5hKTsKKyAgYXNzZXJ0RXF1YWxzKCdhJywgQy5i
KTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYyk7CisgIGFzc2VydEVxdWFscygxLCBDLmhhc093blBy
b3BlcnR5KCkpOworCisgIGxldCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQs
IGMuYSk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYik7CisgIGFzc2VydEVxdWFscyh1
bmRlZmluZWQsIGMuYyk7Cit9CisKK3sKKyAgYXNzZXJ0VGhyb3dzKCgpID0+IHsKKyAgICBjbGFz
cyBDIHsKKyAgICAgIHN0YXRpYyB4ID0gT2JqZWN0LmZyZWV6ZSh0aGlzKTsKKyAgICAgIHN0YXRp
YyBjID0gNDI7CisgICAgfQorICB9LCBUeXBlRXJyb3IpOworfQorCit7CisgIGNsYXNzIEMgewor
ICAgIHN0YXRpYyBjID0gdGhpczsKKyAgICBzdGF0aWMgZCA9ICgpID0+IHRoaXM7CisgIH0KKwor
ICBhc3NlcnRFcXVhbHMoQywgQy5jKTsKKyAgYXNzZXJ0RXF1YWxzKEMsIEMuZCgpKTsKKworICBs
ZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmMpOworICBhc3NlcnRF
cXVhbHModW5kZWZpbmVkLCBjLmQpOworfQorCit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBj
ID0gMTsKKyAgICBzdGF0aWMgZCA9IHRoaXMuYzsKKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBD
LmMpOworICBhc3NlcnRFcXVhbHMoMSwgQy5kKTsKKworICBsZXQgYyA9IG5ldyBDOworICBhc3Nl
cnRFcXVhbHModW5kZWZpbmVkLCBjLmMpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmQp
OworfQorCit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBiID0gMTsKKyAgICBzdGF0aWMgYyA9
ICgpID0+IHRoaXMuYjsKKyAgfQorCisgIGFzc2VydEVxdWFscygxLCBDLmIpOworICBhc3NlcnRF
cXVhbHMoMSwgQy5jKCkpOworCisgIGxldCBjID0gbmV3IEM7CisgIGFzc2VydEVxdWFscyh1bmRl
ZmluZWQsIGMuYyk7Cit9CisKK3sKKyAgbGV0IHggPSAnYSc7CisgIGNsYXNzIEMgeworICAgIHN0
YXRpYyBiID0gMTsKKyAgICBzdGF0aWMgYyA9ICgpID0+IHRoaXMuYjsKKyAgICBzdGF0aWMgZSA9
ICgpID0+IHg7CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwgQy5iKTsKKyAgYXNzZXJ0RXF1YWxz
KCdhJywgQy5lKCkpOworCisgIGxldCBhID0ge2IgOiAyIH07CisgIGFzc2VydEVxdWFscygxLCBD
LmMuY2FsbChhKSk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5l
ZCwgYy5iKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5jKTsKK30KKworeworICBsZXQg
eCA9ICdhJzsKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSAxOworICAgIHN0YXRpYyBkID0g
ZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmM7IH07CisgICAgc3RhdGljIGUgPSBmdW5jdGlvbigp
IHsgcmV0dXJuIHg7IH07CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwgQy5jKTsKKyAgYXNzZXJ0
RXF1YWxzKDEsIEMuZCgpKTsKKyAgYXNzZXJ0RXF1YWxzKCdhJywgQy5lKCkpOworCisgIEMuYyA9
IDI7CisgIGFzc2VydEVxdWFscygyLCBDLmQoKSk7CisKKyAgbGV0IGEgPSB7YyA6IDMgfTsKKyAg
YXNzZXJ0RXF1YWxzKDMsIEMuZC5jYWxsKGEpKTsKKworICBhc3NlcnRUaHJvd3MoQy5kLmJpbmQo
dW5kZWZpbmVkKSk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5l
ZCwgYy5jKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5kKTsKKyAgYXNzZXJ0RXF1YWxz
KHVuZGVmaW5lZCwgYy5lKTsKK30KKworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYyA9IGZ1
bmN0aW9uKCkgeyByZXR1cm4gMSB9OworICB9CisKKyAgYXNzZXJ0RXF1YWxzKCdjJywgQy5jLm5h
bWUpOworfQorCit7CisgIGxldCBkID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcudGFyZ2V0OyB9
CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBjID0gZDsKKyAgfQorCisgIGFzc2VydEVxdWFscyh1
bmRlZmluZWQsIEMuYygpKTsKKyAgYXNzZXJ0RXF1YWxzKG5ldyBkLCBuZXcgQy5jKCkpOworfQor
Cit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBjID0gKCkgPT4gbmV3LnRhcmdldDsKKyAgfQor
CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIEMuYygpKTsKK30KKworeworICAgY2xhc3MgQyB7
CisgICAgIHN0YXRpYyBjID0gKCkgPT4geworICAgICAgIGxldCBiOworICAgICAgIGNsYXNzIEEg
eworICAgICAgICAgY29uc3RydWN0b3IoKSB7CisgICAgICAgICAgIGIgPSBuZXcudGFyZ2V0Owor
ICAgICAgICAgfQorICAgICAgIH07CisgICAgICAgbmV3IEE7CisgICAgICAgYXNzZXJ0RXF1YWxz
KEEsIGIpOworICAgICB9CisgIH0KKworICBDLmMoKTsKK30KKworeworICBjbGFzcyBDIHsKKyAg
ICBzdGF0aWMgYyA9IG5ldy50YXJnZXQ7CisgIH0KKworICBhc3NlcnRFcXVhbHModW5kZWZpbmVk
LCBDLmMpOworfQorCit7CisgIGNsYXNzIEIgeworICAgIHN0YXRpYyBkID0gMTsKKyAgICBzdGF0
aWMgYiA9ICgpID0+IHRoaXMuZDsKKyAgfQorCisgIGNsYXNzIEMgZXh0ZW5kcyBCIHsKKyAgICBz
dGF0aWMgYyA9IHN1cGVyLmQ7CisgICAgc3RhdGljIGQgPSAoKSA9PiBzdXBlci5kOworICAgIHN0
YXRpYyBlID0gKCkgPT4gc3VwZXIuYigpOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYyk7
CisgIGFzc2VydEVxdWFscygxLCBDLmQoKSk7CisgIGFzc2VydEVxdWFscygxLCBDLmUoKSk7Cit9
CisKK3sKKyAgbGV0IGZvbyA9IHVuZGVmaW5lZDsKKyAgY2xhc3MgQiB7CisgICAgc3RhdGljIHNl
dCBkKHgpIHsKKyAgICAgIGZvbyA9IHg7CisgICAgfQorICB9CisKKyAgY2xhc3MgQyBleHRlbmRz
IEIgeworICAgIHN0YXRpYyBkID0gMjsKKyAgfQorCisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQs
IGZvbyk7CisgIGFzc2VydEVxdWFscygyLCBDLmQpOworfQorCisKK3sKKyAgbGV0IEMgID0gY2xh
c3MgeworICAgIHN0YXRpYyBjOworICB9OworCisgIGFzc2VydEVxdWFscygiQyIsIEMubmFtZSk7
Cit9CisKK3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMgPSBuZXcgQzsKKyAgfQorCisgIGFz
c2VydFRydWUoQy5jIGluc3RhbmNlb2YgQyk7Cit9CisKKyhmdW5jdGlvbiB0ZXN0KCkgeworICBm
dW5jdGlvbiBtYWtlQygpIHsKKyAgICB2YXIgeCA9IDE7CisKKyAgICByZXR1cm4gY2xhc3Mgewor
ICAgICAgc3RhdGljIGEgPSAoKSA9PiAoKSA9PiB4OworICAgIH0KKyAgfQorCisgIGxldCBDID0g
bWFrZUMoKTsKKyAgbGV0IGYgPSBDLmEoKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGYoKSk7Cit9KSgp
CisKK3sKKyAgbGV0IGMgPSAiYyI7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBbImEiXSA9IDE7
CisgICAgc3RhdGljIFsiYiJdOworICAgIHN0YXRpYyBbY107CisgIH0KKworICBhc3NlcnRFcXVh
bHMoMSwgQy5hKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5iKTsKKyAgYXNzZXJ0RXF1
YWxzKHVuZGVmaW5lZCwgQ1tjXSk7Cit9CisKK3sKKyAgbGV0IGxvZyA9IFtdOworICBmdW5jdGlv
biBydW4oaSkgeworICAgIGxvZy5wdXNoKGkpOworICAgIHJldHVybiBpOworICB9CisKKyAgY2xh
c3MgQyB7CisgICAgc3RhdGljIFtydW4oMSldID0gcnVuKDYpOworICAgIHN0YXRpYyBbcnVuKDIp
XSA9IHJ1big3KTsKKyAgICBbcnVuKDMpXSgpIHsgcnVuKDkpO30KKyAgICBzdGF0aWMgW3J1big0
KV0gPSBydW4oOCk7CisgICAgc3RhdGljIFtydW4oNSldKCkgeyB0aHJvdyBuZXcgRXJyb3IoJ3No
b3VsZCBub3QgZXhlY3V0ZScpO307CisgIH0KKworICBsZXQgYyA9IG5ldyBDOworICBjWzNdKCk7
CisgIGFzc2VydEVxdWFscyhbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0sIGxvZyk7Cit9CisK
KworCitmdW5jdGlvbiB4KCkgeworCisgIC8vIFRoaXMgdGVzdHMgbGF6eSBwYXJzaW5nLgorICBy
ZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgbGV0IGxvZyA9IFtdOworICAgIGZ1bmN0aW9uIHJ1bihp
KSB7CisgICAgICBsb2cucHVzaChpKTsKKyAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIGNs
YXNzIEMgeworICAgICAgc3RhdGljIFtydW4oMSldID0gcnVuKDYpOworICAgICAgc3RhdGljIFty
dW4oMildID0gcnVuKDcpOworICAgICAgW3J1bigzKV0oKSB7IHJ1big5KTt9CisgICAgICBzdGF0
aWMgW3J1big0KV0gPSBydW4oOCk7CisgICAgICBzdGF0aWMgW3J1big1KV0oKSB7IHRocm93IG5l
dyBFcnJvcignc2hvdWxkIG5vdCBleGVjdXRlJyk7fTsKKyAgICB9CisKKyAgICBsZXQgYyA9IG5l
dyBDOworICAgIGNbM10oKTsKKyAgICBhc3NlcnRFcXVhbHMoWzEsIDIsIDMsIDQsIDUsIDYsIDcs
IDgsIDldLCBsb2cpOworICB9Cit9Cit4KCkoKTsKKworeworICBsZXQgbG9nID0gW107CisgIGZ1
bmN0aW9uIHJ1bihpKSB7CisgICAgbG9nLnB1c2goaSk7CisgICAgcmV0dXJuIGk7CisgIH0KKwor
ICBjbGFzcyBDIHsKKyAgICBbcnVuKDEpXSA9IHJ1big3KTsKKyAgICBbcnVuKDIpXSA9IHJ1big4
KTsKKyAgICBbcnVuKDMpXSgpIHsgcnVuKDkpO30KKyAgICBzdGF0aWMgW3J1big0KV0gPSBydW4o
Nik7CisgICAgW3J1big1KV0oKSB7IHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5vdCBleGVjdXRl
Jyk7fTsKKyAgfQorCisgIGxldCBjID0gbmV3IEM7CisgIGNbM10oKTsKKyAgYXNzZXJ0RXF1YWxz
KFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XSwgbG9nKTsKK30KKworZnVuY3Rpb24geSgpIHsK
KyAgLy8gVGhpcyB0ZXN0cyBsYXp5IHBhcnNpbmcuCisgIHJldHVybiBmdW5jdGlvbigpIHsKKyAg
ICBsZXQgbG9nID0gW107CisgICAgZnVuY3Rpb24gcnVuKGkpIHsKKyAgICAgIGxvZy5wdXNoKGkp
OworICAgICAgcmV0dXJuIGk7CisgICAgfQorCisgICAgY2xhc3MgQyB7CisgICAgICBbcnVuKDEp
XSA9IHJ1big3KTsKKyAgICAgIFtydW4oMildID0gcnVuKDgpOworICAgICAgW3J1bigzKV0oKSB7
IHJ1big5KTt9CisgICAgICBzdGF0aWMgW3J1big0KV0gPSBydW4oNik7CisgICAgICBbcnVuKDUp
XSgpIHsgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgbm90IGV4ZWN1dGUnKTt9OworICAgIH0KKwor
ICAgIGxldCBjID0gbmV3IEM7CisgICAgY1szXSgpOworICAgIGFzc2VydEVxdWFscyhbMSwgMiwg
MywgNCwgNSwgNiwgNywgOCwgOV0sIGxvZyk7CisgIH0KK30KK3koKSgpOworCit7CisgIGNsYXNz
IEMge30KKyAgY2xhc3MgRCB7CisgICAgc3RhdGljIFtDXTsKKyAgfQorCisgIGFzc2VydFRocm93
cygoKSA9PiB7IGNsYXNzIFggeyBzdGF0aWMgW1hdIH0gfSk7CisgIGFzc2VydEVxdWFscyh1bmRl
ZmluZWQsIERbQ10pOworfQorCit7CisgIGZ1bmN0aW9uIHQoKSB7CisgICAgcmV0dXJuIGNsYXNz
IHsKKyAgICAgIHN0YXRpYyBbJ3gnXSA9IDI7CisgICAgfQorICB9CisKKyAgbGV0IGtsYXNzID0g
dCgpOworICBsZXQgb2JqID0gbmV3IGtsYXNzOworICBhc3NlcnRFcXVhbHMoMiwga2xhc3MueCk7
Cit9CisKK3sKKyAgbGV0IHggPSAnYSc7CisgIGNsYXNzIEMgeworICAgIGE7CisgICAgYiA9IHg7
CisgICAgYyA9IDE7CisgICAgaGFzT3duUHJvcGVydHkoKSB7IHJldHVybiAxO30KKyAgICBzdGF0
aWMgW3hdID0gMjsKKyAgICBzdGF0aWMgYiA9IDM7CisgICAgc3RhdGljIGQ7CisgIH0KKworICBh
c3NlcnRFcXVhbHMoMiwgQy5hKTsKKyAgYXNzZXJ0RXF1YWxzKDMsIEMuYik7CisgIGFzc2VydEVx
dWFscyh1bmRlZmluZWQsIEMuZCk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIEMuYyk7CisK
KyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5hKTsKKyAgYXNz
ZXJ0RXF1YWxzKCdhJywgYy5iKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIGMuYyk7CisgIGFzc2VydEVx
dWFscyh1bmRlZmluZWQsIGMuZCk7CisgIGFzc2VydEVxdWFscygxLCBjLmhhc093blByb3BlcnR5
KCkpOworfQorCit7CisgIGZ1bmN0aW9uIHQoKSB7CisgICAgcmV0dXJuIGNsYXNzIHsKKyAgICAg
IFsneCddID0gMTsKKyAgICAgIHN0YXRpYyBbJ3gnXSA9IDI7CisgICAgfQorICB9CisKKyAgbGV0
IGtsYXNzID0gdCgpOworICBsZXQgb2JqID0gbmV3IGtsYXNzOworICBhc3NlcnRFcXVhbHMoMSwg
b2JqLngpOworICBhc3NlcnRFcXVhbHMoMiwga2xhc3MueCk7Cit9CisKKworeworICBjbGFzcyBY
IHsKKyAgICBzdGF0aWMgcCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzWzBdOyB9Cisg
IH0KKworICBhc3NlcnRFcXVhbHMoMSwgWC5wKDEpKTsKK30KKworeworICBjbGFzcyBYIHsKKyAg
ICBzdGF0aWMgdCA9ICgpID0+IHsKKyAgICAgIGZ1bmN0aW9uIHAoKSB7IHJldHVybiBhcmd1bWVu
dHNbMF07IH07CisgICAgICByZXR1cm4gcDsKKyAgICB9CisgIH0KKworICBsZXQgcCA9IFgudCgp
OworICBhc3NlcnRFcXVhbHMoMSwgcCgxKSk7Cit9CisKK3sKKyAgY2xhc3MgWCB7CisgICAgc3Rh
dGljIHQgPSAoKSA9PiB7CisgICAgICBmdW5jdGlvbiBwKCkgeyByZXR1cm4gZXZhbCgiYXJndW1l
bnRzWzBdIik7IH07CisgICAgICByZXR1cm4gcDsKKyAgICB9CisgIH0KKworICBsZXQgcCA9IFgu
dCgpOworICBhc3NlcnRFcXVhbHMoMSwgcCgxKSk7Cit9CisKK3sKKyAgY2xhc3MgWCB7CisgICAg
c3RhdGljIHAgPSBldmFsKCIoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHNbMF07IH0pKDEp
Iik7CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwgWC5wKTsKK30KKworLyoKK3sKKyAgbGV0IHAg
PSB7IHo6IGNsYXNzIHsgc3RhdGljIHkgPSB0aGlzLm5hbWUgfSB9CisgIGFzc2VydEVxdWFscyhw
LnoueSwgJ3onKTsKKworICBsZXQgcSA9IHsgWyJ6Il06IGNsYXNzIHsgc3RhdGljIHkgPSB0aGlz
Lm5hbWUgfSB9CisgIGFzc2VydEVxdWFscyhxLnoueSwgJ3onKTsKKworICBjb25zdCBDID0gY2xh
c3MgeworICAgIHN0YXRpYyB4ID0gdGhpcy5uYW1lOworICB9CisgIGFzc2VydEVxdWFscyhDLngs
ICdDJyk7Cit9CisqLwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvcmVzb3VyY2VzL2hhcm1v
bnktc3VwcG9ydC5qcyBiL0pTVGVzdHMvc3RyZXNzL3Jlc291cmNlcy9oYXJtb255LXN1cHBvcnQu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wMjRiM2IwODg5ZTEK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9yZXNvdXJjZXMvaGFybW9ueS1zdXBw
b3J0LmpzCkBAIC0wLDAgKzEsMTk2IEBACisvLyBDb3B5cmlnaHQgMjAxNyB0aGUgVjggcHJvamVj
dCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8v
ICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisv
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyJ1c2Ugc3Ry
aWN0IjsKKworZnVuY3Rpb24gY2xhc3NPZihvYmplY3QpIHsKKyAgIC8vIEFyZ3VtZW50IG11c3Qg
bm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLgorICAgdmFyIHN0cmluZyA9IE9iamVjdC5wcm90b3R5
cGUudG9TdHJpbmcuY2FsbChvYmplY3QpOworICAgLy8gU3RyaW5nIGhhcyBmb3JtYXQgW29iamVj
dCA8Q2xhc3NOYW1lPl0uCisgICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyg4LCBzdHJpbmcubGVu
Z3RoIC0gMSk7Cit9CisKKy8qKgorICogQ29tcGFyZXMgdHdvIG9iamVjdHMgZm9yIGtleS92YWx1
ZSBlcXVhbGl0eS4KKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGV5IGFyZSBlcXVhbCwgZmFsc2Ugb3Ro
ZXJ3aXNlLgorICovCitmdW5jdGlvbiBkZWVwT2JqZWN0RXF1YWxzKGEsIGIpIHsKKyAgdmFyIGFQ
cm9wcyA9IE9iamVjdC5rZXlzKGEpOworICBhUHJvcHMuc29ydCgpOworICB2YXIgYlByb3BzID0g
T2JqZWN0LmtleXMoYik7CisgIGJQcm9wcy5zb3J0KCk7CisgIGlmICghZGVlcEVxdWFscyhhUHJv
cHMsIGJQcm9wcykpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgZm9yICh2YXIgaSA9IDA7
IGkgPCBhUHJvcHMubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAoIWRlZXBFcXVhbHMoYVthUHJvcHNb
aV1dLCBiW2FQcm9wc1tpXV0pKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9Cisg
IHJldHVybiB0cnVlOworfQorCisvKioKKyAqIENvbXBhcmVzIHR3byBKYXZhU2NyaXB0IHZhbHVl
cyBmb3IgdHlwZSBhbmQgdmFsdWUgZXF1YWxpdHkuCisgKiBJdCBjaGVja3MgaW50ZXJuYWxzIG9m
IGFycmF5cyBhbmQgb2JqZWN0cy4KKyAqLworZnVuY3Rpb24gZGVlcEVxdWFscyhhLCBiKSB7Cisg
IGlmIChhID09PSBiKSB7CisgICAgLy8gQ2hlY2sgZm9yIC0wLgorICAgIGlmIChhID09PSAwKSBy
ZXR1cm4gKDEgLyBhKSA9PT0gKDEgLyBiKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBpZiAo
dHlwZW9mIGEgIT0gdHlwZW9mIGIpIHJldHVybiBmYWxzZTsKKyAgaWYgKHR5cGVvZiBhID09ICdu
dW1iZXInKSByZXR1cm4gaXNOYU4oYSkgJiYgaXNOYU4oYik7CisgIGlmICh0eXBlb2YgYSAhPT0g
J29iamVjdCcgJiYgdHlwZW9mIGEgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTsKKyAgLy8g
TmVpdGhlciBhIG5vciBiIGlzIHByaW1pdGl2ZS4KKyAgdmFyIG9iamVjdENsYXNzID0gY2xhc3NP
ZihhKTsKKyAgaWYgKG9iamVjdENsYXNzICE9PSBjbGFzc09mKGIpKSByZXR1cm4gZmFsc2U7Cisg
IGlmIChvYmplY3RDbGFzcyA9PT0gJ1JlZ0V4cCcpIHsKKyAgICAvLyBGb3IgUmVnRXhwLCBqdXN0
IGNvbXBhcmUgcGF0dGVybiBhbmQgZmxhZ3MgdXNpbmcgaXRzIHRvU3RyaW5nLgorICAgIHJldHVy
biAoYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCkpOworICB9CisgIC8vIEZ1bmN0aW9ucyBh
cmUgb25seSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcy4KKyAgaWYgKG9iamVjdENsYXNzID09PSAn
RnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7CisgIGlmIChvYmplY3RDbGFzcyA9PT0gJ0FycmF5Jykg
eworICAgIHZhciBlbGVtZW50Q291bnQgPSAwOworICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0
aCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGEubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmICghZGVlcEVxdWFscyhhW2ldLCBiW2ldKSkgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBpZiAob2JqZWN0Q2xh
c3MgPT0gJ1N0cmluZycgfHwgb2JqZWN0Q2xhc3MgPT0gJ051bWJlcicgfHwKKyAgICAgIG9iamVj
dENsYXNzID09ICdCb29sZWFuJyB8fCBvYmplY3RDbGFzcyA9PSAnRGF0ZScpIHsKKyAgICBpZiAo
YS52YWx1ZU9mKCkgIT09IGIudmFsdWVPZigpKSByZXR1cm4gZmFsc2U7CisgIH0KKyAgcmV0dXJu
IGRlZXBPYmplY3RFcXVhbHMoYSwgYik7Cit9CisKKy8qKgorICogVGhyb3dzIGFuIGV4Y2VwdGlv
biBjb250YWluaW5nIHRoZSB1c2VyX21lc3NhZ2UgKGlmIGFueSkgYW5kIHRoZSB2YWx1ZXMuCisg
Ki8KK2Z1bmN0aW9uIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2UgPSAnJykgewor
ICAvLyBUT0RPKGNpcmEpOiBSZXBsYWNlIFN0cmluZyB3aXRoIFByZXR0eVByaW50IGZvciBvYmpl
Y3RzIGFuZCBhcnJheXMuCisgIHZhciBtZXNzYWdlID0gJ0ZhaWx1cmUnICsgKHVzZXJfbWVzc2Fn
ZSA/ICcgKCcgKyB1c2VyX21lc3NhZ2UgKyAnKScgOiAnJykgKworICAgICAgJzogZXhwZWN0ZWQg
PCcgKyBTdHJpbmcoZXhwZWN0ZWQpICsgJz4sIGZvdW5kIDwnICsgU3RyaW5nKGZvdW5kKSArICc+
Lic7CisgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTsKK30KKworLyoqCisgKiBUaHJvd3MgaWYg
b2JqIGlzIG5vdCBvZiBnaXZlbiB0eXBlLgorICovCitmdW5jdGlvbiBhc3NlcnRJbnN0YW5jZW9m
KG9iaiwgdHlwZSkgeworICBpZiAoIShvYmogaW5zdGFuY2VvZiB0eXBlKSkgeworICAgIHZhciBh
Y3R1YWxUeXBlTmFtZSA9IG51bGw7CisgICAgdmFyIGFjdHVhbENvbnN0cnVjdG9yID0gT2JqZWN0
LmdldFByb3RvdHlwZU9mKG9iaikuY29uc3RydWN0b3I7CisgICAgaWYgKHR5cGVvZiBhY3R1YWxD
b25zdHJ1Y3RvciA9PSAiZnVuY3Rpb24iKSB7CisgICAgICBhY3R1YWxUeXBlTmFtZSA9IGFjdHVh
bENvbnN0cnVjdG9yLm5hbWUgfHwgU3RyaW5nKGFjdHVhbENvbnN0cnVjdG9yKTsKKyAgICB9Cisg
ICAgdGhyb3cgbmV3IEVycm9yKCdPYmplY3QgPCcgKyBvYmogKyAnPiBpcyBub3QgYW4gaW5zdGFu
Y2Ugb2YgPCcgKworICAgICAgICAgICAgICAgICAgICAodHlwZS5uYW1lIHx8IHR5cGUpICsgJz4n
ICsKKyAgICAgICAgICAgICAgICAgICAgKGFjdHVhbFR5cGVOYW1lID8gJyBidXQgb2YgPCAnICsg
YWN0dWFsVHlwZU5hbWUgKyAnPicgOiAnJykpOworICB9Cit9CisKKy8qKgorICogVGhyb3dzIGlm
IG9iaiBpcyBub3QgdGhlIHNhbWUgYXMgZXhwZWN0ZWQuCisgKi8KK2Z1bmN0aW9uIGFzc2VydFNh
bWUoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCkgeworICBpZiAoZm91bmQgPT09IGV4cGVjdGVk
KSB7CisgICAgaWYgKGV4cGVjdGVkICE9PSAwIHx8ICgxIC8gZXhwZWN0ZWQpID09PSAoMSAvIGZv
dW5kKSkKKyAgICAgIHJldHVybjsKKyAgfSBlbHNlIGlmICgoZXhwZWN0ZWQgIT09IGV4cGVjdGVk
KSAmJiAoZm91bmQgIT09IGZvdW5kKSkgeworICAgICAgcmV0dXJuOworICB9CisgIGZhaWwoZXhw
ZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCk7Cit9CisKKy8qKgorICogVGhyb3dzIGlmIHR3byB2YXJp
YWJsZXMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMgb3IgdmFsdWVzLgorICovCisKK2Z1bmN0aW9uIGFz
c2VydEVxdWFscyhleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSA9ICcnKSB7CisgIGlmICgh
ZGVlcEVxdWFscyhleHBlY3RlZCwgZm91bmQpKSB7CisgICAgZmFpbChleHBlY3RlZCwgZm91bmQs
IHVzZXJfbWVzc2FnZSk7CisgIH0KK30KKworLyoqCisgKiBUaHJvd3MgaWYgdHdvIHZhcmlhYmxl
cyBoYXZlIGVxdWFsIHR5cGVzIG9yIHZhbHVlcy4KKyAqLworCitmdW5jdGlvbiBhc3NlcnROb3RF
cXVhbHMoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2UgPSAnJykgeworICBpZiAoZGVlcEVx
dWFscyhleHBlY3RlZCwgZm91bmQpKSB7CisgICAgZmFpbChleHBlY3RlZCwgZm91bmQsIHVzZXJf
bWVzc2FnZSk7CisgIH0KK30KKworLyoqCisgKiBUaHJvd3MgaWYgdmFsdWUgaXMgZmFsc2UuCisg
Ki8KK2Z1bmN0aW9uIGFzc2VydFRydWUodmFsdWUsIHVzZXJfbWVzc2FnZSA9ICcnKSB7CisgIGFz
c2VydEVxdWFscyh0cnVlLCB2YWx1ZSwgdXNlcl9tZXNzYWdlKTsKK30KKworCisvKioKKyAqIFRo
cm93cyBpZiB2YWx1ZSBpcyB0cnVlLgorICovCitmdW5jdGlvbiBhc3NlcnRGYWxzZSh2YWx1ZSwg
dXNlcl9tZXNzYWdlID0gJycpIHsKKyAgYXNzZXJ0RXF1YWxzKGZhbHNlLCB2YWx1ZSwgdXNlcl9t
ZXNzYWdlKTsKK30KKworLyoqCisgKiBSdW5zIGNvZGUoKSBhbmQgYXNzZXJ0cyB0aGF0IGl0IHRo
cm93cyB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbi4KKyAqLworZnVuY3Rpb24gYXNzZXJ0VGhyb3dz
KGNvZGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQpIHsKKyAgdHJ5IHsKKyAgICBpZiAodHlwZW9mIGNv
ZGUgPT0gJ2Z1bmN0aW9uJykgeworICAgICAgY29kZSgpOworICAgIH0gZWxzZSB7CisgICAgICBl
dmFsKGNvZGUpOworICAgIH0KKyAgfSBjYXRjaCAoZSkgeworICAgIGlmICh0eXBlb2YgdHlwZV9v
cHQgPT0gJ2Z1bmN0aW9uJykgeworICAgICAgYXNzZXJ0SW5zdGFuY2VvZihlLCB0eXBlX29wdCk7
CisgICAgfQorICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDMpIHsKKyAgICAgIGFzc2VydEVx
dWFscyhjYXVzZV9vcHQsIGUudHlwZSwgJ3Rocm93biBleGNlcHRpb24gdHlwZSBtaXNtYXRjaCcp
OworICAgIH0KKyAgICAvLyBTdWNjZXNzLgorICAgIHJldHVybjsKKyAgfQorICB2YXIgZXhwZWN0
ZWQgPSBhcmd1bWVudHMubGVuZ3RoID49IDMgPyBjYXVzZV9vcHQgOgorICAgICAgdHlwZW9mIHR5
cGVfb3B0ID09ICdmdW5jdGlvbicgPyB0eXBlX29wdCA6ICdhbnkgZXhjZXB0aW9uJzsKKyAgZmFp
bChleHBlY3RlZCwgJ25vIGV4Y2VwdGlvbicsICdleHBlY3RlZCB0aHJvd24gZXhjZXB0aW9uJyk7
Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwgYi9KU1Rlc3RzL3Rl
c3QyNjIvY29uZmlnLnlhbWwKaW5kZXggNjRkYTUyMzNmYzc0Li4xY2RmMTYzMjFiNDggMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbAorKysgYi9KU1Rlc3RzL3Rlc3QyNjIv
Y29uZmlnLnlhbWwKQEAgLTUsNiArNSw3IEBAIGZsYWdzOgogICBGaW5hbGl6YXRpb25SZWdpc3Ry
eTogdXNlV2Vha1JlZnMKICAgY2xhc3MtZmllbGRzLXB1YmxpYzogdXNlUHVibGljQ2xhc3NGaWVs
ZHMKICAgY2xhc3MtZmllbGRzLXByaXZhdGU6IHVzZVByaXZhdGVDbGFzc0ZpZWxkcworICBjbGFz
cy1zdGF0aWMtZmllbGRzLXB1YmxpYzogdXNlUHVibGljU3RhdGljQ2xhc3NGaWVsZHMKICAgSW50
bC5EYXRlVGltZUZvcm1hdC1kYXlQZXJpb2Q6IHVzZUludGxEYXRlVGltZUZvcm1hdERheVBlcmlv
ZAogICBTaGFyZWRBcnJheUJ1ZmZlcjogdXNlU2hhcmVkQXJyYXlCdWZmZXIKICAgQXRvbWljczog
dXNlU2hhcmVkQXJyYXlCdWZmZXIKQEAgLTE3LDcgKzE4LDYgQEAgc2tpcDoKIAogICAgIC0gYXJi
aXRyYXJ5LW1vZHVsZS1uYW1lc3BhY2UtbmFtZXMKICAgICAtIGNsYXNzLW1ldGhvZHMtcHJpdmF0
ZQotICAgIC0gY2xhc3Mtc3RhdGljLWZpZWxkcy1wdWJsaWMKICAgICAtIGNsYXNzLXN0YXRpYy1m
aWVsZHMtcHJpdmF0ZQogICAgIC0gY2xhc3Mtc3RhdGljLW1ldGhvZHMtcHJpdmF0ZQogICAgIC0g
Y2xlYW51cFNvbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGJiM2Y4YzhkNGQ1ZC4uYmFh
ZWEzMGZhZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAy
MC0xMS0xNSAgWGFuIEzDs3BleiAgPHhhbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtKU0NdIEFk
ZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDk1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHN0YXRpYyBw
dWJsaWMgY2xhc3MgZmllbGRzLiBXZSBjYW4gcmV1c2UgbW9zdCBvZgorICAgICAgICB0aGUgZXhp
c3RpbmcgbWFjaGluZXJ5IGF2YWlsYWJsZSBmb3IgaW5zdGFuY2UgZmllbGRzLiBMaWtlCisgICAg
ICAgIGluc3RhbmNlIGZpZWxkcywgc3RhdGljIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBh
IHN5bnRoZXRpYworICAgICAgICBmdW5jdGlvbi4gVGhpcyBpcyBkb25lIHRvIGFsbG93IHVzIHRv
IHRyaXZpYWxseSBmb2xsb3cgdGhlIHNjb3BpbmcKKyAgICAgICAgcnVsZXMgaW4gdGhlIHNwZWMu
IEFzIGl0IGhhcHBlbnMgd2l0aCBpbnN0YW5jZSBmaWVsZHMgdGhpcyBjb3VsZAorICAgICAgICBi
ZSBpbmxpbmVkIGluIGEgZnV0dXJlIHBhdGNoLgorCisgICAgICAgIEEgbG90IG9mIHNtYWxsIGNo
YW5nZXMgaW4gbWFueSBmaWxlcyBhcmUganVzdCBhIG1hdHRlciBvZiBkb2luZworICAgICAgICBz
L2luc3RhbmNlL2NsYXNzLyBmb3IgdmFyaWFibGVzIHJlbGF0ZWQgdG8gY2xhc3MgZmllbGRzLCB3
aGljaAorICAgICAgICBiZWZvcmUgd2VyZSBhc3N1bWluZyB0aGVyZSBhcmUgb25seSBpbnN0YW5j
ZSBmaWVsZHMgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayk6IGRvIHMvaW5zdGFuY2VGaWVsZC9jbGFzc0ZpZWxkLy4KKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oOiBkaXR0by4KKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdE5ld0NsYXNzRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKTogZGl0dG8u
CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6IGRpdHRvLCBwbHVz
IGFkZCBhIHBhcmFtZXRlcgorICAgICAgICBmb3Igc3RhdGljIGZpZWxkIGxvY2F0aW9ucyBpbiBl
bWl0RGVmaW5lQ2xhc3NFbGVtZW50cy4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKTog
c2F2ZSBzdGF0aWMgZmllbGRzCisgICAgICAgIGxvY2F0aW9ucyB3aGVuIGdvaW5nIHRocm91Z2gg
dGhlIHByb3BlcnR5IGxpc3QuCisgICAgICAgIChKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRT
YXZlQ29tcHV0ZWRGaWVsZE5hbWUpOiBjb25zaWRlcgorICAgICAgICBzdGF0aWMgZmllbGRzIGhl
cmUgdG9vLgorICAgICAgICAoSlNDOjpDbGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUpOiBjYWxs
IHRoZSBpbml0aWFsaXplciBmb3IKKyAgICAgICAgc3RhdGljIGZpZWxkcyBhcyB0aGUgdmVyeSBs
YXN0IGFjdGlvbiBvZiB0aGUgY2xhc3MgY3JlYXRpb24uCisgICAgICAgICogcGFyc2VyL0FTVEJ1
aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRGVmaW5lRmllbGQpOiBm
aWVsZCBub2RlcyBjYW4gYmUgc3RhdGljCisgICAgICAgIHRvbyBub3cuCisgICAgICAgICogcGFy
c2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpTQzo6RGVmaW5lRmllbGROb2RlOjpE
ZWZpbmVGaWVsZE5vZGUpOiBkaXR0by4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDogZGl0dG8u
CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZUlubmVyKTogcy9pbnN0YW5jZUZpZWxkL2NsYXNzRmllbGQvCisgICAgICAg
IChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKTogY29uc2lkZXIgc3RhdGljIGZp
ZWxkcy4KKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5zdGFuY2VGaWVs
ZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMpOgorICAgICAgICBzL2luc3RhbmNlRmllbGQvY2xh
c3NGaWVsZC8sIGFuZCBjb25zaWRlciBzdGF0aWMgZmllbGRzLgorICAgICAgICAqIHBhcnNlci9Q
YXJzZXIuaDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlKTogcy9pbnN0
YW5jZUZpZWxkL2NsYXNzRmllbGQvCisgICAgICAgIChKU0M6OnBhcnNlKTogZGl0dG8uCisgICAg
ICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
c2V0RnVuY3Rpb25OYW1lKTogcy9pbnN0YW5jZUZpZWxkL2NsYXNzRmllbGQvCisgICAgICAgICog
cnVudGltZS9PcHRpb25zTGlzdC5oOiBhZGQgb3B0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIHN0YXRp
YyBwdWJsaWMgZmllbGRzLgorCiAyMDIwLTExLTE0ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3Rl
YWRAc29ueS5jb20+CiAKICAgICAgICAgW2NsYW5nLXRpZHldIFJ1biBtb2Rlcm5pemUtdXNlLW92
ZXJyaWRlIHRocm91Z2ggSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAppbmRleCA2YjM3MWY1
Mzk1N2EuLjMwN2QzNDYwYjBmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCkBAIC01Niw5
ICs1Niw5IEBAIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZVVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2soCiAgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUg
PSBleGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4dCgpID8gSlNQYXJzZXJTdHJpY3RNb2RlOjpT
dHJpY3QgOiBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdDsKICAgICBKU1BhcnNlclNjcmlw
dE1vZGUgc2NyaXB0TW9kZSA9IGV4ZWN1dGFibGUtPnNjcmlwdE1vZGUoKTsKICAgICBBU1NFUlQo
aXNGdW5jdGlvblBhcnNlTW9kZShleGVjdXRhYmxlLT5wYXJzZU1vZGUoKSkpOwotICAgIFZlY3Rv
cjxKU1RleHRQb3NpdGlvbj4qIGluc3RhbmNlRmllbGRMb2NhdGlvbnMgPSBleGVjdXRhYmxlLT5p
bnN0YW5jZUZpZWxkTG9jYXRpb25zKCk7CisgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogY2xh
c3NGaWVsZExvY2F0aW9ucyA9IGV4ZWN1dGFibGUtPmNsYXNzRmllbGRMb2NhdGlvbnMoKTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Ob2RlPiBmdW5jdGlvbiA9IHBhcnNlPEZ1bmN0aW9u
Tm9kZT4oCi0gICAgICAgIHZtLCBzb3VyY2UsIGV4ZWN1dGFibGUtPm5hbWUoKSwgYnVpbHRpbk1v
ZGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGV4ZWN1dGFibGUtPnBhcnNlTW9kZSgpLCBleGVj
dXRhYmxlLT5zdXBlckJpbmRpbmcoKSwgZXJyb3IsIG51bGxwdHIsIENvbnN0cnVjdG9yS2luZDo6
Tm9uZSwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsIG51
bGxwdHIsIG51bGxwdHIsIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgICAgICB2bSwgc291
cmNlLCBleGVjdXRhYmxlLT5uYW1lKCksIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRN
b2RlLCBleGVjdXRhYmxlLT5wYXJzZU1vZGUoKSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCks
IGVycm9yLCBudWxscHRyLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlw
ZTo6Tm9uZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBudWxscHRyLCBudWxscHRyLCBjbGFzc0Zp
ZWxkTG9jYXRpb25zKTsKIAogICAgIGlmICghZnVuY3Rpb24pIHsKICAgICAgICAgQVNTRVJUKGVy
cm9yLmlzVmFsaWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5oCmluZGV4IGI2MjdlYWI3YzZkYi4u
YTVkZDkyNjQ4MWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaApAQCAtMjA5LDIzICsyMDksMjMg
QEAgcHVibGljOgogICAgICAgICBTdHJpbmcgbV9zb3VyY2VVUkxEaXJlY3RpdmU7CiAgICAgICAg
IFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7CiAgICAgICAgIFZlY3RvcjxDb21w
YWN0VERaRW52aXJvbm1lbnRNYXA6OkhhbmRsZT4gbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlczsK
LSAgICAgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiBtX2luc3RhbmNlRmllbGRMb2NhdGlvbnM7
CisgICAgICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4gbV9jbGFzc0ZpZWxkTG9jYXRpb25zOwog
ICAgIH07CiAKICAgICBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciBuZWVkc0NsYXNzRmllbGRJ
bml0aWFsaXplcigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE5lZWRzQ2xhc3NGaWVsZElu
aXRpYWxpemVyPihtX25lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyKTsgfQogCi0gICAgVmVjdG9y
PEpTVGV4dFBvc2l0aW9uPiogaW5zdGFuY2VGaWVsZExvY2F0aW9ucygpIGNvbnN0CisgICAgVmVj
dG9yPEpTVGV4dFBvc2l0aW9uPiogY2xhc3NGaWVsZExvY2F0aW9ucygpIGNvbnN0CiAgICAgewog
ICAgICAgICBpZiAobV9yYXJlRGF0YSkKLSAgICAgICAgICAgIHJldHVybiAmbV9yYXJlRGF0YS0+
bV9pbnN0YW5jZUZpZWxkTG9jYXRpb25zOworICAgICAgICAgICAgcmV0dXJuICZtX3JhcmVEYXRh
LT5tX2NsYXNzRmllbGRMb2NhdGlvbnM7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IAotICAgIHZvaWQgc2V0SW5zdGFuY2VGaWVsZExvY2F0aW9ucyhWZWN0b3I8SlNUZXh0UG9zaXRp
b24+JiYgaW5zdGFuY2VGaWVsZExvY2F0aW9ucykKKyAgICB2b2lkIHNldENsYXNzRmllbGRMb2Nh
dGlvbnMoVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYmIGNsYXNzRmllbGRMb2NhdGlvbnMpCiAgICAg
ewotICAgICAgICBpZiAoaW5zdGFuY2VGaWVsZExvY2F0aW9ucy5pc0VtcHR5KCkpCisgICAgICAg
IGlmIChjbGFzc0ZpZWxkTG9jYXRpb25zLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgZW5zdXJlUmFyZURhdGEoKS5tX2luc3RhbmNlRmllbGRMb2NhdGlvbnMgPSBXVEZN
b3ZlKGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgICAgICBlbnN1cmVSYXJlRGF0YSgpLm1f
Y2xhc3NGaWVsZExvY2F0aW9ucyA9IFdURk1vdmUoY2xhc3NGaWVsZExvY2F0aW9ucyk7CiAgICAg
fQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBjOWU1ZWE2NmY5MmEuLmRhNWNhZjFj
MTAzOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTM4MSw3ICszODEsNyBAQCBCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9k
ZSwgVW5saW5rZQogICAgIGJvb2wgc2hvdWxkQ2FwdHVyZVNvbWVPZlRoZVRoaW5ncyA9IHNob3Vs
ZEVtaXREZWJ1Z0hvb2tzKCkgfHwgZnVuY3Rpb25Ob2RlLT5uZWVkc0FjdGl2YXRpb24oKSB8fCBj
b250YWluc0Fycm93T3JFdmFsQnV0Tm90SW5BcnJvd0Jsb2NrOwogCiAgICAgYm9vbCBzaG91bGRD
YXB0dXJlQWxsT2ZUaGVUaGluZ3MgPSBzaG91bGRFbWl0RGVidWdIb29rcygpIHx8IGNvZGVCbG9j
ay0+dXNlc0V2YWwoKTsKLSAgICBib29sIG5lZWRzQXJndW1lbnRzID0gKChmdW5jdGlvbk5vZGUt
PnVzZXNBcmd1bWVudHMoKSAmJiAhY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSkgfHwgY29k
ZUJsb2NrLT51c2VzRXZhbCgpIHx8IChmdW5jdGlvbk5vZGUtPnVzZXNBcnJvd0Z1bmN0aW9uKCkg
JiYgIWNvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgJiYgaXNBcmd1bWVudHNVc2VkSW5Jbm5l
ckFycm93RnVuY3Rpb24oKSkpICYmIHBhcnNlTW9kZSAhPSBTb3VyY2VQYXJzZU1vZGU6Okluc3Rh
bmNlRmllbGRJbml0aWFsaXplck1vZGU7CisgICAgYm9vbCBuZWVkc0FyZ3VtZW50cyA9ICgoZnVu
Y3Rpb25Ob2RlLT51c2VzQXJndW1lbnRzKCkgJiYgIWNvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9u
KCkpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSB8fCAoZnVuY3Rpb25Ob2RlLT51c2VzQXJyb3dG
dW5jdGlvbigpICYmICFjb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpICYmIGlzQXJndW1lbnRz
VXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCkpKSAmJiBwYXJzZU1vZGUgIT0gU291cmNlUGFyc2VN
b2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlOwogCiAgICAgaWYgKGlzR2VuZXJhdG9yT3JB
c3luY0Z1bmN0aW9uQm9keVBhcnNlTW9kZShwYXJzZU1vZGUpKSB7CiAgICAgICAgIC8vIEdlbmVy
YXRvciBhbmQgQXN5bmNGdW5jdGlvbiBuZXZlciBwcm92aWRlcyAiYXJndW1lbnRzIi4gImFyZ3Vt
ZW50cyIgcmVmZXJlbmNlIHdpbGwgYmUgcmVzb2x2ZWQgaW4gYW4gdXBwZXIgZ2VuZXJhdG9yIGZ1
bmN0aW9uIHNjb3BlLgpAQCAtNjEzLDcgKzYxMyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRl
Y29kZUdlbmVyYXRvcihWTSYgdm0sIEZ1bmN0aW9uTm9kZSogZnVuY3Rpb25Ob2RlLCBVbmxpbmtl
CiAgICAgICAgIH0KIAogICAgICAgICBib29sIHNob3VsZENyZWF0ZUFyZ3VtZW5zVmFyaWFibGUg
PSAhaGF2ZVBhcmFtZXRlck5hbWVkQXJndW1lbnRzCi0gICAgICAgICAgICAmJiAhU291cmNlUGFy
c2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNl
TW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSwgU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZp
ZWxkSW5pdGlhbGl6ZXJNb2RlKS5jb250YWlucyhtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkpOwor
ICAgICAgICAgICAgJiYgIVNvdXJjZVBhcnNlTW9kZVNldChTb3VyY2VQYXJzZU1vZGU6OkFycm93
RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUsIFNv
dXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZSkuY29udGFpbnMobV9jb2Rl
QmxvY2stPnBhcnNlTW9kZSgpKTsKICAgICAgICAgc2hvdWxkQ3JlYXRlQXJndW1lbnRzVmFyaWFi
bGVJblBhcmFtZXRlclNjb3BlID0gc2hvdWxkQ3JlYXRlQXJndW1lbnNWYXJpYWJsZSAmJiAhaXNT
aW1wbGVQYXJhbWV0ZXJMaXN0OwogICAgICAgICAvLyBEbyBub3QgY3JlYXRlIGFyZ3VtZW50cyB2
YXJpYWJsZSBpbiBjYXNlIG9mIEFycm93IGZ1bmN0aW9uLiBWYWx1ZSB3aWxsIGJlIGxvYWRlZCBm
cm9tIHBhcmVudCBzY29wZQogICAgICAgICBpZiAoc2hvdWxkQ3JlYXRlQXJndW1lbnNWYXJpYWJs
ZSAmJiAhc2hvdWxkQ3JlYXRlQXJndW1lbnRzVmFyaWFibGVJblBhcmFtZXRlclNjb3BlKSB7CkBA
IC0zMTMzLDcgKzMxMzMsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5l
d0RlZmF1bHRDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIENvbnN0cgogICAgIHJldHVybiBk
c3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3SW5zdGFuY2VG
aWVsZEluaXRpYWxpemVyRnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBWZWN0b3I8SlNUZXh0UG9z
aXRpb24+JiYgaW5zdGFuY2VGaWVsZExvY2F0aW9ucywgYm9vbCBpc0Rlcml2ZWQpCitSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0NsYXNzRmllbGRJbml0aWFsaXplckZ1bmN0
aW9uKFJlZ2lzdGVySUQqIGRzdCwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYmIGNsYXNzRmllbGRM
b2NhdGlvbnMsIGJvb2wgaXNEZXJpdmVkKQogewogICAgIERlcml2ZWRDb250ZXh0VHlwZSBuZXdE
ZXJpdmVkQ29udGV4dFR5cGU7CiAgICAgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZzsKQEAgLTMx
NDYsMTQgKzMxNDYsMTQgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdJ
bnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlckkKICAgICB9CiAKICAgICBh
dXRvIHZhcmlhYmxlc1VuZGVyVERaID0gZ2V0VmFyaWFibGVzVW5kZXJURFooKTsKLSAgICBTb3Vy
Y2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5p
dGlhbGl6ZXJNb2RlOworICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUgPSBTb3VyY2VQYXJz
ZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU7CiAgICAgQ29uc3RydWN0QWJpbGl0eSBj
b25zdHJ1Y3RBYmlsaXR5ID0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0OwogCiAg
ICAgY29uc3QgYm9vbCBhbHdheXNTdHJpY3RJbkNsYXNzID0gdHJ1ZTsKICAgICBGdW5jdGlvbk1l
dGFkYXRhTm9kZSBtZXRhZGF0YShwYXJzZXJBcmVuYSgpLCBKU1Rva2VuTG9jYXRpb24oKSwgSlNU
b2tlbkxvY2F0aW9uKCksIDAsIDAsIDAsIDAsIDAsIGFsd2F5c1N0cmljdEluQ2xhc3MsIENvbnN0
cnVjdG9yS2luZDo6Tm9uZSwgc3VwZXJCaW5kaW5nLCAwLCBwYXJzZU1vZGUsIGZhbHNlKTsKICAg
ICBtZXRhZGF0YS5maW5pc2hQYXJzaW5nKG1fc2NvcGVOb2RlLT5zb3VyY2UoKSwgSWRlbnRpZmll
cigpLCBGdW5jdGlvbk1vZGU6Ok1ldGhvZERlZmluaXRpb24pOwogICAgIGF1dG8gaW5pdGlhbGl6
ZXIgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKG1fdm0sIG1fc2NvcGVOb2Rl
LT5zb3VyY2UoKSwgJm1ldGFkYXRhLCBpc0J1aWx0aW5GdW5jdGlvbigpID8gVW5saW5rZWRCdWls
dGluRnVuY3Rpb24gOiBVbmxpbmtlZE5vcm1hbEZ1bmN0aW9uLCBjb25zdHJ1Y3RBYmlsaXR5LCBz
Y3JpcHRNb2RlKCksIFdURk1vdmUodmFyaWFibGVzVW5kZXJURFopLCBuZXdEZXJpdmVkQ29udGV4
dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyOjpObyk7Ci0gICAgaW5pdGlhbGl6ZXIt
PnNldEluc3RhbmNlRmllbGRMb2NhdGlvbnMoV1RGTW92ZShpbnN0YW5jZUZpZWxkTG9jYXRpb25z
KSk7CisgICAgaW5pdGlhbGl6ZXItPnNldENsYXNzRmllbGRMb2NhdGlvbnMoV1RGTW92ZShjbGFz
c0ZpZWxkTG9jYXRpb25zKSk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IG1fY29kZUJsb2NrLT5h
ZGRGdW5jdGlvbkV4cHIoaW5pdGlhbGl6ZXIpOwogICAgIE9wTmV3RnVuY0V4cDo6ZW1pdCh0aGlz
LCBkc3QsIHNjb3BlUmVnaXN0ZXIoKSwgaW5kZXgpOwpAQCAtNDQ3NCw3ICs0NDc0LDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9j
YWxSZWdpc3RlcikKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJy
b3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2Rl
QmxvY2stPmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBD
b25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2Nv
ZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5p
dGlhbGl6ZXJNb2RlKTsKKyAgICBBU1NFUlQobV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigp
IHx8IG1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCkgfHwgY29uc3RydWN0b3JL
aW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzIHx8IG1fY29kZVR5cGUgPT0gRXZhbENv
ZGUgfHwgbV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpID09IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NG
aWVsZEluaXRpYWxpemVyTW9kZSk7CiAKICAgICByZXR1cm4gZW1pdFJlc29sdmVTY29wZShudWxs
cHRyLCB2YXJpYWJsZShpZGVudGlmaWVyLCBUaGlzUmVzb2x1dGlvblR5cGU6OlNjb3BlZCkpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCmluZGV4IDRhNTdhNGZhOTJiNC4uOTZhNjRlMGY4MmM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCkBAIC01ODIsMTQgKzU4MiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiBlbWl0Tm9kZUluVGFpbFBvc2l0aW9uKG51bGxwdHIsIG4pOwogICAgICAgICB9CiAKLSAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdERlZmluZUNsYXNzRWxlbWVudHMoUHJvcGVydHlMaXN0Tm9k
ZSogbiwgUmVnaXN0ZXJJRCogY29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3RvdHlwZSwgVmVj
dG9yPEpTVGV4dFBvc2l0aW9uPiYgaW5zdGFuY2VGaWVsZExvY2F0aW9ucykKKyAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdERlZmluZUNsYXNzRWxlbWVudHMoUHJvcGVydHlMaXN0Tm9kZSogbiwgUmVn
aXN0ZXJJRCogY29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3RvdHlwZSwgVmVjdG9yPEpTVGV4
dFBvc2l0aW9uPiYgaW5zdGFuY2VGaWVsZExvY2F0aW9ucywgVmVjdG9yPEpTVGV4dFBvc2l0aW9u
PiYgc3RhdGljRmllbGRMb2NhdGlvbnMpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChj
b25zdHJ1Y3Rvci0+cmVmQ291bnQoKSAmJiBwcm90b3R5cGUtPnJlZkNvdW50KCkpOwogICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKCFtX3ZtLmlzU2FmZVRvUmVjdXJzZSgpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZW1pdFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsKICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShuLT5uZWVkc0RlYnVnSG9vaygpKSkKICAgICAgICAgICAgICAg
ICBlbWl0RGVidWdIb29rKG4pOwotICAgICAgICAgICAgcmV0dXJuIG4tPmVtaXRCeXRlY29kZSgq
dGhpcywgY29uc3RydWN0b3IsIHByb3RvdHlwZSwgJmluc3RhbmNlRmllbGRMb2NhdGlvbnMpOwor
ICAgICAgICAgICAgcmV0dXJuIG4tPmVtaXRCeXRlY29kZSgqdGhpcywgY29uc3RydWN0b3IsIHBy
b3RvdHlwZSwgJmluc3RhbmNlRmllbGRMb2NhdGlvbnMsICZzdGF0aWNGaWVsZExvY2F0aW9ucyk7
CiAgICAgICAgIH0KIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Tm9kZUZvclByb3BlcnR5KFJl
Z2lzdGVySUQqIGRzdCwgRXhwcmVzc2lvbk5vZGUqIG5vZGUpCkBAIC03NzYsNyArNzc2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlvbihSZWdp
c3RlcklEKiBkc3QsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKik7CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5jRXhwck5vZGUq
KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0RlZmF1bHRDb25zdHJ1Y3RvcihSZWdpc3Rl
cklEKiBkc3QsIENvbnN0cnVjdG9yS2luZCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3Qg
SWRlbnRpZmllciYgZWNtYU5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIGNsYXNzU291cmNlLCBOZWVk
c0NsYXNzRmllbGRJbml0aWFsaXplcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdJbnN0
YW5jZUZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIFZlY3RvcjxKU1Rl
eHRQb3NpdGlvbj4mJiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zLCBib29sIGlzRGVyaXZlZCk7Cisg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihS
ZWdpc3RlcklEKiBkc3QsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mJiBjbGFzc0ZpZWxkTG9jYXRp
b25zLCBib29sIGlzRGVyaXZlZCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdBcnJvd0Z1
bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiwgQXJyb3dGdW5jRXhwck5vZGUqKTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdE5ld01ldGhvZERlZmluaXRpb24oUmVnaXN0ZXJJRCogZHN0LCBN
ZXRob2REZWZpbml0aW9uTm9kZSopOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3UmVnRXhw
KFJlZ2lzdGVySUQqIGRzdCwgUmVnRXhwKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggMWUyNWQ4ZGMwZThjLi45OGRh
MzA1YTM0M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAKQEAgLTE4Niw3ICsxODYsNyBAQCBSZWdpc3RlcklEKiBUaGlzTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdAogCiBzdGF0aWMgUmVnaXN0ZXJJRCogZW1pdEhvbWVPYmplY3RGb3JDYWxsZWUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICBpZiAoKGdlbmVyYXRvci5pc0Rlcml2ZWRD
bGFzc0NvbnRleHQoKSB8fCBnZW5lcmF0b3IuaXNEZXJpdmVkQ29uc3RydWN0b3JDb250ZXh0KCkp
ICYmIGdlbmVyYXRvci5wYXJzZU1vZGUoKSAhPSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmll
bGRJbml0aWFsaXplck1vZGUpIHsKKyAgICBpZiAoKGdlbmVyYXRvci5pc0Rlcml2ZWRDbGFzc0Nv
bnRleHQoKSB8fCBnZW5lcmF0b3IuaXNEZXJpdmVkQ29uc3RydWN0b3JDb250ZXh0KCkpICYmIGdl
bmVyYXRvci5wYXJzZU1vZGUoKSAhPSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFs
aXplck1vZGUpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZGVyaXZlZENvbnN0cnVjdG9yID0gZ2Vu
ZXJhdG9yLmVtaXRMb2FkRGVyaXZlZENvbnN0cnVjdG9yRnJvbUFycm93RnVuY3Rpb25MZXhpY2Fs
RW52aXJvbm1lbnQoKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGRlcml2ZWRDb25zdHJ1Y3RvciwgZ2VuZXJhdG9yLnByb3Bl
cnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5ob21lT2JqZWN0UHJpdmF0ZU5hbWUoKSk7CiAgICAg
fQpAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdERlY2xhcmVQ
cml2YXRlRmllbGROYW1lcyhCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yCiAgICAgfQogfQog
Ci1SZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0T3JDb25zdHJ1Y3RvciwgUmVnaXN0ZXJJ
RCogcHJvdG90eXBlLCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRp
b25zKQorUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdE9yQ29uc3RydWN0b3IsIFJlZ2lz
dGVySUQqIHByb3RvdHlwZSwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogaW5zdGFuY2VGaWVsZExv
Y2F0aW9ucywgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogc3RhdGljRmllbGRMb2NhdGlvbnMpCiB7
CiAgICAgUHJvcGVydHlMaXN0Tm9kZSogcCA9IHRoaXM7CiAgICAgUmVnaXN0ZXJJRCogZHN0ID0g
bnVsbHB0cjsKQEAgLTU5NSw2ICs1OTUsMTIgQEAgUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHAtPmlzU3RhdGlj
Q2xhc3NGaWVsZCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGljRmllbGRMb2NhdGlvbnMp
OworICAgICAgICAgICAgc3RhdGljRmllbGRMb2NhdGlvbnMtPmFwcGVuZChwLT5wb3NpdGlvbigp
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgZW1pdFB1dENv
bnN0YW50UHJvcGVydHkoZ2VuZXJhdG9yLCBkc3QsICpwLT5tX25vZGUpOwogICAgIH0KIApAQCAt
NjUyLDYgKzY1OCwxMiBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAocC0+aXNTdGF0aWND
bGFzc0ZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdGljRmllbGRMb2NhdGlv
bnMpOworICAgICAgICAgICAgICAgIHN0YXRpY0ZpZWxkTG9jYXRpb25zLT5hcHBlbmQocC0+cG9z
aXRpb24oKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKICAg
ICAgICAgICAgIC8vIEhhbmRsZSByZWd1bGFyIHZhbHVlcy4KICAgICAgICAgICAgIGlmIChub2Rl
LT5tX3R5cGUgJiBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KSB7CiAgICAgICAgICAgICAgICAgZW1p
dFB1dENvbnN0YW50UHJvcGVydHkoZ2VuZXJhdG9yLCBkc3QsICpub2RlKTsKQEAgLTc0NCw3ICs3
NTYsNyBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQogCiB2b2lkIFByb3BlcnR5TGlzdE5vZGU6
OmVtaXRQdXRDb25zdGFudFByb3BlcnR5KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIG5ld09iaiwgUHJvcGVydHlOb2RlJiBub2RlKQogewotICAgIC8vIFByaXZhdGUg
ZmllbGRzIGFyZSBoYW5kbGVkIGluIHRoZSBzeW50aGV0aWMgaW5zdGFuY2VGaWVsZEluaXRpYWxp
emVyIGZ1bmN0aW9uLCBub3QgaGVyZS4KKyAgICAvLyBQcml2YXRlIGZpZWxkcyBhcmUgaGFuZGxl
ZCBpbiBhIHN5bnRoZXRpYyBjbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgZnVuY3Rpb24sIG5vdCBoZXJl
LgogICAgIEFTU0VSVCghKG5vZGUudHlwZSgpICYgUHJvcGVydHlOb2RlOjpQcml2YXRlKSk7CiAK
ICAgICBpZiAoUHJvcGVydHlOb2RlOjppc1VuZGVyc2NvcmVQcm90b1NldHRlcihnZW5lcmF0b3Iu
dm0oKSwgbm9kZSkpIHsKQEAgLTgwMCwxOCArODEyLDI1IEBAIHZvaWQgUHJvcGVydHlMaXN0Tm9k
ZTo6ZW1pdFB1dENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnCiB2b2lkIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRTYXZlQ29tcHV0ZWRGaWVsZE5hbWUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUHJvcGVydHlOb2RlJiBub2RlKQogewogICAgIEFT
U0VSVChub2RlLmlzQ29tcHV0ZWRDbGFzc0ZpZWxkKCkpOwotICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBwcm9wZXJ0eUV4cHI7CiAKICAgICAvLyBUaGUgJ25hbWUnIHJlZmVycyB0byBhIHN5bnRoZXRp
YyBwcml2YXRlIG5hbWUgaW4gdGhlIGNsYXNzIHNjb3BlLCB3aGVyZSB0aGUgcHJvcGVydHkga2V5
IGlzIHNhdmVkIGZvciBsYXRlciB1c2UuCiAgICAgY29uc3QgSWRlbnRpZmllciYgZGVzY3JpcHRp
b24gPSAqbm9kZS5uYW1lKCk7CiAgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxl
KGRlc2NyaXB0aW9uKTsKICAgICBBU1NFUlQoIXZhci5sb2NhbCgpKTsKIAotICAgIHByb3BlcnR5
RXhwciA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLm1fZXhwcmVzc2lvbik7Ci0gICAgUmVnaXN0
ZXJJRCogcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXRUb1Byb3BlcnR5S2V5KGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlFeHByLmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcHJvcGVydHlFeHByID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUubV9leHByZXNzaW9u
KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXRU
b1Byb3BlcnR5S2V5KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlFeHByLmdldCgp
KTsKKworICAgIGlmIChub2RlLmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAgICAgIFJlZjxM
YWJlbD4gdmFsaWRQcm9wZXJ0eU5hbWVMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdG90eXBlU3RyaW5nID0gZ2VuZXJhdG9yLmVtaXRM
b2FkKG51bGxwdHIsIEpTVmFsdWUoZ2VuZXJhdG9yLmFkZFN0cmluZ0NvbnN0YW50KGdlbmVyYXRv
ci5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKSkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1
bXBJZkZhbHNlKGdlbmVyYXRvci5lbWl0QmluYXJ5T3A8T3BFcT4oZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBwcm90b3R5cGVTdHJpbmcuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgT3BlcmFu
ZFR5cGVzKFJlc3VsdFR5cGU6OnN0cmluZ1R5cGUoKSwgUmVzdWx0VHlwZTo6c3RyaW5nVHlwZSgp
KSksIHZhbGlkUHJvcGVydHlOYW1lTGFiZWwuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dFRocm93VHlwZUVycm9yKCJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyBmaWVsZCBuYW1lZCAncHJv
dG90eXBlJyIpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHZhbGlkUHJvcGVydHlOYW1l
TGFiZWwuZ2V0KCkpOworICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdl
bmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7Ci0gICAgZ2VuZXJhdG9yLmVt
aXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCB2YXIsIHByb3BlcnR5TmFtZSwgVGhyb3dJZk5vdEZv
dW5kLCBJbml0aWFsaXphdGlvbk1vZGU6OkNvbnN0SW5pdGlhbGl6YXRpb24pOworICAgIGdlbmVy
YXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFyLCBwcm9wZXJ0eU5hbWUuZ2V0KCks
IFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6YXRpb25Nb2RlOjpDb25zdEluaXRpYWxpemF0aW9u
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyYWNrZXRBY2Nlc3Nv
ck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ5NDYsMTMgKzQ5NjUs
MTQgQEAgUmVnaXN0ZXJJRCogQ2xhc3NFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJv
dG90eXBlTmFtZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIsIHByb3BlcnR5
TmFtZXMucHJvdG90eXBlKTsKICAgICBnZW5lcmF0b3IuZW1pdENhbGxEZWZpbmVQcm9wZXJ0eShj
b25zdHJ1Y3Rvci5nZXQoKSwgcHJvdG90eXBlTmFtZVJlZ2lzdGVyLmdldCgpLCBwcm90b3R5cGUu
Z2V0KCksIG51bGxwdHIsIG51bGxwdHIsIDAsIG1fcG9zaXRpb24pOwogCisgICAgVmVjdG9yPEpT
VGV4dFBvc2l0aW9uPiBzdGF0aWNGaWVsZExvY2F0aW9uczsKICAgICBpZiAobV9jbGFzc0VsZW1l
bnRzKSB7CiAgICAgICAgIG1fY2xhc3NFbGVtZW50cy0+ZW1pdERlY2xhcmVQcml2YXRlRmllbGRO
YW1lcyhnZW5lcmF0b3IsIGdlbmVyYXRvci5zY29wZVJlZ2lzdGVyKCkpOwogCiAgICAgICAgIFZl
Y3RvcjxKU1RleHRQb3NpdGlvbj4gaW5zdGFuY2VGaWVsZExvY2F0aW9uczsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXREZWZpbmVDbGFzc0VsZW1lbnRzKG1fY2xhc3NFbGVtZW50cywgY29uc3RydWN0
b3IuZ2V0KCksIHByb3RvdHlwZS5nZXQoKSwgaW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0RGVmaW5lQ2xhc3NFbGVtZW50cyhtX2NsYXNzRWxlbWVudHMsIGNv
bnN0cnVjdG9yLmdldCgpLCBwcm90b3R5cGUuZ2V0KCksIGluc3RhbmNlRmllbGRMb2NhdGlvbnMs
IHN0YXRpY0ZpZWxkTG9jYXRpb25zKTsKICAgICAgICAgaWYgKCFpbnN0YW5jZUZpZWxkTG9jYXRp
b25zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGluc3RhbmNl
RmllbGRJbml0aWFsaXplciA9IGdlbmVyYXRvci5lbWl0TmV3SW5zdGFuY2VGaWVsZEluaXRpYWxp
emVyRnVuY3Rpb24oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBXVEZNb3ZlKGluc3RhbmNlRmll
bGRMb2NhdGlvbnMpLCBtX2NsYXNzSGVyaXRhZ2UpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGluc3RhbmNlRmllbGRJbml0aWFsaXplciA9IGdlbmVyYXRvci5lbWl0TmV3Q2xhc3NG
aWVsZEluaXRpYWxpemVyRnVuY3Rpb24oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBXVEZNb3Zl
KGluc3RhbmNlRmllbGRMb2NhdGlvbnMpLCBtX2NsYXNzSGVyaXRhZ2UpOwogCiAgICAgICAgICAg
ICAvLyBGSVhNRTogU2tpcCB0aGlzIGlmIHRoZSBpbml0aWFsaXplciBmdW5jdGlvbiBpc24ndCBn
b2luZyB0byBuZWVkIGEgaG9tZSBvYmplY3QgKG5vIGV2YWwgb3Igc3VwZXIgcHJvcGVydGllcykK
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTY4NjcKQEAgLTQ5NjIsMTYgKzQ5ODIsMjcgQEAgUmVnaXN0ZXJJRCogQ2xhc3NFeHByTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX25lZWRzTGV4aWNhbFNjb3BlKSB7Ci0gICAgICAg
IGlmICghbV9uYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBWYXJpYWJsZSBjbGFzc05hbWVW
YXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9uYW1lKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGNsYXNzTmFtZVZhci5pc1Jlc29sdmVkKCkpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgY2xhc3NO
YW1lVmFyKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQo
KSwgY2xhc3NOYW1lVmFyLCBjb25zdHJ1Y3Rvci5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kLCBJbml0
aWFsaXphdGlvbk1vZGU6OkluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBnZW5l
cmF0b3IucG9wTGV4aWNhbFNjb3BlKHRoaXMpOworICAgIGlmIChtX25lZWRzTGV4aWNhbFNjb3Bl
ICYmICFtX25hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgVmFyaWFibGUgY2xhc3NOYW1lVmFyID0g
Z2VuZXJhdG9yLnZhcmlhYmxlKG1fbmFtZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNz
TmFtZVZhci5pc1Jlc29sdmVkKCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUg
PSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCBjbGFzc05hbWVWYXIpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIGNsYXNzTmFtZVZhciwg
Y29uc3RydWN0b3IuZ2V0KCksIFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6YXRpb25Nb2RlOjpJ
bml0aWFsaXphdGlvbik7CisgICAgfQorCisgICAgaWYgKCFzdGF0aWNGaWVsZExvY2F0aW9ucy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHN0YXRpY0ZpZWxkSW5pdGlh
bGl6ZXIgPSBnZW5lcmF0b3IuZW1pdE5ld0NsYXNzRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgV1RGTW92ZShzdGF0aWNGaWVsZExvY2F0aW9ucyksIG1f
Y2xhc3NIZXJpdGFnZSk7CisgICAgICAgIC8vIEZJWE1FOiBTa2lwIHRoaXMgaWYgdGhlIGluaXRp
YWxpemVyIGZ1bmN0aW9uIGlzbid0IGdvaW5nIHRvIG5lZWQgYSBob21lIG9iamVjdCAobm8gZXZh
bCBvciBzdXBlciBwcm9wZXJ0aWVzKQorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk2ODY3CisgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVy
YXRvciwgc3RhdGljRmllbGRJbml0aWFsaXplci5nZXQoKSwgY29uc3RydWN0b3IuZ2V0KCkpOwor
CisgICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51bGxwdHIpOworICAgICAg
ICBnZW5lcmF0b3IubW92ZShhcmdzLnRoaXNSZWdpc3RlcigpLCBjb25zdHJ1Y3Rvci5nZXQoKSk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHN0
YXRpY0ZpZWxkSW5pdGlhbGl6ZXIuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgcG9z
aXRpb24oKSwgcG9zaXRpb24oKSwgcG9zaXRpb24oKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKICAg
ICB9CiAKKyAgICBpZiAobV9uZWVkc0xleGljYWxTY29wZSkKKyAgICAgICAgZ2VuZXJhdG9yLnBv
cExleGljYWxTY29wZSh0aGlzKTsKKwogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZShnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGNvbnN0cnVjdG9yLmdldCgpKSwgY29uc3RydWN0b3Iu
Z2V0KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAppbmRleCBjMDdmZGUwNzk5MGIuLmIwNTE3YmQ5NzdjMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0x
MTcsNyArMTE3LDcgQEAgSlNWYWx1ZSBldmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBFQ01BTW9kZSBlY21hTW8KICAgICB9CiAKICAgICBFdmFs
Q29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlOwotICAgIGlmIChjYWxsZXJVbmxpbmtlZENvZGVC
bG9jay0+cGFyc2VNb2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlh
bGl6ZXJNb2RlKQorICAgIGlmIChjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+cGFyc2VNb2RlKCkg
PT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKQogICAgICAgICBl
dmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Okluc3RhbmNlRmllbGRFdmFsQ29udGV4
dDsKICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uUGFyc2VNb2RlKGNhbGxlclVubGlua2VkQ29kZUJs
b2NrLT5wYXJzZU1vZGUoKSkpCiAgICAgICAgIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0
VHlwZTo6RnVuY3Rpb25FdmFsQ29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
aAppbmRleCA3MzU4YmIzMjUyN2UuLjE3MDk3ZWE5ZjI3MCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaApAQCAtNzM4LDYgKzczOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIGlzSW5zdGFuY2VDbGFzc1Byb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2xhc3NFbGVtZW50VGFnPihtX2NsYXNzRWxlbWVudFRhZykgPT0gQ2xhc3NFbGVtZW50VGFn
OjpJbnN0YW5jZTsgfQogICAgICAgICBib29sIGlzQ2xhc3NGaWVsZCgpIGNvbnN0IHsgcmV0dXJu
IGlzQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGluZygpOyB9CiAgICAgICAgIGJv
b2wgaXNJbnN0YW5jZUNsYXNzRmllbGQoKSBjb25zdCB7IHJldHVybiBpc0luc3RhbmNlQ2xhc3NQ
cm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGluZygpOyB9CisgICAgICAgIGJvb2wgaXNTdGF0
aWNDbGFzc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gaXNTdGF0aWNDbGFzc1Byb3BlcnR5KCkgJiYg
IW5lZWRzU3VwZXJCaW5kaW5nKCk7IH0KICAgICAgICAgYm9vbCBpc092ZXJyaWRkZW5CeUR1cGxp
Y2F0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNPdmVycmlkZGVuQnlEdXBsaWNhdGU7IH0KICAgICAg
ICAgYm9vbCBpc1ByaXZhdGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiBQcml2YXRlOyB9CiAg
ICAgICAgIGJvb2wgaGFzQ29tcHV0ZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9u
OyB9CkBAIC03ODIsMTYgKzc4MywyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAg
ICAgICBib29sIGhhc0luc3RhbmNlRmllbGRzKCkgY29uc3Q7CiAKKyAgICAgICAgYm9vbCBpc1N0
YXRpY0NsYXNzRmllbGQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9u
b2RlLT5pc1N0YXRpY0NsYXNzRmllbGQoKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBi
b29sIHNob3VsZENyZWF0ZUxleGljYWxTY29wZUZvckNsYXNzKFByb3BlcnR5TGlzdE5vZGUqKTsK
IAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qKTsKKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCosIFJlZ2lzdGVySUQqLCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiwgVmVjdG9yPEpTVGV4dFBv
c2l0aW9uPiopOwogCiAgICAgICAgIHZvaWQgZW1pdERlY2xhcmVQcml2YXRlRmllbGROYW1lcyhC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqIHNjb3BlKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QgPSBudWxscHRyKSBmaW5hbAogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZW1pdEJ5dGVjb2RlKGdlbmVyYXRvciwgZHN0LCBudWxscHRyLCBudWxscHRy
KTsKKyAgICAgICAgICAgIHJldHVybiBlbWl0Qnl0ZWNvZGUoZ2VuZXJhdG9yLCBkc3QsIG51bGxw
dHIsIG51bGxwdHIsIG51bGxwdHIpOwogICAgICAgICB9CiAgICAgICAgIHZvaWQgZW1pdFB1dENv
bnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiwgUHJvcGVydHlO
b2RlJik7CiAgICAgICAgIHZvaWQgZW1pdFNhdmVDb21wdXRlZEZpZWxkTmFtZShCeXRlY29kZUdl
bmVyYXRvciYsIFByb3BlcnR5Tm9kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuY3BwCmluZGV4IDUwMDE0MGM1YzNhYi4uMGYxOGMxNWFjY2E3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAgUGFyc2VyPExleGVy
VHlwZT46On5QYXJzZXIoKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotRXhw
ZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlSW5uZXJSZXN1bHQsIFN0cmlu
Zz4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlSW5uZXIoY29uc3QgSWRlbnRpZmllciYgY2FsbGVl
TmFtZSwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgUGFyc2luZ0NvbnRleHQgcGFyc2luZ0Nv
bnRleHQsIE9wdGlvbmFsPGludD4gZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3Np
dGlvbiwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogaW5zdGFuY2VGaWVsZExvY2F0aW9u
cykKK0V4cGVjdGVkPHR5cGVuYW1lIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZUlubmVyUmVzdWx0
LCBTdHJpbmc+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKGNvbnN0IElkZW50aWZpZXIm
IGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFBhcnNpbmdDb250ZXh0IHBh
cnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJz
RW5kUG9zaXRpb24sIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGNsYXNzRmllbGRMb2Nh
dGlvbnMpCiB7CiAgICAgQVNUQnVpbGRlciBjb250ZXh0KGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwg
bV9wYXJzZXJBcmVuYSwgY29uc3RfY2FzdDxTb3VyY2VDb2RlKj4obV9zb3VyY2UpKTsKICAgICBT
Y29wZVJlZiBzY29wZSA9IGN1cnJlbnRTY29wZSgpOwpAQCAtMjIyLDcgKzIyMiw3IEBAIEV4cGVj
dGVkPHR5cGVuYW1lIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZUlubmVyUmVzdWx0LCBTdHJpbmc+
IFBhcnNlcjxMZXhlclR5cGU+CiAgICAgICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVy
PiBmdW5jdGlvbkluZm87CiAgICAgICAgIGlmIChpc0dlbmVyYXRvck9yQXN5bmNGdW5jdGlvbkJv
ZHlQYXJzZU1vZGUocGFyc2VNb2RlKSkKICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBjcmVhdGVH
ZW5lcmF0b3JQYXJhbWV0ZXJzKGNvbnRleHQsIGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJDb3VudCk7
Ci0gICAgICAgIGVsc2UgaWYgKHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNl
RmllbGRJbml0aWFsaXplck1vZGUpCisgICAgICAgIGVsc2UgaWYgKHBhcnNlTW9kZSA9PSBTb3Vy
Y2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpCiAgICAgICAgICAgICBwYXJh
bWV0ZXJzID0gY29udGV4dC5jcmVhdGVGb3JtYWxQYXJhbWV0ZXJMaXN0KCk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJzZUZ1bmN0aW9uUGFyYW1ldGVycyhjb250
ZXh0LCBwYXJzZU1vZGUsIGZ1bmN0aW9uSW5mbyk7CkBAIC0yNTYsOSArMjU2LDkgQEAgRXhwZWN0
ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlwZT46OlBhcnNlSW5uZXJSZXN1bHQsIFN0cmluZz4g
UGFyc2VyPExleGVyVHlwZT4KICAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VBc3lu
Y0dlbmVyYXRvckZ1bmN0aW9uU291cmNlRWxlbWVudHMoY29udGV4dCwgcGFyc2VNb2RlLCBpc0Fy
cm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiwgQ2hlY2tGb3JTdHJpY3RNb2RlKTsKICAgICAgICAg
ZWxzZSBpZiAocGFyc2luZ0NvbnRleHQgPT0gUGFyc2luZ0NvbnRleHQ6OkZ1bmN0aW9uQ29uc3Ry
dWN0b3IpCiAgICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBhcnNlU2luZ2xlRnVuY3Rpb24o
Y29udGV4dCwgZnVuY3Rpb25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbik7Ci0gICAg
ICAgIGVsc2UgaWYgKHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJ
bml0aWFsaXplck1vZGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbnN0YW5jZUZpZWxkTG9jYXRp
b25zICYmICFpbnN0YW5jZUZpZWxkTG9jYXRpb25zLT5pc0VtcHR5KCkpOwotICAgICAgICAgICAg
c291cmNlRWxlbWVudHMgPSBwYXJzZUluc3RhbmNlRmllbGRJbml0aWFsaXplclNvdXJjZUVsZW1l
bnRzKGNvbnRleHQsICppbnN0YW5jZUZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgZWxzZSBpZiAo
cGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZSkg
eworICAgICAgICAgICAgQVNTRVJUKGNsYXNzRmllbGRMb2NhdGlvbnMgJiYgIWNsYXNzRmllbGRM
b2NhdGlvbnMtPmlzRW1wdHkoKSk7CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBhcnNl
Q2xhc3NGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoY29udGV4dCwgKmNsYXNzRmllbGRM
b2NhdGlvbnMpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0g
cGFyc2VTb3VyY2VFbGVtZW50cyhjb250ZXh0LCBDaGVja0ZvclN0cmljdE1vZGUpOwogICAgIH0K
QEAgLTIxNzgsNyArMjE3OCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdBcnRpY2xlRm9y
RnVuY3Rpb25Nb2RlKFNvdXJjZVBhcnNlTW9kZSBtb2RlKQogICAgIGNhc2UgU291cmNlUGFyc2VN
b2RlOjpQcm9ncmFtTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlQW5hbHl6
ZU1vZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Ok1vZHVsZUV2YWx1YXRlTW9kZToKLSAg
ICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZToKKyAg
ICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZToKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuICIiOwogICAg
IH0KQEAgLTIyMjAsNyArMjIyMCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdGb3JGdW5j
dGlvbk1vZGUoU291cmNlUGFyc2VNb2RlIG1vZGUpCiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6
OlByb2dyYW1Nb2RlOgogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9k
ZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlRXZhbHVhdGVNb2RlOgotICAgIGNh
c2UgU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOgorICAgIGNh
c2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gIiI7CiAgICAgfQpA
QCAtMjgzOCw2ICsyODM4LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzRGVjbGFyYXQKIH0KIAogc3RhdGlj
IGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgaW5zdGFuY2VDb21wdXRlZE5hbWVQcmVmaXggeyAiaW5z
dGFuY2VDb21wdXRlZE5hbWUiX3MgfTsKK3N0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHN0
YXRpY0NvbXB1dGVkTmFtZVByZWZpeCB7ICJzdGF0aWNDb21wdXRlZE5hbWUiX3MgfTsKIAogdGVt
cGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUNsYXNzRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyhUcmVlQnVp
bGRlciYgY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cywgUGFy
c2VyQ2xhc3NJbmZvPFRyZWVCdWlsZGVyPiYgaW5mbykKQEAgLTI4ODEsNyArMjg4Miw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXhwcmVzc2lvbiBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VDbGFzcyhUCiAgICAgVHJlZUV4cHJlc3Npb24gY29uc3RydWN0b3IgPSAw
OwogICAgIFRyZWVQcm9wZXJ0eUxpc3QgY2xhc3NFbGVtZW50cyA9IDA7CiAgICAgVHJlZVByb3Bl
cnR5TGlzdCBjbGFzc0VsZW1lbnRzVGFpbCA9IDA7Ci0gICAgdW5zaWduZWQgbnVtQ29tcHV0ZWRG
aWVsZHMgPSAwOworICAgIHVuc2lnbmVkIG5leHRJbnN0YW5jZUNvbXB1dGVkRmllbGRJRCA9IDAs
IG5leHRTdGF0aWNDb21wdXRlZEZpZWxkSUQgPSAwOwogICAgIHdoaWxlICghbWF0Y2goQ0xPU0VC
UkFDRSkpIHsKICAgICAgICAgaWYgKG1hdGNoKFNFTUlDT0xPTikpIHsKICAgICAgICAgICAgIG5l
eHQoKTsKQEAgLTI5OTAsMTUgKzI5OTEsMjAgQEAgcGFyc2VNZXRob2Q6CiAgICAgICAgICAgICB0
eXBlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlOb2RlOjpUeXBlPih0eXBlIHwgKGlzR2V0dGVyID8g
UHJvcGVydHlOb2RlOjpHZXR0ZXIgOiBQcm9wZXJ0eU5vZGU6OlNldHRlcikpOwogICAgICAgICAg
ICAgcHJvcGVydHkgPSBwYXJzZUdldHRlclNldHRlcihjb250ZXh0LCB0eXBlLCBtZXRob2RTdGFy
dCwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCB0YWcpOwogICAgICAgICAgICAgZmFpbElmRmFsc2Uo
cHJvcGVydHksICJDYW5ub3QgcGFyc2UgdGhpcyBtZXRob2QiKTsKLSAgICAgICAgfSBlbHNlIGlm
IChPcHRpb25zOjp1c2VQdWJsaWNDbGFzc0ZpZWxkcygpICYmICFtYXRjaChPUEVOUEFSRU4pICYm
IHRhZyA9PSBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlICYmIHBhcnNlTW9kZSA9PSBTb3VyY2VQ
YXJzZU1vZGU6Ok1ldGhvZE1vZGUpIHsKKyAgICAgICAgfSBlbHNlIGlmIChPcHRpb25zOjp1c2VQ
dWJsaWNDbGFzc0ZpZWxkcygpICYmICFtYXRjaChPUEVOUEFSRU4pICYmICh0YWcgPT0gQ2xhc3NF
bGVtZW50VGFnOjpJbnN0YW5jZSB8fCBPcHRpb25zOjp1c2VQdWJsaWNTdGF0aWNDbGFzc0ZpZWxk
cygpKSAmJiBwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlKSB7CiAgICAg
ICAgICAgICBBU1NFUlQoIWlzR2V0dGVyICYmICFpc1NldHRlcik7CiAgICAgICAgICAgICBpZiAo
aWRlbnQpIHsKICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50ID09IHBy
b3BlcnR5TmFtZXMuY29uc3RydWN0b3IsICJDYW5ub3QgZGVjbGFyZSBjbGFzcyBmaWVsZCBuYW1l
ZCAnY29uc3RydWN0b3InIik7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKCpp
ZGVudCA9PSBwcm9wZXJ0eU5hbWVzLmNvbnN0cnVjdG9yUHJpdmF0ZUZpZWxkLCAiQ2Fubm90IGRl
Y2xhcmUgcHJpdmF0ZSBjbGFzcyBmaWVsZCBuYW1lZCAnI2NvbnN0cnVjdG9yJyIpOworICAgICAg
ICAgICAgICAgIGlmICh0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpTdGF0aWMpCisgICAgICAgICAg
ICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gcHJvcGVydHlOYW1lcy5wcm90
b3R5cGUsICJDYW5ub3QgZGVjbGFyZSBhIHN0YXRpYyBmaWVsZCBuYW1lZCAncHJvdG90eXBlJyIp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY29tcHV0ZWRQcm9wZXJ0eU5hbWUp
IHsKLSAgICAgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVu
YSgpLm1ha2VQcml2YXRlSWRlbnRpZmllcihtX3ZtLCBpbnN0YW5jZUNvbXB1dGVkTmFtZVByZWZp
eCwgbnVtQ29tcHV0ZWRGaWVsZHMrKyk7CisgICAgICAgICAgICAgICAgaWYgKHRhZyA9PSBDbGFz
c0VsZW1lbnRUYWc6Okluc3RhbmNlKQorICAgICAgICAgICAgICAgICAgICBpZGVudCA9ICZtX3Bh
cnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VQcml2YXRlSWRlbnRpZmllcihtX3ZtLCBp
bnN0YW5jZUNvbXB1dGVkTmFtZVByZWZpeCwgbmV4dEluc3RhbmNlQ29tcHV0ZWRGaWVsZElEKysp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9w
YXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlUHJpdmF0ZUlkZW50aWZpZXIobV92bSwg
c3RhdGljQ29tcHV0ZWROYW1lUHJlZml4LCBuZXh0U3RhdGljQ29tcHV0ZWRGaWVsZElEKyspOwog
ICAgICAgICAgICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9
IGNsYXNzU2NvcGUtPmRlY2xhcmVMZXhpY2FsVmFyaWFibGUoaWRlbnQsIHRydWUpOwogICAgICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGVjbGFyYXRpb25SZXN1bHQsIGRlY2xhcmF0aW9uUmVz
dWx0ID09IERlY2xhcmF0aW9uUmVzdWx0OjpWYWxpZCk7CiAgICAgICAgICAgICAgICAgY2xhc3NT
Y29wZS0+dXNlVmFyaWFibGUoaWRlbnQsIGZhbHNlKTsKQEAgLTMwNjUsMTMgKzMwNzEsMTQgQEAg
cGFyc2VNZXRob2Q6CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+Ci10ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50cyhUcmVlQnVpbGRl
ciYgY29udGV4dCwgY29uc3QgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYgaW5zdGFuY2VGaWVsZExv
Y2F0aW9ucykKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRz
IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzRmllbGRJbml0aWFsaXplclNvdXJjZUVsZW1l
bnRzKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiBj
bGFzc0ZpZWxkTG9jYXRpb25zKQogewogICAgIFRyZWVTb3VyY2VFbGVtZW50cyBzb3VyY2VFbGVt
ZW50cyA9IGNvbnRleHQuY3JlYXRlU291cmNlRWxlbWVudHMoKTsKICAgICBjdXJyZW50U2NvcGUo
KS0+c2V0SXNDbGFzc1Njb3BlKCk7CiAKICAgICB1bnNpZ25lZCBudW1Db21wdXRlZEZpZWxkcyA9
IDA7Ci0gICAgZm9yIChhdXRvIGxvY2F0aW9uIDogaW5zdGFuY2VGaWVsZExvY2F0aW9ucykgewor
ICAgIGJvb2wgaXNTdGF0aWNGaWVsZCA9IGZhbHNlOworICAgIGZvciAoYXV0byBsb2NhdGlvbiA6
IGNsYXNzRmllbGRMb2NhdGlvbnMpIHsKICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byB3b3Jy
eSBhYm91dCBoYXNMaW5lVGVybWluYXRvckJlZm9yZVRva2VuCiAgICAgICAgIC8vIG9uIGNsYXNz
IGZpZWxkcywgc28gd2Ugc2V0IHRoaXMgdmFsdWUgdG8gZmFsc2UuCiAgICAgICAgIExleGVyU3Rh
dGUgbGV4ZXJTdGF0ZSB7IGxvY2F0aW9uLm9mZnNldCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxv
Y2F0aW9uLmxpbmVTdGFydE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2NhdGlvbi5s
aW5lKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvY2F0aW9uLmxpbmUpLCBmYWxzZSB9OwpAQCAt
MzA4MCw2ICszMDg3LDE2IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJj
ZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlCiAgICAgICAgIEpTVG9r
ZW5Mb2NhdGlvbiBmaWVsZExvY2F0aW9uID0gdG9rZW5Mb2NhdGlvbigpOwogICAgICAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9IG51bGxwdHI7CiAgICAgICAgIERlZmluZUZpZWxkTm9kZTo6
VHlwZSB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpOYW1lOworCisgICAgICAgIGlmICht
YXRjaChSRVNFUlZFRF9JRl9TVFJJQ1QpICYmICptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3Zt
LnByb3BlcnR5TmFtZXMtPnN0YXRpY0tleXdvcmQpIHsKKyAgICAgICAgICAgIGlkZW50ID0gbV90
b2tlbi5tX2RhdGEuaWRlbnQ7CisgICAgICAgICAgICBBU1NFUlQoaWRlbnQpOworICAgICAgICAg
ICAgbmV4dCgpOworICAgICAgICAgICAgaWYgKG1hdGNoKFNFTUlDT0xPTikgfHwgbWF0Y2ggKEVR
VUFMKSB8fCBtYXRjaChDTE9TRUJSQUNFKSB8fCBtX2xleGVyLT5oYXNMaW5lVGVybWluYXRvckJl
Zm9yZVRva2VuKCkpCisgICAgICAgICAgICAgICAgZ290byB2YWxpZEZpZWxkOworICAgICAgICAg
ICAgaXNTdGF0aWNGaWVsZCA9IHRydWU7CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG1f
dG9rZW4ubV90eXBlKSB7CiAgICAgICAgIGNhc2UgUFJJVkFURU5BTUU6CiAgICAgICAgICAgICB0
eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpQcml2YXRlTmFtZTsKQEAgLTMxMDcsNyArMzEy
NCw5IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBh
cnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlCiAgICAgICAgICAgICBUcmVlRXhwcmVzc2lv
biBjb21wdXRlZFByb3BlcnR5TmFtZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4
dCk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShjb21wdXRlZFByb3BlcnR5TmFtZSwgIkNhbm5v
dCBwYXJzZSBjb21wdXRlZCBwcm9wZXJ0eSBuYW1lIik7CiAgICAgICAgICAgICBoYW5kbGVQcm9k
dWN0aW9uT3JGYWlsKENMT1NFQlJBQ0tFVCwgIl0iLCAiZW5kIiwgImNvbXB1dGVkIHByb3BlcnR5
IG5hbWUiKTsKLSAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFy
ZW5hKCkubWFrZVByaXZhdGVJZGVudGlmaWVyKG1fdm0sIGluc3RhbmNlQ29tcHV0ZWROYW1lUHJl
Zml4LCBudW1Db21wdXRlZEZpZWxkcysrKTsKKyAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2Vy
QXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZVByaXZhdGVJZGVudGlmaWVyKG1fdm0sCisgICAg
ICAgICAgICAgICAgaXNTdGF0aWNGaWVsZCA/IHN0YXRpY0NvbXB1dGVkTmFtZVByZWZpeCA6IGlu
c3RhbmNlQ29tcHV0ZWROYW1lUHJlZml4LAorICAgICAgICAgICAgICAgIG51bUNvbXB1dGVkRmll
bGRzKyspOwogICAgICAgICAgICAgdHlwZSA9IERlZmluZUZpZWxkTm9kZTo6VHlwZTo6Q29tcHV0
ZWROYW1lOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTMxMTcsNiArMzEzNiw3
IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlCiAgICAgICAgICAgICBmYWlsRHVlVG9VbmV4cGVj
dGVkVG9rZW4oKTsKICAgICAgICAgfQogCisgICAgdmFsaWRGaWVsZDoKICAgICAgICAgLy8gT25s
eSB2YWxpZCBjbGFzcyBmaWVsZHMgYXJlIGhhbmRsZWQgaW4gdGhpcyBmdW5jdGlvbi4KICAgICAg
ICAgQVNTRVJUKG1hdGNoKEVRVUFMKSB8fCBtYXRjaChTRU1JQ09MT04pIHx8IG1hdGNoKENMT1NF
QlJBQ0UpIHx8IG1fbGV4ZXItPmhhc0xpbmVUZXJtaW5hdG9yQmVmb3JlVG9rZW4oKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IGNlY2NmODE2MzI4ZC4uMGU4MjAz
NTk1Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTI2MCw3ICsy
NjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpHZXR0ZXJNb2Rl
OgogICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6U2V0dGVyTW9kZToKICAgICAgICAgY2Fz
ZSBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGU6Ci0gICAgICAgIGNhc2UgU291cmNlUGFyc2VN
b2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOgorICAgICAgICBjYXNlIFNvdXJjZVBh
cnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZToKICAgICAgICAgICAgIHNldElzRnVu
Y3Rpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0xNzEyLDcgKzE3MTIsNyBAQCBwcml2
YXRlOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRz
IHBhcnNlQXN5bmNGdW5jdGlvblNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiwgU291cmNlUGFy
c2VNb2RlLCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uLCBTb3VyY2VFbGVtZW50
c01vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1l
bnRzIHBhcnNlQXN5bmNHZW5lcmF0b3JGdW5jdGlvblNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVy
JiwgU291cmNlUGFyc2VNb2RlLCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uLCBT
b3VyY2VFbGVtZW50c01vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVNvdXJjZUVsZW1lbnRzIHBhcnNlU2luZ2xlRnVuY3Rpb24oVHJlZUJ1aWxkZXImLCBPcHRpb25h
bDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24pOwotICAgIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNlSW5zdGFu
Y2VGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXImLCBjb25zdCBWZWN0
b3I8SlNUZXh0UG9zaXRpb24+Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU291cmNlRWxlbWVudHMgcGFyc2VDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJTb3VyY2VFbGVtZW50
cyhUcmVlQnVpbGRlciYsIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mKTsKICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1lbnRMaXN0
SXRlbShUcmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3RpdmUsIHVuc2lnbmVk
KiBkaXJlY3RpdmVMaXRlcmFsTGVuZ3RoKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImLCBjb25zdCBJZGVu
dGlmaWVyKiYgZGlyZWN0aXZlLCB1bnNpZ25lZCogZGlyZWN0aXZlTGl0ZXJhbExlbmd0aCA9IG51
bGxwdHIpOwogICAgIGVudW0gY2xhc3MgRXhwb3J0VHlwZSB7IEV4cG9ydGVkLCBOb3RFeHBvcnRl
ZCB9OwpAQCAtMjA1Myw3ICsyMDUzLDcgQEAgcHJpdmF0ZToKIAogdGVtcGxhdGUgPHR5cGVuYW1l
IExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgotc3RkOjp1bmlxdWVfcHRy
PFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShQYXJzZXJFcnJvciYgZXJyb3Is
IGNvbnN0IElkZW50aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUs
IFBhcnNpbmdDb250ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29u
c3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQq
IHBhcmVudFNjb3BlUHJpdmF0ZU5hbWVzLCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBp
bnN0YW5jZUZpZWxkTG9jYXRpb25zKQorc3RkOjp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IFBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZShQYXJzZXJFcnJvciYgZXJyb3IsIGNvbnN0IElkZW50aWZpZXIm
IGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFBhcnNpbmdDb250ZXh0IHBh
cnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJz
RW5kUG9zaXRpb24sIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3BlUHJpdmF0
ZU5hbWVzLCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBjbGFzc0ZpZWxkTG9jYXRpb25z
KQogewogICAgIGludCBlcnJMaW5lOwogICAgIFN0cmluZyBlcnJNc2c7CkBAIC0yMDczLDcgKzIw
NzMsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExleGVyVHlwZT46OnBh
cnNlKFBhcnNlckVycm9yJiBlcnJvciwgY29uc3QgSQogICAgICAgICBwYXJlbnRTY29wZVByaXZh
dGVOYW1lcy0+Y29weVByaXZhdGVOYW1lc1RvKGN1cnJlbnRTY29wZSgpLT5sZXhpY2FsVmFyaWFi
bGVzKCkpOwogICAgIH0KIAotICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZUlubmVyKGNhbGxl
ZU5hbWUsIHBhcnNlTW9kZSwgcGFyc2luZ0NvbnRleHQsIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJh
bWV0ZXJzRW5kUG9zaXRpb24sIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgIGF1dG8gcGFy
c2VSZXN1bHQgPSBwYXJzZUlubmVyKGNhbGxlZU5hbWUsIHBhcnNlTW9kZSwgcGFyc2luZ0NvbnRl
eHQsIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNsYXNzRmllbGRM
b2NhdGlvbnMpOwogCiAgICAgaW50IGxpbmVOdW1iZXIgPSBtX2xleGVyLT5saW5lTnVtYmVyKCk7
CiAgICAgYm9vbCBsZXhFcnJvciA9IG1fbGV4ZXItPnNhd0Vycm9yKCk7CkBAIC0yMTU4LDcgKzIx
NTgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoCiAgICAgRXZhbENvbnRl
eHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZSwKICAgICBEZWJ1
Z2dlclBhcnNlRGF0YSogZGVidWdnZXJQYXJzZURhdGEgPSBudWxscHRyLAogICAgIGNvbnN0IFZh
cmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3BlUHJpdmF0ZU5hbWVzID0gbnVsbHB0ciwKLSAg
ICBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zID0g
bnVsbHB0ciwKKyAgICBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBjbGFzc0ZpZWxkTG9j
YXRpb25zID0gbnVsbHB0ciwKICAgICBib29sIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbiA9IGZh
bHNlKQogewogICAgIEFTU0VSVCghc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZSgpLmlzTnVsbCgp
KTsKQEAgLTIxNzAsNyArMjE3MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBwYXJz
ZSgKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcmVzdWx0OwogICAgIGlmIChzb3Vy
Y2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXM4Qml0KCkpIHsKICAgICAgICAgUGFyc2VyPExleGVy
PExDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3Jp
cHRNb2RlLCBwYXJzZU1vZGUsIHN1cGVyQmluZGluZywgZGVmYXVsdENvbnN0cnVjdG9yS2luZEZv
clRvcExldmVsRnVuY3Rpb24sIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNFdmFsTm9kZTxQYXJzZWRO
b2RlPigpLCBldmFsQ29udGV4dFR5cGUsIGRlYnVnZ2VyUGFyc2VEYXRhLCBpc0luc2lkZU9yZGlu
YXJ5RnVuY3Rpb24pOwotICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4o
ZXJyb3IsIG5hbWUsIHBhcnNlTW9kZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpID8gUGFyc2lu
Z0NvbnRleHQ6OkV2YWwgOiBQYXJzaW5nQ29udGV4dDo6UHJvZ3JhbSwgV1RGOjpudWxsb3B0LCBw
YXJlbnRTY29wZVByaXZhdGVOYW1lcywgaW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7CisgICAgICAg
IHJlc3VsdCA9IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvciwgbmFtZSwgcGFyc2VNb2Rl
LCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCkgPyBQYXJzaW5nQ29udGV4dDo6RXZhbCA6IFBhcnNp
bmdDb250ZXh0OjpQcm9ncmFtLCBXVEY6Om51bGxvcHQsIHBhcmVudFNjb3BlUHJpdmF0ZU5hbWVz
LCBjbGFzc0ZpZWxkTG9jYXRpb25zKTsKICAgICAgICAgaWYgKHBvc2l0aW9uQmVmb3JlTGFzdE5l
d2xpbmUpCiAgICAgICAgICAgICAqcG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSA9IHBhcnNlci5w
b3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKCk7CiAgICAgICAgIGlmIChidWlsdGluTW9kZSA9PSBK
U1BhcnNlckJ1aWx0aW5Nb2RlOjpCdWlsdGluKSB7CkBAIC0yMTgzLDcgKzIxODMsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoCiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShkZWZhdWx0Q29uc3RydWN0b3JLaW5kRm9yVG9wTGV2ZWxGdW5jdGlv
biA9PSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsICJCdWlsdGluRXhlY3V0YWJsZXMncyBzcGVjaWFs
IGNvbnN0cnVjdG9ycyBzaG91bGQgYWx3YXlzIHVzZSBhIDgtYml0IHN0cmluZyIpOwogICAgICAg
ICBQYXJzZXI8TGV4ZXI8VUNoYXI+PiBwYXJzZXIodm0sIHNvdXJjZSwgYnVpbHRpbk1vZGUsIHN0
cmljdE1vZGUsIHNjcmlwdE1vZGUsIHBhcnNlTW9kZSwgc3VwZXJCaW5kaW5nLCBkZWZhdWx0Q29u
c3RydWN0b3JLaW5kRm9yVG9wTGV2ZWxGdW5jdGlvbiwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0V2
YWxOb2RlPFBhcnNlZE5vZGU+KCksIGV2YWxDb250ZXh0VHlwZSwgZGVidWdnZXJQYXJzZURhdGEs
IGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbik7Ci0gICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJz
ZTxQYXJzZWROb2RlPihlcnJvciwgbmFtZSwgcGFyc2VNb2RlLCBpc0V2YWxOb2RlPFBhcnNlZE5v
ZGU+KCkgPyBQYXJzaW5nQ29udGV4dDo6RXZhbCA6IFBhcnNpbmdDb250ZXh0OjpQcm9ncmFtLCBX
VEY6Om51bGxvcHQsIHBhcmVudFNjb3BlUHJpdmF0ZU5hbWVzLCBpbnN0YW5jZUZpZWxkTG9jYXRp
b25zKTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yLCBu
YW1lLCBwYXJzZU1vZGUsIGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4oKSA/IFBhcnNpbmdDb250ZXh0
OjpFdmFsIDogUGFyc2luZ0NvbnRleHQ6OlByb2dyYW0sIFdURjo6bnVsbG9wdCwgcGFyZW50U2Nv
cGVQcml2YXRlTmFtZXMsIGNsYXNzRmllbGRMb2NhdGlvbnMpOwogICAgICAgICBpZiAocG9zaXRp
b25CZWZvcmVMYXN0TmV3bGluZSkKICAgICAgICAgICAgICpwb3NpdGlvbkJlZm9yZUxhc3ROZXds
aW5lID0gcGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUoKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmgKaW5kZXggZWFmZmRlMjFjMTU5Li43
OTUxOGEzMDU0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyTW9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVz
LmgKQEAgLTY2LDcgKzY2LDcgQEAgZW51bSBjbGFzcyBTb3VyY2VQYXJzZU1vZGUgOiB1aW50OF90
IHsKICAgICBBc3luY0dlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGUgPSAxNiwKICAgICBBc3lu
Y0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlICAgPSAxNywKICAgICBHZW5lcmF0b3JXcmFwcGVy
TWV0aG9kTW9kZSAgICAgICAgPSAxOCwKLSAgICBJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2Rl
ICAgICAgPSAxOSwKKyAgICBDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlICAgICAgICAgPSAxOSwK
IH07CiAKIGNsYXNzIFNvdXJjZVBhcnNlTW9kZVNldCB7IApAQCAtMTE2LDcgKzExNiw3IEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBpc0Z1bmN0aW9uUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBwYXJz
ZU1vZGUpCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JCb2R5TW9kZSwK
ICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1v
ZGUsCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyTWV0aG9k
TW9kZSwKLSAgICAgICAgU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJN
b2RlKS5jb250YWlucyhwYXJzZU1vZGUpOworICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkNsYXNz
RmllbGRJbml0aWFsaXplck1vZGUpLmNvbnRhaW5zKHBhcnNlTW9kZSk7CiB9IAogCiBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNBc3luY0Z1bmN0aW9uUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBwYXJz
ZU1vZGUpIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25Qcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuY3BwCmluZGV4IDMzMjhkZjZjYzM5Ny4uMTRmMzczYThmYTAzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCkBA
IC0xMTAsNyArMTEwLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uUHJvdG9G
dW5jVG9TdHJpbmcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZToK
LSAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1v
ZGU6CisgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJN
b2RlOgogICAgICAgICAgICAgZnVuY3Rpb25IZWFkZXIgPSAiIjsKICAgICAgICAgICAgIGJyZWFr
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCmluZGV4
IDMxZGQ4NzMyZTllMi4uMGZkZDliZmU1ZjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmNwcApAQCAtNDIxLDcgKzQyMSw3IEBAIEpTQ19ERUZJTkVfQ1VT
VE9NX0dFVFRFUihjYWxsZXJHZXR0ZXIsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWCiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBl
ckZ1bmN0aW9uTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JX
cmFwcGVyTWV0aG9kTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yV3Jh
cHBlck1ldGhvZE1vZGU6Ci0gICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJ
bml0aWFsaXplck1vZGU6CisgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0
aWFsaXplck1vZGU6CiAgICAgICAgIGlmICghZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpLT5pc0lu
U3RyaWN0Q29udGV4dCgpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxs
ZXIpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJGdW5jdGlvbi5jYWxsZXIgdXNlZCB0byByZXRyaWV2ZSBzdHJpY3Qg
Y2FsbGVyIl9zKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3Qu
aAppbmRleCBhMTAzZWY4YzEzZTMuLjU2YzA5MjBhYTFhZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCkBAIC01MjUsNiArNTI1LDcgQEAgSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihEb3VibGUsIGFsbG93SG9pc3Rp
bmdMSUNNUHJvYmFiaWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBl
eHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VKSVRDYWdlLCBjYW5Vc2VKSVRDYWdlKCksIE5v
cm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNlUHVibGljU3RhdGljQ2xhc3NGaWVsZHMs
IGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwdWJs
aWMgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKIAogZW51bSBPcHRpb25F
cXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKLS0gCjIuMjguMAoK
</data>
<flag name="review"
          id="430963"
          type_id="1"
          status="-"
          setter="ysuzuki"
    />
    <flag name="commit-queue"
          id="430964"
          type_id="3"
          status="-"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414315</attachid>
            <date>2020-11-17 01:01:06 -0800</date>
            <delta_ts>2020-11-17 13:38:01 -0800</delta_ts>
            <desc>Add support for static public fields, v10</desc>
            <filename>0001-JSC-Add-support-for-static-public-class-fields.patch</filename>
            <type>text/plain</type>
            <size>71817</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA0OGM4MDI2MTE3Zjg4NzM1YTczMGY4YzEzYTE2OTIyNzlkNTAwNWM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/WGFuPTIwTD1DMz1CM3Blej89IDx4YW5AaWdh
bGlhLmNvbT4KRGF0ZTogVGh1LCAxNiBBcHIgMjAyMCAxODoyMToxMyArMDIwMApTdWJqZWN0OiBb
UEFUQ0hdIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZpZWxkcwog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA5NQoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpKU1Rlc3RzOgoKRW5hYmxlIHN0YXRpYyBwdWJsaWMgZmllbGRz
LCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJvbSB0aGUKVjggcHJvamVjdC4gQWxzbyBz
cGxpdCB0aGUgc3VwcG9ydCBjb2RlIGludG8gYSBzZXBhcmF0ZSBmaWxlCihoYXJtb255LXN1cHBv
cnQuanMpIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgoKKiB0ZXN0MjYyL2NvbmZpZy55YW1sOiBlbmFi
bGUgc3RhdGljIHB1YmxpYyBmaWVsZHMuCiogc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255Lmpz
OiB1c2UgdGhlIG5ldyBzdXBwb3J0IGZpbGUuCiogc3RyZXNzL2NsYXNzLWZpZWxkcy1zdGF0aWMt
aGFybW9ueS5qczogQWRkZWQuCiogc3RyZXNzL3Jlc291cmNlcy9oYXJtb255LXN1cHBvcnQuanM6
IEFkZGVkLgoKU291cmNlL0phdmFTY3JpcHRDb3JlOgoKQWRkIHN1cHBvcnQgZm9yIHN0YXRpYyBw
dWJsaWMgY2xhc3MgZmllbGRzLiBXZSBjYW4gcmV1c2UgbW9zdCBvZgp0aGUgZXhpc3RpbmcgbWFj
aGluZXJ5IGF2YWlsYWJsZSBmb3IgaW5zdGFuY2UgZmllbGRzLiBMaWtlCmluc3RhbmNlIGZpZWxk
cywgc3RhdGljIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBhIHN5bnRoZXRpYwpmdW5jdGlv
bi4gVGhpcyBpcyBkb25lIHRvIGFsbG93IHVzIHRvIHRyaXZpYWxseSBmb2xsb3cgdGhlIHNjb3Bp
bmcKcnVsZXMgaW4gdGhlIHNwZWMuIEFzIGl0IGhhcHBlbnMgd2l0aCBpbnN0YW5jZSBmaWVsZHMg
dGhpcyBjb3VsZApiZSBpbmxpbmVkIGluIGEgZnV0dXJlIHBhdGNoLgoKQSBsb3Qgb2Ygc21hbGwg
Y2hhbmdlcyBpbiBtYW55IGZpbGVzIGFyZSBqdXN0IGEgbWF0dGVyIG9mIGRvaW5nCnMvaW5zdGFu
Y2UvY2xhc3MvIGZvciB2YXJpYWJsZXMgcmVsYXRlZCB0byBjbGFzcyBmaWVsZHMsIHdoaWNoCmJl
Zm9yZSB3ZXJlIGFzc3VtaW5nIHRoZXJlIGFyZSBvbmx5IGluc3RhbmNlIGZpZWxkcyBpbXBsZW1l
bnRlZC4KCiogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgooSlNDOjpn
ZW5lcmF0ZVVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spOiBkbyBzL2luc3RhbmNlRmllbGQvY2xh
c3NGaWVsZC8uCiogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDogZGl0dG8u
CiogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXROZXdDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbik6IGRpdHRvLgoqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOiBkaXR0bywgcGx1cyBhZGQgYSBwYXJhbWV0
ZXIKZm9yIHN0YXRpYyBmaWVsZCBsb2NhdGlvbnMgaW4gZW1pdERlZmluZUNsYXNzRWxlbWVudHMu
CiogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CihKU0M6OlByb3BlcnR5TGlzdE5vZGU6
OmVtaXRCeXRlY29kZSk6IHNhdmUgc3RhdGljIGZpZWxkcwpsb2NhdGlvbnMgd2hlbiBnb2luZyB0
aHJvdWdoIHRoZSBwcm9wZXJ0eSBsaXN0LgooSlNDOjpQcm9wZXJ0eUxpc3ROb2RlOjplbWl0U2F2
ZUNvbXB1dGVkRmllbGROYW1lKTogY29uc2lkZXIKc3RhdGljIGZpZWxkcyBoZXJlIHRvby4KKEpT
Qzo6Q2xhc3NFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKTogY2FsbCB0aGUgaW5pdGlhbGl6ZXIgZm9y
CnN0YXRpYyBmaWVsZHMgYXMgdGhlIHZlcnkgbGFzdCBhY3Rpb24gb2YgdGhlIGNsYXNzIGNyZWF0
aW9uLgoqIHBhcnNlci9BU1RCdWlsZGVyLmg6CihKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZURlZmlu
ZUZpZWxkKTogZmllbGQgbm9kZXMgY2FuIGJlIHN0YXRpYwp0b28gbm93LgoqIHBhcnNlci9Ob2Rl
Q29uc3RydWN0b3JzLmg6CihKU0M6OkRlZmluZUZpZWxkTm9kZTo6RGVmaW5lRmllbGROb2RlKTog
ZGl0dG8uCiogcGFyc2VyL05vZGVzLmg6IGRpdHRvLgoqIHBhcnNlci9QYXJzZXIuY3BwOgooSlND
OjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcik6IHMvaW5zdGFuY2VGaWVsZC9jbGFzc0Zp
ZWxkLwooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyk6IGNvbnNpZGVyIHN0YXRp
YyBmaWVsZHMuCihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3RhbmNlRmllbGRJbml0
aWFsaXplclNvdXJjZUVsZW1lbnRzKToKcy9pbnN0YW5jZUZpZWxkL2NsYXNzRmllbGQvLCBhbmQg
Y29uc2lkZXIgc3RhdGljIGZpZWxkcy4KKiBwYXJzZXIvUGFyc2VyLmg6CihKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZSk6IHMvaW5zdGFuY2VGaWVsZC9jbGFzc0ZpZWxkLwooSlNDOjpwYXJz
ZSk6IGRpdHRvLgoqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CihKU0M6OkpTRnVuY3Rpb246OnNl
dEZ1bmN0aW9uTmFtZSk6IHMvaW5zdGFuY2VGaWVsZC9jbGFzc0ZpZWxkLwoqIHJ1bnRpbWUvT3B0
aW9uc0xpc3QuaDogYWRkIG9wdGlvbiB0byBlbmFibGUvZGlzYWJsZSBzdGF0aWMgcHVibGljIGZp
ZWxkcy4KLS0tCiBKU1Rlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgMTYgKwogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanMgICAgICAgIHwg
MTY1ICstLS0tLQogSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255Lmpz
IHwgNTAzICsrKysrKysrKysrKysrKysrKwogSlNUZXN0cy9zdHJlc3MvcmVzb3VyY2VzL2hhcm1v
bnktc3VwcG9ydC5qcyAgIHwgMTk2ICsrKysrKysKIEpTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFt
bCAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgIHwgIDUwICsrCiAuLi4vYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuY3BwICAgfCAgIDQgKy0KIC4uLi9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZS5oICAgICB8ICAxMiArLQogLi4uL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAgICAgICAgIHwgIDEyICstCiAuLi4vYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmggICAgICAgICAgfCAgIDYgKy0KIC4uLi9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cCAgICAgICAgICAgICB8ICA2NSArKy0KIC4uLi9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAg
ICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5oICAgICAgICAgIHwgIDEwICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5jcHAgICAgICAgfCAxMTggKystLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaCAgICAgICAgIHwgIDE0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ck1vZGVzLmggICAgfCAgIDQgKy0KIC4uLi9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcCAg
ICAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5jcHAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oICAgfCAgIDEgKwogMTkgZmlsZXMgY2hhbmdlZCwgOTI2IGluc2VydGlvbnMoKyksIDI1
OCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1m
aWVsZHMtc3RhdGljLWhhcm1vbnkuanMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rlc3RzL3N0cmVz
cy9yZXNvdXJjZXMvaGFybW9ueS1zdXBwb3J0LmpzCgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFu
Z2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA4ZDg3NmVlNDg4OWEuLmExOTcxN2NjMjYy
MCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOSBAQAorMjAyMC0xMS0xNSAgWGFuIEzDs3BleiAgPHhhbkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZp
ZWxkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0
MDk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5h
YmxlIHN0YXRpYyBwdWJsaWMgZmllbGRzLCBhbmQgaW1wb3J0IG5ldyBzdHJlc3MgdGVzdHMgZnJv
bSB0aGUKKyAgICAgICAgVjggcHJvamVjdC4gQWxzbyBzcGxpdCB0aGUgc3VwcG9ydCBjb2RlIGlu
dG8gYSBzZXBhcmF0ZSBmaWxlCisgICAgICAgIChoYXJtb255LXN1cHBvcnQuanMpIHRvIGF2b2lk
IGR1cGxpY2F0aW9uLgorCisgICAgICAgICogdGVzdDI2Mi9jb25maWcueWFtbDogZW5hYmxlIHN0
YXRpYyBwdWJsaWMgZmllbGRzLgorICAgICAgICAqIHN0cmVzcy9jbGFzcy1maWVsZHMtaGFybW9u
eS5qczogdXNlIHRoZSBuZXcgc3VwcG9ydCBmaWxlLgorICAgICAgICAqIHN0cmVzcy9jbGFzcy1m
aWVsZHMtc3RhdGljLWhhcm1vbnkuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9yZXNvdXJj
ZXMvaGFybW9ueS1zdXBwb3J0LmpzOiBBZGRlZC4KKwogMjAyMC0xMS0xNSAgU2VyZ2V5IFJ1YmFu
b3YgIDxjaGkxODdAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIFVwZGF0ZSB3YXNtIHNwZWMg
dGVzdHMKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255Lmpz
IGIvSlNUZXN0cy9zdHJlc3MvY2xhc3MtZmllbGRzLWhhcm1vbnkuanMKaW5kZXggMmZlYWM4MmRh
OTFhLi44NmY5MWMzYjAxZGUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxk
cy1oYXJtb255LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2NsYXNzLWZpZWxkcy1oYXJtb255Lmpz
CkBAIC0zMSwxNzAgKzMxLDcgQEAKIAogInVzZSBzdHJpY3QiOwogCi1mdW5jdGlvbiBjbGFzc09m
KG9iamVjdCkgewotICAgLy8gQXJndW1lbnQgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQu
Ci0gICB2YXIgc3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCk7
Ci0gICAvLyBTdHJpbmcgaGFzIGZvcm1hdCBbb2JqZWN0IDxDbGFzc05hbWU+XS4KLSAgIHJldHVy
biBzdHJpbmcuc3Vic3RyaW5nKDgsIHN0cmluZy5sZW5ndGggLSAxKTsKLX0KLQotLyoqCi0gKiBD
b21wYXJlcyB0d28gb2JqZWN0cyBmb3Iga2V5L3ZhbHVlIGVxdWFsaXR5LgotICogUmV0dXJucyB0
cnVlIGlmIHRoZXkgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCi0gKi8KLWZ1bmN0aW9uIGRl
ZXBPYmplY3RFcXVhbHMoYSwgYikgewotICB2YXIgYVByb3BzID0gT2JqZWN0LmtleXMoYSk7Ci0g
IGFQcm9wcy5zb3J0KCk7Ci0gIHZhciBiUHJvcHMgPSBPYmplY3Qua2V5cyhiKTsKLSAgYlByb3Bz
LnNvcnQoKTsKLSAgaWYgKCFkZWVwRXF1YWxzKGFQcm9wcywgYlByb3BzKSkgewotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotICBmb3IgKHZhciBpID0gMDsgaSA8IGFQcm9wcy5sZW5ndGg7IGkrKykg
ewotICAgIGlmICghZGVlcEVxdWFscyhhW2FQcm9wc1tpXV0sIGJbYVByb3BzW2ldXSkpIHsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qKgot
ICogQ29tcGFyZXMgdHdvIEphdmFTY3JpcHQgdmFsdWVzIGZvciB0eXBlIGFuZCB2YWx1ZSBlcXVh
bGl0eS4KLSAqIEl0IGNoZWNrcyBpbnRlcm5hbHMgb2YgYXJyYXlzIGFuZCBvYmplY3RzLgotICov
Ci1mdW5jdGlvbiBkZWVwRXF1YWxzKGEsIGIpIHsKLSAgaWYgKGEgPT09IGIpIHsKLSAgICAvLyBD
aGVjayBmb3IgLTAuCi0gICAgaWYgKGEgPT09IDApIHJldHVybiAoMSAvIGEpID09PSAoMSAvIGIp
OwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGlmICh0eXBlb2YgYSAhPSB0eXBlb2YgYikgcmV0
dXJuIGZhbHNlOwotICBpZiAodHlwZW9mIGEgPT0gJ251bWJlcicpIHJldHVybiBpc05hTihhKSAm
JiBpc05hTihiKTsKLSAgaWYgKHR5cGVvZiBhICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYSAhPT0g
J2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlOwotICAvLyBOZWl0aGVyIGEgbm9yIGIgaXMgcHJpbWl0
aXZlLgotICB2YXIgb2JqZWN0Q2xhc3MgPSBjbGFzc09mKGEpOwotICBpZiAob2JqZWN0Q2xhc3Mg
IT09IGNsYXNzT2YoYikpIHJldHVybiBmYWxzZTsKLSAgaWYgKG9iamVjdENsYXNzID09PSAnUmVn
RXhwJykgewotICAgIC8vIEZvciBSZWdFeHAsIGp1c3QgY29tcGFyZSBwYXR0ZXJuIGFuZCBmbGFn
cyB1c2luZyBpdHMgdG9TdHJpbmcuCi0gICAgcmV0dXJuIChhLnRvU3RyaW5nKCkgPT09IGIudG9T
dHJpbmcoKSk7Ci0gIH0KLSAgLy8gRnVuY3Rpb25zIGFyZSBvbmx5IGlkZW50aWNhbCB0byB0aGVt
c2VsdmVzLgotICBpZiAob2JqZWN0Q2xhc3MgPT09ICdGdW5jdGlvbicpIHJldHVybiBmYWxzZTsK
LSAgaWYgKG9iamVjdENsYXNzID09PSAnQXJyYXknKSB7Ci0gICAgdmFyIGVsZW1lbnRDb3VudCA9
IDA7Ci0gICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewotICAgICAg
aWYgKCFkZWVwRXF1YWxzKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwotICB9Ci0gIGlmIChvYmplY3RDbGFzcyA9PSAnU3RyaW5nJyB8fCBvYmplY3RD
bGFzcyA9PSAnTnVtYmVyJyB8fAotICAgICAgb2JqZWN0Q2xhc3MgPT0gJ0Jvb2xlYW4nIHx8IG9i
amVjdENsYXNzID09ICdEYXRlJykgewotICAgIGlmIChhLnZhbHVlT2YoKSAhPT0gYi52YWx1ZU9m
KCkpIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gZGVlcE9iamVjdEVxdWFscyhhLCBiKTsK
LX0KLQotLyoqCi0gKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGNvbnRhaW5pbmcgdGhlIHVzZXJfbWVz
c2FnZSAoaWYgYW55KSBhbmQgdGhlIHZhbHVlcy4KLSAqLwotZnVuY3Rpb24gZmFpbChleHBlY3Rl
ZCwgZm91bmQsIHVzZXJfbWVzc2FnZSA9ICcnKSB7Ci0gIC8vIFRPRE8oY2lyYSk6IFJlcGxhY2Ug
U3RyaW5nIHdpdGggUHJldHR5UHJpbnQgZm9yIG9iamVjdHMgYW5kIGFycmF5cy4KLSAgdmFyIG1l
c3NhZ2UgPSAnRmFpbHVyZScgKyAodXNlcl9tZXNzYWdlID8gJyAoJyArIHVzZXJfbWVzc2FnZSAr
ICcpJyA6ICcnKSArCi0gICAgICAnOiBleHBlY3RlZCA8JyArIFN0cmluZyhleHBlY3RlZCkgKyAn
PiwgZm91bmQgPCcgKyBTdHJpbmcoZm91bmQpICsgJz4uJzsKLSAgdGhyb3cgbmV3IEVycm9yKG1l
c3NhZ2UpOwotfQotCi0vKioKLSAqIFRocm93cyBpZiBvYmogaXMgbm90IG9mIGdpdmVuIHR5cGUu
Ci0gKi8KLWZ1bmN0aW9uIGFzc2VydEluc3RhbmNlb2Yob2JqLCB0eXBlKSB7Ci0gIGlmICghKG9i
aiBpbnN0YW5jZW9mIHR5cGUpKSB7Ci0gICAgdmFyIGFjdHVhbFR5cGVOYW1lID0gbnVsbDsKLSAg
ICB2YXIgYWN0dWFsQ29uc3RydWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKS5jb25z
dHJ1Y3RvcjsKLSAgICBpZiAodHlwZW9mIGFjdHVhbENvbnN0cnVjdG9yID09ICJmdW5jdGlvbiIp
IHsKLSAgICAgIGFjdHVhbFR5cGVOYW1lID0gYWN0dWFsQ29uc3RydWN0b3IubmFtZSB8fCBTdHJp
bmcoYWN0dWFsQ29uc3RydWN0b3IpOwotICAgIH0KLSAgICB0aHJvdyBuZXcgRXJyb3IoJ09iamVj
dCA8JyArIG9iaiArICc+IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiA8JyArCi0gICAgICAgICAgICAg
ICAgICAgICh0eXBlLm5hbWUgfHwgdHlwZSkgKyAnPicgKwotICAgICAgICAgICAgICAgICAgICAo
YWN0dWFsVHlwZU5hbWUgPyAnIGJ1dCBvZiA8ICcgKyBhY3R1YWxUeXBlTmFtZSArICc+JyA6ICcn
KSk7Ci0gIH0KLX0KLQotLyoqCi0gKiBUaHJvd3MgaWYgb2JqIGlzIG5vdCB0aGUgc2FtZSBhcyBl
eHBlY3RlZC4KLSAqLwotZnVuY3Rpb24gYXNzZXJ0U2FtZShleHBlY3RlZCwgZm91bmQsIG5hbWVf
b3B0KSB7Ci0gIGlmIChmb3VuZCA9PT0gZXhwZWN0ZWQpIHsKLSAgICBpZiAoZXhwZWN0ZWQgIT09
IDAgfHwgKDEgLyBleHBlY3RlZCkgPT09ICgxIC8gZm91bmQpKQotICAgICAgcmV0dXJuOwotICB9
IGVsc2UgaWYgKChleHBlY3RlZCAhPT0gZXhwZWN0ZWQpICYmIChmb3VuZCAhPT0gZm91bmQpKSB7
Ci0gICAgICByZXR1cm47Ci0gIH0KLSAgZmFpbChleHBlY3RlZCwgZm91bmQsIG5hbWVfb3B0KTsK
LX0KLQotLyoqCi0gKiBUaHJvd3MgaWYgdHdvIHZhcmlhYmxlcyBoYXZlIGRpZmZlcmVudCB0eXBl
cyBvciB2YWx1ZXMuCi0gKi8KLQotZnVuY3Rpb24gYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBmb3Vu
ZCwgdXNlcl9tZXNzYWdlID0gJycpIHsKLSAgaWYgKCFkZWVwRXF1YWxzKGV4cGVjdGVkLCBmb3Vu
ZCkpIHsKLSAgICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlKTsKLSAgfQotfQot
Ci0vKioKLSAqIFRocm93cyBpZiB0d28gdmFyaWFibGVzIGhhdmUgZXF1YWwgdHlwZXMgb3IgdmFs
dWVzLgotICovCi0KLWZ1bmN0aW9uIGFzc2VydE5vdEVxdWFscyhleHBlY3RlZCwgZm91bmQsIHVz
ZXJfbWVzc2FnZSA9ICcnKSB7Ci0gIGlmIChkZWVwRXF1YWxzKGV4cGVjdGVkLCBmb3VuZCkpIHsK
LSAgICBmYWlsKGV4cGVjdGVkLCBmb3VuZCwgdXNlcl9tZXNzYWdlKTsKLSAgfQotfQotCi0vKioK
LSAqIFRocm93cyBpZiB2YWx1ZSBpcyBmYWxzZS4KLSAqLwotZnVuY3Rpb24gYXNzZXJ0VHJ1ZSh2
YWx1ZSwgdXNlcl9tZXNzYWdlID0gJycpIHsKLSAgYXNzZXJ0RXF1YWxzKHRydWUsIHZhbHVlLCB1
c2VyX21lc3NhZ2UpOwotfQotCi0KLS8qKgotICogVGhyb3dzIGlmIHZhbHVlIGlzIHRydWUuCi0g
Ki8KLWZ1bmN0aW9uIGFzc2VydEZhbHNlKHZhbHVlLCB1c2VyX21lc3NhZ2UgPSAnJykgewotICBh
c3NlcnRFcXVhbHMoZmFsc2UsIHZhbHVlLCB1c2VyX21lc3NhZ2UpOwotfQotCi0vKioKLSAqIFJ1
bnMgY29kZSgpIGFuZCBhc3NlcnRzIHRoYXQgaXQgdGhyb3dzIHRoZSBzcGVjaWZpZWQgZXhjZXB0
aW9uLgotICovCi1mdW5jdGlvbiBhc3NlcnRUaHJvd3MoY29kZSwgdHlwZV9vcHQsIGNhdXNlX29w
dCkgewotICB0cnkgewotICAgIGlmICh0eXBlb2YgY29kZSA9PSAnZnVuY3Rpb24nKSB7Ci0gICAg
ICBjb2RlKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGV2YWwoY29kZSk7Ci0gICAgfQotICB9IGNh
dGNoIChlKSB7Ci0gICAgaWYgKHR5cGVvZiB0eXBlX29wdCA9PSAnZnVuY3Rpb24nKSB7Ci0gICAg
ICBhc3NlcnRJbnN0YW5jZW9mKGUsIHR5cGVfb3B0KTsKLSAgICB9Ci0gICAgaWYgKGFyZ3VtZW50
cy5sZW5ndGggPj0gMykgewotICAgICAgYXNzZXJ0RXF1YWxzKGNhdXNlX29wdCwgZS50eXBlLCAn
dGhyb3duIGV4Y2VwdGlvbiB0eXBlIG1pc21hdGNoJyk7Ci0gICAgfQotICAgIC8vIFN1Y2Nlc3Mu
Ci0gICAgcmV0dXJuOwotICB9Ci0gIHZhciBleHBlY3RlZCA9IGFyZ3VtZW50cy5sZW5ndGggPj0g
MyA/IGNhdXNlX29wdCA6Ci0gICAgICB0eXBlb2YgdHlwZV9vcHQgPT0gJ2Z1bmN0aW9uJyA/IHR5
cGVfb3B0IDogJ2FueSBleGNlcHRpb24nOwotICBmYWlsKGV4cGVjdGVkLCAnbm8gZXhjZXB0aW9u
JywgJ2V4cGVjdGVkIHRocm93biBleGNlcHRpb24nKTsKLX0KK2xvYWQoIi4vcmVzb3VyY2VzL2hh
cm1vbnktc3VwcG9ydC5qcyIpOwogCiB7CiAgIGNsYXNzIEMgewpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy9zdHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzIGIvSlNUZXN0cy9zdHJlc3Mv
Y2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uZmQ1ZDU5MmRiZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9z
dHJlc3MvY2xhc3MtZmllbGRzLXN0YXRpYy1oYXJtb255LmpzCkBAIC0wLDAgKzEsNTAzIEBACisv
L0AgcmVxdWlyZU9wdGlvbnMoIi0tdXNlUHVibGljU3RhdGljQ2xhc3NGaWVsZHM9MSIpCisvL0Ag
ZGVmYXVsdE5vRWFnZXJSdW4KKworLy8gQ29weXJpZ2h0IDIwMTcgdGhlIFY4IHByb2plY3QgYXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8g
bWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisv
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisv
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisidXNlIHN0cmljdCI7
CisKK2xvYWQoIi4vcmVzb3VyY2VzL2hhcm1vbnktc3VwcG9ydC5qcyIpOworCit7CisgIGNsYXNz
IEMgeworICAgIHN0YXRpYyBhOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5h
KTsKKyAgbGV0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEMs
ICdhJyk7CisgIGFzc2VydFRydWUoQy5oYXNPd25Qcm9wZXJ0eSgnYScpKTsKKyAgYXNzZXJ0VHJ1
ZShkZXNjcmlwdG9yLndyaXRhYmxlKTsKKyAgYXNzZXJ0VHJ1ZShkZXNjcmlwdG9yLmVudW1lcmFi
bGUpOworICBhc3NlcnRUcnVlKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKTsKKworICBsZXQgYyA9
IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmEpOworfQorCit7CisgIGxldCB4
ID0gJ2EnOworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYTsKKyAgICBzdGF0aWMgaGFzT3duUHJv
cGVydHkgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDE7IH0KKyAgICBzdGF0aWMgYiA9IHg7CisgICAg
c3RhdGljIGMgPSAxOworICB9CisKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQy5hKTsKKyAg
YXNzZXJ0RXF1YWxzKCdhJywgQy5iKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuYyk7CisgIGFzc2Vy
dEVxdWFscygxLCBDLmhhc093blByb3BlcnR5KCkpOworCisgIGxldCBjID0gbmV3IEM7CisgIGFz
c2VydEVxdWFscyh1bmRlZmluZWQsIGMuYSk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMu
Yik7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYyk7Cit9CisKK3sKKyAgYXNzZXJ0VGhy
b3dzKCgpID0+IHsKKyAgICBjbGFzcyBDIHsKKyAgICAgIHN0YXRpYyB4ID0gT2JqZWN0LmZyZWV6
ZSh0aGlzKTsKKyAgICAgIHN0YXRpYyBjID0gNDI7CisgICAgfQorICB9LCBUeXBlRXJyb3IpOwor
fQorCit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBjID0gdGhpczsKKyAgICBzdGF0aWMgZCA9
ICgpID0+IHRoaXM7CisgIH0KKworICBhc3NlcnRFcXVhbHMoQywgQy5jKTsKKyAgYXNzZXJ0RXF1
YWxzKEMsIEMuZCgpKTsKKworICBsZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZp
bmVkLCBjLmMpOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmQpOworfQorCit7CisgIGNs
YXNzIEMgeworICAgIHN0YXRpYyBjID0gMTsKKyAgICBzdGF0aWMgZCA9IHRoaXMuYzsKKyAgfQor
CisgIGFzc2VydEVxdWFscygxLCBDLmMpOworICBhc3NlcnRFcXVhbHMoMSwgQy5kKTsKKworICBs
ZXQgYyA9IG5ldyBDOworICBhc3NlcnRFcXVhbHModW5kZWZpbmVkLCBjLmMpOworICBhc3NlcnRF
cXVhbHModW5kZWZpbmVkLCBjLmQpOworfQorCit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBi
ID0gMTsKKyAgICBzdGF0aWMgYyA9ICgpID0+IHRoaXMuYjsKKyAgfQorCisgIGFzc2VydEVxdWFs
cygxLCBDLmIpOworICBhc3NlcnRFcXVhbHMoMSwgQy5jKCkpOworCisgIGxldCBjID0gbmV3IEM7
CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuYyk7Cit9CisKK3sKKyAgbGV0IHggPSAnYSc7
CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBiID0gMTsKKyAgICBzdGF0aWMgYyA9ICgpID0+IHRo
aXMuYjsKKyAgICBzdGF0aWMgZSA9ICgpID0+IHg7CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwg
Qy5iKTsKKyAgYXNzZXJ0RXF1YWxzKCdhJywgQy5lKCkpOworCisgIGxldCBhID0ge2IgOiAyIH07
CisgIGFzc2VydEVxdWFscygxLCBDLmMuY2FsbChhKSk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAg
YXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5iKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwg
Yy5jKTsKK30KKworeworICBsZXQgeCA9ICdhJzsKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMg
PSAxOworICAgIHN0YXRpYyBkID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmM7IH07CisgICAg
c3RhdGljIGUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHg7IH07CisgIH0KKworICBhc3NlcnRFcXVh
bHMoMSwgQy5jKTsKKyAgYXNzZXJ0RXF1YWxzKDEsIEMuZCgpKTsKKyAgYXNzZXJ0RXF1YWxzKCdh
JywgQy5lKCkpOworCisgIEMuYyA9IDI7CisgIGFzc2VydEVxdWFscygyLCBDLmQoKSk7CisKKyAg
bGV0IGEgPSB7YyA6IDMgfTsKKyAgYXNzZXJ0RXF1YWxzKDMsIEMuZC5jYWxsKGEpKTsKKworICBh
c3NlcnRUaHJvd3MoQy5kLmJpbmQodW5kZWZpbmVkKSk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAg
YXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5jKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwg
Yy5kKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgYy5lKTsKK30KKworeworICBjbGFzcyBD
IHsKKyAgICBzdGF0aWMgYyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMSB9OworICB9CisKKyAgYXNz
ZXJ0RXF1YWxzKCdjJywgQy5jLm5hbWUpOworfQorCit7CisgIGxldCBkID0gZnVuY3Rpb24oKSB7
IHJldHVybiBuZXcudGFyZ2V0OyB9CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBjID0gZDsKKyAg
fQorCisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIEMuYygpKTsKKyAgYXNzZXJ0RXF1YWxzKG5l
dyBkLCBuZXcgQy5jKCkpOworfQorCit7CisgIGNsYXNzIEMgeworICAgIHN0YXRpYyBjID0gKCkg
PT4gbmV3LnRhcmdldDsKKyAgfQorCisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIEMuYygpKTsK
K30KKworeworICAgY2xhc3MgQyB7CisgICAgIHN0YXRpYyBjID0gKCkgPT4geworICAgICAgIGxl
dCBiOworICAgICAgIGNsYXNzIEEgeworICAgICAgICAgY29uc3RydWN0b3IoKSB7CisgICAgICAg
ICAgIGIgPSBuZXcudGFyZ2V0OworICAgICAgICAgfQorICAgICAgIH07CisgICAgICAgbmV3IEE7
CisgICAgICAgYXNzZXJ0RXF1YWxzKEEsIGIpOworICAgICB9CisgIH0KKworICBDLmMoKTsKK30K
KworeworICBjbGFzcyBDIHsKKyAgICBzdGF0aWMgYyA9IG5ldy50YXJnZXQ7CisgIH0KKworICBh
c3NlcnRFcXVhbHModW5kZWZpbmVkLCBDLmMpOworfQorCit7CisgIGNsYXNzIEIgeworICAgIHN0
YXRpYyBkID0gMTsKKyAgICBzdGF0aWMgYiA9ICgpID0+IHRoaXMuZDsKKyAgfQorCisgIGNsYXNz
IEMgZXh0ZW5kcyBCIHsKKyAgICBzdGF0aWMgYyA9IHN1cGVyLmQ7CisgICAgc3RhdGljIGQgPSAo
KSA9PiBzdXBlci5kOworICAgIHN0YXRpYyBlID0gKCkgPT4gc3VwZXIuYigpOworICB9CisKKyAg
YXNzZXJ0RXF1YWxzKDEsIEMuYyk7CisgIGFzc2VydEVxdWFscygxLCBDLmQoKSk7CisgIGFzc2Vy
dEVxdWFscygxLCBDLmUoKSk7Cit9CisKK3sKKyAgbGV0IGZvbyA9IHVuZGVmaW5lZDsKKyAgY2xh
c3MgQiB7CisgICAgc3RhdGljIHNldCBkKHgpIHsKKyAgICAgIGZvbyA9IHg7CisgICAgfQorICB9
CisKKyAgY2xhc3MgQyBleHRlbmRzIEIgeworICAgIHN0YXRpYyBkID0gMjsKKyAgfQorCisgIGFz
c2VydEVxdWFscyh1bmRlZmluZWQsIGZvbyk7CisgIGFzc2VydEVxdWFscygyLCBDLmQpOworfQor
CisKK3sKKyAgbGV0IEMgID0gY2xhc3MgeworICAgIHN0YXRpYyBjOworICB9OworCisgIGFzc2Vy
dEVxdWFscygiQyIsIEMubmFtZSk7Cit9CisKK3sKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIGMg
PSBuZXcgQzsKKyAgfQorCisgIGFzc2VydFRydWUoQy5jIGluc3RhbmNlb2YgQyk7Cit9CisKKyhm
dW5jdGlvbiB0ZXN0KCkgeworICBmdW5jdGlvbiBtYWtlQygpIHsKKyAgICB2YXIgeCA9IDE7CisK
KyAgICByZXR1cm4gY2xhc3MgeworICAgICAgc3RhdGljIGEgPSAoKSA9PiAoKSA9PiB4OworICAg
IH0KKyAgfQorCisgIGxldCBDID0gbWFrZUMoKTsKKyAgbGV0IGYgPSBDLmEoKTsKKyAgYXNzZXJ0
RXF1YWxzKDEsIGYoKSk7Cit9KSgpCisKK3sKKyAgbGV0IGMgPSAiYyI7CisgIGNsYXNzIEMgewor
ICAgIHN0YXRpYyBbImEiXSA9IDE7CisgICAgc3RhdGljIFsiYiJdOworICAgIHN0YXRpYyBbY107
CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwgQy5hKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5l
ZCwgQy5iKTsKKyAgYXNzZXJ0RXF1YWxzKHVuZGVmaW5lZCwgQ1tjXSk7Cit9CisKK3sKKyAgbGV0
IGxvZyA9IFtdOworICBmdW5jdGlvbiBydW4oaSkgeworICAgIGxvZy5wdXNoKGkpOworICAgIHJl
dHVybiBpOworICB9CisKKyAgY2xhc3MgQyB7CisgICAgc3RhdGljIFtydW4oMSldID0gcnVuKDYp
OworICAgIHN0YXRpYyBbcnVuKDIpXSA9IHJ1big3KTsKKyAgICBbcnVuKDMpXSgpIHsgcnVuKDkp
O30KKyAgICBzdGF0aWMgW3J1big0KV0gPSBydW4oOCk7CisgICAgc3RhdGljIFtydW4oNSldKCkg
eyB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBub3QgZXhlY3V0ZScpO307CisgIH0KKworICBsZXQg
YyA9IG5ldyBDOworICBjWzNdKCk7CisgIGFzc2VydEVxdWFscyhbMSwgMiwgMywgNCwgNSwgNiwg
NywgOCwgOV0sIGxvZyk7Cit9CisKKworCitmdW5jdGlvbiB4KCkgeworCisgIC8vIFRoaXMgdGVz
dHMgbGF6eSBwYXJzaW5nLgorICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgbGV0IGxvZyA9IFtd
OworICAgIGZ1bmN0aW9uIHJ1bihpKSB7CisgICAgICBsb2cucHVzaChpKTsKKyAgICAgIHJldHVy
biBpOworICAgIH0KKworICAgIGNsYXNzIEMgeworICAgICAgc3RhdGljIFtydW4oMSldID0gcnVu
KDYpOworICAgICAgc3RhdGljIFtydW4oMildID0gcnVuKDcpOworICAgICAgW3J1bigzKV0oKSB7
IHJ1big5KTt9CisgICAgICBzdGF0aWMgW3J1big0KV0gPSBydW4oOCk7CisgICAgICBzdGF0aWMg
W3J1big1KV0oKSB7IHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5vdCBleGVjdXRlJyk7fTsKKyAg
ICB9CisKKyAgICBsZXQgYyA9IG5ldyBDOworICAgIGNbM10oKTsKKyAgICBhc3NlcnRFcXVhbHMo
WzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldLCBsb2cpOworICB9Cit9Cit4KCkoKTsKKworewor
ICBsZXQgbG9nID0gW107CisgIGZ1bmN0aW9uIHJ1bihpKSB7CisgICAgbG9nLnB1c2goaSk7Cisg
ICAgcmV0dXJuIGk7CisgIH0KKworICBjbGFzcyBDIHsKKyAgICBbcnVuKDEpXSA9IHJ1big3KTsK
KyAgICBbcnVuKDIpXSA9IHJ1big4KTsKKyAgICBbcnVuKDMpXSgpIHsgcnVuKDkpO30KKyAgICBz
dGF0aWMgW3J1big0KV0gPSBydW4oNik7CisgICAgW3J1big1KV0oKSB7IHRocm93IG5ldyBFcnJv
cignc2hvdWxkIG5vdCBleGVjdXRlJyk7fTsKKyAgfQorCisgIGxldCBjID0gbmV3IEM7CisgIGNb
M10oKTsKKyAgYXNzZXJ0RXF1YWxzKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XSwgbG9nKTsK
K30KKworZnVuY3Rpb24geSgpIHsKKyAgLy8gVGhpcyB0ZXN0cyBsYXp5IHBhcnNpbmcuCisgIHJl
dHVybiBmdW5jdGlvbigpIHsKKyAgICBsZXQgbG9nID0gW107CisgICAgZnVuY3Rpb24gcnVuKGkp
IHsKKyAgICAgIGxvZy5wdXNoKGkpOworICAgICAgcmV0dXJuIGk7CisgICAgfQorCisgICAgY2xh
c3MgQyB7CisgICAgICBbcnVuKDEpXSA9IHJ1big3KTsKKyAgICAgIFtydW4oMildID0gcnVuKDgp
OworICAgICAgW3J1bigzKV0oKSB7IHJ1big5KTt9CisgICAgICBzdGF0aWMgW3J1big0KV0gPSBy
dW4oNik7CisgICAgICBbcnVuKDUpXSgpIHsgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgbm90IGV4
ZWN1dGUnKTt9OworICAgIH0KKworICAgIGxldCBjID0gbmV3IEM7CisgICAgY1szXSgpOworICAg
IGFzc2VydEVxdWFscyhbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0sIGxvZyk7CisgIH0KK30K
K3koKSgpOworCit7CisgIGNsYXNzIEMge30KKyAgY2xhc3MgRCB7CisgICAgc3RhdGljIFtDXTsK
KyAgfQorCisgIGFzc2VydFRocm93cygoKSA9PiB7IGNsYXNzIFggeyBzdGF0aWMgW1hdIH0gfSk7
CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIERbQ10pOworfQorCit7CisgIGZ1bmN0aW9uIHQo
KSB7CisgICAgcmV0dXJuIGNsYXNzIHsKKyAgICAgIHN0YXRpYyBbJ3gnXSA9IDI7CisgICAgfQor
ICB9CisKKyAgbGV0IGtsYXNzID0gdCgpOworICBsZXQgb2JqID0gbmV3IGtsYXNzOworICBhc3Nl
cnRFcXVhbHMoMiwga2xhc3MueCk7Cit9CisKK3sKKyAgbGV0IHggPSAnYSc7CisgIGNsYXNzIEMg
eworICAgIGE7CisgICAgYiA9IHg7CisgICAgYyA9IDE7CisgICAgaGFzT3duUHJvcGVydHkoKSB7
IHJldHVybiAxO30KKyAgICBzdGF0aWMgW3hdID0gMjsKKyAgICBzdGF0aWMgYiA9IDM7CisgICAg
c3RhdGljIGQ7CisgIH0KKworICBhc3NlcnRFcXVhbHMoMiwgQy5hKTsKKyAgYXNzZXJ0RXF1YWxz
KDMsIEMuYik7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIEMuZCk7CisgIGFzc2VydEVxdWFs
cyh1bmRlZmluZWQsIEMuYyk7CisKKyAgbGV0IGMgPSBuZXcgQzsKKyAgYXNzZXJ0RXF1YWxzKHVu
ZGVmaW5lZCwgYy5hKTsKKyAgYXNzZXJ0RXF1YWxzKCdhJywgYy5iKTsKKyAgYXNzZXJ0RXF1YWxz
KDEsIGMuYyk7CisgIGFzc2VydEVxdWFscyh1bmRlZmluZWQsIGMuZCk7CisgIGFzc2VydEVxdWFs
cygxLCBjLmhhc093blByb3BlcnR5KCkpOworfQorCit7CisgIGZ1bmN0aW9uIHQoKSB7CisgICAg
cmV0dXJuIGNsYXNzIHsKKyAgICAgIFsneCddID0gMTsKKyAgICAgIHN0YXRpYyBbJ3gnXSA9IDI7
CisgICAgfQorICB9CisKKyAgbGV0IGtsYXNzID0gdCgpOworICBsZXQgb2JqID0gbmV3IGtsYXNz
OworICBhc3NlcnRFcXVhbHMoMSwgb2JqLngpOworICBhc3NlcnRFcXVhbHMoMiwga2xhc3MueCk7
Cit9CisKKworeworICBjbGFzcyBYIHsKKyAgICBzdGF0aWMgcCA9IGZ1bmN0aW9uKCkgeyByZXR1
cm4gYXJndW1lbnRzWzBdOyB9CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwgWC5wKDEpKTsKK30K
KworeworICBjbGFzcyBYIHsKKyAgICBzdGF0aWMgdCA9ICgpID0+IHsKKyAgICAgIGZ1bmN0aW9u
IHAoKSB7IHJldHVybiBhcmd1bWVudHNbMF07IH07CisgICAgICByZXR1cm4gcDsKKyAgICB9Cisg
IH0KKworICBsZXQgcCA9IFgudCgpOworICBhc3NlcnRFcXVhbHMoMSwgcCgxKSk7Cit9CisKK3sK
KyAgY2xhc3MgWCB7CisgICAgc3RhdGljIHQgPSAoKSA9PiB7CisgICAgICBmdW5jdGlvbiBwKCkg
eyByZXR1cm4gZXZhbCgiYXJndW1lbnRzWzBdIik7IH07CisgICAgICByZXR1cm4gcDsKKyAgICB9
CisgIH0KKworICBsZXQgcCA9IFgudCgpOworICBhc3NlcnRFcXVhbHMoMSwgcCgxKSk7Cit9CisK
K3sKKyAgY2xhc3MgWCB7CisgICAgc3RhdGljIHAgPSBldmFsKCIoZnVuY3Rpb24oKSB7IHJldHVy
biBhcmd1bWVudHNbMF07IH0pKDEpIik7CisgIH0KKworICBhc3NlcnRFcXVhbHMoMSwgWC5wKTsK
K30KKworLyoKK3sKKyAgbGV0IHAgPSB7IHo6IGNsYXNzIHsgc3RhdGljIHkgPSB0aGlzLm5hbWUg
fSB9CisgIGFzc2VydEVxdWFscyhwLnoueSwgJ3onKTsKKworICBsZXQgcSA9IHsgWyJ6Il06IGNs
YXNzIHsgc3RhdGljIHkgPSB0aGlzLm5hbWUgfSB9CisgIGFzc2VydEVxdWFscyhxLnoueSwgJ3on
KTsKKworICBjb25zdCBDID0gY2xhc3MgeworICAgIHN0YXRpYyB4ID0gdGhpcy5uYW1lOworICB9
CisgIGFzc2VydEVxdWFscyhDLngsICdDJyk7Cit9CisqLwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9z
dHJlc3MvcmVzb3VyY2VzL2hhcm1vbnktc3VwcG9ydC5qcyBiL0pTVGVzdHMvc3RyZXNzL3Jlc291
cmNlcy9oYXJtb255LXN1cHBvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi4wMjRiM2IwODg5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9y
ZXNvdXJjZXMvaGFybW9ueS1zdXBwb3J0LmpzCkBAIC0wLDAgKzEsMTk2IEBACisvLyBDb3B5cmln
aHQgMjAxNyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAg
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gY2xhc3NPZihvYmplY3QpIHsK
KyAgIC8vIEFyZ3VtZW50IG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLgorICAgdmFyIHN0
cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpOworICAgLy8gU3Ry
aW5nIGhhcyBmb3JtYXQgW29iamVjdCA8Q2xhc3NOYW1lPl0uCisgICByZXR1cm4gc3RyaW5nLnN1
YnN0cmluZyg4LCBzdHJpbmcubGVuZ3RoIC0gMSk7Cit9CisKKy8qKgorICogQ29tcGFyZXMgdHdv
IG9iamVjdHMgZm9yIGtleS92YWx1ZSBlcXVhbGl0eS4KKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGV5
IGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitmdW5jdGlvbiBkZWVwT2JqZWN0RXF1
YWxzKGEsIGIpIHsKKyAgdmFyIGFQcm9wcyA9IE9iamVjdC5rZXlzKGEpOworICBhUHJvcHMuc29y
dCgpOworICB2YXIgYlByb3BzID0gT2JqZWN0LmtleXMoYik7CisgIGJQcm9wcy5zb3J0KCk7Cisg
IGlmICghZGVlcEVxdWFscyhhUHJvcHMsIGJQcm9wcykpIHsKKyAgICByZXR1cm4gZmFsc2U7Cisg
IH0KKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBhUHJvcHMubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAo
IWRlZXBFcXVhbHMoYVthUHJvcHNbaV1dLCBiW2FQcm9wc1tpXV0pKSB7CisgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICB9CisgIHJldHVybiB0cnVlOworfQorCisvKioKKyAqIENvbXBhcmVz
IHR3byBKYXZhU2NyaXB0IHZhbHVlcyBmb3IgdHlwZSBhbmQgdmFsdWUgZXF1YWxpdHkuCisgKiBJ
dCBjaGVja3MgaW50ZXJuYWxzIG9mIGFycmF5cyBhbmQgb2JqZWN0cy4KKyAqLworZnVuY3Rpb24g
ZGVlcEVxdWFscyhhLCBiKSB7CisgIGlmIChhID09PSBiKSB7CisgICAgLy8gQ2hlY2sgZm9yIC0w
LgorICAgIGlmIChhID09PSAwKSByZXR1cm4gKDEgLyBhKSA9PT0gKDEgLyBiKTsKKyAgICByZXR1
cm4gdHJ1ZTsKKyAgfQorICBpZiAodHlwZW9mIGEgIT0gdHlwZW9mIGIpIHJldHVybiBmYWxzZTsK
KyAgaWYgKHR5cGVvZiBhID09ICdudW1iZXInKSByZXR1cm4gaXNOYU4oYSkgJiYgaXNOYU4oYik7
CisgIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGEgIT09ICdmdW5jdGlvbicp
IHJldHVybiBmYWxzZTsKKyAgLy8gTmVpdGhlciBhIG5vciBiIGlzIHByaW1pdGl2ZS4KKyAgdmFy
IG9iamVjdENsYXNzID0gY2xhc3NPZihhKTsKKyAgaWYgKG9iamVjdENsYXNzICE9PSBjbGFzc09m
KGIpKSByZXR1cm4gZmFsc2U7CisgIGlmIChvYmplY3RDbGFzcyA9PT0gJ1JlZ0V4cCcpIHsKKyAg
ICAvLyBGb3IgUmVnRXhwLCBqdXN0IGNvbXBhcmUgcGF0dGVybiBhbmQgZmxhZ3MgdXNpbmcgaXRz
IHRvU3RyaW5nLgorICAgIHJldHVybiAoYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCkpOwor
ICB9CisgIC8vIEZ1bmN0aW9ucyBhcmUgb25seSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcy4KKyAg
aWYgKG9iamVjdENsYXNzID09PSAnRnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7CisgIGlmIChvYmpl
Y3RDbGFzcyA9PT0gJ0FycmF5JykgeworICAgIHZhciBlbGVtZW50Q291bnQgPSAwOworICAgIGlm
IChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmICghZGVlcEVx
dWFscyhhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
KyAgfQorICBpZiAob2JqZWN0Q2xhc3MgPT0gJ1N0cmluZycgfHwgb2JqZWN0Q2xhc3MgPT0gJ051
bWJlcicgfHwKKyAgICAgIG9iamVjdENsYXNzID09ICdCb29sZWFuJyB8fCBvYmplY3RDbGFzcyA9
PSAnRGF0ZScpIHsKKyAgICBpZiAoYS52YWx1ZU9mKCkgIT09IGIudmFsdWVPZigpKSByZXR1cm4g
ZmFsc2U7CisgIH0KKyAgcmV0dXJuIGRlZXBPYmplY3RFcXVhbHMoYSwgYik7Cit9CisKKy8qKgor
ICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBjb250YWluaW5nIHRoZSB1c2VyX21lc3NhZ2UgKGlmIGFu
eSkgYW5kIHRoZSB2YWx1ZXMuCisgKi8KK2Z1bmN0aW9uIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCB1
c2VyX21lc3NhZ2UgPSAnJykgeworICAvLyBUT0RPKGNpcmEpOiBSZXBsYWNlIFN0cmluZyB3aXRo
IFByZXR0eVByaW50IGZvciBvYmplY3RzIGFuZCBhcnJheXMuCisgIHZhciBtZXNzYWdlID0gJ0Zh
aWx1cmUnICsgKHVzZXJfbWVzc2FnZSA/ICcgKCcgKyB1c2VyX21lc3NhZ2UgKyAnKScgOiAnJykg
KworICAgICAgJzogZXhwZWN0ZWQgPCcgKyBTdHJpbmcoZXhwZWN0ZWQpICsgJz4sIGZvdW5kIDwn
ICsgU3RyaW5nKGZvdW5kKSArICc+Lic7CisgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTsKK30K
KworLyoqCisgKiBUaHJvd3MgaWYgb2JqIGlzIG5vdCBvZiBnaXZlbiB0eXBlLgorICovCitmdW5j
dGlvbiBhc3NlcnRJbnN0YW5jZW9mKG9iaiwgdHlwZSkgeworICBpZiAoIShvYmogaW5zdGFuY2Vv
ZiB0eXBlKSkgeworICAgIHZhciBhY3R1YWxUeXBlTmFtZSA9IG51bGw7CisgICAgdmFyIGFjdHVh
bENvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikuY29uc3RydWN0b3I7Cisg
ICAgaWYgKHR5cGVvZiBhY3R1YWxDb25zdHJ1Y3RvciA9PSAiZnVuY3Rpb24iKSB7CisgICAgICBh
Y3R1YWxUeXBlTmFtZSA9IGFjdHVhbENvbnN0cnVjdG9yLm5hbWUgfHwgU3RyaW5nKGFjdHVhbENv
bnN0cnVjdG9yKTsKKyAgICB9CisgICAgdGhyb3cgbmV3IEVycm9yKCdPYmplY3QgPCcgKyBvYmog
KyAnPiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgPCcgKworICAgICAgICAgICAgICAgICAgICAodHlw
ZS5uYW1lIHx8IHR5cGUpICsgJz4nICsKKyAgICAgICAgICAgICAgICAgICAgKGFjdHVhbFR5cGVO
YW1lID8gJyBidXQgb2YgPCAnICsgYWN0dWFsVHlwZU5hbWUgKyAnPicgOiAnJykpOworICB9Cit9
CisKKy8qKgorICogVGhyb3dzIGlmIG9iaiBpcyBub3QgdGhlIHNhbWUgYXMgZXhwZWN0ZWQuCisg
Ki8KK2Z1bmN0aW9uIGFzc2VydFNhbWUoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCkgeworICBp
ZiAoZm91bmQgPT09IGV4cGVjdGVkKSB7CisgICAgaWYgKGV4cGVjdGVkICE9PSAwIHx8ICgxIC8g
ZXhwZWN0ZWQpID09PSAoMSAvIGZvdW5kKSkKKyAgICAgIHJldHVybjsKKyAgfSBlbHNlIGlmICgo
ZXhwZWN0ZWQgIT09IGV4cGVjdGVkKSAmJiAoZm91bmQgIT09IGZvdW5kKSkgeworICAgICAgcmV0
dXJuOworICB9CisgIGZhaWwoZXhwZWN0ZWQsIGZvdW5kLCBuYW1lX29wdCk7Cit9CisKKy8qKgor
ICogVGhyb3dzIGlmIHR3byB2YXJpYWJsZXMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMgb3IgdmFsdWVz
LgorICovCisKK2Z1bmN0aW9uIGFzc2VydEVxdWFscyhleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVz
c2FnZSA9ICcnKSB7CisgIGlmICghZGVlcEVxdWFscyhleHBlY3RlZCwgZm91bmQpKSB7CisgICAg
ZmFpbChleHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSk7CisgIH0KK30KKworLyoqCisgKiBU
aHJvd3MgaWYgdHdvIHZhcmlhYmxlcyBoYXZlIGVxdWFsIHR5cGVzIG9yIHZhbHVlcy4KKyAqLwor
CitmdW5jdGlvbiBhc3NlcnROb3RFcXVhbHMoZXhwZWN0ZWQsIGZvdW5kLCB1c2VyX21lc3NhZ2Ug
PSAnJykgeworICBpZiAoZGVlcEVxdWFscyhleHBlY3RlZCwgZm91bmQpKSB7CisgICAgZmFpbChl
eHBlY3RlZCwgZm91bmQsIHVzZXJfbWVzc2FnZSk7CisgIH0KK30KKworLyoqCisgKiBUaHJvd3Mg
aWYgdmFsdWUgaXMgZmFsc2UuCisgKi8KK2Z1bmN0aW9uIGFzc2VydFRydWUodmFsdWUsIHVzZXJf
bWVzc2FnZSA9ICcnKSB7CisgIGFzc2VydEVxdWFscyh0cnVlLCB2YWx1ZSwgdXNlcl9tZXNzYWdl
KTsKK30KKworCisvKioKKyAqIFRocm93cyBpZiB2YWx1ZSBpcyB0cnVlLgorICovCitmdW5jdGlv
biBhc3NlcnRGYWxzZSh2YWx1ZSwgdXNlcl9tZXNzYWdlID0gJycpIHsKKyAgYXNzZXJ0RXF1YWxz
KGZhbHNlLCB2YWx1ZSwgdXNlcl9tZXNzYWdlKTsKK30KKworLyoqCisgKiBSdW5zIGNvZGUoKSBh
bmQgYXNzZXJ0cyB0aGF0IGl0IHRocm93cyB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbi4KKyAqLwor
ZnVuY3Rpb24gYXNzZXJ0VGhyb3dzKGNvZGUsIHR5cGVfb3B0LCBjYXVzZV9vcHQpIHsKKyAgdHJ5
IHsKKyAgICBpZiAodHlwZW9mIGNvZGUgPT0gJ2Z1bmN0aW9uJykgeworICAgICAgY29kZSgpOwor
ICAgIH0gZWxzZSB7CisgICAgICBldmFsKGNvZGUpOworICAgIH0KKyAgfSBjYXRjaCAoZSkgewor
ICAgIGlmICh0eXBlb2YgdHlwZV9vcHQgPT0gJ2Z1bmN0aW9uJykgeworICAgICAgYXNzZXJ0SW5z
dGFuY2VvZihlLCB0eXBlX29wdCk7CisgICAgfQorICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49
IDMpIHsKKyAgICAgIGFzc2VydEVxdWFscyhjYXVzZV9vcHQsIGUudHlwZSwgJ3Rocm93biBleGNl
cHRpb24gdHlwZSBtaXNtYXRjaCcpOworICAgIH0KKyAgICAvLyBTdWNjZXNzLgorICAgIHJldHVy
bjsKKyAgfQorICB2YXIgZXhwZWN0ZWQgPSBhcmd1bWVudHMubGVuZ3RoID49IDMgPyBjYXVzZV9v
cHQgOgorICAgICAgdHlwZW9mIHR5cGVfb3B0ID09ICdmdW5jdGlvbicgPyB0eXBlX29wdCA6ICdh
bnkgZXhjZXB0aW9uJzsKKyAgZmFpbChleHBlY3RlZCwgJ25vIGV4Y2VwdGlvbicsICdleHBlY3Rl
ZCB0aHJvd24gZXhjZXB0aW9uJyk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3Rlc3QyNjIvY29u
ZmlnLnlhbWwgYi9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwKaW5kZXggNjRkYTUyMzNmYzc0
Li4xY2RmMTYzMjFiNDggMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbAor
KysgYi9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwKQEAgLTUsNiArNSw3IEBAIGZsYWdzOgog
ICBGaW5hbGl6YXRpb25SZWdpc3RyeTogdXNlV2Vha1JlZnMKICAgY2xhc3MtZmllbGRzLXB1Ymxp
YzogdXNlUHVibGljQ2xhc3NGaWVsZHMKICAgY2xhc3MtZmllbGRzLXByaXZhdGU6IHVzZVByaXZh
dGVDbGFzc0ZpZWxkcworICBjbGFzcy1zdGF0aWMtZmllbGRzLXB1YmxpYzogdXNlUHVibGljU3Rh
dGljQ2xhc3NGaWVsZHMKICAgSW50bC5EYXRlVGltZUZvcm1hdC1kYXlQZXJpb2Q6IHVzZUludGxE
YXRlVGltZUZvcm1hdERheVBlcmlvZAogICBTaGFyZWRBcnJheUJ1ZmZlcjogdXNlU2hhcmVkQXJy
YXlCdWZmZXIKICAgQXRvbWljczogdXNlU2hhcmVkQXJyYXlCdWZmZXIKQEAgLTE3LDcgKzE4LDYg
QEAgc2tpcDoKIAogICAgIC0gYXJiaXRyYXJ5LW1vZHVsZS1uYW1lc3BhY2UtbmFtZXMKICAgICAt
IGNsYXNzLW1ldGhvZHMtcHJpdmF0ZQotICAgIC0gY2xhc3Mtc3RhdGljLWZpZWxkcy1wdWJsaWMK
ICAgICAtIGNsYXNzLXN0YXRpYy1maWVsZHMtcHJpdmF0ZQogICAgIC0gY2xhc3Mtc3RhdGljLW1l
dGhvZHMtcHJpdmF0ZQogICAgIC0gY2xlYW51cFNvbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGQ5OGQ5MjNmZTE1Ni4uOTEwMDU3YTA0OGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1MyBAQAorMjAyMC0xMS0xNSAgWGFuIEzDs3BleiAgPHhhbkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIEFkZCBzdXBwb3J0IGZvciBzdGF0aWMgcHVibGljIGNsYXNzIGZp
ZWxkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0
MDk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IHN1cHBvcnQgZm9yIHN0YXRpYyBwdWJsaWMgY2xhc3MgZmllbGRzLiBXZSBjYW4gcmV1c2UgbW9z
dCBvZgorICAgICAgICB0aGUgZXhpc3RpbmcgbWFjaGluZXJ5IGF2YWlsYWJsZSBmb3IgaW5zdGFu
Y2UgZmllbGRzLiBMaWtlCisgICAgICAgIGluc3RhbmNlIGZpZWxkcywgc3RhdGljIGZpZWxkcyBh
cmUgaW5pdGlhbGl6ZWQgd2l0aCBhIHN5bnRoZXRpYworICAgICAgICBmdW5jdGlvbi4gVGhpcyBp
cyBkb25lIHRvIGFsbG93IHVzIHRvIHRyaXZpYWxseSBmb2xsb3cgdGhlIHNjb3BpbmcKKyAgICAg
ICAgcnVsZXMgaW4gdGhlIHNwZWMuIEFzIGl0IGhhcHBlbnMgd2l0aCBpbnN0YW5jZSBmaWVsZHMg
dGhpcyBjb3VsZAorICAgICAgICBiZSBpbmxpbmVkIGluIGEgZnV0dXJlIHBhdGNoLgorCisgICAg
ICAgIEEgbG90IG9mIHNtYWxsIGNoYW5nZXMgaW4gbWFueSBmaWxlcyBhcmUganVzdCBhIG1hdHRl
ciBvZiBkb2luZworICAgICAgICBzL2luc3RhbmNlL2NsYXNzLyBmb3IgdmFyaWFibGVzIHJlbGF0
ZWQgdG8gY2xhc3MgZmllbGRzLCB3aGljaAorICAgICAgICBiZWZvcmUgd2VyZSBhc3N1bWluZyB0
aGVyZSBhcmUgb25seSBpbnN0YW5jZSBmaWVsZHMgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6Omdl
bmVyYXRlVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayk6IGRvIHMvaW5zdGFuY2VGaWVsZC9jbGFz
c0ZpZWxkLy4KKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5o
OiBkaXR0by4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0NsYXNzRmllbGRJbml0aWFs
aXplckZ1bmN0aW9uKTogZGl0dG8uCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmg6IGRpdHRvLCBwbHVzIGFkZCBhIHBhcmFtZXRlcgorICAgICAgICBmb3Igc3RhdGlj
IGZpZWxkIGxvY2F0aW9ucyBpbiBlbWl0RGVmaW5lQ2xhc3NFbGVtZW50cy4KKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlMaXN0
Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogc2F2ZSBzdGF0aWMgZmllbGRzCisgICAgICAgIGxvY2F0aW9u
cyB3aGVuIGdvaW5nIHRocm91Z2ggdGhlIHByb3BlcnR5IGxpc3QuCisgICAgICAgIChKU0M6OlBy
b3BlcnR5TGlzdE5vZGU6OmVtaXRTYXZlQ29tcHV0ZWRGaWVsZE5hbWUpOiBjb25zaWRlcgorICAg
ICAgICBzdGF0aWMgZmllbGRzIGhlcmUgdG9vLgorICAgICAgICAoSlNDOjpDbGFzc0V4cHJOb2Rl
OjplbWl0Qnl0ZWNvZGUpOiBjYWxsIHRoZSBpbml0aWFsaXplciBmb3IKKyAgICAgICAgc3RhdGlj
IGZpZWxkcyBhcyB0aGUgdmVyeSBsYXN0IGFjdGlvbiBvZiB0aGUgY2xhc3MgY3JlYXRpb24uCisg
ICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6
Y3JlYXRlRGVmaW5lRmllbGQpOiBmaWVsZCBub2RlcyBjYW4gYmUgc3RhdGljCisgICAgICAgIHRv
byBub3cuCisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKEpT
Qzo6RGVmaW5lRmllbGROb2RlOjpEZWZpbmVGaWVsZE5vZGUpOiBkaXR0by4KKyAgICAgICAgKiBw
YXJzZXIvTm9kZXMuaDogZGl0dG8uCisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKTogcy9pbnN0YW5jZUZpZWxk
L2NsYXNzRmllbGQvCisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNz
KTogY29uc2lkZXIgc3RhdGljIGZpZWxkcy4KKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlw
ZT46OnBhcnNlSW5zdGFuY2VGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMpOgorICAgICAg
ICBzL2luc3RhbmNlRmllbGQvY2xhc3NGaWVsZC8sIGFuZCBjb25zaWRlciBzdGF0aWMgZmllbGRz
LgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVy
VHlwZT46OnBhcnNlKTogcy9pbnN0YW5jZUZpZWxkL2NsYXNzRmllbGQvCisgICAgICAgIChKU0M6
OnBhcnNlKTogZGl0dG8uCisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6c2V0RnVuY3Rpb25OYW1lKTogcy9pbnN0YW5jZUZpZWxkL2Ns
YXNzRmllbGQvCisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOiBhZGQgb3B0aW9uIHRv
IGVuYWJsZS9kaXNhYmxlIHN0YXRpYyBwdWJsaWMgZmllbGRzLgorCiAyMDIwLTExLTE1ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gV2FzbSBzaG91
bGQgZ2V0IGJ5dGUgbGVuZ3RoIGZyb20gc291cmNlIHR5cGVkIGFycmF5CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLmNwcAppbmRleCA2YjM3MWY1Mzk1N2EuLjMwN2QzNDYwYjBmOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUuY3BwCkBAIC01Niw5ICs1Niw5IEBAIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKiBnZW5lcmF0ZVVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2soCiAgICAgSlNQYXJz
ZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4dCgp
ID8gSlNQYXJzZXJTdHJpY3RNb2RlOjpTdHJpY3QgOiBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0
cmljdDsKICAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSA9IGV4ZWN1dGFibGUtPnNj
cmlwdE1vZGUoKTsKICAgICBBU1NFUlQoaXNGdW5jdGlvblBhcnNlTW9kZShleGVjdXRhYmxlLT5w
YXJzZU1vZGUoKSkpOwotICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4qIGluc3RhbmNlRmllbGRM
b2NhdGlvbnMgPSBleGVjdXRhYmxlLT5pbnN0YW5jZUZpZWxkTG9jYXRpb25zKCk7CisgICAgVmVj
dG9yPEpTVGV4dFBvc2l0aW9uPiogY2xhc3NGaWVsZExvY2F0aW9ucyA9IGV4ZWN1dGFibGUtPmNs
YXNzRmllbGRMb2NhdGlvbnMoKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Ob2RlPiBm
dW5jdGlvbiA9IHBhcnNlPEZ1bmN0aW9uTm9kZT4oCi0gICAgICAgIHZtLCBzb3VyY2UsIGV4ZWN1
dGFibGUtPm5hbWUoKSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIGV4ZWN1
dGFibGUtPnBhcnNlTW9kZSgpLCBleGVjdXRhYmxlLT5zdXBlckJpbmRpbmcoKSwgZXJyb3IsIG51
bGxwdHIsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBF
dmFsQ29udGV4dFR5cGU6Ok5vbmUsIG51bGxwdHIsIG51bGxwdHIsIGluc3RhbmNlRmllbGRMb2Nh
dGlvbnMpOworICAgICAgICB2bSwgc291cmNlLCBleGVjdXRhYmxlLT5uYW1lKCksIGJ1aWx0aW5N
b2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBleGVjdXRhYmxlLT5wYXJzZU1vZGUoKSwgZXhl
Y3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIGVycm9yLCBudWxscHRyLCBDb25zdHJ1Y3RvcktpbmQ6
Ok5vbmUsIERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCBu
dWxscHRyLCBudWxscHRyLCBjbGFzc0ZpZWxkTG9jYXRpb25zKTsKIAogICAgIGlmICghZnVuY3Rp
b24pIHsKICAgICAgICAgQVNTRVJUKGVycm9yLmlzVmFsaWQoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5oCmluZGV4IGI2MjdlYWI3YzZkYi4uYTVkZDkyNjQ4MWY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUuaApAQCAtMjA5LDIzICsyMDksMjMgQEAgcHVibGljOgogICAgICAgICBTdHJpbmcgbV9zb3Vy
Y2VVUkxEaXJlY3RpdmU7CiAgICAgICAgIFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3Rp
dmU7CiAgICAgICAgIFZlY3RvcjxDb21wYWN0VERaRW52aXJvbm1lbnRNYXA6OkhhbmRsZT4gbV9w
YXJlbnRTY29wZVREWlZhcmlhYmxlczsKLSAgICAgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiBt
X2luc3RhbmNlRmllbGRMb2NhdGlvbnM7CisgICAgICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4g
bV9jbGFzc0ZpZWxkTG9jYXRpb25zOwogICAgIH07CiAKICAgICBOZWVkc0NsYXNzRmllbGRJbml0
aWFsaXplciBuZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcigpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyPihtX25lZWRzQ2xhc3NGaWVsZEluaXRp
YWxpemVyKTsgfQogCi0gICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogaW5zdGFuY2VGaWVsZExv
Y2F0aW9ucygpIGNvbnN0CisgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiogY2xhc3NGaWVsZExv
Y2F0aW9ucygpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9yYXJlRGF0YSkKLSAgICAgICAg
ICAgIHJldHVybiAmbV9yYXJlRGF0YS0+bV9pbnN0YW5jZUZpZWxkTG9jYXRpb25zOworICAgICAg
ICAgICAgcmV0dXJuICZtX3JhcmVEYXRhLT5tX2NsYXNzRmllbGRMb2NhdGlvbnM7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIHZvaWQgc2V0SW5zdGFuY2VGaWVsZExvY2F0
aW9ucyhWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiYgaW5zdGFuY2VGaWVsZExvY2F0aW9ucykKKyAg
ICB2b2lkIHNldENsYXNzRmllbGRMb2NhdGlvbnMoVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYmIGNs
YXNzRmllbGRMb2NhdGlvbnMpCiAgICAgewotICAgICAgICBpZiAoaW5zdGFuY2VGaWVsZExvY2F0
aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIGlmIChjbGFzc0ZpZWxkTG9jYXRpb25zLmlzRW1wdHko
KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZW5zdXJlUmFyZURhdGEoKS5tX2luc3Rh
bmNlRmllbGRMb2NhdGlvbnMgPSBXVEZNb3ZlKGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAg
ICAgICBlbnN1cmVSYXJlRGF0YSgpLm1fY2xhc3NGaWVsZExvY2F0aW9ucyA9IFdURk1vdmUoY2xh
c3NGaWVsZExvY2F0aW9ucyk7CiAgICAgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRl
eCBjOWU1ZWE2NmY5MmEuLmRhNWNhZjFjMTAzOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTM4MSw3
ICszODEsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBG
dW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogICAgIGJvb2wgc2hvdWxkQ2FwdHVy
ZVNvbWVPZlRoZVRoaW5ncyA9IHNob3VsZEVtaXREZWJ1Z0hvb2tzKCkgfHwgZnVuY3Rpb25Ob2Rl
LT5uZWVkc0FjdGl2YXRpb24oKSB8fCBjb250YWluc0Fycm93T3JFdmFsQnV0Tm90SW5BcnJvd0Js
b2NrOwogCiAgICAgYm9vbCBzaG91bGRDYXB0dXJlQWxsT2ZUaGVUaGluZ3MgPSBzaG91bGRFbWl0
RGVidWdIb29rcygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKTsKLSAgICBib29sIG5lZWRzQXJn
dW1lbnRzID0gKChmdW5jdGlvbk5vZGUtPnVzZXNBcmd1bWVudHMoKSAmJiAhY29kZUJsb2NrLT5p
c0Fycm93RnVuY3Rpb24oKSkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpIHx8IChmdW5jdGlvbk5v
ZGUtPnVzZXNBcnJvd0Z1bmN0aW9uKCkgJiYgIWNvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkg
JiYgaXNBcmd1bWVudHNVc2VkSW5Jbm5lckFycm93RnVuY3Rpb24oKSkpICYmIHBhcnNlTW9kZSAh
PSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGU7CisgICAgYm9v
bCBuZWVkc0FyZ3VtZW50cyA9ICgoZnVuY3Rpb25Ob2RlLT51c2VzQXJndW1lbnRzKCkgJiYgIWNv
ZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSB8fCAo
ZnVuY3Rpb25Ob2RlLT51c2VzQXJyb3dGdW5jdGlvbigpICYmICFjb2RlQmxvY2stPmlzQXJyb3dG
dW5jdGlvbigpICYmIGlzQXJndW1lbnRzVXNlZEluSW5uZXJBcnJvd0Z1bmN0aW9uKCkpKSAmJiBw
YXJzZU1vZGUgIT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlOwog
CiAgICAgaWYgKGlzR2VuZXJhdG9yT3JBc3luY0Z1bmN0aW9uQm9keVBhcnNlTW9kZShwYXJzZU1v
ZGUpKSB7CiAgICAgICAgIC8vIEdlbmVyYXRvciBhbmQgQXN5bmNGdW5jdGlvbiBuZXZlciBwcm92
aWRlcyAiYXJndW1lbnRzIi4gImFyZ3VtZW50cyIgcmVmZXJlbmNlIHdpbGwgYmUgcmVzb2x2ZWQg
aW4gYW4gdXBwZXIgZ2VuZXJhdG9yIGZ1bmN0aW9uIHNjb3BlLgpAQCAtNjEzLDcgKzYxMyw3IEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEZ1bmN0aW9uTm9k
ZSogZnVuY3Rpb25Ob2RlLCBVbmxpbmtlCiAgICAgICAgIH0KIAogICAgICAgICBib29sIHNob3Vs
ZENyZWF0ZUFyZ3VtZW5zVmFyaWFibGUgPSAhaGF2ZVBhcmFtZXRlck5hbWVkQXJndW1lbnRzCi0g
ICAgICAgICAgICAmJiAhU291cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dG
dW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSwgU291
cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlKS5jb250YWlucyhtX2Nv
ZGVCbG9jay0+cGFyc2VNb2RlKCkpOworICAgICAgICAgICAgJiYgIVNvdXJjZVBhcnNlTW9kZVNl
dChTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFz
eW5jQXJyb3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxp
emVyTW9kZSkuY29udGFpbnMobV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpKTsKICAgICAgICAgc2hv
dWxkQ3JlYXRlQXJndW1lbnRzVmFyaWFibGVJblBhcmFtZXRlclNjb3BlID0gc2hvdWxkQ3JlYXRl
QXJndW1lbnNWYXJpYWJsZSAmJiAhaXNTaW1wbGVQYXJhbWV0ZXJMaXN0OwogICAgICAgICAvLyBE
byBub3QgY3JlYXRlIGFyZ3VtZW50cyB2YXJpYWJsZSBpbiBjYXNlIG9mIEFycm93IGZ1bmN0aW9u
LiBWYWx1ZSB3aWxsIGJlIGxvYWRlZCBmcm9tIHBhcmVudCBzY29wZQogICAgICAgICBpZiAoc2hv
dWxkQ3JlYXRlQXJndW1lbnNWYXJpYWJsZSAmJiAhc2hvdWxkQ3JlYXRlQXJndW1lbnRzVmFyaWFi
bGVJblBhcmFtZXRlclNjb3BlKSB7CkBAIC0zMTMzLDcgKzMxMzMsNyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0RlZmF1bHRDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBk
c3QsIENvbnN0cgogICAgIHJldHVybiBkc3Q7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0TmV3SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24oUmVnaXN0ZXJJ
RCogZHN0LCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiYgaW5zdGFuY2VGaWVsZExvY2F0aW9ucywg
Ym9vbCBpc0Rlcml2ZWQpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Ns
YXNzRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgVmVjdG9yPEpTVGV4
dFBvc2l0aW9uPiYmIGNsYXNzRmllbGRMb2NhdGlvbnMsIGJvb2wgaXNEZXJpdmVkKQogewogICAg
IERlcml2ZWRDb250ZXh0VHlwZSBuZXdEZXJpdmVkQ29udGV4dFR5cGU7CiAgICAgU3VwZXJCaW5k
aW5nIHN1cGVyQmluZGluZzsKQEAgLTMxNDYsMTQgKzMxNDYsMTQgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihS
ZWdpc3RlckkKICAgICB9CiAKICAgICBhdXRvIHZhcmlhYmxlc1VuZGVyVERaID0gZ2V0VmFyaWFi
bGVzVW5kZXJURFooKTsKLSAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFy
c2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOworICAgIFNvdXJjZVBhcnNlTW9k
ZSBwYXJzZU1vZGUgPSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU7
CiAgICAgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5ID0gQ29uc3RydWN0QWJpbGl0
eTo6Q2Fubm90Q29uc3RydWN0OwogCiAgICAgY29uc3QgYm9vbCBhbHdheXNTdHJpY3RJbkNsYXNz
ID0gdHJ1ZTsKICAgICBGdW5jdGlvbk1ldGFkYXRhTm9kZSBtZXRhZGF0YShwYXJzZXJBcmVuYSgp
LCBKU1Rva2VuTG9jYXRpb24oKSwgSlNUb2tlbkxvY2F0aW9uKCksIDAsIDAsIDAsIDAsIDAsIGFs
d2F5c1N0cmljdEluQ2xhc3MsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgc3VwZXJCaW5kaW5nLCAw
LCBwYXJzZU1vZGUsIGZhbHNlKTsKICAgICBtZXRhZGF0YS5maW5pc2hQYXJzaW5nKG1fc2NvcGVO
b2RlLT5zb3VyY2UoKSwgSWRlbnRpZmllcigpLCBGdW5jdGlvbk1vZGU6Ok1ldGhvZERlZmluaXRp
b24pOwogICAgIGF1dG8gaW5pdGlhbGl6ZXIgPSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y3JlYXRlKG1fdm0sIG1fc2NvcGVOb2RlLT5zb3VyY2UoKSwgJm1ldGFkYXRhLCBpc0J1aWx0aW5G
dW5jdGlvbigpID8gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24gOiBVbmxpbmtlZE5vcm1hbEZ1bmN0
aW9uLCBjb25zdHJ1Y3RBYmlsaXR5LCBzY3JpcHRNb2RlKCksIFdURk1vdmUodmFyaWFibGVzVW5k
ZXJURFopLCBuZXdEZXJpdmVkQ29udGV4dFR5cGUsIE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVy
OjpObyk7Ci0gICAgaW5pdGlhbGl6ZXItPnNldEluc3RhbmNlRmllbGRMb2NhdGlvbnMoV1RGTW92
ZShpbnN0YW5jZUZpZWxkTG9jYXRpb25zKSk7CisgICAgaW5pdGlhbGl6ZXItPnNldENsYXNzRmll
bGRMb2NhdGlvbnMoV1RGTW92ZShjbGFzc0ZpZWxkTG9jYXRpb25zKSk7CiAKICAgICB1bnNpZ25l
ZCBpbmRleCA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkV4cHIoaW5pdGlhbGl6ZXIpOwogICAg
IE9wTmV3RnVuY0V4cDo6ZW1pdCh0aGlzLCBkc3QsIHNjb3BlUmVnaXN0ZXIoKSwgaW5kZXgpOwpA
QCAtNDQ3NCw3ICs0NDc0LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZv
ckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKIAogUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9ubWVudChjb25z
dCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aXNB
cnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSB8
fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMgfHwgbV9jb2Rl
VHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0gU291cmNlUGFy
c2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKKyAgICBBU1NFUlQobV9jb2Rl
QmxvY2stPmlzQXJyb3dGdW5jdGlvbigpIHx8IG1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25D
b250ZXh0KCkgfHwgY29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRz
IHx8IG1fY29kZVR5cGUgPT0gRXZhbENvZGUgfHwgbV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpID09
IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZSk7CiAKICAgICByZXR1
cm4gZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXJpYWJsZShpZGVudGlmaWVyLCBUaGlzUmVz
b2x1dGlvblR5cGU6OlNjb3BlZCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDRhNTdhNGZhOTJiNC4u
OTZhNjRlMGY4MmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC01ODIsMTQgKzU4MiwxNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBlbWl0Tm9kZUluVGFpbFBvc2l0aW9uKG51bGxw
dHIsIG4pOwogICAgICAgICB9CiAKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdERlZmluZUNsYXNz
RWxlbWVudHMoUHJvcGVydHlMaXN0Tm9kZSogbiwgUmVnaXN0ZXJJRCogY29uc3RydWN0b3IsIFJl
Z2lzdGVySUQqIHByb3RvdHlwZSwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYgaW5zdGFuY2VGaWVs
ZExvY2F0aW9ucykKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdERlZmluZUNsYXNzRWxlbWVudHMo
UHJvcGVydHlMaXN0Tm9kZSogbiwgUmVnaXN0ZXJJRCogY29uc3RydWN0b3IsIFJlZ2lzdGVySUQq
IHByb3RvdHlwZSwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYgaW5zdGFuY2VGaWVsZExvY2F0aW9u
cywgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiYgc3RhdGljRmllbGRMb2NhdGlvbnMpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEFTU0VSVChjb25zdHJ1Y3Rvci0+cmVmQ291bnQoKSAmJiBwcm90b3R5
cGUtPnJlZkNvdW50KCkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3ZtLmlzU2FmZVRv
UmVjdXJzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZW1pdFRocm93RXhwcmVzc2lvblRv
b0RlZXBFeGNlcHRpb24oKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShuLT5uZWVkc0RlYnVn
SG9vaygpKSkKICAgICAgICAgICAgICAgICBlbWl0RGVidWdIb29rKG4pOwotICAgICAgICAgICAg
cmV0dXJuIG4tPmVtaXRCeXRlY29kZSgqdGhpcywgY29uc3RydWN0b3IsIHByb3RvdHlwZSwgJmlu
c3RhbmNlRmllbGRMb2NhdGlvbnMpOworICAgICAgICAgICAgcmV0dXJuIG4tPmVtaXRCeXRlY29k
ZSgqdGhpcywgY29uc3RydWN0b3IsIHByb3RvdHlwZSwgJmluc3RhbmNlRmllbGRMb2NhdGlvbnMs
ICZzdGF0aWNGaWVsZExvY2F0aW9ucyk7CiAgICAgICAgIH0KIAogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0Tm9kZUZvclByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgRXhwcmVzc2lvbk5vZGUqIG5v
ZGUpCkBAIC03NzYsNyArNzc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXROZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uTWV0YWRhdGFOb2Rl
Kik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oUmVnaXN0
ZXJJRCogZHN0LCBGdW5jRXhwck5vZGUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Rl
ZmF1bHRDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIENvbnN0cnVjdG9yS2luZCwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgY29uc3QgSWRlbnRpZmllciYgZWNtYU5hbWUsIGNvbnN0IFNvdXJj
ZUNvZGUmIGNsYXNzU291cmNlLCBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcik7Ci0gICAgICAg
IFJlZ2lzdGVySUQqIGVtaXROZXdJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdp
c3RlcklEKiBkc3QsIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mJiBpbnN0YW5jZUZpZWxkTG9jYXRp
b25zLCBib29sIGlzRGVyaXZlZCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdDbGFzc0Zp
ZWxkSW5pdGlhbGl6ZXJGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIFZlY3RvcjxKU1RleHRQb3Np
dGlvbj4mJiBjbGFzc0ZpZWxkTG9jYXRpb25zLCBib29sIGlzRGVyaXZlZCk7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXROZXdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihSZWdpc3RlcklEKiwgQXJy
b3dGdW5jRXhwck5vZGUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld01ldGhvZERlZmlu
aXRpb24oUmVnaXN0ZXJJRCogZHN0LCBNZXRob2REZWZpbml0aW9uTm9kZSopOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TmV3UmVnRXhwKFJlZ2lzdGVySUQqIGRzdCwgUmVnRXhwKik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAK
aW5kZXggMWUyNWQ4ZGMwZThjLi5iMTY5ODFkNmM5MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTE4Niw3ICsxODYs
NyBAQCBSZWdpc3RlcklEKiBUaGlzTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdAogCiBzdGF0aWMgUmVnaXN0ZXJJRCogZW1pdEhv
bWVPYmplY3RGb3JDYWxsZWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICBp
ZiAoKGdlbmVyYXRvci5pc0Rlcml2ZWRDbGFzc0NvbnRleHQoKSB8fCBnZW5lcmF0b3IuaXNEZXJp
dmVkQ29uc3RydWN0b3JDb250ZXh0KCkpICYmIGdlbmVyYXRvci5wYXJzZU1vZGUoKSAhPSBTb3Vy
Y2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGUpIHsKKyAgICBpZiAoKGdl
bmVyYXRvci5pc0Rlcml2ZWRDbGFzc0NvbnRleHQoKSB8fCBnZW5lcmF0b3IuaXNEZXJpdmVkQ29u
c3RydWN0b3JDb250ZXh0KCkpICYmIGdlbmVyYXRvci5wYXJzZU1vZGUoKSAhPSBTb3VyY2VQYXJz
ZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpIHsKICAgICAgICAgUmVnaXN0ZXJJRCog
ZGVyaXZlZENvbnN0cnVjdG9yID0gZ2VuZXJhdG9yLmVtaXRMb2FkRGVyaXZlZENvbnN0cnVjdG9y
RnJvbUFycm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1lbnQoKTsKICAgICAgICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGRlcml2ZWRDb25z
dHJ1Y3RvciwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5ob21lT2Jq
ZWN0UHJpdmF0ZU5hbWUoKSk7CiAgICAgfQpAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgUHJvcGVy
dHlMaXN0Tm9kZTo6ZW1pdERlY2xhcmVQcml2YXRlRmllbGROYW1lcyhCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yCiAgICAgfQogfQogCi1SZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3ROb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
T3JDb25zdHJ1Y3RvciwgUmVnaXN0ZXJJRCogcHJvdG90eXBlLCBWZWN0b3I8SlNUZXh0UG9zaXRp
b24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQorUmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdE9yQ29uc3RydWN0b3IsIFJlZ2lzdGVySUQqIHByb3RvdHlwZSwgVmVjdG9yPEpTVGV4dFBv
c2l0aW9uPiogaW5zdGFuY2VGaWVsZExvY2F0aW9ucywgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiog
c3RhdGljRmllbGRMb2NhdGlvbnMpCiB7CiAgICAgUHJvcGVydHlMaXN0Tm9kZSogcCA9IHRoaXM7
CiAgICAgUmVnaXN0ZXJJRCogZHN0ID0gbnVsbHB0cjsKQEAgLTU5NSw2ICs1OTUsMTIgQEAgUmVn
aXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAK
KyAgICAgICAgaWYgKHAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAgICAgICAgICBBU1NF
UlQoc3RhdGljRmllbGRMb2NhdGlvbnMpOworICAgICAgICAgICAgc3RhdGljRmllbGRMb2NhdGlv
bnMtPmFwcGVuZChwLT5wb3NpdGlvbigpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKICAgICAgICAgZW1pdFB1dENvbnN0YW50UHJvcGVydHkoZ2VuZXJhdG9yLCBkc3QsICpw
LT5tX25vZGUpOwogICAgIH0KIApAQCAtNjUyLDYgKzY1OCwxMiBAQCBSZWdpc3RlcklEKiBQcm9w
ZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCisgICAg
ICAgICAgICBpZiAocC0+aXNTdGF0aWNDbGFzc0ZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoc3RhdGljRmllbGRMb2NhdGlvbnMpOworICAgICAgICAgICAgICAgIHN0YXRpY0ZpZWxk
TG9jYXRpb25zLT5hcHBlbmQocC0+cG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIEhhbmRsZSByZWd1bGFyIHZhbHVl
cy4KICAgICAgICAgICAgIGlmIChub2RlLT5tX3R5cGUgJiBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50
KSB7CiAgICAgICAgICAgICAgICAgZW1pdFB1dENvbnN0YW50UHJvcGVydHkoZ2VuZXJhdG9yLCBk
c3QsICpub2RlKTsKQEAgLTc0NCw3ICs3NTYsNyBAQCBSZWdpc3RlcklEKiBQcm9wZXJ0eUxpc3RO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZQog
CiB2b2lkIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRQdXRDb25zdGFudFByb3BlcnR5KEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIG5ld09iaiwgUHJvcGVydHlOb2RlJiBu
b2RlKQogewotICAgIC8vIFByaXZhdGUgZmllbGRzIGFyZSBoYW5kbGVkIGluIHRoZSBzeW50aGV0
aWMgaW5zdGFuY2VGaWVsZEluaXRpYWxpemVyIGZ1bmN0aW9uLCBub3QgaGVyZS4KKyAgICAvLyBQ
cml2YXRlIGZpZWxkcyBhcmUgaGFuZGxlZCBpbiBhIHN5bnRoZXRpYyBjbGFzc0ZpZWxkSW5pdGlh
bGl6ZXIgZnVuY3Rpb24sIG5vdCBoZXJlLgogICAgIEFTU0VSVCghKG5vZGUudHlwZSgpICYgUHJv
cGVydHlOb2RlOjpQcml2YXRlKSk7CiAKICAgICBpZiAoUHJvcGVydHlOb2RlOjppc1VuZGVyc2Nv
cmVQcm90b1NldHRlcihnZW5lcmF0b3Iudm0oKSwgbm9kZSkpIHsKQEAgLTgwMCwxOCArODEyLDI1
IEBAIHZvaWQgUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdFB1dENvbnN0YW50UHJvcGVydHkoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnCiB2b2lkIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRT
YXZlQ29tcHV0ZWRGaWVsZE5hbWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUHJvcGVy
dHlOb2RlJiBub2RlKQogewogICAgIEFTU0VSVChub2RlLmlzQ29tcHV0ZWRDbGFzc0ZpZWxkKCkp
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eUV4cHI7CiAKICAgICAvLyBUaGUgJ25h
bWUnIHJlZmVycyB0byBhIHN5bnRoZXRpYyBwcml2YXRlIG5hbWUgaW4gdGhlIGNsYXNzIHNjb3Bl
LCB3aGVyZSB0aGUgcHJvcGVydHkga2V5IGlzIHNhdmVkIGZvciBsYXRlciB1c2UuCiAgICAgY29u
c3QgSWRlbnRpZmllciYgZGVzY3JpcHRpb24gPSAqbm9kZS5uYW1lKCk7CiAgICAgVmFyaWFibGUg
dmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGRlc2NyaXB0aW9uKTsKICAgICBBU1NFUlQoIXZhci5s
b2NhbCgpKTsKIAotICAgIHByb3BlcnR5RXhwciA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlLm1f
ZXhwcmVzc2lvbik7Ci0gICAgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVt
aXRUb1Byb3BlcnR5S2V5KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlFeHByLmdl
dCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlFeHByID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG5vZGUubV9leHByZXNzaW9uKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVy
dHlOYW1lID0gZ2VuZXJhdG9yLmVtaXRUb1Byb3BlcnR5S2V5KGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgcHJvcGVydHlFeHByLmdldCgpKTsKKworICAgIGlmIChub2RlLmlzU3RhdGljQ2xhc3NG
aWVsZCgpKSB7CisgICAgICAgIFJlZjxMYWJlbD4gdmFsaWRQcm9wZXJ0eU5hbWVMYWJlbCA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdG90eXBl
U3RyaW5nID0gZ2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIsIEpTVmFsdWUoZ2VuZXJhdG9yLmFk
ZFN0cmluZ0NvbnN0YW50KGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKSkpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGdlbmVyYXRvci5lbWl0QmluYXJ5T3A8
T3BTdHJpY3RlcT4oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm90b3R5cGVTdHJpbmcuZ2V0
KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnN0cmluZ1R5
cGUoKSwgUmVzdWx0VHlwZTo6c3RyaW5nVHlwZSgpKSksIHZhbGlkUHJvcGVydHlOYW1lTGFiZWwu
Z2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFRocm93VHlwZUVycm9yKCJDYW5ub3QgZGVj
bGFyZSBhIHN0YXRpYyBmaWVsZCBuYW1lZCAncHJvdG90eXBlJyIpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKHZhbGlkUHJvcGVydHlOYW1lTGFiZWwuZ2V0KCkpOworICAgIH0KIAogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51
bGxwdHIsIHZhcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCB2
YXIsIHByb3BlcnR5TmFtZSwgVGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbk1vZGU6OkNv
bnN0SW5pdGlhbGl6YXRpb24pOworICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5n
ZXQoKSwgdmFyLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6
YXRpb25Nb2RlOjpDb25zdEluaXRpYWxpemF0aW9uKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEJyYWNrZXRBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KQEAgLTQ5NDYsMTMgKzQ5NjUsMTQgQEAgUmVnaXN0ZXJJRCogQ2xhc3NFeHBy
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdG90eXBlTmFtZVJlZ2lzdGVyID0gZ2VuZXJh
dG9yLmVtaXRMb2FkKG51bGxwdHIsIHByb3BlcnR5TmFtZXMucHJvdG90eXBlKTsKICAgICBnZW5l
cmF0b3IuZW1pdENhbGxEZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3Rvci5nZXQoKSwgcHJvdG90eXBl
TmFtZVJlZ2lzdGVyLmdldCgpLCBwcm90b3R5cGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIDAs
IG1fcG9zaXRpb24pOwogCisgICAgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiBzdGF0aWNGaWVsZExv
Y2F0aW9uczsKICAgICBpZiAobV9jbGFzc0VsZW1lbnRzKSB7CiAgICAgICAgIG1fY2xhc3NFbGVt
ZW50cy0+ZW1pdERlY2xhcmVQcml2YXRlRmllbGROYW1lcyhnZW5lcmF0b3IsIGdlbmVyYXRvci5z
Y29wZVJlZ2lzdGVyKCkpOwogCiAgICAgICAgIFZlY3RvcjxKU1RleHRQb3NpdGlvbj4gaW5zdGFu
Y2VGaWVsZExvY2F0aW9uczsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWZpbmVDbGFzc0VsZW1l
bnRzKG1fY2xhc3NFbGVtZW50cywgY29uc3RydWN0b3IuZ2V0KCksIHByb3RvdHlwZS5nZXQoKSwg
aW5zdGFuY2VGaWVsZExvY2F0aW9ucyk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RGVmaW5lQ2xh
c3NFbGVtZW50cyhtX2NsYXNzRWxlbWVudHMsIGNvbnN0cnVjdG9yLmdldCgpLCBwcm90b3R5cGUu
Z2V0KCksIGluc3RhbmNlRmllbGRMb2NhdGlvbnMsIHN0YXRpY0ZpZWxkTG9jYXRpb25zKTsKICAg
ICAgICAgaWYgKCFpbnN0YW5jZUZpZWxkTG9jYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGluc3RhbmNlRmllbGRJbml0aWFsaXplciA9IGdlbmVyYXRv
ci5lbWl0TmV3SW5zdGFuY2VGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24oZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCBXVEZNb3ZlKGluc3RhbmNlRmllbGRMb2NhdGlvbnMpLCBtX2NsYXNzSGVyaXRh
Z2UpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGluc3RhbmNlRmllbGRJbml0aWFs
aXplciA9IGdlbmVyYXRvci5lbWl0TmV3Q2xhc3NGaWVsZEluaXRpYWxpemVyRnVuY3Rpb24oZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBXVEZNb3ZlKGluc3RhbmNlRmllbGRMb2NhdGlvbnMpLCBt
X2NsYXNzSGVyaXRhZ2UpOwogCiAgICAgICAgICAgICAvLyBGSVhNRTogU2tpcCB0aGlzIGlmIHRo
ZSBpbml0aWFsaXplciBmdW5jdGlvbiBpc24ndCBnb2luZyB0byBuZWVkIGEgaG9tZSBvYmplY3Qg
KG5vIGV2YWwgb3Igc3VwZXIgcHJvcGVydGllcykKICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY4NjcKQEAgLTQ5NjIsMTYgKzQ5ODIsMjcg
QEAgUmVnaXN0ZXJJRCogQ2xhc3NFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICht
X25lZWRzTGV4aWNhbFNjb3BlKSB7Ci0gICAgICAgIGlmICghbV9uYW1lLmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICBWYXJpYWJsZSBjbGFzc05hbWVWYXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9u
YW1lKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNzTmFtZVZhci5pc1Jlc29sdmVk
KCkpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgY2xhc3NOYW1lVmFyKTsKLSAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgY2xhc3NOYW1lVmFyLCBjb25zdHJ1Y3Rv
ci5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbk1vZGU6OkluaXRpYWxpemF0
aW9uKTsKLSAgICAgICAgfQotICAgICAgICBnZW5lcmF0b3IucG9wTGV4aWNhbFNjb3BlKHRoaXMp
OworICAgIGlmIChtX25lZWRzTGV4aWNhbFNjb3BlICYmICFtX25hbWUuaXNOdWxsKCkpIHsKKyAg
ICAgICAgVmFyaWFibGUgY2xhc3NOYW1lVmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1fbmFtZSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNzTmFtZVZhci5pc1Jlc29sdmVkKCkpOworICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29w
ZShudWxscHRyLCBjbGFzc05hbWVWYXIpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2Nv
cGUoc2NvcGUuZ2V0KCksIGNsYXNzTmFtZVZhciwgY29uc3RydWN0b3IuZ2V0KCksIFRocm93SWZO
b3RGb3VuZCwgSW5pdGlhbGl6YXRpb25Nb2RlOjpJbml0aWFsaXphdGlvbik7CisgICAgfQorCisg
ICAgaWYgKCFzdGF0aWNGaWVsZExvY2F0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXIgPSBnZW5lcmF0b3IuZW1pdE5ld0Ns
YXNzRmllbGRJbml0aWFsaXplckZ1bmN0aW9uKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgV1RG
TW92ZShzdGF0aWNGaWVsZExvY2F0aW9ucyksIG1fY2xhc3NIZXJpdGFnZSk7CisgICAgICAgIC8v
IEZJWE1FOiBTa2lwIHRoaXMgaWYgdGhlIGluaXRpYWxpemVyIGZ1bmN0aW9uIGlzbid0IGdvaW5n
IHRvIG5lZWQgYSBob21lIG9iamVjdCAobm8gZXZhbCBvciBzdXBlciBwcm9wZXJ0aWVzKQorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2ODY3Cisg
ICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgc3RhdGljRmllbGRJbml0aWFsaXpl
ci5nZXQoKSwgY29uc3RydWN0b3IuZ2V0KCkpOworCisgICAgICAgIENhbGxBcmd1bWVudHMgYXJn
cyhnZW5lcmF0b3IsIG51bGxwdHIpOworICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdzLnRoaXNS
ZWdpc3RlcigpLCBjb25zdHJ1Y3Rvci5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXIuZ2V0KCks
IE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgcG9zaXRpb24oKSwgcG9zaXRpb24oKSwgcG9zaXRp
b24oKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKICAgICB9CiAKKyAgICBpZiAobV9uZWVkc0xleGlj
YWxTY29wZSkKKyAgICAgICAgZ2VuZXJhdG9yLnBvcExleGljYWxTY29wZSh0aGlzKTsKKwogICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGNv
bnN0cnVjdG9yLmdldCgpKSwgY29uc3RydWN0b3IuZ2V0KCkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCBjMDdmZGUw
Nzk5MGIuLmIwNTE3YmQ5NzdjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgSlNWYWx1ZSBldmFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBFQ01B
TW9kZSBlY21hTW8KICAgICB9CiAKICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBl
OwotICAgIGlmIChjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0gU291cmNl
UGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlKQorICAgIGlmIChjYWxsZXJV
bmxpbmtlZENvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0Zp
ZWxkSW5pdGlhbGl6ZXJNb2RlKQogICAgICAgICBldmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4
dFR5cGU6Okluc3RhbmNlRmllbGRFdmFsQ29udGV4dDsKICAgICBlbHNlIGlmIChpc0Z1bmN0aW9u
UGFyc2VNb2RlKGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5wYXJzZU1vZGUoKSkpCiAgICAgICAg
IGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6RnVuY3Rpb25FdmFsQ29udGV4dDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCA3MzU4YmIzMjUyN2UuLjE3MDk3
ZWE5ZjI3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtNzM4LDYgKzcz
OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzSW5zdGFuY2VDbGFzc1Byb3Bl
cnR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q2xhc3NFbGVtZW50VGFnPihtX2NsYXNz
RWxlbWVudFRhZykgPT0gQ2xhc3NFbGVtZW50VGFnOjpJbnN0YW5jZTsgfQogICAgICAgICBib29s
IGlzQ2xhc3NGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGlzQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVk
c1N1cGVyQmluZGluZygpOyB9CiAgICAgICAgIGJvb2wgaXNJbnN0YW5jZUNsYXNzRmllbGQoKSBj
b25zdCB7IHJldHVybiBpc0luc3RhbmNlQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmlu
ZGluZygpOyB9CisgICAgICAgIGJvb2wgaXNTdGF0aWNDbGFzc0ZpZWxkKCkgY29uc3QgeyByZXR1
cm4gaXNTdGF0aWNDbGFzc1Byb3BlcnR5KCkgJiYgIW5lZWRzU3VwZXJCaW5kaW5nKCk7IH0KICAg
ICAgICAgYm9vbCBpc092ZXJyaWRkZW5CeUR1cGxpY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNP
dmVycmlkZGVuQnlEdXBsaWNhdGU7IH0KICAgICAgICAgYm9vbCBpc1ByaXZhdGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGUgJiBQcml2YXRlOyB9CiAgICAgICAgIGJvb2wgaGFzQ29tcHV0ZWROYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uOyB9CkBAIC03ODIsMTYgKzc4MywyMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICBib29sIGhhc0luc3RhbmNlRmllbGRz
KCkgY29uc3Q7CiAKKyAgICAgICAgYm9vbCBpc1N0YXRpY0NsYXNzRmllbGQoKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9ub2RlLT5pc1N0YXRpY0NsYXNzRmllbGQoKTsK
KyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBib29sIHNob3VsZENyZWF0ZUxleGljYWxTY29w
ZUZvckNsYXNzKFByb3BlcnR5TGlzdE5vZGUqKTsKIAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIFZl
Y3RvcjxKU1RleHRQb3NpdGlvbj4qKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBWZWN0b3I8SlNU
ZXh0UG9zaXRpb24+KiwgVmVjdG9yPEpTVGV4dFBvc2l0aW9uPiopOwogCiAgICAgICAgIHZvaWQg
ZW1pdERlY2xhcmVQcml2YXRlRmllbGROYW1lcyhCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqIHNjb3BlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QgPSBudWxs
cHRyKSBmaW5hbAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEJ5dGVjb2RlKGdl
bmVyYXRvciwgZHN0LCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBlbWl0
Qnl0ZWNvZGUoZ2VuZXJhdG9yLCBkc3QsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwogICAg
ICAgICB9CiAgICAgICAgIHZvaWQgZW1pdFB1dENvbnN0YW50UHJvcGVydHkoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiwgUHJvcGVydHlOb2RlJik7CiAgICAgICAgIHZvaWQgZW1pdFNh
dmVDb21wdXRlZEZpZWxkTmFtZShCeXRlY29kZUdlbmVyYXRvciYsIFByb3BlcnR5Tm9kZSYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDUwMDE0MGM1YzNhYi4u
YzA2NWUyYmM1MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBA
IC0yMDksNyArMjA5LDcgQEAgUGFyc2VyPExleGVyVHlwZT46On5QYXJzZXIoKQogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVy
VHlwZT46OlBhcnNlSW5uZXJSZXN1bHQsIFN0cmluZz4gUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
SW5uZXIoY29uc3QgSWRlbnRpZmllciYgY2FsbGVlTmFtZSwgU291cmNlUGFyc2VNb2RlIHBhcnNl
TW9kZSwgUGFyc2luZ0NvbnRleHQgcGFyc2luZ0NvbnRleHQsIE9wdGlvbmFsPGludD4gZnVuY3Rp
b25Db25zdHJ1Y3RvclBhcmFtZXRlcnNFbmRQb3NpdGlvbiwgY29uc3QgVmVjdG9yPEpTVGV4dFBv
c2l0aW9uPiogaW5zdGFuY2VGaWVsZExvY2F0aW9ucykKK0V4cGVjdGVkPHR5cGVuYW1lIFBhcnNl
cjxMZXhlclR5cGU+OjpQYXJzZUlubmVyUmVzdWx0LCBTdHJpbmc+IFBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUlubmVyKGNvbnN0IElkZW50aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9k
ZSBwYXJzZU1vZGUsIFBhcnNpbmdDb250ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+
IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZlY3RvcjxK
U1RleHRQb3NpdGlvbj4qIGNsYXNzRmllbGRMb2NhdGlvbnMpCiB7CiAgICAgQVNUQnVpbGRlciBj
b250ZXh0KGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV9wYXJzZXJBcmVuYSwgY29uc3RfY2FzdDxT
b3VyY2VDb2RlKj4obV9zb3VyY2UpKTsKICAgICBTY29wZVJlZiBzY29wZSA9IGN1cnJlbnRTY29w
ZSgpOwpAQCAtMjIyLDcgKzIyMiw3IEBAIEV4cGVjdGVkPHR5cGVuYW1lIFBhcnNlcjxMZXhlclR5
cGU+OjpQYXJzZUlubmVyUmVzdWx0LCBTdHJpbmc+IFBhcnNlcjxMZXhlclR5cGU+CiAgICAgICAg
IFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiBmdW5jdGlvbkluZm87CiAgICAgICAgIGlm
IChpc0dlbmVyYXRvck9yQXN5bmNGdW5jdGlvbkJvZHlQYXJzZU1vZGUocGFyc2VNb2RlKSkKICAg
ICAgICAgICAgIHBhcmFtZXRlcnMgPSBjcmVhdGVHZW5lcmF0b3JQYXJhbWV0ZXJzKGNvbnRleHQs
IGZ1bmN0aW9uSW5mby5wYXJhbWV0ZXJDb3VudCk7Ci0gICAgICAgIGVsc2UgaWYgKHBhcnNlTW9k
ZSA9PSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGUpCisgICAg
ICAgIGVsc2UgaWYgKHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0
aWFsaXplck1vZGUpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gY29udGV4dC5jcmVhdGVGb3Jt
YWxQYXJhbWV0ZXJMaXN0KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBhcmFtZXRlcnMg
PSBwYXJzZUZ1bmN0aW9uUGFyYW1ldGVycyhjb250ZXh0LCBwYXJzZU1vZGUsIGZ1bmN0aW9uSW5m
byk7CkBAIC0yNTYsOSArMjU2LDkgQEAgRXhwZWN0ZWQ8dHlwZW5hbWUgUGFyc2VyPExleGVyVHlw
ZT46OlBhcnNlSW5uZXJSZXN1bHQsIFN0cmluZz4gUGFyc2VyPExleGVyVHlwZT4KICAgICAgICAg
ICAgIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VBc3luY0dlbmVyYXRvckZ1bmN0aW9uU291cmNlRWxl
bWVudHMoY29udGV4dCwgcGFyc2VNb2RlLCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiwg
Q2hlY2tGb3JTdHJpY3RNb2RlKTsKICAgICAgICAgZWxzZSBpZiAocGFyc2luZ0NvbnRleHQgPT0g
UGFyc2luZ0NvbnRleHQ6OkZ1bmN0aW9uQ29uc3RydWN0b3IpCiAgICAgICAgICAgICBzb3VyY2VF
bGVtZW50cyA9IHBhcnNlU2luZ2xlRnVuY3Rpb24oY29udGV4dCwgZnVuY3Rpb25Db25zdHJ1Y3Rv
clBhcmFtZXRlcnNFbmRQb3NpdGlvbik7Ci0gICAgICAgIGVsc2UgaWYgKHBhcnNlTW9kZSA9PSBT
b3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJbml0aWFsaXplck1vZGUpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChpbnN0YW5jZUZpZWxkTG9jYXRpb25zICYmICFpbnN0YW5jZUZpZWxkTG9jYXRp
b25zLT5pc0VtcHR5KCkpOwotICAgICAgICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZUluc3Rh
bmNlRmllbGRJbml0aWFsaXplclNvdXJjZUVsZW1lbnRzKGNvbnRleHQsICppbnN0YW5jZUZpZWxk
TG9jYXRpb25zKTsKKyAgICAgICAgZWxzZSBpZiAocGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9k
ZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZSkgeworICAgICAgICAgICAgQVNTRVJUKGNsYXNz
RmllbGRMb2NhdGlvbnMgJiYgIWNsYXNzRmllbGRMb2NhdGlvbnMtPmlzRW1wdHkoKSk7CisgICAg
ICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBhcnNlQ2xhc3NGaWVsZEluaXRpYWxpemVyU291cmNl
RWxlbWVudHMoY29udGV4dCwgKmNsYXNzRmllbGRMb2NhdGlvbnMpOwogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzID0gcGFyc2VTb3VyY2VFbGVtZW50cyhjb250ZXh0
LCBDaGVja0ZvclN0cmljdE1vZGUpOwogICAgIH0KQEAgLTIxNzgsNyArMjE3OCw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyKiBzdHJpbmdBcnRpY2xlRm9yRnVuY3Rpb25Nb2RlKFNvdXJjZVBhcnNlTW9k
ZSBtb2RlKQogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZToKICAgICBjYXNl
IFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlQW5hbHl6ZU1vZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJz
ZU1vZGU6Ok1vZHVsZUV2YWx1YXRlTW9kZToKLSAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6SW5z
dGFuY2VGaWVsZEluaXRpYWxpemVyTW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xh
c3NGaWVsZEluaXRpYWxpemVyTW9kZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuICIiOwogICAgIH0KQEAgLTIyMjAsNyArMjIyMCw3IEBAIHN0
YXRpYyBjb25zdCBjaGFyKiBzdHJpbmdGb3JGdW5jdGlvbk1vZGUoU291cmNlUGFyc2VNb2RlIG1v
ZGUpCiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlOgogICAgIGNhc2UgU291
cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9k
ZTo6TW9kdWxlRXZhbHVhdGVNb2RlOgotICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpJbnN0YW5j
ZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOgorICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0Zp
ZWxkSW5pdGlhbGl6ZXJNb2RlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4gIiI7CiAgICAgfQpAQCAtMjgzOCw2ICsyODM4LDcgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUNsYXNzRGVjbGFyYXQKIH0KIAogc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgaW5z
dGFuY2VDb21wdXRlZE5hbWVQcmVmaXggeyAiaW5zdGFuY2VDb21wdXRlZE5hbWUiX3MgfTsKK3N0
YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHN0YXRpY0NvbXB1dGVkTmFtZVByZWZpeCB7ICJz
dGF0aWNDb21wdXRlZE5hbWUiX3MgfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4K
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXhwcmVzc2lvbiBQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyhUcmVlQnVpbGRlciYgY29udGV4dCwgRnVuY3Rpb25OYW1l
UmVxdWlyZW1lbnRzIHJlcXVpcmVtZW50cywgUGFyc2VyQ2xhc3NJbmZvPFRyZWVCdWlsZGVyPiYg
aW5mbykKQEAgLTI4ODEsNyArMjg4Miw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUNsYXNzRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyhUCiAgICAg
VHJlZUV4cHJlc3Npb24gY29uc3RydWN0b3IgPSAwOwogICAgIFRyZWVQcm9wZXJ0eUxpc3QgY2xh
c3NFbGVtZW50cyA9IDA7CiAgICAgVHJlZVByb3BlcnR5TGlzdCBjbGFzc0VsZW1lbnRzVGFpbCA9
IDA7Ci0gICAgdW5zaWduZWQgbnVtQ29tcHV0ZWRGaWVsZHMgPSAwOworICAgIHVuc2lnbmVkIG5l
eHRJbnN0YW5jZUNvbXB1dGVkRmllbGRJRCA9IDA7CisgICAgdW5zaWduZWQgbmV4dFN0YXRpY0Nv
bXB1dGVkRmllbGRJRCA9IDA7CiAgICAgd2hpbGUgKCFtYXRjaChDTE9TRUJSQUNFKSkgewogICAg
ICAgICBpZiAobWF0Y2goU0VNSUNPTE9OKSkgewogICAgICAgICAgICAgbmV4dCgpOwpAQCAtMjk5
MCwxNSArMjk5MiwyMCBAQCBwYXJzZU1ldGhvZDoKICAgICAgICAgICAgIHR5cGUgPSBzdGF0aWNf
Y2FzdDxQcm9wZXJ0eU5vZGU6OlR5cGU+KHR5cGUgfCAoaXNHZXR0ZXIgPyBQcm9wZXJ0eU5vZGU6
OkdldHRlciA6IFByb3BlcnR5Tm9kZTo6U2V0dGVyKSk7CiAgICAgICAgICAgICBwcm9wZXJ0eSA9
IHBhcnNlR2V0dGVyU2V0dGVyKGNvbnRleHQsIHR5cGUsIG1ldGhvZFN0YXJ0LCBDb25zdHJ1Y3Rv
cktpbmQ6Ok5vbmUsIHRhZyk7CiAgICAgICAgICAgICBmYWlsSWZGYWxzZShwcm9wZXJ0eSwgIkNh
bm5vdCBwYXJzZSB0aGlzIG1ldGhvZCIpOwotICAgICAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVz
ZVB1YmxpY0NsYXNzRmllbGRzKCkgJiYgIW1hdGNoKE9QRU5QQVJFTikgJiYgdGFnID09IENsYXNz
RWxlbWVudFRhZzo6SW5zdGFuY2UgJiYgcGFyc2VNb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6TWV0
aG9kTW9kZSkgeworICAgICAgICB9IGVsc2UgaWYgKE9wdGlvbnM6OnVzZVB1YmxpY0NsYXNzRmll
bGRzKCkgJiYgIW1hdGNoKE9QRU5QQVJFTikgJiYgKHRhZyA9PSBDbGFzc0VsZW1lbnRUYWc6Oklu
c3RhbmNlIHx8IE9wdGlvbnM6OnVzZVB1YmxpY1N0YXRpY0NsYXNzRmllbGRzKCkpICYmIHBhcnNl
TW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGUpIHsKICAgICAgICAgICAgIEFTU0VS
VCghaXNHZXR0ZXIgJiYgIWlzU2V0dGVyKTsKICAgICAgICAgICAgIGlmIChpZGVudCkgewogICAg
ICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gcHJvcGVydHlOYW1lcy5j
b25zdHJ1Y3RvciwgIkNhbm5vdCBkZWNsYXJlIGNsYXNzIGZpZWxkIG5hbWVkICdjb25zdHJ1Y3Rv
ciciKTsKICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoKmlkZW50ID09IHByb3Bl
cnR5TmFtZXMuY29uc3RydWN0b3JQcml2YXRlRmllbGQsICJDYW5ub3QgZGVjbGFyZSBwcml2YXRl
IGNsYXNzIGZpZWxkIG5hbWVkICcjY29uc3RydWN0b3InIik7CisgICAgICAgICAgICAgICAgaWYg
KHRhZyA9PSBDbGFzc0VsZW1lbnRUYWc6OlN0YXRpYykKKyAgICAgICAgICAgICAgICAgICAgc2Vt
YW50aWNGYWlsSWZUcnVlKCppZGVudCA9PSBwcm9wZXJ0eU5hbWVzLnByb3RvdHlwZSwgIkNhbm5v
dCBkZWNsYXJlIGEgc3RhdGljIGZpZWxkIG5hbWVkICdwcm90b3R5cGUnIik7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmIChjb21wdXRlZFByb3BlcnR5TmFtZSkgewotICAgICAgICAg
ICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFyZW5hKCkubWFrZVByaXZh
dGVJZGVudGlmaWVyKG1fdm0sIGluc3RhbmNlQ29tcHV0ZWROYW1lUHJlZml4LCBudW1Db21wdXRl
ZEZpZWxkcysrKTsKKyAgICAgICAgICAgICAgICBpZiAodGFnID09IENsYXNzRWxlbWVudFRhZzo6
SW5zdGFuY2UpCisgICAgICAgICAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRl
bnRpZmllckFyZW5hKCkubWFrZVByaXZhdGVJZGVudGlmaWVyKG1fdm0sIGluc3RhbmNlQ29tcHV0
ZWROYW1lUHJlZml4LCBuZXh0SW5zdGFuY2VDb21wdXRlZEZpZWxkSUQrKyk7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5hLmlk
ZW50aWZpZXJBcmVuYSgpLm1ha2VQcml2YXRlSWRlbnRpZmllcihtX3ZtLCBzdGF0aWNDb21wdXRl
ZE5hbWVQcmVmaXgsIG5leHRTdGF0aWNDb21wdXRlZEZpZWxkSUQrKyk7CiAgICAgICAgICAgICAg
ICAgRGVjbGFyYXRpb25SZXN1bHRNYXNrIGRlY2xhcmF0aW9uUmVzdWx0ID0gY2xhc3NTY29wZS0+
ZGVjbGFyZUxleGljYWxWYXJpYWJsZShpZGVudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChkZWNsYXJhdGlvblJlc3VsdCwgZGVjbGFyYXRpb25SZXN1bHQgPT0gRGVjbGFy
YXRpb25SZXN1bHQ6OlZhbGlkKTsKICAgICAgICAgICAgICAgICBjbGFzc1Njb3BlLT51c2VWYXJp
YWJsZShpZGVudCwgZmFsc2UpOwpAQCAtMzA2NSwxMyArMzA3MiwxOSBAQCBwYXJzZU1ldGhvZDoK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUluc3Rh
bmNlRmllbGRJbml0aWFsaXplclNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBj
b25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+JiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQordGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlQ2xhc3NGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoVHJlZUJ1aWxk
ZXImIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4mIGNsYXNzRmllbGRMb2Nh
dGlvbnMpCiB7CiAgICAgVHJlZVNvdXJjZUVsZW1lbnRzIHNvdXJjZUVsZW1lbnRzID0gY29udGV4
dC5jcmVhdGVTb3VyY2VFbGVtZW50cygpOwogICAgIGN1cnJlbnRTY29wZSgpLT5zZXRJc0NsYXNz
U2NvcGUoKTsKIAogICAgIHVuc2lnbmVkIG51bUNvbXB1dGVkRmllbGRzID0gMDsKLSAgICBmb3Ig
KGF1dG8gbG9jYXRpb24gOiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKSB7CisgICAgZm9yIChhdXRv
IGxvY2F0aW9uIDogY2xhc3NGaWVsZExvY2F0aW9ucykgeworICAgICAgICAvLyBUaGlzIGxvb3Ag
d2lsbCBlaXRoZXIgcGFyc2Ugb25seSBzdGF0aWMgZmllbGRzIG9yIG9ubHkKKyAgICAgICAgLy8g
aW5zdGFuY2UgZmllbGRzLCBidXQgbmV2ZXIgYSBtaXg7IHdlIGNvdWxkIG1ha2UgaXQgc2xpZ2h0
bHkKKyAgICAgICAgLy8gc21hcnRlciBhYm91dCBwYXJzaW5nIGdpdmVuIHRoYXQgZmFjdCwgYnV0
IGl0J3MgcHJvYmFibHkKKyAgICAgICAgLy8gbm90IHdvcnRoIHRoZSBoYXNzbGUsIHNvIGJlZ2lu
IGVhY2ggaXRlcmF0aW9uIHdpdGhvdXQKKyAgICAgICAgLy8ga25vd2luZyB3aGljaCBraW5kIHRo
ZSBuZXh0IGZpZWxkIHdpbGwgYmUuCisgICAgICAgIGJvb2wgaXNTdGF0aWNGaWVsZCA9IGZhbHNl
OwogICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGhhc0xpbmVUZXJtaW5h
dG9yQmVmb3JlVG9rZW4KICAgICAgICAgLy8gb24gY2xhc3MgZmllbGRzLCBzbyB3ZSBzZXQgdGhp
cyB2YWx1ZSB0byBmYWxzZS4KICAgICAgICAgTGV4ZXJTdGF0ZSBsZXhlclN0YXRlIHsgbG9jYXRp
b24ub2Zmc2V0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9jYXRpb24ubGluZVN0YXJ0T2Zmc2V0
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvY2F0aW9uLmxpbmUpLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obG9jYXRpb24ubGluZSksIGZhbHNlIH07CkBAIC0zMDgwLDQxICszMDkzLDU2IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZUluc3RhbmNlCiAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBmaWVsZExvY2F0
aW9uID0gdG9rZW5Mb2NhdGlvbigpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
IG51bGxwdHI7CiAgICAgICAgIERlZmluZUZpZWxkTm9kZTo6VHlwZSB0eXBlID0gRGVmaW5lRmll
bGROb2RlOjpUeXBlOjpOYW1lOwotICAgICAgICBzd2l0Y2ggKG1fdG9rZW4ubV90eXBlKSB7Ci0g
ICAgICAgIGNhc2UgUFJJVkFURU5BTUU6Ci0gICAgICAgICAgICB0eXBlID0gRGVmaW5lRmllbGRO
b2RlOjpUeXBlOjpQcml2YXRlTmFtZTsKLSAgICAgICAgICAgIEZBTExUSFJPVUdIOwotICAgICAg
ICBjYXNlIFNUUklORzoKLSAgICAgICAgY2FzZSBJREVOVDoKLSAgICAgICAgbmFtZWRLZXl3b3Jk
OgotICAgICAgICAgICAgaWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKLSAgICAgICAgICAg
IEFTU0VSVChpZGVudCk7Ci0gICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBCSUdJTlQ6Ci0gICAgICAgICAgICBpZGVudCA9ICZtX3BhcnNlckFyZW5h
LmlkZW50aWZpZXJBcmVuYSgpLm1ha2VCaWdJbnREZWNpbWFsSWRlbnRpZmllcihjb25zdF9jYXN0
PFZNJj4obV92bSksICptX3Rva2VuLm1fZGF0YS5iaWdJbnRTdHJpbmcsIG1fdG9rZW4ubV9kYXRh
LnJhZGl4KTsKLSAgICAgICAgICAgIEFTU0VSVChpZGVudCk7Ci0gICAgICAgICAgICBuZXh0KCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBET1VCTEU6Ci0gICAgICAgIGNhc2Ug
SU5URUdFUjoKLSAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRlbnRpZmllckFy
ZW5hKCkubWFrZU51bWVyaWNJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0mPihtX3ZtKSwgbV90b2tl
bi5tX2RhdGEuZG91YmxlVmFsdWUpOwotICAgICAgICAgICAgQVNTRVJUKGlkZW50KTsKLSAgICAg
ICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9QRU5CUkFD
S0VUOiB7CisKKyAgICAgICAgaWYgKG1hdGNoKFJFU0VSVkVEX0lGX1NUUklDVCkgJiYgKm1fdG9r
ZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+c3RhdGljS2V5d29yZCkgewor
ICAgICAgICAgICAgYXV0byogc3RhdGljSWRlbnRpZmllciA9IG1fdG9rZW4ubV9kYXRhLmlkZW50
OworICAgICAgICAgICAgQVNTRVJUKHN0YXRpY0lkZW50aWZpZXIpOwogICAgICAgICAgICAgbmV4
dCgpOwotICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gY29tcHV0ZWRQcm9wZXJ0eU5hbWUgPSBw
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwotICAgICAgICAgICAgZmFpbElmRmFs
c2UoY29tcHV0ZWRQcm9wZXJ0eU5hbWUsICJDYW5ub3QgcGFyc2UgY29tcHV0ZWQgcHJvcGVydHkg
bmFtZSIpOwotICAgICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9yRmFpbChDTE9TRUJSQUNLRVQs
ICJdIiwgImVuZCIsICJjb21wdXRlZCBwcm9wZXJ0eSBuYW1lIik7Ci0gICAgICAgICAgICBpZGVu
dCA9ICZtX3BhcnNlckFyZW5hLmlkZW50aWZpZXJBcmVuYSgpLm1ha2VQcml2YXRlSWRlbnRpZmll
cihtX3ZtLCBpbnN0YW5jZUNvbXB1dGVkTmFtZVByZWZpeCwgbnVtQ29tcHV0ZWRGaWVsZHMrKyk7
Ci0gICAgICAgICAgICB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpDb21wdXRlZE5hbWU7
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChtYXRjaChTRU1JQ09MT04pIHx8
IG1hdGNoIChFUVVBTCkgfHwgbWF0Y2goQ0xPU0VCUkFDRSkgfHwgbV9sZXhlci0+aGFzTGluZVRl
cm1pbmF0b3JCZWZvcmVUb2tlbigpKQorICAgICAgICAgICAgICAgIGlkZW50ID0gc3RhdGljSWRl
bnRpZmllcjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpc1N0YXRpY0ZpZWxk
ID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKG1f
dG9rZW4ubV90eXBlICYgS2V5d29yZFRva2VuRmxhZykKLSAgICAgICAgICAgICAgICBnb3RvIG5h
bWVkS2V5d29yZDsKLSAgICAgICAgICAgIGZhaWxEdWVUb1VuZXhwZWN0ZWRUb2tlbigpOworCisg
ICAgICAgIGlmICghaWRlbnQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV90b2tlbi5tX3R5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgUFJJVkFURU5BTUU6CisgICAgICAgICAgICAgICAgdHlwZSA9
IERlZmluZUZpZWxkTm9kZTo6VHlwZTo6UHJpdmF0ZU5hbWU7CisgICAgICAgICAgICAgICAgRkFM
TFRIUk9VR0g7CisgICAgICAgICAgICBjYXNlIFNUUklORzoKKyAgICAgICAgICAgIGNhc2UgSURF
TlQ6CisgICAgICAgICAgICBuYW1lZEtleXdvcmQ6CisgICAgICAgICAgICAgICAgaWRlbnQgPSBt
X3Rva2VuLm1fZGF0YS5pZGVudDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaWRlbnQpOworICAg
ICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQklHSU5UOgorICAgICAgICAgICAgICAgIGlkZW50ID0gJm1fcGFyc2VyQXJlbmEuaWRl
bnRpZmllckFyZW5hKCkubWFrZUJpZ0ludERlY2ltYWxJZGVudGlmaWVyKGNvbnN0X2Nhc3Q8Vk0m
PihtX3ZtKSwgKm1fdG9rZW4ubV9kYXRhLmJpZ0ludFN0cmluZywgbV90b2tlbi5tX2RhdGEucmFk
aXgpOworICAgICAgICAgICAgICAgIEFTU0VSVChpZGVudCk7CisgICAgICAgICAgICAgICAgbmV4
dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBET1VCTEU6Cisg
ICAgICAgICAgICBjYXNlIElOVEVHRVI6CisgICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJz
ZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3RfY2Fz
dDxWTSY+KG1fdm0pLCBtX3Rva2VuLm1fZGF0YS5kb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGlkZW50KTsKKyAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE9QRU5CUkFDS0VUOiB7CisgICAgICAgICAgICAg
ICAgbmV4dCgpOworICAgICAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIGNvbXB1dGVkUHJvcGVy
dHlOYW1lID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBmYWlsSWZGYWxzZShjb21wdXRlZFByb3BlcnR5TmFtZSwgIkNhbm5vdCBwYXJzZSBjb21w
dXRlZCBwcm9wZXJ0eSBuYW1lIik7CisgICAgICAgICAgICAgICAgaGFuZGxlUHJvZHVjdGlvbk9y
RmFpbChDTE9TRUJSQUNLRVQsICJdIiwgImVuZCIsICJjb21wdXRlZCBwcm9wZXJ0eSBuYW1lIik7
CisgICAgICAgICAgICAgICAgaWRlbnQgPSAmbV9wYXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEo
KS5tYWtlUHJpdmF0ZUlkZW50aWZpZXIobV92bSwKKyAgICAgICAgICAgICAgICAgICAgaXNTdGF0
aWNGaWVsZCA/IHN0YXRpY0NvbXB1dGVkTmFtZVByZWZpeCA6IGluc3RhbmNlQ29tcHV0ZWROYW1l
UHJlZml4LAorICAgICAgICAgICAgICAgICAgICBudW1Db21wdXRlZEZpZWxkcysrKTsKKyAgICAg
ICAgICAgICAgICB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpDb21wdXRlZE5hbWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIGlmIChtX3Rva2VuLm1fdHlwZSAmIEtleXdvcmRUb2tlbkZsYWcp
CisgICAgICAgICAgICAgICAgICAgIGdvdG8gbmFtZWRLZXl3b3JkOworICAgICAgICAgICAgICAg
IGZhaWxEdWVUb1VuZXhwZWN0ZWRUb2tlbigpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAK
ICAgICAgICAgLy8gT25seSB2YWxpZCBjbGFzcyBmaWVsZHMgYXJlIGhhbmRsZWQgaW4gdGhpcyBm
dW5jdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IGNlY2NmODE2
MzI4ZC4uMGU4MjAzNTk1Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgK
QEAgLTI2MCw3ICsyNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2Rl
OjpHZXR0ZXJNb2RlOgogICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6U2V0dGVyTW9kZToK
ICAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGU6Ci0gICAgICAgIGNhc2Ug
U291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxkSW5pdGlhbGl6ZXJNb2RlOgorICAgICAgICBj
YXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZToKICAgICAgICAg
ICAgIHNldElzRnVuY3Rpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0xNzEyLDcgKzE3
MTIsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNv
dXJjZUVsZW1lbnRzIHBhcnNlQXN5bmNGdW5jdGlvblNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVy
JiwgU291cmNlUGFyc2VNb2RlLCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uLCBT
b3VyY2VFbGVtZW50c01vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJl
ZVNvdXJjZUVsZW1lbnRzIHBhcnNlQXN5bmNHZW5lcmF0b3JGdW5jdGlvblNvdXJjZUVsZW1lbnRz
KFRyZWVCdWlsZGVyJiwgU291cmNlUGFyc2VNb2RlLCBib29sIGlzQXJyb3dGdW5jdGlvbkJvZHlF
eHByZXNzaW9uLCBTb3VyY2VFbGVtZW50c01vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIHBhcnNlU2luZ2xlRnVuY3Rpb24oVHJlZUJ1aWxk
ZXImLCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRp
b24pOwotICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRz
IHBhcnNlSW5zdGFuY2VGaWVsZEluaXRpYWxpemVyU291cmNlRWxlbWVudHMoVHJlZUJ1aWxkZXIm
LCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgcGFyc2VDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJT
b3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYsIGNvbnN0IFZlY3RvcjxKU1RleHRQb3NpdGlvbj4m
KTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VT
dGF0ZW1lbnRMaXN0SXRlbShUcmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3Rp
dmUsIHVuc2lnbmVkKiBkaXJlY3RpdmVMaXRlcmFsTGVuZ3RoKTsKICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1lbnQoVHJlZUJ1aWxkZXIm
LCBjb25zdCBJZGVudGlmaWVyKiYgZGlyZWN0aXZlLCB1bnNpZ25lZCogZGlyZWN0aXZlTGl0ZXJh
bExlbmd0aCA9IG51bGxwdHIpOwogICAgIGVudW0gY2xhc3MgRXhwb3J0VHlwZSB7IEV4cG9ydGVk
LCBOb3RFeHBvcnRlZCB9OwpAQCAtMjA1Myw3ICsyMDUzLDcgQEAgcHJpdmF0ZToKIAogdGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgotc3Rk
Ojp1bmlxdWVfcHRyPFBhcnNlZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShQYXJzZXJF
cnJvciYgZXJyb3IsIGNvbnN0IElkZW50aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9k
ZSBwYXJzZU1vZGUsIFBhcnNpbmdDb250ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+
IGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZhcmlhYmxl
RW52aXJvbm1lbnQqIHBhcmVudFNjb3BlUHJpdmF0ZU5hbWVzLCBjb25zdCBWZWN0b3I8SlNUZXh0
UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxkTG9jYXRpb25zKQorc3RkOjp1bmlxdWVfcHRyPFBhcnNl
ZE5vZGU+IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZShQYXJzZXJFcnJvciYgZXJyb3IsIGNvbnN0
IElkZW50aWZpZXImIGNhbGxlZU5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFBhcnNp
bmdDb250ZXh0IHBhcnNpbmdDb250ZXh0LCBPcHRpb25hbDxpbnQ+IGZ1bmN0aW9uQ29uc3RydWN0
b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVu
dFNjb3BlUHJpdmF0ZU5hbWVzLCBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBjbGFzc0Zp
ZWxkTG9jYXRpb25zKQogewogICAgIGludCBlcnJMaW5lOwogICAgIFN0cmluZyBlcnJNc2c7CkBA
IC0yMDczLDcgKzIwNzMsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlKFBhcnNlckVycm9yJiBlcnJvciwgY29uc3QgSQogICAgICAgICBwYXJl
bnRTY29wZVByaXZhdGVOYW1lcy0+Y29weVByaXZhdGVOYW1lc1RvKGN1cnJlbnRTY29wZSgpLT5s
ZXhpY2FsVmFyaWFibGVzKCkpOwogICAgIH0KIAotICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJz
ZUlubmVyKGNhbGxlZU5hbWUsIHBhcnNlTW9kZSwgcGFyc2luZ0NvbnRleHQsIGZ1bmN0aW9uQ29u
c3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24sIGluc3RhbmNlRmllbGRMb2NhdGlvbnMpOwor
ICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBwYXJzZUlubmVyKGNhbGxlZU5hbWUsIHBhcnNlTW9kZSwg
cGFyc2luZ0NvbnRleHQsIGZ1bmN0aW9uQ29uc3RydWN0b3JQYXJhbWV0ZXJzRW5kUG9zaXRpb24s
IGNsYXNzRmllbGRMb2NhdGlvbnMpOwogCiAgICAgaW50IGxpbmVOdW1iZXIgPSBtX2xleGVyLT5s
aW5lTnVtYmVyKCk7CiAgICAgYm9vbCBsZXhFcnJvciA9IG1fbGV4ZXItPnNhd0Vycm9yKCk7CkBA
IC0yMTU4LDcgKzIxNTgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoCiAg
ICAgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9u
ZSwKICAgICBEZWJ1Z2dlclBhcnNlRGF0YSogZGVidWdnZXJQYXJzZURhdGEgPSBudWxscHRyLAog
ICAgIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3BlUHJpdmF0ZU5hbWVzID0g
bnVsbHB0ciwKLSAgICBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBpbnN0YW5jZUZpZWxk
TG9jYXRpb25zID0gbnVsbHB0ciwKKyAgICBjb25zdCBWZWN0b3I8SlNUZXh0UG9zaXRpb24+KiBj
bGFzc0ZpZWxkTG9jYXRpb25zID0gbnVsbHB0ciwKICAgICBib29sIGlzSW5zaWRlT3JkaW5hcnlG
dW5jdGlvbiA9IGZhbHNlKQogewogICAgIEFTU0VSVCghc291cmNlLnByb3ZpZGVyKCktPnNvdXJj
ZSgpLmlzTnVsbCgpKTsKQEAgLTIxNzAsNyArMjE3MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJz
ZWROb2RlPiBwYXJzZSgKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcmVzdWx0Owog
ICAgIGlmIChzb3VyY2UucHJvdmlkZXIoKS0+c291cmNlKCkuaXM4Qml0KCkpIHsKICAgICAgICAg
UGFyc2VyPExleGVyPExDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIGJ1aWx0aW5Nb2RlLCBzdHJp
Y3RNb2RlLCBzY3JpcHRNb2RlLCBwYXJzZU1vZGUsIHN1cGVyQmluZGluZywgZGVmYXVsdENvbnN0
cnVjdG9yS2luZEZvclRvcExldmVsRnVuY3Rpb24sIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNFdmFs
Tm9kZTxQYXJzZWROb2RlPigpLCBldmFsQ29udGV4dFR5cGUsIGRlYnVnZ2VyUGFyc2VEYXRhLCBp
c0luc2lkZU9yZGluYXJ5RnVuY3Rpb24pOwotICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2U8
UGFyc2VkTm9kZT4oZXJyb3IsIG5hbWUsIHBhcnNlTW9kZSwgaXNFdmFsTm9kZTxQYXJzZWROb2Rl
PigpID8gUGFyc2luZ0NvbnRleHQ6OkV2YWwgOiBQYXJzaW5nQ29udGV4dDo6UHJvZ3JhbSwgV1RG
OjpudWxsb3B0LCBwYXJlbnRTY29wZVByaXZhdGVOYW1lcywgaW5zdGFuY2VGaWVsZExvY2F0aW9u
cyk7CisgICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvciwgbmFt
ZSwgcGFyc2VNb2RlLCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCkgPyBQYXJzaW5nQ29udGV4dDo6
RXZhbCA6IFBhcnNpbmdDb250ZXh0OjpQcm9ncmFtLCBXVEY6Om51bGxvcHQsIHBhcmVudFNjb3Bl
UHJpdmF0ZU5hbWVzLCBjbGFzc0ZpZWxkTG9jYXRpb25zKTsKICAgICAgICAgaWYgKHBvc2l0aW9u
QmVmb3JlTGFzdE5ld2xpbmUpCiAgICAgICAgICAgICAqcG9zaXRpb25CZWZvcmVMYXN0TmV3bGlu
ZSA9IHBhcnNlci5wb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKCk7CiAgICAgICAgIGlmIChidWls
dGluTW9kZSA9PSBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpCdWlsdGluKSB7CkBAIC0yMTgzLDcgKzIx
ODMsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoCiAgICAgfSBlbHNlIHsK
ICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShkZWZhdWx0Q29uc3RydWN0b3JLaW5kRm9yVG9w
TGV2ZWxGdW5jdGlvbiA9PSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsICJCdWlsdGluRXhlY3V0YWJs
ZXMncyBzcGVjaWFsIGNvbnN0cnVjdG9ycyBzaG91bGQgYWx3YXlzIHVzZSBhIDgtYml0IHN0cmlu
ZyIpOwogICAgICAgICBQYXJzZXI8TGV4ZXI8VUNoYXI+PiBwYXJzZXIodm0sIHNvdXJjZSwgYnVp
bHRpbk1vZGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIHBhcnNlTW9kZSwgc3VwZXJCaW5kaW5n
LCBkZWZhdWx0Q29uc3RydWN0b3JLaW5kRm9yVG9wTGV2ZWxGdW5jdGlvbiwgZGVyaXZlZENvbnRl
eHRUeXBlLCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCksIGV2YWxDb250ZXh0VHlwZSwgZGVidWdn
ZXJQYXJzZURhdGEsIGlzSW5zaWRlT3JkaW5hcnlGdW5jdGlvbik7Ci0gICAgICAgIHJlc3VsdCA9
IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvciwgbmFtZSwgcGFyc2VNb2RlLCBpc0V2YWxO
b2RlPFBhcnNlZE5vZGU+KCkgPyBQYXJzaW5nQ29udGV4dDo6RXZhbCA6IFBhcnNpbmdDb250ZXh0
OjpQcm9ncmFtLCBXVEY6Om51bGxvcHQsIHBhcmVudFNjb3BlUHJpdmF0ZU5hbWVzLCBpbnN0YW5j
ZUZpZWxkTG9jYXRpb25zKTsKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlPFBhcnNlZE5v
ZGU+KGVycm9yLCBuYW1lLCBwYXJzZU1vZGUsIGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4oKSA/IFBh
cnNpbmdDb250ZXh0OjpFdmFsIDogUGFyc2luZ0NvbnRleHQ6OlByb2dyYW0sIFdURjo6bnVsbG9w
dCwgcGFyZW50U2NvcGVQcml2YXRlTmFtZXMsIGNsYXNzRmllbGRMb2NhdGlvbnMpOwogICAgICAg
ICBpZiAocG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSkKICAgICAgICAgICAgICpwb3NpdGlvbkJl
Zm9yZUxhc3ROZXdsaW5lID0gcGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUoKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmgKaW5kZXggZWFm
ZmRlMjFjMTU5Li43OTUxOGEzMDU0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlck1vZGVzLmgKQEAgLTY2LDcgKzY2LDcgQEAgZW51bSBjbGFzcyBTb3VyY2VQYXJzZU1v
ZGUgOiB1aW50OF90IHsKICAgICBBc3luY0dlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGUgPSAx
NiwKICAgICBBc3luY0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlICAgPSAxNywKICAgICBHZW5l
cmF0b3JXcmFwcGVyTWV0aG9kTW9kZSAgICAgICAgPSAxOCwKLSAgICBJbnN0YW5jZUZpZWxkSW5p
dGlhbGl6ZXJNb2RlICAgICAgPSAxOSwKKyAgICBDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlICAg
ICAgICAgPSAxOSwKIH07CiAKIGNsYXNzIFNvdXJjZVBhcnNlTW9kZVNldCB7IApAQCAtMTE2LDcg
KzExNiw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Z1bmN0aW9uUGFyc2VNb2RlKFNvdXJjZVBh
cnNlTW9kZSBwYXJzZU1vZGUpCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0
b3JCb2R5TW9kZSwKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBw
ZXJGdW5jdGlvbk1vZGUsCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JX
cmFwcGVyTWV0aG9kTW9kZSwKLSAgICAgICAgU291cmNlUGFyc2VNb2RlOjpJbnN0YW5jZUZpZWxk
SW5pdGlhbGl6ZXJNb2RlKS5jb250YWlucyhwYXJzZU1vZGUpOworICAgICAgICBTb3VyY2VQYXJz
ZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpLmNvbnRhaW5zKHBhcnNlTW9kZSk7CiB9
IAogCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNBc3luY0Z1bmN0aW9uUGFyc2VNb2RlKFNvdXJjZVBh
cnNlTW9kZSBwYXJzZU1vZGUpIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCmluZGV4IDMzMjhkZjZjYzM5Ny4uMTRmMzczYThmYTAz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3Rv
dHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90
b3R5cGUuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1
bmN0aW9uTW9kZToKLSAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Okluc3RhbmNlRmllbGRJ
bml0aWFsaXplck1vZGU6CisgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxk
SW5pdGlhbGl6ZXJNb2RlOgogICAgICAgICAgICAgZnVuY3Rpb25IZWFkZXIgPSAiIjsKICAgICAg
ICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwCmluZGV4IDMxZGQ4NzMyZTllMi4uMGZkZDliZmU1ZjA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcApAQCAtNDIxLDcgKzQyMSw3IEBAIEpT
Q19ERUZJTkVfQ1VTVE9NX0dFVFRFUihjYWxsZXJHZXR0ZXIsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWCiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2Vu
ZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5
bmNHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6
R2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGU6Ci0gICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Oklu
c3RhbmNlRmllbGRJbml0aWFsaXplck1vZGU6CisgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkNs
YXNzRmllbGRJbml0aWFsaXplck1vZGU6CiAgICAgICAgIGlmICghZnVuY3Rpb24tPmpzRXhlY3V0
YWJsZSgpLT5pc0luU3RyaWN0Q29udGV4dCgpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjYWxsZXIpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJGdW5jdGlvbi5jYWxsZXIgdXNlZCB0byByZXRy
aWV2ZSBzdHJpY3QgY2FsbGVyIl9zKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAppbmRleCBhMTAzZWY4YzEzZTMuLjU2YzA5MjBhYTFhZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCkBAIC01MjUsNiArNTI1LDcg
QEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAgdihEb3VibGUs
IGFsbG93SG9pc3RpbmdMSUNNUHJvYmFiaWxpdHksIDAuNSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihCb29sLCBleHBvc2VDdXN0b21TZXR0ZXJzT25HbG9iYWxPYmplY3RGb3JUZXN0aW5nLCBm
YWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCB1c2VKSVRDYWdlLCBjYW5Vc2VK
SVRDYWdlKCksIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoQm9vbCwgdXNlUHVibGljU3RhdGlj
Q2xhc3NGaWVsZHMsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5k
ZXJzdGFuZCBwdWJsaWMgc3RhdGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKIAog
ZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKLS0gCjIuMjguMAoK
</data>

          </attachment>
      

    </bug>

</bugzilla>