<?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>78588</bug_id>
          
          <creation_ts>2012-02-14 01:21:55 -0800</creation_ts>
          <short_desc>Focus navigation should traverse nodes in reified DOM tree order.</short_desc>
          <delta_ts>2012-06-04 21:14:41 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>82576</dependson>
          <blocked>78585</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Hayato Ito">hayato</assigned_to>
          <cc>cdumez</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>morrita</cc>
    
    <cc>ossy</cc>
    
    <cc>shinyak</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556088</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-02-14 01:21:55 -0800</bug_when>
    <thetext>The spec is here:
 https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#focus-navigation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583905</commentid>
    <comment_count>1</comment_count>
      <attachid>132994</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-03-21 01:54:03 -0700</bug_when>
    <thetext>Created attachment 132994
wip. depends on reified tree traversal APIs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585042</commentid>
    <comment_count>2</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-03-22 00:51:50 -0700</bug_when>
    <thetext>I did a micro benchmark using the DOM tree included the newly added LayoutTest for Focus navigation.

The result is:

Before this patch:
Pressing Tab (or Shift-Tab) in 10000 times.
 took 3837.2ms. navigateFocusFoward
 took 4641.6s. navigateFocusBackward


After this patch:
Pressing Tab (or Shift-Tab) in 10000 times.
 took 4614.4ms. navigateFocusFoward
 took 5403.8ms. navigateFocusBackward

It becomes 1.2 times slower.
I guess the main reason is ReifiedTreeTraversal APIs (See https://bugs.webkit.org/show_bug.cgi?id=79197#c33).

It might be unfair to compare before/after since the example DOM tree uses a lot of ShadowHosts.

Since FocusNavigation is only invoked by user&apos;s interactive action, pressing &lt;tab&gt; key, we don&apos;t have to worry about its performance too much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588603</commentid>
    <comment_count>3</comment_count>
      <attachid>133988</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-03-26 23:49:58 -0700</bug_when>
    <thetext>Created attachment 133988
Shadow DOM navigation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588605</commentid>
    <comment_count>4</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-03-26 23:54:03 -0700</bug_when>
    <thetext>It seems I&apos;ve removed trailing white spaces accidentally from some files.
If it is not desired, I am happy to recover trailing white spaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589036</commentid>
    <comment_count>5</comment_count>
      <attachid>133988</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-03-27 10:47:38 -0700</bug_when>
    <thetext>Comment on attachment 133988
Shadow DOM navigation

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

My head hurts from reviewing this code. I need to take a break. I promise I&apos;ll give it another stab tomorrow.

I feel a bit iffy about freely copying FocusScope. It&apos;s fine for now, since it&apos;s just a ptr holder. However, adding more data members to the class will have unpleasant side effects of suddenly copying too much stuff.

Also, it would probably be good to put back those trimmed whitespaces.

&gt; Source/WebCore/ChangeLog:24
&gt; +        After finding a *psuedo* focusable element in current focus scope, it tries to resolve a focused element recursively,

*psuedo* -&gt; *pseudo*

&gt; Source/WebCore/page/FocusController.cpp:96
&gt; +FocusScope FocusScope::focusScopeIncluding(Node* node)

focusScopeOf?

&gt; Source/WebCore/page/FocusController.cpp:105
&gt; +FocusScope FocusScope::focusScopeInsideOf(Node* node)

focusScopeOfShadow?

&gt; Source/WebCore/page/FocusController.cpp:391
&gt; +Node* FocusController::findFocusableNodeDeeply(FocusDirection direction, FocusScope scope, Node* start, KeyboardEvent* event)

Deeply -&gt; Recursively?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589708</commentid>
    <comment_count>6</comment_count>
      <attachid>134229</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-03-28 00:29:42 -0700</bug_when>
    <thetext>Created attachment 134229
update</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589721</commentid>
    <comment_count>7</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-03-28 00:51:58 -0700</bug_when>
    <thetext>(In reply to comment #5)

&gt; My head hurts from reviewing this code. I need to take a break. I promise I&apos;ll give it another stab tomorrow.

Yeah, the algorithm looks complex, but I hope it is not so complicated. The Shadow DOM spec added just a couple of lines about focus navigation, but it is not so easy to implement that exactly. :)

I might add some comments on each functions of FocusController on ChangeLog later. That might be helpful.

&gt; I feel a bit iffy about freely copying FocusScope. It&apos;s fine for now, since it&apos;s just a ptr holder. However, adding more data members to the class will have unpleasant side effects of suddenly copying too much stuff.

I agree. It&apos;s fine for now I think.

&gt; 
&gt; Also, it would probably be good to put back those trimmed whitespaces.

Done. I&apos;ve restored trimmed white spaces.


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

&gt;&gt; Source/WebCore/ChangeLog:24
&gt;&gt; +        After finding a *psuedo* focusable element in current focus scope, it tries to resolve a focused element recursively,
&gt; 
&gt; *psuedo* -&gt; *pseudo*

Done.

&gt;&gt; Source/WebCore/page/FocusController.cpp:96
&gt;&gt; +FocusScope FocusScope::focusScopeIncluding(Node* node)
&gt; 
&gt; focusScopeOf?

Done.

&gt;&gt; Source/WebCore/page/FocusController.cpp:105
&gt;&gt; +FocusScope FocusScope::focusScopeInsideOf(Node* node)
&gt; 
&gt; focusScopeOfShadow?

Since FocusScope::FocusScopeOf(Node*) is already used, I&apos;d like to avoid the name of focusScopeOfXXX. It might be confusing since they have different behaviors. So I named it focusScopeOwnedByXXX().

&gt;&gt; Source/WebCore/page/FocusController.cpp:391
&gt;&gt; +Node* FocusController::findFocusableNodeDeeply(FocusDirection direction, FocusScope scope, Node* start, KeyboardEvent* event)
&gt; 
&gt; Deeply -&gt; Recursively?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590038</commentid>
    <comment_count>8</comment_count>
      <attachid>134229</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-03-28 09:26:49 -0700</bug_when>
    <thetext>Comment on attachment 134229
update

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

&gt; Source/WebCore/page/FocusController.cpp:298
&gt; +    RefPtr&lt;Node&gt; node = findFocusableNodeAcrossFocusScope(direction, currentNode ? FocusScope::focusScopeOf(currentNode) : FocusScope::focusScopeOf(document), currentNode, event);

The argument looks like it should be written: FocusScope::focusScopeOf(currentNode ? currentNode : document).

&gt; Source/WebCore/page/FocusController.cpp:372
&gt; +        if (foundInInnerFocusScope)
&gt; +            found = foundInInnerFocusScope;
&gt; +        else
&gt; +            found = findFocusableNodeRecursively(direction, scope, currentNode, event);

Also looks like it could be an inline if.

&gt; Source/WebCore/page/FocusController.cpp:394
&gt; +    // start node is exclusive.

Capitalize first word, since it&apos;s a sentence.

&gt; Source/WebCore/page/FocusController.cpp:404
&gt; +        if (foundInInnerFocusScope)
&gt; +            return foundInInnerFocusScope;
&gt; +        return findFocusableNodeRecursively(direction, scope, found, event);

I think you hate inline ifs :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590812</commentid>
    <comment_count>9</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-03-28 21:11:37 -0700</bug_when>
    <thetext>Thank you for the review. Let me land this patch after addressing your comments.
I&apos;ll make some some &apos;if&apos; statements &apos;inline&apos; since it&apos;s webkit way.

(In reply to comment #8)
&gt; (From update of attachment 134229 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134229&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/FocusController.cpp:298
&gt; &gt; +    RefPtr&lt;Node&gt; node = findFocusableNodeAcrossFocusScope(direction, currentNode ? FocusScope::focusScopeOf(currentNode) : FocusScope::focusScopeOf(document), currentNode, event);
&gt; 
&gt; The argument looks like it should be written: FocusScope::focusScopeOf(currentNode ? currentNode : document).
&gt; 
&gt; &gt; Source/WebCore/page/FocusController.cpp:372
&gt; &gt; +        if (foundInInnerFocusScope)
&gt; &gt; +            found = foundInInnerFocusScope;
&gt; &gt; +        else
&gt; &gt; +            found = findFocusableNodeRecursively(direction, scope, currentNode, event);
&gt; 
&gt; Also looks like it could be an inline if.
&gt; 
&gt; &gt; Source/WebCore/page/FocusController.cpp:394
&gt; &gt; +    // start node is exclusive.
&gt; 
&gt; Capitalize first word, since it&apos;s a sentence.
&gt; 
&gt; &gt; Source/WebCore/page/FocusController.cpp:404
&gt; &gt; +        if (foundInInnerFocusScope)
&gt; &gt; +            return foundInInnerFocusScope;
&gt; &gt; +        return findFocusableNodeRecursively(direction, scope, found, event);
&gt; 
&gt; I think you hate inline ifs :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590815</commentid>
    <comment_count>10</comment_count>
      <attachid>134492</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-03-28 21:15:06 -0700</bug_when>
    <thetext>Created attachment 134492
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590837</commentid>
    <comment_count>11</comment_count>
      <attachid>134492</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-28 21:59:24 -0700</bug_when>
    <thetext>Comment on attachment 134492
Patch for landing

Clearing flags on attachment: 134492

Committed r112500: &lt;http://trac.webkit.org/changeset/112500&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590838</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-28 21:59:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590882</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-03-28 23:45:13 -0700</bug_when>
    <thetext>Reopen, because it made tests assert: (at least on GTK and on Qt)

STDERR: ASSERTION FAILED: crossed == NotCrossed
STDERR: ../../Source/WebCore/dom/ReifiedTreeTraversal.cpp(221) : static WebCore::Node* WebCore::ReifiedTreeTraversal::parentNodeOrBackToInsertionPoint(const WebCore::Node*, WebCore::ReifiedTreeTraversal::CrossedUpperBoundary&amp;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590884</commentid>
    <comment_count>14</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-03-28 23:47:25 -0700</bug_when>
    <thetext>Thank you for letting me know it. Let me check. I might roll out.

(In reply to comment #13)
&gt; Reopen, because it made tests assert: (at least on GTK and on Qt)
&gt; 
&gt; STDERR: ASSERTION FAILED: crossed == NotCrossed
&gt; STDERR: ../../Source/WebCore/dom/ReifiedTreeTraversal.cpp(221) : static WebCore::Node* WebCore::ReifiedTreeTraversal::parentNodeOrBackToInsertionPoint(const WebCore::Node*, WebCore::ReifiedTreeTraversal::CrossedUpperBoundary&amp;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590905</commentid>
    <comment_count>15</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-03-29 00:27:37 -0700</bug_when>
    <thetext>I am rolling out in https://bugs.webkit.org/show_bug.cgi?id=82576.

I could not repro the ASSERTION fail on chromium port, but I could find the cause by taking a look at code around the failed assertion.

Let me roll out at first, land a fix for assertion, and re-land this patch.

(In reply to comment #14)
&gt; Thank you for letting me know it. Let me check. I might roll out.
&gt; 
&gt; (In reply to comment #13)
&gt; &gt; Reopen, because it made tests assert: (at least on GTK and on Qt)
&gt; &gt; 
&gt; &gt; STDERR: ASSERTION FAILED: crossed == NotCrossed
&gt; &gt; STDERR: ../../Source/WebCore/dom/ReifiedTreeTraversal.cpp(221) : static WebCore::Node* WebCore::ReifiedTreeTraversal::parentNodeOrBackToInsertionPoint(const WebCore::Node*, WebCore::ReifiedTreeTraversal::CrossedUpperBoundary&amp;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590946</commentid>
    <comment_count>16</comment_count>
      <attachid>134527</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-03-29 01:45:22 -0700</bug_when>
    <thetext>Created attachment 134527
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590988</commentid>
    <comment_count>17</comment_count>
      <attachid>134527</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 02:46:07 -0700</bug_when>
    <thetext>Comment on attachment 134527
Patch for landing

Clearing flags on attachment: 134527

Committed r112511: &lt;http://trac.webkit.org/changeset/112511&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590989</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 02:46:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640528</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-06-04 06:10:41 -0700</bug_when>
    <thetext>The LayoutTests/fast/dom/shadow/focus-navigation.html in this patch is not going to work on GTK or EFL ports. The reason for that is that those ports don&apos;t wrap around when pressing tab and the active element is the last one.

So, the following will not work:
Should move from input-E-0 to input-A-1 in forward
PASS

On GTK/EFL ports, it will go to &quot;body&quot;, not input-A-1.

The following test for example takes into consideration the different wrapping behavior in different ports:
LayoutTests/fast/events/tab-imagemap.html

I&apos;m working on enabling Shadow DOM for EFL port (Bug 87732) but I need to skip this test because of this different wrapping behavior.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132994</attachid>
            <date>2012-03-21 01:54:03 -0700</date>
            <delta_ts>2012-03-26 23:49:52 -0700</delta_ts>
            <desc>wip. depends on reified tree traversal APIs.</desc>
            <filename>bug-78588-20120321175400.patch</filename>
            <type>text/plain</type>
            <size>65435</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk2NmIyNGZhZTAxODFi
Y2MzNTY0NTU5NGFlYWViYzVhMzc3OTcyOC4uOWM4ODBjYWMwNGVlMTJmZWY4MTBhMGU4NGM0ODVi
NTIzNzA5YjE5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxMi0wMy0yMSAgSGF5
YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTWFrZSBmb2N1cyBuYXZp
Z2F0aW9uIGJlIGNvbXBsaWFudCB3aXRoIFNoYWRvdyBET00gc3BlYy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTg4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2VxdWVudGlhbCBmb2N1cyBuYXZpZ2F0
aW9uIG5vdyBob25vcnMgU2hhZG93IERPTSBzcGVjLgorICAgICAgICBUaGUgc2hhZG93IERPTSBu
YXZpZ2F0aW9uIG9yZGVyIHNlcXVlbmNlIGlzIGluc2VydGVkIGludG8gdGhlIGRvY3VtZW50IG5h
dmlnYXRpb24gb3JkZXI6CisgICAgICAgIDEuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBzaGFkb3cg
aG9zdCwgaWYgdGhlIHNoYWRvdyBob3N0IGlzCisgICAgICAgIGZvY3VzYWJsZTsgb3IKKyAgICAg
ICAgMi4gaW4gcGxhY2Ugb2YgdGhlIHNoYWRvdyBob3N0IGFzIGlmIHRoZSBzaGFkb3cgaG9zdAor
ICAgICAgICB3ZXJlIGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiBhdXRvIGZvciBkZXRlcm1pbmluZyBp
dHMgcG9zaXRpb24uCisKKyAgICAgICAgQmVmb3JlIHRoaXMgcGF0Y2gsIHRyYXZlcnNpbmcgaW5z
aWRlIG9mIHNoYWRvdyBob3N0IGlzIGluY29tcGxldGUKKyAgICAgICAgc2luY2UgaW5zZXJ0aW9u
IHBvaW50cywgc3VjaCBhcyA8Y29udGVudD4gZWxlbWVudCBvciA8c2hhZG93PgorICAgICAgICBl
bGVtZW50LCBhcmUgbm90IHJlc29sdmVkIGF0IGFsbC4gTm93IGZvY3VzIG5hdmlnYXRpb24gY2Fu
IHRyYXZlcnNlCisgICAgICAgIHNoYWRvdyBET00gc3VidHJlZXMgaW4gcmVpZmllZCB0cmVlIG9y
ZGVyIGNvcnJlY3RseSwgcmVzb2x2aW5nCisgICAgICAgIGxvd2VyIGJvdW5kYXJ5IHRyYW5zcGFy
ZW50bHkuCisKKyAgICAgICAgTm90ZSB0aGF0IEZvY3VzQ29udHJvbGxlciBiZWNvbWVzIHRoZSBm
aXJzdCBjbGllbnQgd2hpY2ggbWFrZXMgdXNlIG9mIFJlaWZpZWRUcmVlVHJhdmVyc2FsCisgICAg
ICAgIEFQSXMuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vc2hhZG93L2ZvY3VzLW5hdmlnYXRp
b24uaHRtbAorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6Zm9jdXMpOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmlzU2hhZG93SG9zdCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvY3VzU2NvcGU6OkZvY3VzU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9jdXNTY29wZTo6cm9vdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNTY29wZTo6b3du
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNTY29wZTo6Zm9jdXNTY29wZUluY2x1ZGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpGb2N1c1Njb3BlOjpmb2N1c1Njb3BlSW5zaWRlT2YpOgorICAg
ICAgICAoV2ViQ29yZTo6aGFzQ3VzdG9tRm9jdXNMb2dpYyk6CisgICAgICAgIChXZWJDb3JlOjpp
c05vbkZvY3VzYWJsZVNoYWRvd0hvc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNGb2N1c2FibGVT
aGFkb3dIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkVGFiSW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvdWxkVmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6aXNGb2N1c1Njb3Bl
T3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNhYmxl
Tm9kZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
b2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlQWNyb3NzRm9jdXNTY29w
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2Rl
RGVlcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJs
ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kTm9kZVdpdGhF
eGFjdFRhYkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Om5leHROb2RlV2l0aEdyZWF0ZXJUYWJJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c05vZGVXaXRoTG93ZXJUYWJJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6Om5leHRGb2N1c2FibGVOb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVOb2Rl
KToKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5oOgorICAgICAgICAoRm9jdXNTY29w
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZvY3VzQ29udHJvbGxlcik6CisKKzIw
MTItMDMtMTkgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1h
a2UgRm9jdXMgbmF2aWdhdGlvbiBjb21wbGlhbnQgd2l0aCB0aGUgbGF0ZXN0IFNoYWRvdyBET00g
c3BlYy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPVhY
WAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6
IGZhc3QvZG9tL3NoYWRvdy9mb2N1cy1uYXZpZ2F0aW9uLmh0bWwKKworICAgICAgICAqIGRvbS9F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZvY3VzKToKKyAgICAgICAg
KiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0ZvY3VzYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNob3dOb2RlKToKKyAg
ICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICogcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpp
c1NoYWRvd0hvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNTY29wZTo6Rm9jdXNTY29wZSk6
CisgICAgICAgIChXZWJDb3JlOjpGb2N1c1Njb3BlOjpyb290Tm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb2N1c1Njb3BlOjpvd25lcik6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c1Njb3BlOjpm
b2N1c1Njb3BlSW5jbHVkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzU2NvcGU6OmZvY3Vz
U2NvcGVJbnNpZGVPZik6CisgICAgICAgIChXZWJDb3JlOjpoYXNDdXN0b21Gb2N1c0xvZ2ljKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdCk6CisgICAgICAgIChX
ZWJDb3JlOjppc0ZvY3VzYWJsZVNoYWRvd0hvc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0
ZWRUYWJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRWaXNpdCk6CisgICAgICAgIChX
ZWJDb3JlOjppc0ZvY3VzU2NvcGVPd25lcik6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRy
b2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1bWVu
dE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJs
ZU5vZGVBY3Jvc3NGb2N1c1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxl
cjo6ZmluZEZvY3VzYWJsZU5vZGVEZWVwbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250
cm9sbGVyOjpmaW5kRm9jdXNhYmxlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRy
b2xsZXI6OmZpbmROb2RlV2l0aEV4YWN0VGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6bmV4
dE5vZGVXaXRoR3JlYXRlclRhYkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTm9k
ZVdpdGhMb3dlclRhYkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6
bmV4dEZvY3VzYWJsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpw
cmV2aW91c0ZvY3VzYWJsZU5vZGUpOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmg6
CisgICAgICAgIChGb2N1c1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRm9j
dXNDb250cm9sbGVyKToKKwogMjAxMi0wMy0xNSAgSGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW1NoYWRvdyBET01dIEFkZCBSZWlmaWVkIERPTSBUcmVlIHRyYXZl
cnNhbCBpbnRlcm5hbCBBUElzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDFlNmU3Yjc1MWI0
YzA3YzVkZWYzYTY2MjdkOGE3YjNlMTBjZWVmNzAuLjA4NWY2YmNlZjYwYzc3YjNiN2ExY2Q1Yzdj
ZWIzZjM3YTUxNGUwNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTE1NDgsOCArMTU0OCw2
IEBAIHZvaWQgRWxlbWVudDo6Zm9jdXMoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pCiAg
ICAgICAgIC8vIElmIGEgZm9jdXMgZXZlbnQgaGFuZGxlciBjaGFuZ2VzIHRoZSBmb2N1cyB0byBh
IGRpZmZlcmVudCBub2RlIGl0CiAgICAgICAgIC8vIGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gY29u
dGludWUgYW5kIHVwZGF0ZSBhcHBlYXJlbmNlLgogICAgICAgICBwcm90ZWN0ID0gdGhpczsKLSAg
ICAgICAgaWYgKGhhc1NoYWRvd1Jvb3QoKSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+dHJh
bnNmZXJGb2N1c1RvRWxlbWVudEluU2hhZG93Um9vdCh0aGlzLCByZXN0b3JlUHJldmlvdXNTZWxl
Y3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIXBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLT5zZXRGb2N1c2VkTm9kZSh0aGlzLCBkb2MtPmZyYW1lKCkpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXND
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApp
bmRleCBmYjE2ZGYwMjFiNmI0NjcyNjA5OTlhYWRkOWFmMWUyMDVmMGRhNDM5Li44MzhmMWI2Njdh
OGU4ZDFkYzlmMGQxZWM2MWMzNWM2OGEyMjcyM2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
ICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJLZXlib2Fy
ZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVk
ZSAiUmVpZmllZFRyZWVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgpAQCAtNjUs
NiArNjYsNDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NoYWRvd0hv
c3QoY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5pc0VsZW1l
bnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUpLT5oYXNTaGFkb3dSb290KCk7Cit9CisKK0ZvY3Vz
U2NvcGU6OkZvY3VzU2NvcGUoVHJlZVNjb3BlKiB0cmVlU2NvcGUpCisgICAgOiBtX3Jvb3RUcmVl
U2NvcGUodHJlZVNjb3BlKQoreworICAgIEFTU0VSVCh0cmVlU2NvcGUpOworICAgIEFTU0VSVCgh
dHJlZVNjb3BlLT5yb290Tm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSB8fCB0b1NoYWRvd1Jvb3QodHJl
ZVNjb3BlLT5yb290Tm9kZSgpKS0+aXNZb3VuZ2VzdCgpKTsKK30KKworTm9kZSogRm9jdXNTY29w
ZTo6cm9vdE5vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jvb3RUcmVlU2NvcGUtPnJvb3RO
b2RlKCk7Cit9CisKK05vZGUqIEZvY3VzU2NvcGU6Om93bmVyKCkgY29uc3QKK3sKKyAgICBOb2Rl
KiByb290ID0gcm9vdE5vZGUoKTsKKyAgICBpZiAocm9vdC0+aXNTaGFkb3dSb290KCkpCisgICAg
ICAgIHJldHVybiByb290LT5zaGFkb3dIb3N0KCk7CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHJv
b3QtPmRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgIHJldHVybiBmcmFtZS0+b3duZXJFbGVt
ZW50KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0ZvY3VzU2NvcGUgRm9jdXNTY29wZTo6Zm9jdXNT
Y29wZUluY2x1ZGluZyhOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICBUcmVl
U2NvcGUqIHNjb3BlID0gbm9kZS0+dHJlZVNjb3BlKCk7CisgICAgaWYgKHNjb3BlLT5yb290Tm9k
ZSgpLT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmV0dXJuIEZvY3VzU2NvcGUodG9TaGFkb3dS
b290KHNjb3BlLT5yb290Tm9kZSgpKS0+dHJlZSgpLT55b3VuZ2VzdFNoYWRvd1Jvb3QoKSk7Cisg
ICAgcmV0dXJuIEZvY3VzU2NvcGUoc2NvcGUpOworfQorCitGb2N1c1Njb3BlIEZvY3VzU2NvcGU6
OmZvY3VzU2NvcGVJbnNpZGVPZihOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChpc1NoYWRvd0hv
c3Qobm9kZSkpOworICAgIHJldHVybiBGb2N1c1Njb3BlKHRvRWxlbWVudChub2RlKS0+c2hhZG93
VHJlZSgpLT55b3VuZ2VzdFNoYWRvd1Jvb3QoKSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBk
aXNwYXRjaEV2ZW50c09uV2luZG93QW5kRm9jdXNlZE5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBi
b29sIGZvY3VzZWQpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhIGZvY3VzZWQgbm9kZSB3ZSBzaG91
bGQgZGlzcGF0Y2ggYmx1ciBvbiBpdCBiZWZvcmUgd2UgYmx1ciB0aGUgd2luZG93LgpAQCAtODQs
NiArMTI3LDM1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNwYXRjaEV2ZW50c09uV2luZG93QW5k
Rm9jdXNlZE5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sCiAgICAgICAgIGRvY3VtZW50LT5m
b2N1c2VkTm9kZSgpLT5kaXNwYXRjaEZvY3VzRXZlbnQoMCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBoYXNDdXN0b21Gb2N1c0xvZ2ljKE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIG5vZGUt
Pmhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpIHx8
IG5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYXVkaW9UYWcp
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KE5vZGUq
IG5vZGUsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICBy
ZXR1cm4gIW5vZGUtPmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYmIGlzU2hhZG93SG9zdChu
b2RlKSAmJiAhaGFzQ3VzdG9tRm9jdXNMb2dpYyhub2RlKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIGlzRm9jdXNhYmxlU2hhZG93SG9zdChOb2RlKiBub2RlLCBLZXlib2FyZEV2ZW50KiBldmVu
dCkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgcmV0dXJuIG5vZGUtPmlzS2V5Ym9hcmRGb2N1
c2FibGUoZXZlbnQpICYmIGlzU2hhZG93SG9zdChub2RlKSAmJiAhaGFzQ3VzdG9tRm9jdXNMb2dp
Yyhub2RlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWRqdXN0ZWRUYWJJbmRleChOb2RlKiBu
b2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgcmV0
dXJuIGlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdChub2RlLCBldmVudCkgPyAwIDogbm9kZS0+dGFi
SW5kZXgoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNob3VsZFZpc2l0KE5vZGUqIG5vZGUs
IEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICByZXR1cm4g
bm9kZS0+aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCkgfHwgaXNOb25Gb2N1c2FibGVTaGFkb3dI
b3N0KG5vZGUsIGV2ZW50KTsKK30KKwogRm9jdXNDb250cm9sbGVyOjpGb2N1c0NvbnRyb2xsZXIo
UGFnZSogcGFnZSkKICAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV9pc0FjdGl2ZShmYWxzZSkK
QEAgLTEzOCw3ICsyMTAsNyBAQCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZChib29s
IGZvY3VzZWQpCiB7CiAgICAgaWYgKGlzRm9jdXNlZCgpID09IGZvY3VzZWQpCiAgICAgICAgIHJl
dHVybjsKLSAgICAKKwogICAgIG1faXNGb2N1c2VkID0gZm9jdXNlZDsKIAogICAgIGlmICghbV9p
c0ZvY3VzZWQpCkBAIC0xNTMsNTIgKzIyNSwyMSBAQCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6c2V0
Rm9jdXNlZChib29sIGZvY3VzZWQpCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIFNoYWRvd1Jv
b3QqIHNoYWRvd1Jvb3QoTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gbm9kZS0+aXNFbGVtZW50
Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aGFzU2hhZG93Um9vdCgpID8gdG9FbGVtZW50KG5v
ZGUpLT5zaGFkb3dUcmVlKCktPnlvdW5nZXN0U2hhZG93Um9vdCgpIDogMDsKLX0KLQotc3RhdGlj
IGlubGluZSBib29sIGlzVHJlZVNjb3BlT3duZXIoTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4g
bm9kZSAmJiAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8IHNoYWRvd1Jvb3Qobm9kZSkp
OwotfQotCi1ib29sIEZvY3VzQ29udHJvbGxlcjo6dHJhbnNmZXJGb2N1c1RvRWxlbWVudEluU2hh
ZG93Um9vdChFbGVtZW50KiBzaGFkb3dIb3N0LCBib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlv
bikKLXsKLSAgICBBU1NFUlQoc2hhZG93Um9vdChzaGFkb3dIb3N0KSk7Ci0gICAgTm9kZSogbm9k
ZSA9IGZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50T3JTaGFk
b3dSb290KEZvY3VzRGlyZWN0aW9uRm9yd2FyZCwgc2hhZG93SG9zdCwgMCk7Ci0gICAgaWYgKHNo
YWRvd0hvc3QgPT0gbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRvRWxlbWVudChu
b2RlKS0+Zm9jdXMocmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIGhhc0N1c3RvbUZvY3VzTG9naWMoTm9kZSogbm9kZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvY3VzU2NvcGVPd25lcihOb2RlKiBub2RlKQogewotICAg
IHJldHVybiBub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHRl
eHRhcmVhVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSB8fCBub2RlLT5oYXNUYWdO
YW1lKGF1ZGlvVGFnKTsKKyAgICByZXR1cm4gbm9kZSAmJiAobm9kZS0+aXNGcmFtZU93bmVyRWxl
bWVudCgpIHx8IGlzU2hhZG93SG9zdChub2RlKSk7CiB9CiAKLU5vZGUqIEZvY3VzQ29udHJvbGxl
cjo6ZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnRPclNoYWRv
d1Jvb3QoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBub2RlLCBLZXlib2FyZEV2ZW50
KiBldmVudCkKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRp
bmdEb3duSW50b0ZyYW1lRG9jdW1lbnQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBu
b2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICAvLyBUaGUgbm9kZSB3ZSBmb3VuZCBt
aWdodCBiZSBhIEhUTUxGcmFtZU93bmVyRWxlbWVudCBvciBhIHNoYWRvdyBob3N0LCBzbyBkZXNj
ZW5kIGRvd24gdGhlIHRyZWUgdW50aWwgd2UgZmluZCBlaXRoZXI6CisgICAgLy8gVGhlIG5vZGUg
d2UgZm91bmQgbWlnaHQgYmUgYSBIVE1MRnJhbWVPd25lckVsZW1lbnQsIHNvIGRlc2NlbmQgZG93
biB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGVpdGhlcjoKICAgICAvLyAxKSBhIGZvY3VzYWJsZSBu
b2RlLCBvcgotICAgIC8vIDIpIHRoZSBkZWVwZXN0LW5lc3RlZCBIVE1MRnJhbWVPd25lckVsZW1l
bnQgb3Igc2hhZG93IGhvc3QuCi0gICAgd2hpbGUgKGlzVHJlZVNjb3BlT3duZXIobm9kZSkpIHsK
LSAgICAgICAgTm9kZSogZm91bmROb2RlOwotICAgICAgICBpZiAobm9kZS0+aXNGcmFtZU93bmVy
RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0g
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBp
ZiAoIW93bmVyLT5jb250ZW50RnJhbWUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG93bmVyLT5jb250ZW50RnJhbWUoKS0+ZG9jdW1l
bnQoKTsKLSAgICAgICAgICAgIGZvdW5kTm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVjdGlv
biwgZG9jdW1lbnQsIDAsIGV2ZW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBVbnRpbCBhIGZvY3VzIHJlLXRhcmdldGluZyAoYnVnIDYxNDIxKSBpcyBpbXBsZW1l
bnRlZCwKLSAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZXNlIGVsZW1lbnRzIGlzIHRoZSBzYWZl
c3Qgd2F5IHRvIGtlZXAgYSBjb21wYXRpYmlsaXR5LgotICAgICAgICAgICAgaWYgKGhhc0N1c3Rv
bUZvY3VzTG9naWMobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBB
U1NFUlQoc2hhZG93Um9vdChub2RlKSk7Ci0gICAgICAgICAgICBmb3VuZE5vZGUgPSBmaW5kRm9j
dXNhYmxlTm9kZShkaXJlY3Rpb24sIHNoYWRvd1Jvb3Qobm9kZSksIDAsIGV2ZW50KTsKLSAgICAg
ICAgfQorICAgIC8vIDIpIHRoZSBkZWVwZXN0LW5lc3RlZCBIVE1MRnJhbWVPd25lckVsZW1lbnQu
CisgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7CisgICAg
ICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVP
d25lckVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYgKCFvd25lci0+Y29udGVudEZyYW1lKCkp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgTm9kZSogZm91bmROb2RlID0gZmluZEZvY3Vz
YWJsZU5vZGUoZGlyZWN0aW9uLCBvd25lci0+Y29udGVudEZyYW1lKCktPmRvY3VtZW50KCksIDAs
IGV2ZW50KTsKICAgICAgICAgaWYgKCFmb3VuZE5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgQVNTRVJUKG5vZGUgIT0gZm91bmROb2RlKTsKQEAgLTIxMCw4ICsyNTEsOCBAQCBOb2Rl
KiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFt
ZURvY3VtZW50T3JTaGFkb3dSbwogYm9vbCBGb2N1c0NvbnRyb2xsZXI6OnNldEluaXRpYWxGb2N1
cyhGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAg
IGJvb2wgZGlkQWR2YW5jZUZvY3VzID0gYWR2YW5jZUZvY3VzKGRpcmVjdGlvbiwgZXZlbnQsIHRy
dWUpOwotICAgIAotICAgIC8vIElmIGZvY3VzIGlzIGJlaW5nIHNldCBpbml0aWFsbHksIGFjY2Vz
c2liaWxpdHkgbmVlZHMgdG8gYmUgaW5mb3JtZWQgdGhhdCBzeXN0ZW0gZm9jdXMgaGFzIG1vdmVk
IAorCisgICAgLy8gSWYgZm9jdXMgaXMgYmVpbmcgc2V0IGluaXRpYWxseSwgYWNjZXNzaWJpbGl0
eSBuZWVkcyB0byBiZSBpbmZvcm1lZCB0aGF0IHN5c3RlbSBmb2N1cyBoYXMgbW92ZWQKICAgICAv
LyBpbnRvIHRoZSB3ZWIgYXJlYSBhZ2FpbiwgZXZlbiBpZiBmb2N1cyBkaWQgbm90IGNoYW5nZSB3
aXRoaW4gV2ViQ29yZS4gUG9zdE5vdGlmaWNhdGlvbiBpcyBjYWxsZWQgaW5zdGVhZAogICAgIC8v
IG9mIGhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkLCBiZWNhdXNlIHRoaXMgd2lsbCBzZW5k
IHRoZSBub3RpZmljYXRpb24gZXZlbiBpZiB0aGUgZWxlbWVudCBpcyB0aGUgc2FtZS4KICAgICBp
ZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKQEAgLTI1Myw3ICsyOTQs
NyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9yZGVyKEZv
Y3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5YgogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBm
aW5kRm9jdXNhYmxlTm9kZUFjcm9zc1RyZWVTY29wZShkaXJlY3Rpb24sIGN1cnJlbnROb2RlID8g
Y3VycmVudE5vZGUtPnRyZWVTY29wZSgpIDogZG9jdW1lbnQsIGN1cnJlbnROb2RlLCBldmVudCk7
CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZUFjcm9zc0ZvY3VzU2Nv
cGUoZGlyZWN0aW9uLCBjdXJyZW50Tm9kZSA/IEZvY3VzU2NvcGU6OmZvY3VzU2NvcGVJbmNsdWRp
bmcoY3VycmVudE5vZGUpIDogRm9jdXNTY29wZShkb2N1bWVudCksIGN1cnJlbnROb2RlLCBldmVu
dCk7CiAKICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBub2Rl
IHRvIGZvY3VzLCBzbyB3ZSBzaG91bGQgdHJ5IHRvIHBhc3MgZm9jdXMgdG8gQ2hyb21lLgpAQCAt
MjY1LDggKzMwNiw4IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3Vt
ZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXliCiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBDaHJvbWUgZG9lc24ndCB3YW50IGZvY3VzLCBzbyB3ZSBzaG91bGQgd3JhcCBmb2N1
cy4KLSAgICAgICAgbm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgbV9wYWdlLT5t
YWluRnJhbWUoKS0+ZG9jdW1lbnQoKSwgMCwgZXZlbnQpOwotICAgICAgICBub2RlID0gZmluZEZv
Y3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnRPclNoYWRvd1Jvb3QoZGly
ZWN0aW9uLCBub2RlLmdldCgpLCBldmVudCk7CisgICAgICAgIG5vZGUgPSBmaW5kRm9jdXNhYmxl
Tm9kZURlZXBseShkaXJlY3Rpb24sIG1fcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCksIDAs
IGV2ZW50KTsKKyAgICAgICAgbm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bklu
dG9GcmFtZURvY3VtZW50KGRpcmVjdGlvbiwgbm9kZS5nZXQoKSwgZXZlbnQpOwogCiAgICAgICAg
IGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5Myw3ICszMzQsNyBA
QCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9yZGVyKEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5YgogICAgICAgICBzZXRGb2N1c2VkRnJhbWUob3duZXIt
PmNvbnRlbnRGcmFtZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAg
ICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgdG8ganVzdCBiZSBhYmxlIHRvIGNhbGwgc2V0
Rm9jdXNlZE5vZGUobm9kZSkgaGVyZSwgYnV0IHdlIGNhbid0IGRvCiAgICAgLy8gdGhhdCBiZWNh
dXNlIHNvbWUgZWxlbWVudHMgKGUuZy4gSFRNTElucHV0RWxlbWVudCBhbmQgSFRNTFRleHRBcmVh
RWxlbWVudCkgZG8gZXh0cmEgd29yayBpbgogICAgIC8vIHRoZWlyIGZvY3VzKCkgbWV0aG9kcy4K
QEAgLTMxOCw1NiArMzU5LDc5IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJ
bkRvY3VtZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXliCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgTm9kZSogb3duZXJPZlRyZWVTY29wZShUcmVlU2Nv
cGUqIHNjb3BlKQorTm9kZSogRm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNhYmxlTm9kZUFjcm9z
c0ZvY3VzU2NvcGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBGb2N1c1Njb3BlIHNjb3BlLCBO
b2RlKiBjdXJyZW50Tm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgQVNTRVJUKHNj
b3BlKTsKLSAgICBpZiAoc2NvcGUtPnJvb3ROb2RlKCktPmlzU2hhZG93Um9vdCgpKQotICAgICAg
ICByZXR1cm4gc2NvcGUtPnJvb3ROb2RlKCktPnNoYWRvd0hvc3QoKTsKLSAgICBpZiAoc2NvcGUt
PnJvb3ROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBzY29wZS0+
cm9vdE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+b3duZXJFbGVtZW50KCk7Ci0gICAgcmV0
dXJuIDA7Ci19CisgICAgQVNTRVJUKCFjdXJyZW50Tm9kZSB8fCAhaXNOb25Gb2N1c2FibGVTaGFk
b3dIb3N0KGN1cnJlbnROb2RlLCBldmVudCkpOworICAgIE5vZGUqIGZvdW5kOworICAgIGlmIChj
dXJyZW50Tm9kZSAmJiBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkICYmIGlzRm9j
dXNhYmxlU2hhZG93SG9zdChjdXJyZW50Tm9kZSwgZXZlbnQpKSB7CisgICAgICAgIE5vZGUqIGZv
dW5kSW5Jbm5lckZvY3VzU2NvcGUgPSBmaW5kRm9jdXNhYmxlTm9kZURlZXBseShkaXJlY3Rpb24s
IEZvY3VzU2NvcGU6OmZvY3VzU2NvcGVJbnNpZGVPZihjdXJyZW50Tm9kZSksIDAsIGV2ZW50KTsK
KyAgICAgICAgaWYgKGZvdW5kSW5Jbm5lckZvY3VzU2NvcGUpCisgICAgICAgICAgICBmb3VuZCA9
IGZvdW5kSW5Jbm5lckZvY3VzU2NvcGU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvdW5k
ID0gZmluZEZvY3VzYWJsZU5vZGVEZWVwbHkoZGlyZWN0aW9uLCBzY29wZSwgY3VycmVudE5vZGUs
IGV2ZW50KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZm91bmQgPSBmaW5kRm9jdXNhYmxlTm9kZURl
ZXBseShkaXJlY3Rpb24sIHNjb3BlLCBjdXJyZW50Tm9kZSwgZXZlbnQpOwogCi1Ob2RlKiBGb2N1
c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlQWNyb3NzVHJlZVNjb3BlKEZvY3VzRGlyZWN0
aW9uIGRpcmVjdGlvbiwgVHJlZVNjb3BlKiBzY29wZSwgTm9kZSogY3VycmVudE5vZGUsIEtleWJv
YXJkRXZlbnQqIGV2ZW50KQotewotICAgIE5vZGUqIG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZShk
aXJlY3Rpb24sIHNjb3BlLCBjdXJyZW50Tm9kZSwgZXZlbnQpOwogICAgIC8vIElmIHRoZXJlJ3Mg
bm8gZm9jdXNhYmxlIG5vZGUgdG8gYWR2YW5jZSB0bywgbW92ZSB1cCB0aGUgdHJlZSBzY29wZXMg
dW50aWwgd2UgZmluZCBvbmUuCi0gICAgd2hpbGUgKCFub2RlICYmIHNjb3BlKSB7Ci0gICAgICAg
IE5vZGUqIG93bmVyID0gb3duZXJPZlRyZWVTY29wZShzY29wZSk7CisgICAgd2hpbGUgKCFmb3Vu
ZCkgeworICAgICAgICBOb2RlKiBvd25lciA9IHNjb3BlLm93bmVyKCk7CiAgICAgICAgIGlmICgh
b3duZXIpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgbm9kZSA9IGZpbmRGb2N1c2FibGVO
b2RlKGRpcmVjdGlvbiwgb3duZXItPnRyZWVTY29wZSgpLCBvd25lciwgZXZlbnQpOwotICAgICAg
ICBzY29wZSA9IG93bmVyLT50cmVlU2NvcGUoKTsKKyAgICAgICAgc2NvcGUgPSBGb2N1c1Njb3Bl
Ojpmb2N1c1Njb3BlSW5jbHVkaW5nKG93bmVyKTsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBG
b2N1c0RpcmVjdGlvbkJhY2t3YXJkICYmIGlzRm9jdXNhYmxlU2hhZG93SG9zdChvd25lciwgZXZl
bnQpKSB7CisgICAgICAgICAgICBmb3VuZCA9IG93bmVyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgZm91bmQgPSBmaW5kRm9jdXNhYmxlTm9kZURlZXBseShkaXJlY3Rp
b24sIHNjb3BlLCBvd25lciwgZXZlbnQpOwogICAgIH0KLSAgICBub2RlID0gZmluZEZvY3VzYWJs
ZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnRPclNoYWRvd1Jvb3QoZGlyZWN0aW9u
LCBub2RlLCBldmVudCk7Ci0gICAgcmV0dXJuIG5vZGU7CisgICAgZm91bmQgPSBmaW5kRm9jdXNh
YmxlTm9kZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVudChkaXJlY3Rpb24sIGZvdW5kLCBl
dmVudCk7CisgICAgcmV0dXJuIGZvdW5kOworfQorCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZp
bmRGb2N1c2FibGVOb2RlRGVlcGx5KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9jdXNTY29w
ZSBzY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIC8vIHN0
YXJ0IG5vZGUgaXMgZXhjbHVzaXZlLgorICAgIE5vZGUqIGZvdW5kID0gZmluZEZvY3VzYWJsZU5v
ZGUoZGlyZWN0aW9uLCBzY29wZSwgc3RhcnQsIGV2ZW50KTsKKyAgICBpZiAoIWZvdW5kKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRm9yd2Fy
ZCkgeworICAgICAgICBpZiAoIWlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdChmb3VuZCwgZXZlbnQp
KQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kOworICAgICAgICBOb2RlKiBmb3VuZEluSW5uZXJG
b2N1c1Njb3BlID0gZmluZEZvY3VzYWJsZU5vZGVEZWVwbHkoZGlyZWN0aW9uLCBGb2N1c1Njb3Bl
Ojpmb2N1c1Njb3BlSW5zaWRlT2YoZm91bmQpLCAwLCBldmVudCk7CisgICAgICAgIGlmIChmb3Vu
ZEluSW5uZXJGb2N1c1Njb3BlKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kSW5Jbm5lckZvY3Vz
U2NvcGU7CisgICAgICAgIHJldHVybiBmaW5kRm9jdXNhYmxlTm9kZURlZXBseShkaXJlY3Rpb24s
IHNjb3BlLCBmb3VuZCwgZXZlbnQpOworICAgIH0KKyAgICBBU1NFUlQoZGlyZWN0aW9uID09IEZv
Y3VzRGlyZWN0aW9uQmFja3dhcmQpOworICAgIGlmIChpc0ZvY3VzYWJsZVNoYWRvd0hvc3QoZm91
bmQsIGV2ZW50KSkgeworICAgICAgICBOb2RlKiBmb3VuZEluSW5uZXJGb2N1c1Njb3BlID0gZmlu
ZEZvY3VzYWJsZU5vZGVEZWVwbHkoZGlyZWN0aW9uLCBGb2N1c1Njb3BlOjpmb2N1c1Njb3BlSW5z
aWRlT2YoZm91bmQpLCAwLCBldmVudCk7CisgICAgICAgIGlmIChmb3VuZEluSW5uZXJGb2N1c1Nj
b3BlKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kSW5Jbm5lckZvY3VzU2NvcGU7CisgICAgICAg
IHJldHVybiBmb3VuZDsKKyAgICB9CisgICAgaWYgKGlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdChm
b3VuZCwgZXZlbnQpKSB7CisgICAgICAgIE5vZGUqIGZvdW5kSW5Jbm5lckZvY3VzU2NvcGUgPSBm
aW5kRm9jdXNhYmxlTm9kZURlZXBseShkaXJlY3Rpb24sIEZvY3VzU2NvcGU6OmZvY3VzU2NvcGVJ
bnNpZGVPZihmb3VuZCksIDAsIGV2ZW50KTsKKyAgICAgICAgaWYgKGZvdW5kSW5Jbm5lckZvY3Vz
U2NvcGUpCisgICAgICAgICAgICByZXR1cm4gZm91bmRJbklubmVyRm9jdXNTY29wZTsKKyAgICAg
ICAgcmV0dXJuIGZpbmRGb2N1c2FibGVOb2RlRGVlcGx5KGRpcmVjdGlvbiwgc2NvcGUsIGZvdW5k
LCBldmVudCk7CisgICAgfQorICAgIHJldHVybiBmb3VuZDsKIH0KIAotCi1Ob2RlKiBGb2N1c0Nv
bnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgVHJl
ZVNjb3BlKiBzY29wZSwgTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCitOb2RlKiBG
b2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlv
biwgRm9jdXNTY29wZSBzY29wZSwgTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7
CiAgICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKQogICAgICAg
ICA/IG5leHRGb2N1c2FibGVOb2RlKHNjb3BlLCBub2RlLCBldmVudCkKICAgICAgICAgOiBwcmV2
aW91c0ZvY3VzYWJsZU5vZGUoc2NvcGUsIG5vZGUsIGV2ZW50KTsKIH0KIAotc3RhdGljIE5vZGUq
IG5leHROb2RlV2l0aEV4YWN0VGFiSW5kZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5
Ym9hcmRFdmVudCogZXZlbnQpCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZpbmROb2RlV2l0aEV4
YWN0VGFiSW5kZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdmVudCogZXZl
bnQsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICAvLyBTZWFyY2ggaXMgaW5jbHVz
aXZlIG9mIHN0YXJ0Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSBu
b2RlLT50cmF2ZXJzZU5leHROb2RlKCkpCi0gICAgICAgIGlmIChub2RlLT5pc0tleWJvYXJkRm9j
dXNhYmxlKGV2ZW50KSAmJiBub2RlLT50YWJJbmRleCgpID09IHRhYkluZGV4KQorICAgIGZvciAo
Tm9kZSogbm9kZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVj
dGlvbkZvcndhcmQgPyBSZWlmaWVkVHJlZVRyYXZlcnNhbDo6dHJhdmVyc2VOZXh0Tm9kZVdpdGhv
dXRDcm9zc2luZ1VwcGVyQm91bmRhcnkobm9kZSk6IFJlaWZpZWRUcmVlVHJhdmVyc2FsOjp0cmF2
ZXJzZVByZXZpb3VzTm9kZVdpdGhvdXRDcm9zc2luZ1VwcGVyQm91bmRhcnkobm9kZSkpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRWaXNpdChub2RlLCBldmVudCkgJiYgYWRqdXN0ZWRUYWJJbmRleChu
b2RlLCBldmVudCkgPT0gdGFiSW5kZXgpCiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLQotICAg
IHJldHVybiAwOwotfQotCi1zdGF0aWMgTm9kZSogcHJldmlvdXNOb2RlV2l0aEV4YWN0VGFiSW5k
ZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17Ci0g
ICAgLy8gU2VhcmNoIGlzIGluY2x1c2l2ZSBvZiBzdGFydAotICAgIGZvciAoTm9kZSogbiA9IHN0
YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkKLSAgICAgICAgaWYgKG4tPmlz
S2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYmIG4tPnRhYkluZGV4KCkgPT0gdGFiSW5kZXgpCi0g
ICAgICAgICAgICByZXR1cm4gbjsKLQorICAgIH0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzc2
LDggKzQ0MCw4IEBAIHN0YXRpYyBOb2RlKiBuZXh0Tm9kZVdpdGhHcmVhdGVyVGFiSW5kZXgoTm9k
ZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdmVuCiAgICAgLy8gU2VhcmNoIGlzIGlu
Y2x1c2l2ZSBvZiBzdGFydAogICAgIGludCB3aW5uaW5nVGFiSW5kZXggPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHNob3J0Pjo6bWF4KCkgKyAxOwogICAgIE5vZGUqIHdpbm5lciA9IDA7Ci0gICAgZm9y
IChOb2RlKiBuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpCi0gICAgICAg
IGlmIChuLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBuLT50YWJJbmRleCgpID4gdGFi
SW5kZXggJiYgbi0+dGFiSW5kZXgoKSA8IHdpbm5pbmdUYWJJbmRleCkgeworICAgIGZvciAoTm9k
ZSogbiA9IHN0YXJ0OyBuOyBuID0gUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlTmV4dE5v
ZGVXaXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5kYXJ5KG4pKQorICAgICAgICBpZiAoc2hvdWxkVmlz
aXQobiwgZXZlbnQpICYmIG4tPnRhYkluZGV4KCkgPiB0YWJJbmRleCAmJiBuLT50YWJJbmRleCgp
IDwgd2lubmluZ1RhYkluZGV4KSB7CiAgICAgICAgICAgICB3aW5uZXIgPSBuOwogICAgICAgICAg
ICAgd2lubmluZ1RhYkluZGV4ID0gbi0+dGFiSW5kZXgoKTsKICAgICAgICAgfQpAQCAtMzkwLDMw
ICs0NTQsMzMgQEAgc3RhdGljIE5vZGUqIHByZXZpb3VzTm9kZVdpdGhMb3dlclRhYkluZGV4KE5v
ZGUqIHN0YXJ0LCBpbnQgdGFiSW5kZXgsIEtleWJvYXJkRXYKICAgICAvLyBTZWFyY2ggaXMgaW5j
bHVzaXZlIG9mIHN0YXJ0CiAgICAgaW50IHdpbm5pbmdUYWJJbmRleCA9IDA7CiAgICAgTm9kZSog
d2lubmVyID0gMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNl
UHJldmlvdXNOb2RlKCkpCi0gICAgICAgIGlmIChuLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50
KSAmJiBuLT50YWJJbmRleCgpIDwgdGFiSW5kZXggJiYgbi0+dGFiSW5kZXgoKSA+IHdpbm5pbmdU
YWJJbmRleCkgeworICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gUmVpZmllZFRyZWVU
cmF2ZXJzYWw6OnRyYXZlcnNlUHJldmlvdXNOb2RlV2l0aG91dENyb3NzaW5nVXBwZXJCb3VuZGFy
eShuKSkgeworICAgICAgICBpbnQgY3VycmVudFRhYkluZGV4ID0gYWRqdXN0ZWRUYWJJbmRleChu
LCBldmVudCk7CisgICAgICAgIGlmICgoc2hvdWxkVmlzaXQobiwgZXZlbnQpIHx8IGlzTm9uRm9j
dXNhYmxlU2hhZG93SG9zdChuLCBldmVudCkpICYmIGN1cnJlbnRUYWJJbmRleCA8IHRhYkluZGV4
ICYmIGN1cnJlbnRUYWJJbmRleCA+IHdpbm5pbmdUYWJJbmRleCkgewogICAgICAgICAgICAgd2lu
bmVyID0gbjsKLSAgICAgICAgICAgIHdpbm5pbmdUYWJJbmRleCA9IG4tPnRhYkluZGV4KCk7Cisg
ICAgICAgICAgICB3aW5uaW5nVGFiSW5kZXggPSBjdXJyZW50VGFiSW5kZXg7CiAgICAgICAgIH0K
LQorICAgIH0KICAgICByZXR1cm4gd2lubmVyOwogfQogCi1Ob2RlKiBGb2N1c0NvbnRyb2xsZXI6
Om5leHRGb2N1c2FibGVOb2RlKFRyZWVTY29wZSogc2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2Fy
ZEV2ZW50KiBldmVudCkKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6bmV4dEZvY3VzYWJsZU5vZGUo
Rm9jdXNTY29wZSBzY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewog
ICAgIGlmIChzdGFydCkgeworICAgICAgICBpbnQgdGFiSW5kZXggPSBhZGp1c3RlZFRhYkluZGV4
KHN0YXJ0LCBldmVudCk7CiAgICAgICAgIC8vIElmIGEgbm9kZSBpcyBleGNsdWRlZCBmcm9tIHRo
ZSBub3JtYWwgdGFiYmluZyBjeWNsZSwgdGhlIG5leHQgZm9jdXNhYmxlIG5vZGUgaXMgZGV0ZXJt
aW5lZCBieSB0cmVlIG9yZGVyCi0gICAgICAgIGlmIChzdGFydC0+dGFiSW5kZXgoKSA8IDApIHsK
LSAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0LT50cmF2ZXJzZU5leHROb2RlKCk7IG47
IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpCi0gICAgICAgICAgICAgICAgaWYgKG4tPmlzS2V5
Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYmIG4tPnRhYkluZGV4KCkgPj0gMCkKKyAgICAgICAgaWYg
KHRhYkluZGV4IDwgMCkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gUmVpZmllZFRyZWVU
cmF2ZXJzYWw6OnRyYXZlcnNlTmV4dE5vZGVXaXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5kYXJ5KHN0
YXJ0KTsgbjsgbiA9IFJlaWZpZWRUcmVlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHROb2RlV2l0aG91
dENyb3NzaW5nVXBwZXJCb3VuZGFyeShuKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRW
aXNpdChuLCBldmVudCkgJiYgYWRqdXN0ZWRUYWJJbmRleChuLCBldmVudCkgPj0gMCkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG47CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBGaXJzdCB0cnkgdG8gZmluZCBhIG5vZGUgd2l0aCB0aGUgc2FtZSB0YWJpbmRleCBh
cyBzdGFydCB0aGF0IGNvbWVzIGFmdGVyIHN0YXJ0IGluIHRoZSBzY29wZS4KLSAgICAgICAgaWYg
KE5vZGUqIHdpbm5lciA9IG5leHROb2RlV2l0aEV4YWN0VGFiSW5kZXgoc3RhcnQtPnRyYXZlcnNl
TmV4dE5vZGUoKSwgc3RhcnQtPnRhYkluZGV4KCksIGV2ZW50KSkKKyAgICAgICAgaWYgKE5vZGUq
IHdpbm5lciA9IGZpbmROb2RlV2l0aEV4YWN0VGFiSW5kZXgoUmVpZmllZFRyZWVUcmF2ZXJzYWw6
OnRyYXZlcnNlTmV4dE5vZGVXaXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5kYXJ5KHN0YXJ0KSwgdGFi
SW5kZXgsIGV2ZW50LCBGb2N1c0RpcmVjdGlvbkZvcndhcmQpKQogICAgICAgICAgICAgcmV0dXJu
IHdpbm5lcjsKIAotICAgICAgICBpZiAoIXN0YXJ0LT50YWJJbmRleCgpKQorICAgICAgICBpZiAo
IXRhYkluZGV4KQogICAgICAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgbGFzdCBub2RlIGlu
IHRoZSBkb2N1bWVudCB3aXRoIGEgdGFiaW5kZXggb2YgMC4gVGhpcyBpcyB0aGUgZW5kIG9mIHRo
ZSB0YWJiaW5nIG9yZGVyLgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNDIxLDI2
ICs0ODgsMjYgQEAgTm9kZSogRm9jdXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxlTm9kZShUcmVl
U2NvcGUqIHNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmQKICAgICAvLyBMb29rIGZvciB0aGUg
Zmlyc3Qgbm9kZSBpbiB0aGUgc2NvcGUgdGhhdDoKICAgICAvLyAxKSBoYXMgdGhlIGxvd2VzdCB0
YWJpbmRleCB0aGF0IGlzIGhpZ2hlciB0aGFuIHN0YXJ0J3MgdGFiaW5kZXggKG9yIDAsIGlmIHN0
YXJ0IGlzIG51bGwpLCBhbmQKICAgICAvLyAyKSBjb21lcyBmaXJzdCBpbiB0aGUgc2NvcGUsIGlm
IHRoZXJlJ3MgYSB0aWUuCi0gICAgaWYgKE5vZGUqIHdpbm5lciA9IG5leHROb2RlV2l0aEdyZWF0
ZXJUYWJJbmRleChzY29wZS0+cm9vdE5vZGUoKSwgc3RhcnQgPyBzdGFydC0+dGFiSW5kZXgoKSA6
IDAsIGV2ZW50KSkKKyAgICBpZiAoTm9kZSogd2lubmVyID0gbmV4dE5vZGVXaXRoR3JlYXRlclRh
YkluZGV4KHNjb3BlLnJvb3ROb2RlKCksIHN0YXJ0ID8gYWRqdXN0ZWRUYWJJbmRleChzdGFydCwg
ZXZlbnQpIDogMCwgZXZlbnQpKQogICAgICAgICByZXR1cm4gd2lubmVyOwogCiAgICAgLy8gVGhl
cmUgYXJlIG5vIG5vZGVzIHdpdGggYSB0YWJpbmRleCBncmVhdGVyIHRoYW4gc3RhcnQncyB0YWJp
bmRleCwKICAgICAvLyBzbyBmaW5kIHRoZSBmaXJzdCBub2RlIHdpdGggYSB0YWJpbmRleCBvZiAw
LgotICAgIHJldHVybiBuZXh0Tm9kZVdpdGhFeGFjdFRhYkluZGV4KHNjb3BlLT5yb290Tm9kZSgp
LCAwLCBldmVudCk7CisgICAgcmV0dXJuIGZpbmROb2RlV2l0aEV4YWN0VGFiSW5kZXgoc2NvcGUu
cm9vdE5vZGUoKSwgMCwgZXZlbnQsIEZvY3VzRGlyZWN0aW9uRm9yd2FyZCk7CiB9CiAKLU5vZGUq
IEZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVOb2RlKFRyZWVTY29wZSogc2NvcGUs
IE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50KiBldmVudCkKK05vZGUqIEZvY3VzQ29udHJvbGxl
cjo6cHJldmlvdXNGb2N1c2FibGVOb2RlKEZvY3VzU2NvcGUgc2NvcGUsIE5vZGUqIHN0YXJ0LCBL
ZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBOb2RlKiBsYXN0OwotICAgIGZvciAobGFzdCA9
IHNjb3BlLT5yb290Tm9kZSgpOyBsYXN0LT5sYXN0Q2hpbGQoKTsgbGFzdCA9IGxhc3QtPmxhc3RD
aGlsZCgpKSB7IH0KKyAgICBmb3IgKGxhc3QgPSBzY29wZS5yb290Tm9kZSgpOyBSZWlmaWVkVHJl
ZVRyYXZlcnNhbDo6bGFzdENoaWxkV2l0aG91dENyb3NzaW5nVXBwZXJCb3VuZGFyeShsYXN0KTsg
bGFzdCA9IFJlaWZpZWRUcmVlVHJhdmVyc2FsOjpsYXN0Q2hpbGRXaXRob3V0Q3Jvc3NpbmdVcHBl
ckJvdW5kYXJ5KGxhc3QpKSB7IH0KIAogICAgIC8vIEZpcnN0IHRyeSB0byBmaW5kIHRoZSBsYXN0
IG5vZGUgaW4gdGhlIHNjb3BlIHRoYXQgY29tZXMgYmVmb3JlIHN0YXJ0IGFuZCBoYXMgdGhlIHNh
bWUgdGFiaW5kZXggYXMgc3RhcnQuCiAgICAgLy8gSWYgc3RhcnQgaXMgbnVsbCwgZmluZCB0aGUg
bGFzdCBub2RlIGluIHRoZSBzY29wZSB3aXRoIGEgdGFiaW5kZXggb2YgMC4KICAgICBOb2RlKiBz
dGFydGluZ05vZGU7CiAgICAgaW50IHN0YXJ0aW5nVGFiSW5kZXg7CiAgICAgaWYgKHN0YXJ0KSB7
Ci0gICAgICAgIHN0YXJ0aW5nTm9kZSA9IHN0YXJ0LT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpOwot
ICAgICAgICBzdGFydGluZ1RhYkluZGV4ID0gc3RhcnQtPnRhYkluZGV4KCk7CisgICAgICAgIHN0
YXJ0aW5nTm9kZSA9IFJlaWZpZWRUcmVlVHJhdmVyc2FsOjp0cmF2ZXJzZVByZXZpb3VzTm9kZVdp
dGhvdXRDcm9zc2luZ1VwcGVyQm91bmRhcnkoc3RhcnQpOworICAgICAgICBzdGFydGluZ1RhYklu
ZGV4ID0gYWRqdXN0ZWRUYWJJbmRleChzdGFydCwgZXZlbnQpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIHN0YXJ0aW5nTm9kZSA9IGxhc3Q7CiAgICAgICAgIHN0YXJ0aW5nVGFiSW5kZXggPSAwOwpA
QCAtNDQ4LDE4ICs1MTUsMTkgQEAgTm9kZSogRm9jdXNDb250cm9sbGVyOjpwcmV2aW91c0ZvY3Vz
YWJsZU5vZGUoVHJlZVNjb3BlKiBzY29wZSwgTm9kZSogc3RhcnQsIEtleWIKIAogICAgIC8vIEhv
d2V2ZXIsIGlmIGEgbm9kZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBub3JtYWwgdGFiYmluZyBjeWNs
ZSwgdGhlIHByZXZpb3VzIGZvY3VzYWJsZSBub2RlIGlzIGRldGVybWluZWQgYnkgdHJlZSBvcmRl
cgogICAgIGlmIChzdGFydGluZ1RhYkluZGV4IDwgMCkgewotICAgICAgICBmb3IgKE5vZGUqIG4g
PSBzdGFydGluZ05vZGU7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQotICAgICAg
ICAgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYmIG4tPnRhYkluZGV4KCkg
Pj0gMCkKKyAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnRpbmdOb2RlOyBuOyBuID0gUmVpZmll
ZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlUHJldmlvdXNOb2RlV2l0aG91dENyb3NzaW5nVXBwZXJC
b3VuZGFyeShuKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFZpc2l0KG4sIGV2ZW50KSAmJiBh
ZGp1c3RlZFRhYkluZGV4KG4sIGV2ZW50KSA+PSAwKQogICAgICAgICAgICAgICAgIHJldHVybiBu
OworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKE5vZGUqIHdpbm5lciA9IHByZXZpb3VzTm9k
ZVdpdGhFeGFjdFRhYkluZGV4KHN0YXJ0aW5nTm9kZSwgc3RhcnRpbmdUYWJJbmRleCwgZXZlbnQp
KQorICAgIGlmIChOb2RlKiB3aW5uZXIgPSBmaW5kTm9kZVdpdGhFeGFjdFRhYkluZGV4KHN0YXJ0
aW5nTm9kZSwgc3RhcnRpbmdUYWJJbmRleCwgZXZlbnQsIEZvY3VzRGlyZWN0aW9uQmFja3dhcmQp
KQogICAgICAgICByZXR1cm4gd2lubmVyOwogCiAgICAgLy8gVGhlcmUgYXJlIG5vIG5vZGVzIGJl
Zm9yZSBzdGFydCB3aXRoIHRoZSBzYW1lIHRhYmluZGV4IGFzIHN0YXJ0LCBzbyBsb29rIGZvciBh
IG5vZGUgdGhhdDoKICAgICAvLyAxKSBoYXMgdGhlIGhpZ2hlc3Qgbm9uLXplcm8gdGFiaW5kZXgg
KHRoYXQgaXMgbGVzcyB0aGFuIHN0YXJ0J3MgdGFiaW5kZXgpLCBhbmQKICAgICAvLyAyKSBjb21l
cyBsYXN0IGluIHRoZSBzY29wZSwgaWYgdGhlcmUncyBhIHRpZS4KLSAgICBzdGFydGluZ1RhYklu
ZGV4ID0gKHN0YXJ0ICYmIHN0YXJ0LT50YWJJbmRleCgpKSA/IHN0YXJ0LT50YWJJbmRleCgpIDog
c3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgpOworICAgIHN0YXJ0aW5nVGFiSW5kZXgg
PSAoc3RhcnQgJiYgc3RhcnRpbmdUYWJJbmRleCkgPyBzdGFydGluZ1RhYkluZGV4IDogc3RkOjpu
dW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgpOwogICAgIHJldHVybiBwcmV2aW91c05vZGVXaXRo
TG93ZXJUYWJJbmRleChsYXN0LCBzdGFydGluZ1RhYkluZGV4LCBldmVudCk7CiB9CiAKQEAgLTQ4
MCwxMCArNTQ4LDEwIEBAIHN0YXRpYyB2b2lkIGNsZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUq
IG9sZEZvY3VzZWRGcmFtZSwgRnJhbWUqIG5ld0ZvY3VzZWRGcmFtCiB7CiAgICAgaWYgKCFvbGRG
b2N1c2VkRnJhbWUgfHwgIW5ld0ZvY3VzZWRGcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKKwogICAgIGlmIChvbGRGb2N1c2VkRnJhbWUtPmRvY3VtZW50KCkgIT0gbmV3Rm9jdXNlZEZy
YW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBGcmFtZVNlbGVj
dGlvbiogcyA9IG9sZEZvY3VzZWRGcmFtZS0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKHMtPmlzTm9u
ZSgpKQogICAgICAgICByZXR1cm47CkBAIC00OTUsNyArNTYzLDcgQEAgc3RhdGljIHZvaWQgY2xl
YXJTZWxlY3Rpb25JZk5lZWRlZChGcmFtZSogb2xkRm9jdXNlZEZyYW1lLCBGcmFtZSogbmV3Rm9j
dXNlZEZyYW0KICAgICBOb2RlKiBzZWxlY3Rpb25TdGFydE5vZGUgPSBzLT5zZWxlY3Rpb24oKS5z
dGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKHNlbGVjdGlvblN0YXJ0Tm9kZSA9PSBu
ZXdGb2N1c2VkTm9kZSB8fCBzZWxlY3Rpb25TdGFydE5vZGUtPmlzRGVzY2VuZGFudE9mKG5ld0Zv
Y3VzZWROb2RlKSB8fCBzZWxlY3Rpb25TdGFydE5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09
IG5ld0ZvY3VzZWROb2RlKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgaWYgKE5v
ZGUqIG1vdXNlUHJlc3NOb2RlID0gbmV3Rm9jdXNlZEZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91
c2VQcmVzc05vZGUoKSkgewogICAgICAgICBpZiAobW91c2VQcmVzc05vZGUtPnJlbmRlcmVyKCkg
JiYgIW1vdXNlUHJlc3NOb2RlLT5jYW5TdGFydFNlbGVjdGlvbigpKSB7CiAgICAgICAgICAgICAv
LyBEb24ndCBjbGVhciB0aGUgc2VsZWN0aW9uIGZvciBjb250ZW50RWRpdGFibGUgZWxlbWVudHMs
IGJ1dCBkbyBjbGVhciBpdCBmb3IgaW5wdXQgYW5kIHRleHRhcmVhLiBTZWUgYnVnIDM4Njk2LgpA
QCAtNTA5LDcgKzU3Nyw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJh
bWUqIG9sZEZvY3VzZWRGcmFtZSwgRnJhbWUqIG5ld0ZvY3VzZWRGcmFtCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBzLT5jbGVhcigpOwogfQogCkBAIC01MTcs
NyArNTg1LDcgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OnNldEZvY3VzZWROb2RlKE5vZGUqIG5v
ZGUsIFBhc3NSZWZQdHI8RnJhbWU+IG5ld0ZvY3VzZWRGcmEKIHsKICAgICBSZWZQdHI8RnJhbWU+
IG9sZEZvY3VzZWRGcmFtZSA9IGZvY3VzZWRGcmFtZSgpOwogICAgIFJlZlB0cjxEb2N1bWVudD4g
b2xkRG9jdW1lbnQgPSBvbGRGb2N1c2VkRnJhbWUgPyBvbGRGb2N1c2VkRnJhbWUtPmRvY3VtZW50
KCkgOiAwOwotICAgIAorCiAgICAgTm9kZSogb2xkRm9jdXNlZE5vZGUgPSBvbGREb2N1bWVudCA/
IG9sZERvY3VtZW50LT5mb2N1c2VkTm9kZSgpIDogMDsKICAgICBpZiAob2xkRm9jdXNlZE5vZGUg
PT0gbm9kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01NDMsMTAgKzYxMSwxMCBAQCBib29s
IEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZE5vZGUoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxG
cmFtZT4gbmV3Rm9jdXNlZEZyYQogICAgICAgICBtX3BhZ2UtPmVkaXRvckNsaWVudCgpLT5zZXRJ
bnB1dE1ldGhvZFN0YXRlKG5vZGUtPnNob3VsZFVzZUlucHV0TWV0aG9kKCkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBpZiAob2xkRG9jdW1lbnQgJiYgb2xkRG9j
dW1lbnQgIT0gbmV3RG9jdW1lbnQpCiAgICAgICAgIG9sZERvY3VtZW50LT5zZXRGb2N1c2VkTm9k
ZSgwKTsKLSAgICAKKwogICAgIHNldEZvY3VzZWRGcmFtZShuZXdGb2N1c2VkRnJhbWUpOwogCiAg
ICAgLy8gU2V0dGluZyB0aGUgZm9jdXNlZCBub2RlIGNhbiByZXN1bHQgaW4gbG9zaW5nIG91ciBs
YXN0IHJlZnQgdG8gbm9kZSB3aGVuIEpTIGV2ZW50IGhhbmRsZXJzIGZpcmUuCkBAIC01NzgsNyAr
NjQ2LDcgQEAgdm9pZCBGb2N1c0NvbnRyb2xsZXI6OnNldEFjdGl2ZShib29sIGFjdGl2ZSkKICAg
ICB9CiAKICAgICBmb2N1c2VkT3JNYWluRnJhbWUoKS0+c2VsZWN0aW9uKCktPnBhZ2VBY3RpdmF0
aW9uQ2hhbmdlZCgpOwotICAgIAorCiAgICAgaWYgKG1fZm9jdXNlZEZyYW1lICYmIGlzRm9jdXNl
ZCgpKQogICAgICAgICBkaXNwYXRjaEV2ZW50c09uV2luZG93QW5kRm9jdXNlZE5vZGUobV9mb2N1
c2VkRnJhbWUtPmRvY3VtZW50KCksIGFjdGl2ZSk7CiB9CkBAIC03ODUsNyArODUzLDcgQEAgYm9v
bCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHkoRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uLCBLZXlib2EKIAogICAgIGlmIChjb250YWluZXItPmlzRG9jdW1lbnROb2Rl
KCkpCiAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGFpbmVyKS0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgICAgIAorCiAgICAgLy8gRmlndXJl
IG91dCB0aGUgc3RhcnRpbmcgcmVjdC4KICAgICBMYXlvdXRSZWN0IHN0YXJ0aW5nUmVjdDsKICAg
ICBpZiAoZm9jdXNlZE5vZGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9j
dXNDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCmlu
ZGV4IDNiNTYzNzdiZDQzMTNjNjU5YzVhZDY1ZjEwYjg0ZmRlNmNmZTVlMzAuLjgyOGYwOTI0ZWIw
ODY1Y2U0NWE5NWU3M2YyMmRlYzliYTA3YTZiMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZu
ZGVmIEZvY3VzQ29udHJvbGxlcl9oCkBAIC00Myw2ICs0MywxOCBAQCBjbGFzcyBOb2RlOwogY2xh
c3MgUGFnZTsKIGNsYXNzIFRyZWVTY29wZTsKIAorY2xhc3MgRm9jdXNTY29wZSB7CitwdWJsaWM6
CisgICAgRm9jdXNTY29wZShUcmVlU2NvcGUqKTsKKyAgICBOb2RlKiByb290Tm9kZSgpIGNvbnN0
OworICAgIE5vZGUqIG93bmVyKCkgY29uc3Q7CisgICAgc3RhdGljIEZvY3VzU2NvcGUgZm9jdXNT
Y29wZUluY2x1ZGluZyhOb2RlKik7CisgICAgc3RhdGljIEZvY3VzU2NvcGUgZm9jdXNTY29wZUlu
c2lkZU9mKE5vZGUqKTsKKworcHJpdmF0ZToKKyAgICBUcmVlU2NvcGUqIG1fcm9vdFRyZWVTY29w
ZTsKK307CisKIGNsYXNzIEZvY3VzQ29udHJvbGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRm9jdXNDb250cm9sbGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBA
IC01NCw3ICs2Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2V0SW5pdGlhbEZvY3VzKEZvY3Vz
RGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CiAgICAgYm9vbCBhZHZhbmNlRm9jdXMoRm9jdXNE
aXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBib29sIGluaXRpYWxGb2N1cyA9IGZhbHNlKTsKLSAg
ICAgICAgCisKICAgICBib29sIHNldEZvY3VzZWROb2RlKE5vZGUqLCBQYXNzUmVmUHRyPEZyYW1l
Pik7CiAKICAgICB2b2lkIHNldEFjdGl2ZShib29sKTsKQEAgLTY2LDE2ICs3OCwxNSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRDb250YWluaW5nV2luZG93SXNWaXNpYmxlKGJvb2wpOwogICAgIGJv
b2wgY29udGFpbmluZ1dpbmRvd0lzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbmlu
Z1dpbmRvd0lzVmlzaWJsZTsgfQogCi0gICAgYm9vbCB0cmFuc2ZlckZvY3VzVG9FbGVtZW50SW5T
aGFkb3dSb290KEVsZW1lbnQqIHNoYWRvd0hvc3QsIGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0
aW9uKTsKLQogcHJpdmF0ZToKICAgICBGb2N1c0NvbnRyb2xsZXIoUGFnZSopOwogCiAgICAgYm9v
bCBhZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5KEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50
Kik7CiAgICAgYm9vbCBhZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24s
IEtleWJvYXJkRXZlbnQqLCBib29sIGluaXRpYWxGb2N1cyk7CiAKLSAgICBOb2RlKiBmaW5kRm9j
dXNhYmxlTm9kZUFjcm9zc1RyZWVTY29wZShGb2N1c0RpcmVjdGlvbiwgVHJlZVNjb3BlKiBzdGFy
dFNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCopOwotICAgIE5vZGUqIGZpbmRGb2N1
c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50T3JTaGFkb3dSb290KEZvY3Vz
RGlyZWN0aW9uLCBOb2RlKiwgS2V5Ym9hcmRFdmVudCopOworICAgIE5vZGUqIGZpbmRGb2N1c2Fi
bGVOb2RlQWNyb3NzRm9jdXNTY29wZShGb2N1c0RpcmVjdGlvbiwgRm9jdXNTY29wZSBzdGFydFNj
b3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCopOworICAgIE5vZGUqIGZpbmRGb2N1c2Fi
bGVOb2RlRGVlcGx5KEZvY3VzRGlyZWN0aW9uLCBGb2N1c1Njb3BlLCBOb2RlKiBzdGFydCwgS2V5
Ym9hcmRFdmVudCopOworICAgIE5vZGUqIGZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bklu
dG9GcmFtZURvY3VtZW50KEZvY3VzRGlyZWN0aW9uLCBOb2RlKiwgS2V5Ym9hcmRFdmVudCopOwog
CiAgICAgLy8gU2VhcmNoZXMgdGhyb3VnaCB0aGUgZ2l2ZW4gdHJlZSBzY29wZSwgc3RhcnRpbmcg
ZnJvbSBzdGFydCBub2RlLCBmb3IgdGhlIG5leHQvcHJldmlvdXMgc2VsZWN0YWJsZSBlbGVtZW50
IHRoYXQgY29tZXMgYWZ0ZXIvYmVmb3JlIHN0YXJ0IG5vZGUuCiAgICAgLy8gVGhlIG9yZGVyIGZv
bGxvd2VkIGlzIGFzIHNwZWNpZmllZCBpbiBzZWN0aW9uIDE3LjExLjEgb2YgdGhlIEhUTUw0IHNw
ZWMsIHdoaWNoIGlzIGVsZW1lbnRzIHdpdGggdGFiIGluZGV4ZXMKQEAgLTg2LDEwICs5NywxMiBA
QCBwcml2YXRlOgogICAgIC8vIEByZXR1cm4gVGhlIGZvY3VzIG5vZGUgdGhhdCBjb21lcyBhZnRl
ci9iZWZvcmUgc3RhcnQgbm9kZS4KICAgICAvLwogICAgIC8vIFNlZSBodHRwOi8vd3d3LnczLm9y
Zy9UUi9odG1sNC9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTEuMQotICAgIGlubGluZSBOb2Rl
KiBmaW5kRm9jdXNhYmxlTm9kZShGb2N1c0RpcmVjdGlvbiwgVHJlZVNjb3BlKiwgTm9kZSogc3Rh
cnQsIEtleWJvYXJkRXZlbnQqKTsKKyAgICBpbmxpbmUgTm9kZSogZmluZEZvY3VzYWJsZU5vZGUo
Rm9jdXNEaXJlY3Rpb24sIEZvY3VzU2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7
CiAKLSAgICBOb2RlKiBuZXh0Rm9jdXNhYmxlTm9kZShUcmVlU2NvcGUqLCBOb2RlKiBzdGFydCwg
S2V5Ym9hcmRFdmVudCopOwotICAgIE5vZGUqIHByZXZpb3VzRm9jdXNhYmxlTm9kZShUcmVlU2Nv
cGUqLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCopOworICAgIE5vZGUqIG5leHRGb2N1c2Fi
bGVOb2RlKEZvY3VzU2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7CisgICAgTm9k
ZSogcHJldmlvdXNGb2N1c2FibGVOb2RlKEZvY3VzU2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2Fy
ZEV2ZW50Kik7CisKKyAgICBOb2RlKiBmaW5kTm9kZVdpdGhFeGFjdFRhYkluZGV4KE5vZGUqIHN0
YXJ0LCBpbnQgdGFiSW5kZXgsIEtleWJvYXJkRXZlbnQqLCBGb2N1c0RpcmVjdGlvbik7CiAKICAg
ICBib29sIGFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHlJbkNvbnRhaW5lcihOb2RlKiBjb250YWlu
ZXIsIGNvbnN0IExheW91dFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24sIEtleWJv
YXJkRXZlbnQqKTsKICAgICB2b2lkIGZpbmRGb2N1c0NhbmRpZGF0ZUluQ29udGFpbmVyKE5vZGUq
IGNvbnRhaW5lciwgY29uc3QgTGF5b3V0UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlv
biwgS2V5Ym9hcmRFdmVudCosIEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KTsKQEAgLTEwNCw1ICsx
MTcsNSBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotICAgIAorCiAj
ZW5kaWYgLy8gRm9jdXNDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4MTBiMDI4ODM2YzA2ZjI5N2M1ZmIz
YjczNjdkOTUwNDhjYzdjMWU5Li5hOWUwYzI5MTYyYjc5MmU4NDQ5NWUzODA5M2M0YjdkNmJiM2E1
M2UyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTItMDMtMjEgIEhheWF0byBJdG8gIDxoYXlh
dG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1ha2UgZm9jdXMgbmF2aWdhdGlvbiBiZSBjb21w
bGlhbnQgd2l0aCBTaGFkb3cgRE9NIHNwZWMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03ODU4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFNlcXVlbnRpYWwgZm9jdXMgbmF2aWdhdGlvbiBub3cgaG9ub3Jz
IFNoYWRvdyBET00gc3BlYy4KKyAgICAgICAgVGhlIHNoYWRvdyBET00gbmF2aWdhdGlvbiBvcmRl
ciBzZXF1ZW5jZSBpcyBpbnNlcnRlZCBpbnRvIHRoZSBkb2N1bWVudCBuYXZpZ2F0aW9uIG9yZGVy
OgorICAgICAgICAxLiBpbW1lZGlhdGVseSBhZnRlciB0aGUgc2hhZG93IGhvc3QsIGlmIHRoZSBz
aGFkb3cgaG9zdCBpcworICAgICAgICBmb2N1c2FibGU7IG9yCisgICAgICAgIDIuIGluIHBsYWNl
IG9mIHRoZSBzaGFkb3cgaG9zdCBhcyBpZiB0aGUgc2hhZG93IGhvc3QKKyAgICAgICAgd2VyZSBh
c3NpZ25lZCB0aGUgdmFsdWUgb2YgYXV0byBmb3IgZGV0ZXJtaW5pbmcgaXRzIHBvc2l0aW9uLgor
CisgICAgICAgIEJlZm9yZSB0aGlzIHBhdGNoLCB0cmF2ZXJzaW5nIGluc2lkZSBvZiBzaGFkb3cg
aG9zdCBpcyBpbmNvbXBsZXRlCisgICAgICAgIHNpbmNlIGluc2VydGlvbiBwb2ludHMsIHN1Y2gg
YXMgPGNvbnRlbnQ+IGVsZW1lbnQgb3IgPHNoYWRvdz4KKyAgICAgICAgZWxlbWVudCwgYXJlIG5v
dCByZXNvbHZlZCBhdCBhbGwuIE5vdyBmb2N1cyBuYXZpZ2F0aW9uIGNhbiB0cmF2ZXJzZQorICAg
ICAgICBzaGFkb3cgRE9NIHN1YnRyZWVzIGluIHJlaWZpZWQgdHJlZSBvcmRlciBjb3JyZWN0bHks
IHJlc29sdmluZworICAgICAgICBsb3dlciBib3VuZGFyeSB0cmFuc3BhcmVudGx5LgorCisgICAg
ICAgIE5vdGUgdGhhdCBGb2N1c0NvbnRyb2xsZXIgYmVjb21lcyB0aGUgZmlyc3QgY2xpZW50IHdo
aWNoIG1ha2VzIHVzZSBvZiBSZWlmaWVkVHJlZVRyYXZlcnNhbAorICAgICAgICBBUElzLgorCisg
ICAgICAgICogZmFzdC9kb20vc2hhZG93L2ZvY3VzLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvZm9jdXMtbmF2aWdhdGlvbi5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvcmVzb3VyY2VzL3NoYWRvdy1kb20uanM6
CisgICAgICAgIChpc1NoYWRvd0hvc3QpOgorICAgICAgICAob3duZXJUcmVlU2NvcGUpOgorICAg
ICAgICAoaXNJZnJhbWVFbGVtZW50KToKKyAgICAgICAgKGdldEVsZW1lbnRJblNoYWRvd1RyZWVT
dGFjayk6CisgICAgICAgIChkdW1wTm9kZSk6CisgICAgICAgIChpbm5lcm1vc3RBY3RpdmVFbGVt
ZW50KToKKyAgICAgICAgKGlzSW5uZXJtb3N0QWN0aXZlRWxlbWVudCk6CisgICAgICAgIChzaG91
bGROYXZpZ2F0ZUZvY3VzKToKKyAgICAgICAgKG5hdmlnYXRlRm9jdXNGb3J3YXJkKToKKyAgICAg
ICAgKG5hdmlnYXRlRm9jdXNCYWNrd2FyZCk6CisgICAgICAgICh0ZXN0Rm9jdXNOYXZpZ2F0aW9u
Rm93cmFkKToKKyAgICAgICAgKHRlc3RGb2N1c05hdmlnYXRpb25CYWNrd2FyZCk6CisgICAgICAg
ICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVyLWZvY3VzLWV4cGVjdGVkLnR4
dDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNm
ZXItZm9jdXMuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvdGFiLW9y
ZGVyLWlmcmFtZS1hbmQtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9z
aGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93Lmh0bWw6CisKIDIwMTItMDMtMTUgIEhh
eWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtTaGFkb3cgRE9NXSBB
ZGQgUmVpZmllZCBET00gVHJlZSB0cmF2ZXJzYWwgaW50ZXJuYWwgQVBJcy4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9mb2N1cy1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9mb2N1cy1uYXZpZ2F0aW9uLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jNjE5MzM0ZDQ3MWU4MjMxNzU1ZjUwZDk1ZWJlMGEyZGQ2NmNmYzNl
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2ZvY3VzLW5h
dmlnYXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTA2IEBACitUaGlzIHRlc3RzIHRoYXQg
cHJlc3NpbmcgVGFiIGtleSBzaG91bGQgdHJhdmVyc2UgaW50byBzaGFkb3cgdHJlZSwgYW5kIHBy
ZXNzaW5nIFNoaWZ0LVRhYiBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIuIE1ha2VzIHN1cmUgdGhh
dCBhIHNoYWRvdyBob3N0IGVsZW1lbnQgc2hvdWxkIGFjdCBsaWtlIGEgaWZyYW1lIGVsZW1lbnQu
CisKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQS0xIHRvIGlucHV0LUItMSBpbiBmb3J3YXJkCitQ
QVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUItMSB0byBpbnB1dC1DLTEgaW4gZm9yd2FyZAor
UEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1DLTEgdG8gaG9zdC1CIGluIGZvcndhcmQKK1BB
U1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1CIHRvIGhvc3QtQi8veW91bmdlci1pbnB1dC1BLTEg
aW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvL3lvdW5nZXItaW5wdXQt
QS0xIHRvIGhvc3QtQi9vbGRlci1pbnB1dC1BLTEgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1v
dmUgZnJvbSBob3N0LUIvb2xkZXItaW5wdXQtQS0xIHRvIGxpZ2h0LWNoaWxkLXNlbGVjdGVkLTEg
aW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBsaWdodC1jaGlsZC1zZWxlY3RlZC0x
IHRvIGhvc3QtQi9vbGRlci1pbnB1dC1CLTEgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBob3N0LUIvb2xkZXItaW5wdXQtQi0xIHRvIGhvc3QtQi8veW91bmdlci1pbnB1dC1CLTEg
aW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvL3lvdW5nZXItaW5wdXQt
Qi0xIHRvIGhvc3QtQi8veW91bmdlci1pbnB1dC1BLTAgaW4gZm9yd2FyZAorUEFTUworU2hvdWxk
IG1vdmUgZnJvbSBob3N0LUIvL3lvdW5nZXItaW5wdXQtQS0wIHRvIGhvc3QtQi9vbGRlci1pbnB1
dC1BLTAgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvb2xkZXItaW5w
dXQtQS0wIHRvIGxpZ2h0LWNoaWxkLXNlbGVjdGVkLTAgaW4gZm9yd2FyZAorUEFTUworU2hvdWxk
IG1vdmUgZnJvbSBsaWdodC1jaGlsZC1zZWxlY3RlZC0wIHRvIGhvc3QtQi9vbGRlci1pbnB1dC1C
LTAgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvb2xkZXItaW5wdXQt
Qi0wIHRvIGhvc3QtQi8veW91bmdlci1pbnB1dC1CLTAgaW4gZm9yd2FyZAorUEFTUworU2hvdWxk
IG1vdmUgZnJvbSBob3N0LUIvL3lvdW5nZXItaW5wdXQtQi0wIHRvIGlucHV0LUQtMSBpbiBmb3J3
YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUQtMSB0byBpbnB1dC1BLTAgaW4gZm9y
d2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1BLTAgdG8gaG9zdC1BL2lucHV0LTEg
aW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUEvaW5wdXQtMSB0byBob3N0
LUEvaW5wdXQtMjAgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUEvaW5w
dXQtMjAgdG8gaG9zdC1BL25lc3RlZC1ob3N0IGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3Zl
IGZyb20gaG9zdC1BL25lc3RlZC1ob3N0IHRvIGhvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0xNSBp
biBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1
dC0xNSB0byBob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQtMjUgaW4gZm9yd2FyZAorUEFTUworU2hv
dWxkIG1vdmUgZnJvbSBob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQtMjUgdG8gaW5wdXQtQi0wIGlu
IGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQi0wIHRvIGlucHV0LUMtMCBp
biBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUMtMCB0byBpbnB1dC1ELTAg
aW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1ELTAgdG8gaW5wdXQtQS0x
IGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQS0xIHRvIGlucHV0LUQt
MCBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1ELTAgdG8gaW5wdXQt
Qy0wIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUMtMCB0byBpbnB1
dC1CLTAgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQi0wIHRvIGhv
c3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0yNSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQtMjUgdG8gaG9zdC1BL25lc3RlZC1ob3N0L2lu
cHV0LTE1IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQS9uZXN0ZWQt
aG9zdC9pbnB1dC0xNSB0byBob3N0LUEvbmVzdGVkLWhvc3QgaW4gYmFja3dhcmQKK1BBU1MKK1No
b3VsZCBtb3ZlIGZyb20gaG9zdC1BL25lc3RlZC1ob3N0IHRvIGhvc3QtQS9pbnB1dC0yMCBpbiBi
YWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUEvaW5wdXQtMjAgdG8gaG9zdC1B
L2lucHV0LTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1BL2lucHV0
LTEgdG8gaW5wdXQtQS0wIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0
LUEtMCB0byBpbnB1dC1ELTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5w
dXQtRC0xIHRvIGhvc3QtQi8veW91bmdlci1pbnB1dC1CLTAgaW4gYmFja3dhcmQKK1BBU1MKK1No
b3VsZCBtb3ZlIGZyb20gaG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMCB0byBob3N0LUIvb2xkZXIt
aW5wdXQtQi0wIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi9vbGRl
ci1pbnB1dC1CLTAgdG8gbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMCBpbiBiYWNrd2FyZAorUEFTUwor
U2hvdWxkIG1vdmUgZnJvbSBsaWdodC1jaGlsZC1zZWxlY3RlZC0wIHRvIGhvc3QtQi9vbGRlci1p
bnB1dC1BLTAgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1CL29sZGVy
LWlucHV0LUEtMCB0byBob3N0LUIvL3lvdW5nZXItaW5wdXQtQS0wIGluIGJhY2t3YXJkCitQQVNT
CitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi8veW91bmdlci1pbnB1dC1BLTAgdG8gaG9zdC1CLy95
b3VuZ2VyLWlucHV0LUItMSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0
LUIvL3lvdW5nZXItaW5wdXQtQi0xIHRvIGhvc3QtQi9vbGRlci1pbnB1dC1CLTEgaW4gYmFja3dh
cmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1CL29sZGVyLWlucHV0LUItMSB0byBsaWdo
dC1jaGlsZC1zZWxlY3RlZC0xIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGxp
Z2h0LWNoaWxkLXNlbGVjdGVkLTEgdG8gaG9zdC1CL29sZGVyLWlucHV0LUEtMSBpbiBiYWNrd2Fy
ZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvb2xkZXItaW5wdXQtQS0xIHRvIGhvc3Qt
Qi8veW91bmdlci1pbnB1dC1BLTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20g
aG9zdC1CLy95b3VuZ2VyLWlucHV0LUEtMSB0byBob3N0LUIgaW4gYmFja3dhcmQKK1BBU1MKK1No
b3VsZCBtb3ZlIGZyb20gaG9zdC1CIHRvIGlucHV0LUMtMSBpbiBiYWNrd2FyZAorUEFTUworU2hv
dWxkIG1vdmUgZnJvbSBpbnB1dC1DLTEgdG8gaW5wdXQtQi0xIGluIGJhY2t3YXJkCitQQVNTCitT
aG91bGQgbW92ZSBmcm9tIGlucHV0LUItMSB0byBpbnB1dC1BLTEgaW4gYmFja3dhcmQKK1BBU1MK
K1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQS0xIHRvIGlucHV0LUQtMCBpbiBiYWNrd2FyZAorUEFT
UworVGVzdCBmaW5pc2hlZC4KKworCisKKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvZm9jdXMtbmF2aWdhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L2ZvY3VzLW5hdmlnYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYWU1NTg5ZmQzMGYyMWI5
NTk3ZWFlZjIwODQyNjMzMGJmMWUwYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L2ZvY3VzLW5hdmlnYXRpb24uaHRtbApAQCAtMCwwICsxLDIxMyBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3NoYWRvdy1kb20uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGlzIHRlc3Rz
IHRoYXQgcHJlc3NpbmcgVGFiIGtleSBzaG91bGQgdHJhdmVyc2UgaW50byBzaGFkb3cgdHJlZSwg
YW5kIHByZXNzaW5nIFNoaWZ0LVRhYiBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIuCisgTWFrZXMg
c3VyZSB0aGF0IGEgc2hhZG93IGhvc3QgZWxlbWVudCBzaG91bGQgYWN0IGxpa2UgYSBpZnJhbWUg
ZWxlbWVudC48L3A+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzxzY3JpcHQ+CisKK3ZhciBm
b2N1c2VkRWxlbWVudDsKKworLy8gZnVuY3Rpb24gb25Gb2N1cyhldmVudCkgeworLy8gICAgIGZv
Y3VzZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0OworLy8gICAgIGNvbnNvbGUubG9nKCdvbmZvY3Vz
OicgKyBmb2N1c2VkRWxlbWVudC5pZCk7CisvLyB9CisKKy8vIGZ1bmN0aW9uIGFkZEZvY3VzRXZl
bnRMaXN0ZW5lcihlbGVtZW50KSB7CisvLyAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdm
b2N1cycsIG9uRm9jdXMsIGZhbHNlKTsKKy8vIH0KKworLy8gZnVuY3Rpb24gcXVlcnlTZWxlY3Rv
ckFsbERlZXBseShyb290Tm9kZSwgcXVlcnkpIHsKKy8vICAgICB2YXIgbm9kZXMgPSByb290Tm9k
ZS5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTsKKy8vICAgICB2YXIgcmVzdWx0cyA9IFtdOworLy8g
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHsKKy8vICAgICAgICAg
dmFyIG5vZGUgPSBub2Rlc1tpXTsKKy8vICAgICAgICAgcmVzdWx0cy5wdXNoKG5vZGUpOworLy8g
ICAgICAgICB2YXIgc2hhZG93Um9vdCA9IGludGVybmFscy5vbGRlc3RTaGFkb3dSb290KG5vZGUp
OworLy8gICAgICAgICB3aGlsZSAoc2hhZG93Um9vdCkgeworLy8gICAgICAgICAgICAgcmVzdWx0
cyA9IHJlc3VsdHMuY29uY2F0KHF1ZXJ5U2VsZWN0b3JBbGxEZWVwbHkoc2hhZG93Um9vdCwgcXVl
cnkpKTsKKy8vICAgICAgICAgICAgIHNoYWRvd1Jvb3QgPSBpbnRlcm5hbHMueW91bmdlclNoYWRv
d1Jvb3Qoc2hhZG93Um9vdCk7CisvLyAgICAgICAgIH0KKy8vICAgICB9CisvLyAgICAgcmV0dXJu
IHJlc3VsdHM7CisvLyB9CisKK2Z1bmN0aW9uIHByZXBhcmVET01UcmVlKHBhcmVudCkKK3sKKyAg
ICBwYXJlbnQuYXBwZW5kQ2hpbGQoCisgICAgICAgIC8vIEZJWE1FOiBVc2UgbW9yZSBkZXNjcmlw
dGl2ZSBuYW1pbmcgZm9yICdpZCcuCisgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICd0
b3AtZGl2J30sCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdp
bnB1dC1BLTEnLCAndGFiaW5kZXgnOiAxfSksCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00o
J2lucHV0JywgeydpZCc6ICdpbnB1dC1CLTEnLCAndGFiaW5kZXgnOiAxfSksCisgICAgICAgICAg
ICAgICAgICBjcmVhdGVET00oJ2RpdicpLCAgLy8gU2hvdWxkIG5vdCBiZSBzZWxlY3RlZC4KKyAg
ICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0LUEtMCcsICd0
YWJpbmRleCc6IDB9KSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6
ICdob3N0LUEnLCAndGFiaW5kZXgnOiAtMX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRl
RE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtMScsICd0YWJpbmRleCc6IDF9KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ25lc3RlZC1o
b3N0JywgJ3RhYmluZGV4JzogMzB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0Jywgeyd0YWJpbmRleCc6IC0xfSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdp
bnB1dCcsIHsnaWQnOiAnaW5wdXQtMTUnLCAndGFiaW5kZXgnOiAxNX0pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lk
JzogJ2lucHV0LTI1JywgJ3RhYmluZGV4JzogMjV9KSkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdpbnB1dC0yMCcsICd0YWJpbmRl
eCc6IDIwfSkpKSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzog
J2lucHV0LUMtMScsICd0YWJpbmRleCc6IDF9KSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURP
TSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0LUItMCcsICd0YWJpbmRleCc6IDB9KSwKKyAgICAgICAg
ICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdob3N0LUInLCAndGFiaW5kZXgnOiAx
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdvbGRl
ci1pbnB1dC1BLTAnLCAndGFiaW5kZXgnOiAwfSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ29sZGVyLWlucHV0LUEtMScsICd0YWJp
bmRleCc6IDF9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdj
b250ZW50JywgeydzZWxlY3QnOiAnI2xpZ2h0LWNoaWxkLXNlbGVjdGVkLTAsICNsaWdodC1jaGls
ZC1zZWxlY3RlZC0xJ30pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVE
T00oJ2lucHV0JywgeydpZCc6ICdvbGRlci1pbnB1dC1CLTAnLCAndGFiaW5kZXgnOiAwfSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzog
J29sZGVyLWlucHV0LUItMScsICd0YWJpbmRleCc6IDF9KSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAneW91bmdlci1pbnB1dC1BLTAnLCAndGFiaW5k
ZXgnOiAwfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5w
dXQnLCB7J2lkJzogJ3lvdW5nZXItaW5wdXQtQS0xJywgJ3RhYmluZGV4JzogMX0pLCAgLy8gVGhl
IGZpcnN0IG5vZGUgaW4gdGhlIGZvY3VzU2NvcGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlRE9NKCdzaGFkb3cnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAneW91bmdlci1pbnB1dC1CLTAnLCAndGFiaW5k
ZXgnOiAwfSksICAvLyBUaGUgbGFzdCBub2RlIGluIHRoZSBmb2N1c1Njb3BlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ3lvdW5nZXIt
aW5wdXQtQi0xJywgJ3RhYmluZGV4JzogMX0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdsaWdodC1jaGlsZC1zZWxlY3RlZC0wJywgJ3Rh
YmluZGV4JzogMH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5w
dXQnLCB7J2lkJzogJ2xpZ2h0LWNoaWxkLXNlbGVjdGVkLTEnLCAndGFiaW5kZXgnOiAxfSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnbGln
aHQtY2hpbGQtbm9uLXNlbGVjdGVkLTEnLCAndGFiaW5kZXgnOiAxfSkpLAorICAgICAgICAgICAg
ICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtRC0xJywgJ3RhYmluZGV4Jzog
MX0pLAorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQt
Qy0wJywgJ3RhYmluZGV4JzogMH0pLAorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYn
LCB7J2lkJzogJ2hvc3QtQycsICd0YWJpbmRleCc6IC0xfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjcmVhdGVET00oJ2lucHV0Jywgeyd0YWJpbmRleCc6IC0xfSkpKSwKKyAgICAgICAgICAgICAg
ICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0LUQtMCcsICd0YWJpbmRleCc6IDB9
KSkpOworCisgICAgLy8gdmFyIG5vZGVzID0gcXVlcnlTZWxlY3RvckFsbERlZXBseShkb2N1bWVu
dCwgJ2lucHV0LCBkaXYnKTsKKyAgICAvLyBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0
aDsgKytpKQorICAgIC8vICAgICBhZGRGb2N1c0V2ZW50TGlzdGVuZXIobm9kZXNbaV0pOworCisg
ICAgcGFyZW50Lm9mZnNldExlZnQ7CisgICAgLy8gZGVidWcod2luZG93LmludGVybmFscy5kdW1w
UmVpZmllZFRyZWVGb3IoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvcC1kaXYnKSkpOworfQor
CitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIGlmICgh
d2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJycpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgcHJlcGFyZURPTVRyZWUoZG9jdW1lbnQuYm9keSk7CisKKyAg
ICAvLyBGSVhNRTogT3V0cHV0IGluc2VydGVkIGNvbW1lbnRzIGluIHRoaXMgYXJyYXkgdG8gZXhw
ZWN0ZWQudHh0IGZvciByZWFkYWJpbGl0eSBvZiB0aGUgcmVzdWx0LgorICAgIGVsZW1lbnRzTmF2
aWdhdGVkSW5Gb3J3YXJkID0gWworICAgICAgICAnaW5wdXQtQS0xJywgJ2lucHV0LUItMScsCisg
ICAgICAgIC8vIFRyYXZlcnNpbmcgZWxlbWVudHMgd2hpY2ggaGF2ZSB0YWJpbmRleD0xCisgICAg
ICAgIC8vIFNob3VsZCBza2lwIGV2ZXJ5IGVsZW1lbnRzIGluIG5vbi1mb2N1c2FibGUgc2hhZG93
IGhvc3QgZXZlbiBpZiB0aGV5IGhhdmUgdGFiaW5kZXg9MS4KKyAgICAgICAgJ2lucHV0LUMtMScs
CisKKyAgICAgICAgLy8gRm9jdXNhYmxlIHNoYWRvdyBob3N0IG11c3QgYmUgdHJhdmVyc2VkLgor
ICAgICAgICAnaG9zdC1CJywKKworICAgICAgICAvLyBFbnRlcmluZyBhIGZvY3VzIHNjb3BlIG9m
IHRoZSBzaGFkb3cgaG9zdC4KKyAgICAgICAgLy8gVGhlIGZpcnN0IGZvY3VzYWJsZSBub2RlIGlu
IHNoYWRvdyBET00gbmF2aWdhdGlvbi4KKyAgICAgICAgJ2hvc3QtQi8veW91bmdlci1pbnB1dC1B
LTEnLAorCisgICAgICAgIC8vIEEgInNoYWRvdyIgZWxlbWVudCBzaG91bGQgYmUgcmVzb2x2ZWQg
Y29ycmVjdGx5LgorICAgICAgICAnaG9zdC1CL29sZGVyLWlucHV0LUEtMScsCisKKyAgICAgICAg
Ly8gQSAiY29udGVudCIgZWxlbWVudCBzaG91bGQgYmUgcmVzb2x2ZWQgY29ycmVjdGx5LgorICAg
ICAgICAnbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMScsCisgICAgICAgICdob3N0LUIvb2xkZXItaW5w
dXQtQi0xJywKKyAgICAgICAgJ2hvc3QtQi8veW91bmdlci1pbnB1dC1CLTEnLAorCisgICAgICAg
IC8vIEFsbCBlbGVtZW50cyB3aXRoIHRhYmluZGV4PTEgd2VyZSB0cmF2ZXJzZWQuIFNvIGVsZW1l
bnRzIHdpdGggdGFiaW5kZXg9MCBmb2xsb3cuCisgICAgICAgICdob3N0LUIvL3lvdW5nZXItaW5w
dXQtQS0wJywKKyAgICAgICAgJ2hvc3QtQi9vbGRlci1pbnB1dC1BLTAnLAorICAgICAgICAnbGln
aHQtY2hpbGQtc2VsZWN0ZWQtMCcsCisgICAgICAgICdob3N0LUIvb2xkZXItaW5wdXQtQi0wJywK
KyAgICAgICAgJ2hvc3QtQi8veW91bmdlci1pbnB1dC1CLTAnLAorCisgICAgICAgIC8vIEV4aXN0
aW5nIGEgZm9jdXMgc2NvcGUgb2Ygc2hhZG93IGhvc3QuIFRyYXZlcnNlIHRoZSBuZXh0IGZvY3Vz
YWxiZSBlbGVtZW50IG9mIHRoZSBzaGFkb3cgaG9zdC4KKyAgICAgICAgJ2lucHV0LUQtMScsCisK
KyAgICAgICAgLy8gQWxsIGVsZW1lbnRzIHdpdGggdGFiaW5kZXg9MSB3ZXJlIHRyYXZlcnNlZCBp
biBkb2N1bWVudCBvcmRlci4gU28gdHJhdmVyc2UgZWxlbWVudHMgd2l0aCB0YWJpbmRleD0wCisg
ICAgICAgICdpbnB1dC1BLTAnLAorCisgICAgICAgIC8vIE5vbi1mb2N1c2FibGUgc2hhZG93IGhv
c3QgaXMgInJlcGxhY2VkIiB3aXRoIGl0cyBzaGFkb3cgRE9NIG5hdmlnYXRpb24uCisgICAgICAg
ICdob3N0LUEvaW5wdXQtMScsCisgICAgICAgICdob3N0LUEvaW5wdXQtMjAnLAorICAgICAgICAn
aG9zdC1BL25lc3RlZC1ob3N0JywKKworICAgICAgICAvLyBFbnRlcmluZyBhIG5lc3RlZCBzaGFk
b3cgaG9zdC4KKyAgICAgICAgJ2hvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0xNScsCisgICAgICAg
ICdob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQtMjUnLAorCisgICAgICAgIC8vIEV4aXN0aW5nIG5l
c3RlZCBzaGFkb3cgaG9zdC4nKQorICAgICAgICAnaW5wdXQtQi0wJywKKyAgICAgICAgJ2lucHV0
LUMtMCcsCisKKyAgICAgICAgLy8gTm9uLWZvY3VzYWJsZSBzaGFkb3cgaG9zdCB3aGljaCBkb2Vz
IG5vdCBoYXZlIGZvY3VzYWJsZSBlbGVtZW50cyB3YXMgc2tpcHBlZC4KKyAgICAgICAgJ2lucHV0
LUQtMCcsCisKKyAgICAgICAgLy8gV3JhcHBlZCB0byB0aGUgZmlyc3QgZWxlbWVudC4KKyAgICAg
ICAgJ2lucHV0LUEtMScsCisKKyAgICAgICAgLy8gU3RhcnRpbmcgdG8gZ28gaW4gcmV2ZXJzZSBk
aXJlY3Rpb24uCisgICAgICAgIC8vIFRyYXZlcnNlIHRoZSBMYXN0IGZvY3VzYWJsZSBlbGVtZW50
IGluIGRvY3VtZW50LgorICAgIF07CisKKworICAgIGVsZW1lbnRzTmF2aWdhdGVkSW5CYWNrd2Fy
ZCA9IFsKKyAgICAgICAgJ2lucHV0LUEtMScsCisgICAgICAgICdpbnB1dC1ELTAnLAorICAgICAg
ICAnaW5wdXQtQy0wJywKKyAgICAgICAgJ2lucHV0LUItMCcsCisKKyAgICAgICAgLy8gVHJpY2t5
IG5hdmlnYXRpb24uIFRyYXZhcnNlIHRoZSBkZWVwbHkgbGFzdCBlbGVtZW50IGluIG5lc3RlZCBz
aGFkb3cgRE9NIG5hdmlnYXRpb24uCisgICAgICAgICdob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQt
MjUnLAorICAgICAgICAnaG9zdC1BL25lc3RlZC1ob3N0L2lucHV0LTE1JywKKyAgICAgICAgJ2hv
c3QtQS9uZXN0ZWQtaG9zdCcsCisgICAgICAgICdob3N0LUEvaW5wdXQtMjAnLAorICAgICAgICAn
aG9zdC1BL2lucHV0LTEnLAorCisgICAgICAgIC8vIEV4aXN0aW5nIGEgc2hhZG8gaG9zdCcKKyAg
ICAgICAgJ2lucHV0LUEtMCcsCisKKyAgICAgICAgLy8gQWxsIGVsZW1lbnRzIHdpdGggdGFiaW5k
ZXg9MCB3ZXJlIHRyYXZlcnNlZC4gU28gdHJhdmVyc2UgZWxlbWVudHMgd2l0aCB0YWJpbmRleD0x
IGluIHJldmVyc2Ugb3JkZXIuCisgICAgICAgICdpbnB1dC1ELTEnLAorCisgICAgICAgIC8vIFll
dCBhbm90aGVyIHRyaWNreSBwYXJ0LiBTaG91bGQgdHJhdmVyc2UgdGhlIGxhc3QgZWxlbWVudCBp
biB0aGUgcmVpZmllZCB0cmVlLCBjb25zaWRlcmluZyBhbHNvIHRhYmluZGV4LgorICAgICAgICAn
aG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMCcsCisgICAgICAgICdob3N0LUIvb2xkZXItaW5wdXQt
Qi0wJywKKyAgICAgICAgJ2xpZ2h0LWNoaWxkLXNlbGVjdGVkLTAnLAorICAgICAgICAnaG9zdC1C
L29sZGVyLWlucHV0LUEtMCcsCisgICAgICAgICdob3N0LUIvL3lvdW5nZXItaW5wdXQtQS0wJywK
KworICAgICAgICAnaG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMScsCisgICAgICAgICdob3N0LUIv
b2xkZXItaW5wdXQtQi0xJywKKyAgICAgICAgJ2xpZ2h0LWNoaWxkLXNlbGVjdGVkLTEnLAorICAg
ICAgICAnaG9zdC1CL29sZGVyLWlucHV0LUEtMScsCisgICAgICAgICdob3N0LUIvL3lvdW5nZXIt
aW5wdXQtQS0xJywKKworICAgICAgICAvLyBBIHNoYWRvdyBob3N0IHNob3VsZCBiZSBzZWxlY3Rl
ZCBqdXN0IGFmdGVyIHRoZSBmaXJzdCBlbGVtZW50IGluIGl0cyByZWlmaWVkIHRyZWUuCisgICAg
ICAgIC8vICdmb2N1cycgZXZlbnQgaXMgbm90IGNhbGxlZCBoZXJlIHNpbmNlIGEgZm9jdXMgbW92
ZWQgd2l0aGluIHRoZSBzYW1lIGhvc3QuCisgICAgICAgICdob3N0LUInLAorICAgICAgICAnaW5w
dXQtQy0xJywKKyAgICAgICAgJ2lucHV0LUItMScsCisgICAgICAgICdpbnB1dC1BLTEnLAorCisg
ICAgICAgIC8vIFdyYXBwZWQgdG8gdGhlIGxhc3QgZWxlbWVudC4KKyAgICAgICAgJ2lucHV0LUQt
MCcsCisgICAgXTsKKworICAgIHRlc3RGb2N1c05hdmlnYXRpb25Gb3dyYWQoZWxlbWVudHNOYXZp
Z2F0ZWRJbkZvcndhcmQpOworICAgIHRlc3RGb2N1c05hdmlnYXRpb25CYWNrd2FyZChlbGVtZW50
c05hdmlnYXRlZEluQmFja3dhcmQpOworCisgICAgZGVidWcoJ1Rlc3QgZmluaXNoZWQuJyk7Cit9
CisKK3Rlc3QoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcmVzb3VyY2VzL3NoYWRvdy1kb20uanMgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcmVzb3VyY2VzL3NoYWRvdy1kb20uanMKaW5kZXggMzFk
NjAxZjMwNjFiYWFmNDQyNDYyZDkxYWRhM2U0NmMxZWY2ZGViMS4uNTBiYjNlODY5NTE3ZGFhYzY5
ZjNiYTJjZmNmZTEyMWFjNTBlZjQwMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L3Jlc291cmNlcy9zaGFkb3ctZG9tLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9yZXNvdXJjZXMvc2hhZG93LWRvbS5qcwpAQCAtMzQsMTIgKzM0LDMxIEBAIGZ1bmN0
aW9uIGNyZWF0ZURPTSh0YWdOYW1lLCBhdHRyaWJ1dGVzKQogICAgIHJldHVybiBlbGVtZW50Owog
fQogCitmdW5jdGlvbiBpc1NoYWRvd0hvc3Qobm9kZSkKK3sKKyAgICByZXR1cm4gd2luZG93Lmlu
dGVybmFscy5vbGRlc3RTaGFkb3dSb290KG5vZGUpOworfQorCiBmdW5jdGlvbiBpc1NoYWRvd1Jv
b3Qobm9kZSkKIHsKICAgICAvLyBGSVhNRTogd2luZG93LmludGVybmFscyBzaG91bGQgaGF2ZSBp
bnRlcm5hbHMuaXNTaGFkb3dSb290KG5vZGUpLgogICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09
ICIjc2hhZG93LXJvb3QiIHx8IG5vZGUuaG9zdDsKIH0KIAorLy8gSXQgbWlnaHQgYmUgYmV0dGVy
IHRvIGhhdmUgdGhpcyBmdW5jdGlvbiBvbiB3aW5kb3dzLmludGVybmFscy4KK2Z1bmN0aW9uIG93
bmVyVHJlZVNjb3BlKG5vZGUpCit7CisgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkK
KyAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlOworICByZXR1cm4gbm9kZTsKK30KKworZnVuY3Rp
b24gaXNJZnJhbWVFbGVtZW50KGVsZW1lbnQpCit7CisgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxl
bWVudC5ub2RlTmFtZSA9PSAnSUZSQU1FJzsKK30KKworLy8gRGVwcmVjYXRlIHRoaXMgJ25hbWlu
Zycgc2luY2UgdGhpcyBtYXkgcmV0dXJuIFNoYWRvd1Jvb3QsIHdoaWNoIGlzIG5vdCBhbiBFbGVt
ZW50LgogLy8gWW91IGNhbiBzcGVmaWZ5IHlvdW5nZXJTaGFkb3dSb290IGJ5IGNvbnNlY3V0aXZl
IHNsYXNoZXMuCiAvLyBTZWUgTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2dldC1lbGVtZW50
LWJ5LWlkLWluLXNoYWRvdy1yb290Lmh0bWwgZm9yIGFjdHVhbCB1c2FnZXMuCiBmdW5jdGlvbiBn
ZXRFbGVtZW50SW5TaGFkb3dUcmVlU3RhY2socGF0aCkKQEAgLTQ3LDEzICs2NiwxMDQgQEAgZnVu
Y3Rpb24gZ2V0RWxlbWVudEluU2hhZG93VHJlZVN0YWNrKHBhdGgpCiAgICAgdmFyIGlkcyA9IHBh
dGguc3BsaXQoJy8nKTsKICAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlk
c1swXSk7CiAgICAgZm9yICh2YXIgaSA9IDE7IG5vZGUgIT0gbnVsbCAmJiBpIDwgaWRzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgIGlmIChpc0lmcmFtZUVsZW1lbnQobm9kZSkpIHsKKyAgICAgICAg
ICAgIG5vZGUgPSBub2RlLmNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZHNbaV0pOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICAgICAgICAgaWYgKGlzU2hhZG93Um9v
dChub2RlKSkKICAgICAgICAgICAgIG5vZGUgPSBpbnRlcm5hbHMueW91bmdlclNoYWRvd1Jvb3Qo
bm9kZSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSBpZiAoaW50ZXJuYWxzLm9sZGVzdFNo
YWRvd1Jvb3Qobm9kZSkpCiAgICAgICAgICAgICBub2RlID0gaW50ZXJuYWxzLm9sZGVzdFNoYWRv
d1Jvb3Qobm9kZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAg
ICAgaWYgKGlkc1tpXSAhPSAnJykKICAgICAgICAgICAgIG5vZGUgPSBpbnRlcm5hbHMuZ2V0RWxl
bWVudEJ5SWRJblNoYWRvd1Jvb3Qobm9kZSwgaWRzW2ldKTsKICAgICB9CiAgICAgcmV0dXJuIG5v
ZGU7CiB9CiAKK2Z1bmN0aW9uIGR1bXBOb2RlKG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAg
ICAgcmV0dXJuICdudWxsJzsKKyAgICB2YXIgb3V0cHV0ID0gJycgKyBub2RlOworICAgIC8vIEZJ
WE1FOiBEdW1wIGZ1bGwgaWQgaW5jbHVkaW5nIGl0cyBzaGFkb3cgaG9zdCwgcmVjdXJzaXZlbHku
CisgICAgaWYgKG5vZGUuaWQpCisgICAgICAgIG91dHB1dCArPSAnIGlkPScgKyBub2RlLmlkOwor
ICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9uIGlubmVybW9zdEFjdGl2ZUVsZW1lbnQo
ZWxlbWVudCkKK3sKKyAgICBlbGVtZW50ID0gZWxlbWVudCB8fCBkb2N1bWVudC5hY3RpdmVFbGVt
ZW50OworICAgIGlmIChpc0lmcmFtZUVsZW1lbnQoZWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGVs
ZW1lbnQuY29udGVudERvY3VtZW50LmFjdGl2ZUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4g
aW5uZXJtb3N0QWN0aXZlRWxlbWVudChlbGVtZW50LmNvbnRlbnREb2N1bWVudC5hY3RpdmVFbGVt
ZW50KTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorICAgIGlmIChpc1NoYWRvd0hv
c3QoZWxlbWVudCkpIHsKKyAgICAgICAgdmFyIHNoYWRvd1Jvb3QgPSB3aW5kb3cuaW50ZXJuYWxz
Lm9sZGVzdFNoYWRvd1Jvb3QoZWxlbWVudCk7CisgICAgICAgIHdoaWxlIChzaGFkb3dSb290KSB7
CisgICAgICAgICAgICBpZiAoc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50KSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGlubmVybW9zdEFjdGl2ZUVsZW1lbnQoc2hhZG93Um9vdC5hY3RpdmVFbGVt
ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNoYWRvd1Jvb3QgPSB3aW5kb3cuaW50
ZXJuYWxzLnlvdW5nZXJTaGFkb3dSb290KHNoYWRvd1Jvb3QpOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBlbGVtZW50OworfQorCitmdW5jdGlvbiBpc0lubmVybW9zdEFjdGl2ZUVsZW1l
bnQoaWQpCit7CisgICAgdmFyIGVsZW1lbnQgPSBnZXRFbGVtZW50SW5TaGFkb3dUcmVlU3RhY2so
aWQpOworICAgIGlmICghZWxlbWVudCkgeworICAgICAgZGVidWcoJ1RoZXJlIGlzIG5vIGVsZW1l
bnQ6ICcgKyBpZCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChlbGVtZW50
ID09IGlubmVybW9zdEFjdGl2ZUVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVidWcoJ0V4cGVjdGVkIGlubmVybW9zdCBhY3RpdmVFbGVtZW50IGlzICcgKyBpZCArICcsIGJ1
dCBhY3R1YWwgaW5uZXJtb3N0IGFjdGl2ZUVsZW1lbnQgaXMgJyArIGR1bXBOb2RlKGlubmVybW9z
dEFjdGl2ZUVsZW1lbnQoKSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gc2hv
dWxkTmF2aWdhdGVGb2N1cyhmcm9tLCB0bywgZGlyZWN0aW9uKQoreworICAgIGRlYnVnKCdTaG91
bGQgbW92ZSBmcm9tICcgKyBmcm9tICsgJyB0byAnICsgdG8gKyAnIGluICcgKyBkaXJlY3Rpb24p
OworICAgIHZhciBmcm9tRWxlbWVudCA9IGdldEVsZW1lbnRJblNoYWRvd1RyZWVTdGFjayhmcm9t
KTsKKyAgICBpZiAoIWZyb21FbGVtZW50KSB7CisgICAgICBkZWJ1ZygnRkFJTDogVGhlcmUgaXMg
bm8gZWxlbWVudDogJysgZnJvbSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZyb21FbGVt
ZW50LmZvY3VzKCk7CisgICAgaWYgKGRpcmVjdGlvbiA9PSAnZm9yd2FyZCcpCisgICAgICAgIG5h
dmlnYXRlRm9jdXNGb3J3YXJkKCk7CisgICAgZWxzZQorICAgICAgICBuYXZpZ2F0ZUZvY3VzQmFj
a3dhcmQoKTsKKyAgICBpZiAoaXNJbm5lcm1vc3RBY3RpdmVFbGVtZW50KHRvKSkKKyAgICAgICAg
ZGVidWcoJ1BBU1MnKTsKKyAgICBlbHNlCisgICAgICAgIGRlYnVnKCdGQUlMJyk7Cit9CisKK2Z1
bmN0aW9uIG5hdmlnYXRlRm9jdXNGb3J3YXJkKCkKK3sKKyAgICBldmVudFNlbmRlci5rZXlEb3du
KCdcdCcpOworfQorCitmdW5jdGlvbiBuYXZpZ2F0ZUZvY3VzQmFja3dhcmQoKQoreworICAgIGV2
ZW50U2VuZGVyLmtleURvd24oJ1x0JywgWydzaGlmdEtleSddKTsKK30KKworZnVuY3Rpb24gdGVz
dEZvY3VzTmF2aWdhdGlvbkZvd3JhZChlbGVtZW50cykKK3sKKyAgICBmb3IgKHZhciBpID0gMDsg
aSArIDEgPCBlbGVtZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgc2hvdWxkTmF2aWdhdGVGb2N1
cyhlbGVtZW50c1tpXSwgZWxlbWVudHNbaSArIDFdLCAnZm9yd2FyZCcpOworfQorCitmdW5jdGlv
biB0ZXN0Rm9jdXNOYXZpZ2F0aW9uQmFja3dhcmQoZWxlbWVudHMpCit7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgKyAxIDwgZWxlbWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIHNob3VsZE5hdmln
YXRlRm9jdXMoZWxlbWVudHNbaV0sIGVsZW1lbnRzW2kgKyAxXSwgJ2JhY2t3YXJkJyk7Cit9CisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFu
c2Zlci1mb2N1cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hh
ZG93LWhvc3QtdHJhbnNmZXItZm9jdXMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmNjgxYjA5YTViMmNhMTk2NjU2MTgyMjEyYmY3ODJhN2I3ZWViODU2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy1leHBlY3RlZC50eHQKKysr
IC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1XaGVuIGEgc2hhZG93IGhvc3QgaXMgZm9jdXNl
ZCwgdGhlIHNoYWRvdyBob3N0IHNob3VsZCB0cmFuc2ZlciBmb2N1cyB0byB0aGUgZmlyc3QgZm9j
dXNhYmxlIGVsZW1lbnQgaW4gdGhlIHNoYWRvdyByb290IGlmIHRoZXJlIGlzIGFuIHN1Y2ggYW4g
ZWxlbWVudC4KLQotRm9jdXNpbmc6IHNoYWRvdzAKLVBBU1MgZWxlbWVudFdhc0ZvY3VzZWQoaW5w
dXQwKSBpcyBmYWxzZQotUEFTUyBlbGVtZW50V2FzRm9jdXNlZChpbnB1dDEpIGlzIHRydWUKLVBB
U1MgZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQyKSBpcyBmYWxzZQotUEFTUyBpbnB1dDAudmFsdWUg
aXMgIiIKLVBBU1MgaW5wdXQxLnZhbHVlIGlzICIiCi1QQVNTIGlucHV0Mi52YWx1ZSBpcyAiIgot
UHJlc3Npbmc6ICJhIgotUEFTUyBpbnB1dDAudmFsdWUgaXMgIiIKLVBBU1MgaW5wdXQxLnZhbHVl
IGlzICJhIgotUEFTUyBpbnB1dDIudmFsdWUgaXMgIiIKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy5odG1sCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmI2ZGE3NGM3OTE0NmFmZGZiNTEyNmJiOTE2MGM3ZGYx
MWNlOTdmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4K
LTxoZWFkPgotPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPgotV2hlbiBhIHNoYWRvdyBob3N0IGlzIGZv
Y3VzZWQsIHRoZSBzaGFkb3cgaG9zdCBzaG91bGQgdHJhbnNmZXIgZm9jdXMgdG8gdGhlIGZpcnN0
IGZvY3VzYWJsZSBlbGVtZW50IGluIHRoZSBzaGFkb3cgcm9vdCBpZiB0aGVyZSBpcyBhbiBzdWNo
IGFuIGVsZW1lbnQuCi08L3A+Ci08ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLTxzY3JpcHQ+Ci1p
ZiAod2luZG93LmludGVybmFscykgewotICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7Ci0KLSAgZnVuY3Rpb24gc2hhZG93Um9vdChzaGFkb3dIb3N0KSB7Ci0gICAgcmV0dXJuIGlu
dGVybmFscy5lbnN1cmVTaGFkb3dSb290KHNoYWRvd0hvc3QpOwotICB9Ci0KLSAgZnVuY3Rpb24g
YXBwZW5kQ2hpbGRUb1NoYWRvdyhzaGFkb3dIb3N0LCBjaGlsZCkgewotICAgIHJldHVybiBzaGFk
b3dSb290KHNoYWRvd0hvc3QpLmFwcGVuZENoaWxkKGNoaWxkKQotICB9Ci0KLSAgZnVuY3Rpb24g
YXBwZW5kU2hhZG93SG9zdChkb2MsIHBhcmVudCkgewotICAgIHZhciBzaGFkb3dIb3N0ID0gZG9j
LmNyZWF0ZUVsZW1lbnQoJ3AnKTsKLSAgICBzaGFkb3dIb3N0LnRhYkluZGV4ID0gMTsgIC8vIE1h
a2VzIHN1cmUgdGhhdCB0aGUgc2hhZG93IGhvc3QgaXMgZm9jdXNhYmxlLgotICAgIHBhcmVudCA9
IHBhcmVudCB8fCBkb2MuYm9keTsKLSAgICByZXR1cm4gcGFyZW50LmFwcGVuZENoaWxkKHNoYWRv
d0hvc3QpOwotICB9Ci0KLSAgdmFyIGZvY3VzZWRFbGVtZW1lbnRzID0gW107Ci0KLSAgZnVuY3Rp
b24gZm9jdXNlZChlbGVtKSB7Ci0gICAgZm9jdXNlZEVsZW1lbnRzLnB1c2goZWxlbSkKLSAgfQot
Ci0gIGZ1bmN0aW9uIGRvRm9jdXMoZWxlbSkgewotICAgIGZvY3VzZWRFbGVtZW50cyA9IFtdCi0g
ICAgZWxlbS5mb2N1cygpCi0gIH0KLQotICBmdW5jdGlvbiBlbGVtZW50V2FzRm9jdXNlZChlbGVt
KSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2N1c2VkRWxlbWVudHMubGVuZ3RoOyArK2kp
IHsKLSAgICAgIGlmIChmb2N1c2VkRWxlbWVudHNbaV0gPT0gZWxlbSkgewotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8g
Rm9yIHJlYWRhYmlsaXR5LCBJIG5vdGVkIHRoZSBET00gdHJlZSB1bmRlciB0aGUgdGVzdCBoZXJl
LgotICAvLwotICAvLyAtIGRvY3VtZW50Ci0gIC8vICAgLSBzaGFkb3cwICh0YWJpbmRleD0xKQot
ICAvLyAgICAgLSBpbnB1dDAgKHRhYmluZGV4PS0xKQotICAvLyAgICAgLSBpbnB1dDEKLSAgLy8g
ICAgIC0gaW5wdXQyCi0gIHZhciBzaGFkb3cwID0gYXBwZW5kU2hhZG93SG9zdChkb2N1bWVudCk7
Ci0gIHZhciBpbnB1dDAgPSBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRvdzAsIGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2lucHV0JykpOwotICBpbnB1dDAudGFiSW5kZXggPSAtMQotICB2YXIgaW5w
dXQxID0gYXBwZW5kQ2hpbGRUb1NoYWRvdyhzaGFkb3cwLCBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdpbnB1dCcpKTsKLSAgdmFyIGlucHV0MiA9IGFwcGVuZENoaWxkVG9TaGFkb3coc2hhZG93MCwg
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSk7Ci0KLSAgdmFyIGVsZW1lbnRJZHMgPSBb
J3NoYWRvdzAnLCAnaW5wdXQwJywgJ2lucHV0MScsICdpbnB1dDInXQotICBmb3IgKHZhciBpID0g
MDsgaSA8IGVsZW1lbnRJZHMubGVuZ3RoOyBpKyspIHsKLSAgICB2YXIgaWQgPSBlbGVtZW50SWRz
W2ldOwotICAgIHZhciBlbGVtZW50ID0gd2luZG93W2lkXTsKLSAgICBlbGVtZW50LmlkID0gaWQ7
Ci0gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGZ1bmN0aW9uKCkge2ZvY3Vz
ZWQodGhpcyk7fSwgZmFsc2UpOwotICB9Ci0KLSAgZGVidWcoJ0ZvY3VzaW5nOiBzaGFkb3cwJyk7
Ci0gIGRvRm9jdXMoc2hhZG93MCk7Ci0gIC8vIENvbW1lbnRlZCBvdXQgZHVlIHRvIGJ1ZyA2MTQy
MS4KLSAgLy8gc2hvdWxkQmVUcnVlKCdlbGVtZW50V2FzRm9jdXNlZChzaGFkb3cwKScpOwotICBz
aG91bGRCZUZhbHNlKCdlbGVtZW50V2FzRm9jdXNlZChpbnB1dDApJyk7Ci0gIHNob3VsZEJlVHJ1
ZSgnZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQxKScpOwotICBzaG91bGRCZUZhbHNlKCdlbGVtZW50
V2FzRm9jdXNlZChpbnB1dDIpJyk7Ci0gIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKLSAgICAv
LyBNYWtlcyBzdXJlIHRoYXQgd2UgY2FuIGNoYW5nZSAnaW5wdXQxJyBlbGVtZW50J3MgdmFsdWUg
YnkgcHJlc3NpbmcgYSBrZXkuCi0gICAgc2hvdWxkQmUoJ2lucHV0MC52YWx1ZScsICciIicpOwot
ICAgIHNob3VsZEJlKCdpbnB1dDEudmFsdWUnLCAnIiInKTsKLSAgICBzaG91bGRCZSgnaW5wdXQy
LnZhbHVlJywgJyIiJyk7Ci0gICAgZGVidWcoJ1ByZXNzaW5nOiAiYSInKQotICAgIGV2ZW50U2Vu
ZGVyLmtleURvd24oJ2EnKTsKLSAgICBzaG91bGRCZSgnaW5wdXQwLnZhbHVlJywgJyIiJyk7Ci0g
ICAgc2hvdWxkQmUoJ2lucHV0MS52YWx1ZScsICciYSInKTsKLSAgICBzaG91bGRCZSgnaW5wdXQy
LnZhbHVlJywgJyIiJyk7Ci0gIH0KLX0KLTwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUt
YW5kLXNoYWRvdy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFi
LW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93LWV4cGVjdGVkLnR4dAppbmRleCA5M2E1ZThjODc1NjY5
YmRiZTM1YjI4YmJhYzQyODEwZGYzODA0MmRkLi5mODZhM2EwNmY3ZDQ5YzUxNmQwODJiYWNjYzEy
NWU1ZmZiNDU4Mzg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFi
LW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93LWV4cGVjdGVkLnR4dApA
QCAtMSwzNCArMSw1NyBAQAotVGhpcyB0ZXN0cyB0aGF0IHByZXNzaW5nIFRhYiBrZXkgc2hvdWxk
IHRyYXZlcnNlIGludG8gaWZyYW1lIGFuZCBzaGFkb3cgdHJlZSwgYW5kIHByZXNzaW5nIFNoaWZ0
LVRhYiBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIuIE1ha2VzIHN1cmUgdGhhdCBhIHNoYWRvdyBo
b3N0IGVsZW1lbnQgc2hvdWxkIGFjdCBsaWtlIGEgaWZyYW1lIGVsZW1lbnQuCitDT05TT0xFIE1F
U1NBR0U6IGxpbmUgMTA0OiBVbmNhdWdodCBSZWZlcmVuY2VFcnJvcjogbG9nIGlzIG5vdCBkZWZp
bmVkCitUaGlzIHRlc3RzIHRoYXQgcHJlc3NpbmcgVGFiIGtleSBzaG91bGQgdHJhdmVyc2UgaW50
byBpZnJhbWUgYW5kIHNoYWRvdyB0cmVlLCBhbmQgcHJlc3NpbmcgU2hpZnQtVGFiIHNob3VsZCBy
ZXZlcnNlIHRoZSBvcmRlci4KIAotRm9jdXMgaW5wdXQtMDEuCi1pZDppbnB1dC0wMSh0YWJJbmRl
eD0xKSBpcyBmb2N1c2VkLgotCi1QcmVzcyBUYWIgMTEgdGltZXMuCi1pZDppbnB1dC0xMyh0YWJJ
bmRleD0xKSBpcyBmb2N1c2VkLgotaWQ6aW5wdXQtMTUodGFiSW5kZXg9MikgaXMgZm9jdXNlZC4K
LWlkOmlucHV0LTAyKHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCi1pZDppbnB1dC0wNCh0YWJJbmRl
eD0wKSBpcyBmb2N1c2VkLgotaWQ6aWZyYW1lLWlucHV0LTA2KHRhYkluZGV4PTEpIGlzIGZvY3Vz
ZWQuCi1pZDppZnJhbWUtc2hhZG93LWlucHV0LTA5KHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi1p
ZDppZnJhbWUtc2hhZG93LWlucHV0LTA4KHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCi1pZDppZnJh
bWUtaW5wdXQtMTIodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KLWlkOmlmcmFtZS1pbnB1dC0xMSh0
YWJJbmRleD0yKSBpcyBmb2N1c2VkLgotaWQ6aWZyYW1lLWlucHV0LTA1KHRhYkluZGV4PTApIGlz
IGZvY3VzZWQuCi1pZDppbnB1dC0xNCh0YWJJbmRleD0wKSBpcyBmb2N1c2VkLgotCi1QcmVzcyBT
aGlmdC1UYWIgMTEgdGltZXMuCi1pZDppZnJhbWUtaW5wdXQtMDUodGFiSW5kZXg9MCkgaXMgZm9j
dXNlZC4KLWlkOmlmcmFtZS1pbnB1dC0xMSh0YWJJbmRleD0yKSBpcyBmb2N1c2VkLgotaWQ6aWZy
YW1lLWlucHV0LTEyKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi1pZDppZnJhbWUtc2hhZG93LWlu
cHV0LTA4KHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCi1pZDppZnJhbWUtc2hhZG93LWlucHV0LTA5
KHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi1pZDppZnJhbWUtaW5wdXQtMDYodGFiSW5kZXg9MSkg
aXMgZm9jdXNlZC4KLWlkOmlucHV0LTA0KHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCi1pZDppbnB1
dC0wMih0YWJJbmRleD0wKSBpcyBmb2N1c2VkLgotaWQ6aW5wdXQtMTUodGFiSW5kZXg9MikgaXMg
Zm9jdXNlZC4KLWlkOmlucHV0LTEzKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi1pZDppbnB1dC0w
MSh0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgotCi1UZXN0IGZpbmlzaGVkLgorU2hvdWxkIG1vdmUg
ZnJvbSBpbnB1dC0wMSB0byBpbnB1dC0xMyBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBm
cm9tIGlucHV0LTEzIHRvIGlucHV0LTE1IGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZy
b20gaW5wdXQtMTUgdG8gaW5wdXQtMDIgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJv
bSBpbnB1dC0wMiB0byBob3N0LTAxL2lucHV0LTAzIGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBt
b3ZlIGZyb20gaG9zdC0wMS9pbnB1dC0wMyB0byBpbnB1dC0wNCBpbiBmb3J3YXJkCitQQVNTCitT
aG91bGQgbW92ZSBmcm9tIGlucHV0LTA0IHRvIGlmcmFtZS9pbnB1dC0wNiBpbiBmb3J3YXJkCitQ
QVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9pbnB1dC0wNiB0byBpZnJhbWUvaG9zdC0wMiBp
biBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9ob3N0LTAyIHRvIGlmcmFt
ZS9ob3N0LTAyL2lucHV0LTA5IGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZy
YW1lL2hvc3QtMDIvaW5wdXQtMDkgdG8gaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDggaW4gZm9yd2Fy
ZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOCB0byBpZnJh
bWUvaW5wdXQtMTIgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaW5w
dXQtMTIgdG8gaWZyYW1lL2lucHV0LTExIGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZy
b20gaWZyYW1lL2lucHV0LTExIHRvIGlmcmFtZS9pbnB1dC0wNSBpbiBmb3J3YXJkCitQQVNTCitT
aG91bGQgbW92ZSBmcm9tIGlmcmFtZS9pbnB1dC0wNSB0byBpbnB1dC0xNCBpbiBmb3J3YXJkCitQ
QVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LTE0IHRvIGlmcmFtZS9pbnB1dC0wNSBpbiBiYWNr
d2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaW5wdXQtMDUgdG8gaWZyYW1lL2lu
cHV0LTExIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9pbnB1dC0x
MSB0byBpZnJhbWUvaW5wdXQtMTIgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20g
aWZyYW1lL2lucHV0LTEyIHRvIGlmcmFtZS9ob3N0LTAyL2lucHV0LTA4IGluIGJhY2t3YXJkCitQ
QVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9ob3N0LTAyL2lucHV0LTA4IHRvIGlmcmFtZS9o
b3N0LTAyL2lucHV0LTA5IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFt
ZS9ob3N0LTAyL2lucHV0LTA5IHRvIGlmcmFtZS9ob3N0LTAyIGluIGJhY2t3YXJkCitQQVNTCitT
aG91bGQgbW92ZSBmcm9tIGlmcmFtZS9ob3N0LTAyIHRvIGlmcmFtZS9pbnB1dC0wNiBpbiBiYWNr
d2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaW5wdXQtMDYgdG8gaW5wdXQtMDQg
aW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtMDQgdG8gaG9zdC0wMS9p
bnB1dC0wMyBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LTAxL2lucHV0
LTAzIHRvIGlucHV0LTAyIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0
LTAyIHRvIGlucHV0LTE1IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0
LTE1IHRvIGlucHV0LTEzIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0
LTEzIHRvIGlucHV0LTAxIGluIGJhY2t3YXJkCitQQVNTCiAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUtYW5kLXNoYWRvdy5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUtYW5kLXNoYWRvdy5o
dG1sCmluZGV4IDEwZTkxNjJlNGM0OGMyOTA4YjU1NzViYTkwZTY0ZmU5MjAxMjUxY2QuLjU4YmJh
OGEwODU2MGZkOWI0NThmYTZlNTEyNzI2YzFmNTE1YjcxZGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3cuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93
Lmh0bWwKQEAgLTEsMzcgKzEsMTggQEAKIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFkb3ctZG9tLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KIDxib2R5PgotPHA+VGhpcyB0ZXN0cyB0aGF0IHByZXNzaW5nIFRhYiBrZXkgc2hvdWxkIHRy
YXZlcnNlIGludG8gaWZyYW1lIGFuZCBzaGFkb3cgdHJlZSwgYW5kIHByZXNzaW5nIFNoaWZ0LVRh
YiBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIuCi0gTWFrZXMgc3VyZSB0aGF0IGEgc2hhZG93IGhv
c3QgZWxlbWVudCBzaG91bGQgYWN0IGxpa2UgYSBpZnJhbWUgZWxlbWVudC48L3A+Cis8cD5UaGlz
IHRlc3RzIHRoYXQgcHJlc3NpbmcgVGFiIGtleSBzaG91bGQgdHJhdmVyc2UgaW50byBpZnJhbWUg
YW5kIHNoYWRvdyB0cmVlLCBhbmQgcHJlc3NpbmcgU2hpZnQtVGFiIHNob3VsZCByZXZlcnNlIHRo
ZSBvcmRlci48L3A+CiA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KIDxzY3JpcHQ+Ci1mdW5jdGlv
biBsb2cobXNnKSB7Ci0gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2NvbnNvbGUnKS50ZXh0
Q29udGVudCArPSAobXNnICsgJ1xuJyk7Ci19Ci0KLWZ1bmN0aW9uIGRlc2NyaXB0aW9uKGVsZW1l
bnQpIHsKLSAgIHZhciBtc2cgPSAnJzsKLSAgICBpZiAoZWxlbWVudC5pZCkgewotICAgICAgbXNn
ICs9ICdpZDonICsgZWxlbWVudC5pZDsKLSAgICB9Ci0gICAgbXNnICs9ICcodGFiSW5kZXg9JyAr
IGVsZW1lbnQudGFiSW5kZXggKyAnKSc7Ci0gICAgcmV0dXJuIG1zZzsKLX0KLQotZnVuY3Rpb24g
b25Gb2N1cyhldmVudCkgewotICAgIGxvZyhkZXNjcmlwdGlvbihldmVudC50YXJnZXQpICsgJyBp
cyBmb2N1c2VkLicpOwotfQotCi1mdW5jdGlvbiBhZGRGb2N1c0V2ZW50TGlzdGVuZXIoZWxlbWVu
dCkgewotICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbkZvY3VzLCBmYWxz
ZSk7Ci19Ci0KIGZ1bmN0aW9uIGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCBpZCwgdGFiSW5k
ZXgpIHsKICAgICB2YXIgaW5wdXQgPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKICAgICBp
bnB1dC50eXBlID0gJ3RleHQnOwogICAgIGlucHV0LmlkID0gaWQ7CiAgICAgaW5wdXQudGFiSW5k
ZXggPSB0YWJJbmRleDsKLSAgICBhZGRGb2N1c0V2ZW50TGlzdGVuZXIoaW5wdXQpOwogICAgIHJl
dHVybiBpbnB1dDsKIH0KIApAQCAtNDQsMTAgKzI1LDExIEBAIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKIAogICAgIGZ1bmN0aW9uIGFkZFNoYWRvd0hvc3QoZG9jKSB7CiAgICAg
ICAgIHZhciBzaGFkb3dIb3N0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3AnKTsKLSAgICAgICAgc2hh
ZG93SG9zdC50YWJJbmRleCA9IC0xOyAgLy8gVGhpcyBzaGFkb3cgaG9zdCAoYW5kIGEgc2hhZG93
IHRyZWUgaW4gdGhhdCkgc2hvdWxkIGJlIHNraXBwZWQuCisgICAgICAgIHNoYWRvd0hvc3QuaWQg
PSAnaG9zdC0wMSc7CisgICAgICAgIHNoYWRvd0hvc3QudGFiSW5kZXggPSAtMTsKICAgICAgICAg
dmFyIHNoYWRvdyA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHNoYWRvd0hvc3QpOwogICAg
ICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChzaGFkb3dIb3N0KTsKLSAgICAgICAgc2hhZG93LmFw
cGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnc2hhZG93LWlucHV0LTAzJywg
MCkpOworICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChk
b2MsICdpbnB1dC0wMycsIDApKTsKICAgICB9CiAgICAgYWRkU2hhZG93SG9zdChkb2MpOwogCkBA
IC01NSwyNyArMzcsMjkgQEAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogCiAg
ICAgZnVuY3Rpb24gYWRkSWZyYW1lKGRvYykgewogICAgICAgICB2YXIgaWZyYW1lID0gZG9jLmNy
ZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworICAgICAgICBpZnJhbWUuaWQgPSAnaWZyYW1lJzsKICAg
ICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKICAgICAgICAgZG9jID0gaWZyYW1l
LmNvbnRlbnREb2N1bWVudDsKIAotICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVU
ZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lmcmFtZS1pbnB1dC0wNScsIDApKTsKLSAgICAgICAgZG9j
LmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtaW5w
dXQtMDYnLCAxKSk7Ci0gICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1
dEVsZW1lbnQoZG9jLCAnaWZyYW1lLWlucHV0LTA3JywgLTEpKTsKKyAgICAgICAgZG9jLmJvZHku
YXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpbnB1dC0wNScsIDApKTsK
KyAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2Ms
ICdpbnB1dC0wNicsIDEpKTsKKyAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4
dElucHV0RWxlbWVudChkb2MsICdpbnB1dC0wNycsIC0xKSk7CiAKICAgICAgICAgZnVuY3Rpb24g
YWRkU2hhZG93SG9zdChkb2MpIHsKICAgICAgICAgICAgIHZhciBzaGFkb3dIb3N0ID0gZG9jLmNy
ZWF0ZUVsZW1lbnQoJ3AnKTsKKyAgICAgICAgICAgIHNoYWRvd0hvc3QuaWQgPSAnaG9zdC0wMic7
CiAgICAgICAgICAgICBzaGFkb3dIb3N0LnRhYkluZGV4ID0gMTsKICAgICAgICAgICAgIHZhciBz
aGFkb3cgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChzaGFkb3dIb3N0KTsKICAgICAgICAg
ICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHNoYWRvd0hvc3QpOwogCi0gICAgICAgICAgICBzaGFk
b3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtc2hhZG93
LWlucHV0LTA4JywgMCkpOwotICAgICAgICAgICAgc2hhZG93LmFwcGVuZENoaWxkKGNyZWF0ZVRl
eHRJbnB1dEVsZW1lbnQoZG9jLCAnaWZyYW1lLXNoYWRvdy1pbnB1dC0wOScsIDEpKTsKLSAgICAg
ICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lm
cmFtZS1zaGFkb3ctaW5wdXQtMTAnLCAtMSkpOworICAgICAgICAgICAgc2hhZG93LmFwcGVuZENo
aWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMDgnLCAwKSk7CisgICAgICAg
ICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpbnB1
dC0wOScsIDEpKTsKKyAgICAgICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5w
dXRFbGVtZW50KGRvYywgJ2lucHV0LTEwJywgLTEpKTsKICAgICAgICAgfQogICAgICAgICBhZGRT
aGFkb3dIb3N0KGRvYyk7CiAKLSAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4
dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtaW5wdXQtMTEnLCAyKSk7Ci0gICAgICAgIGRvYy5i
b2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaWZyYW1lLWlucHV0
LTEyJywgMSkpOworICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRF
bGVtZW50KGRvYywgJ2lucHV0LTExJywgMikpOworICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGls
ZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTEyJywgMSkpOwogICAgIH0KICAg
ICBhZGRJZnJhbWUoZG9jKTsKIApAQCAtODMsMjAgKzY3LDQwIEBAIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIHsKICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5w
dXRFbGVtZW50KGRvYywgJ2lucHV0LTE0JywgMCkpOwogICAgIGRvYy5ib2R5LmFwcGVuZENoaWxk
KGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMTUnLCAyKSk7CiAKLSAgICBsb2co
J0ZvY3VzIGlucHV0LTAxLicpOwotICAgIGRvYy5nZXRFbGVtZW50QnlJZCgnaW5wdXQtMDEnKS5m
b2N1cygpOworICAgIHRlc3RGb2N1c05hdmlnYXRpb25Gb3dyYWQoWworICAgICAgICAnaW5wdXQt
MDEnLAorICAgICAgICAnaW5wdXQtMTMnLAorICAgICAgICAnaW5wdXQtMTUnLAorICAgICAgICAn
aW5wdXQtMDInLAorICAgICAgICAnaG9zdC0wMS9pbnB1dC0wMycsCisgICAgICAgICdpbnB1dC0w
NCcsCisgICAgICAgICdpZnJhbWUvaW5wdXQtMDYnLAorICAgICAgICAnaWZyYW1lL2hvc3QtMDIn
LAorICAgICAgICAnaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDknLAorICAgICAgICAnaWZyYW1lL2hv
c3QtMDIvaW5wdXQtMDgnLAorICAgICAgICAnaWZyYW1lL2lucHV0LTEyJywKKyAgICAgICAgJ2lm
cmFtZS9pbnB1dC0xMScsCisgICAgICAgICdpZnJhbWUvaW5wdXQtMDUnLAorICAgICAgICAnaW5w
dXQtMTQnLAorICAgIF0pOworCisgICAgdGVzdEZvY3VzTmF2aWdhdGlvbkJhY2t3YXJkKFsKKyAg
ICAgICAgJ2lucHV0LTE0JywKKyAgICAgICAgJ2lmcmFtZS9pbnB1dC0wNScsCisgICAgICAgICdp
ZnJhbWUvaW5wdXQtMTEnLAorICAgICAgICAnaWZyYW1lL2lucHV0LTEyJywKKyAgICAgICAgJ2lm
cmFtZS9ob3N0LTAyL2lucHV0LTA4JywKKyAgICAgICAgJ2lmcmFtZS9ob3N0LTAyL2lucHV0LTA5
JywKKyAgICAgICAgJ2lmcmFtZS9ob3N0LTAyJywKKyAgICAgICAgJ2lmcmFtZS9pbnB1dC0wNics
CisgICAgICAgICdpbnB1dC0wNCcsCisgICAgICAgICdob3N0LTAxL2lucHV0LTAzJywKKyAgICAg
ICAgJ2lucHV0LTAyJywKKyAgICAgICAgJ2lucHV0LTE1JywKKyAgICAgICAgJ2lucHV0LTEzJywK
KyAgICAgICAgJ2lucHV0LTAxJywKKyAgICBdKTsKIAotICAgIGlmICh3aW5kb3cuZXZlbnRTZW5k
ZXIpIHsKLSAgICAgICAgdmFyIHByZXNzZWQgPSAxMTsKLSAgICAgICAgbG9nKCdcblByZXNzIFRh
YiAnICsgcHJlc3NlZCArICcgdGltZXMuJyk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cHJlc3NlZDsgKytpKSB7Ci0gICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCdcdCcpOwot
ICAgICAgICB9Ci0gICAgICAgIGxvZygnXG5QcmVzcyBTaGlmdC1UYWIgJyArIHByZXNzZWQgKyAn
IHRpbWVzLicpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXNzZWQ7ICsraSkgewot
ICAgICAgICAgICAgZXZlbnRTZW5kZXIua2V5RG93bignXHQnLCBbJ3NoaWZ0S2V5J10pOwotICAg
ICAgICB9Ci0gICB9CiAgICBsb2coJ1xuVGVzdCBmaW5pc2hlZC4nKTsKIH0KIDwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133988</attachid>
            <date>2012-03-26 23:49:58 -0700</date>
            <delta_ts>2012-03-28 00:29:36 -0700</delta_ts>
            <desc>Shadow DOM navigation</desc>
            <filename>bug-78588-20120327154956.patch</filename>
            <type>text/plain</type>
            <size>62543</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjE3MWM1MjFlOWY3MTYw
OTI5YzdlOWRmMjViNzg0MWQyNDNiODgyMS4uYTQzMjU1MDgxNTkyM2U0YTVlMmNmMzYwZjhiMjQ1
YjY1OWU5YWFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTAzLTIxICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBMZXQgZm9jdXMgbmF2aWdh
dGlvbiBiZSBjb21wbGlhbnQgd2l0aCBTaGFkb3cgRE9NIHNwZWMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU4OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlcXVlbnRpYWwgZm9jdXMgbmF2aWdhdGlv
biBub3cgYmVoYXZlcyBleGFjdGx5IGFzIHNwZWNpZmllZCBpbiB0aGUgU2hhZG93IERPTSBzcGVj
LgorCisgICAgICAgIEFjY29yZGluZyB0byB0aGUgU2hhZG93IERPTSBzcGVjOgorICAgICAgICBU
aGUgc2hhZG93IERPTSBuYXZpZ2F0aW9uIG9yZGVyIHNlcXVlbmNlIGlzIGluc2VydGVkIGludG8g
dGhlIGRvY3VtZW50IG5hdmlnYXRpb24gb3JkZXI6CisgICAgICAgIDEuIGltbWVkaWF0ZWx5IGFm
dGVyIHRoZSBzaGFkb3cgaG9zdCwgaWYgdGhlIHNoYWRvdyBob3N0IGlzIGZvY3VzYWJsZTsgb3IK
KyAgICAgICAgMi4gaW4gcGxhY2Ugb2YgdGhlIHNoYWRvdyBob3N0IGFzIGlmIHRoZSBzaGFkb3cg
aG9zdCB3ZXJlIGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiBhdXRvIGZvciBkZXRlcm1pbmluZyBpdHMg
cG9zaXRpb24uCisKKyAgICAgICAgUHJpb3IgdG8gdGhpcyBwYXRjaCwgc2VxdWVudGlhbCBmb2N1
cyBuYXZpZ2F0aW9uIGdvZXMgaW50byBTaGFkb3cgRE9NLCBidXQgaXQgaXMgaW5jb21wbGV0ZQor
ICAgICAgICBzaW5jZSBpbnNlcnRpb24gcG9pbnRzLCBzdWNoIGFzIDxjb250ZW50PiBlbGVtZW50
cyBvciA8c2hhZG93PiBlbGVtZW50cywgYXJlIG5vdCByZXNvbHZlZCBhdCBhbGwuCisgICAgICAg
IE5vdyBmb2N1cyBuYXZpZ2F0aW9uIGNhbiB0cmF2ZXJzZSBzaGFkb3cgRE9NIHN1YnRyZWVzIGlu
ICdyZWlmaWVkIHRyZWUgb3JkZXInLCByZXNvbHZpbmcgbG93ZXIgYm91bmRhcmllcyB0cmFuc3Bh
cmVudGx5LgorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgICBQcmlvciB0
byB0aGlzIHBhdGNoLCBzZXF1ZW50aWFsIGZvY3VzIG5hdmlnYXRpb24gZG9lcyBub3QgZ28gaW50
byBTaGFkb3cgRE9NIGlmIGEgc2hhZG93IGhvc3QgaXMgbm9uLWZvY3VzYWJsZS4KKyAgICAgICAg
Tm93IGZvY3VzIG5hdmlnYXRpb24gbXVzdCBnbyBpbnRvIFNoYWRvdyBET00gc3VidHJlZXMgZXZl
biBpZiBhIHNob3cgaG9zdCBpcyBub3QgZm9jdXNhYmxlIGFzIGRlc2NyaWJlZCBpbiAyKS4KKyAg
ICAgICAgVG8gc3VwcG9ydCB0aGlzIGJlaGF2aW9yLCB0aGlzIHBhdGNoIGludHJvZHVjZWQgYWRq
dXN0ZWRUYWJJbmRleCgpIGxvY2FsbHkgaW4gRm9jdXNDb250cm9sbGVyIHNvIHRoYXQKKyAgICAg
ICAgaXQgZG9lcyBub3Qgc2tpcCBhIG5vbi1mb2N1c2FibGUgc2hhZG93IGhvc3QgaW4gY3VycmVu
dCBmb2N1cyBzY29wZS4KKyAgICAgICAgQWZ0ZXIgZmluZGluZyBhICpwc3VlZG8qIGZvY3VzYWJs
ZSBlbGVtZW50IGluIGN1cnJlbnQgZm9jdXMgc2NvcGUsIGl0IHRyaWVzIHRvIHJlc29sdmUgYSBm
b2N1c2VkIGVsZW1lbnQgcmVjdXJzaXZlbHksCisgICAgICAgIGNvbnNpZGVyaW5nIGEgbmVzdGVk
IGZvY3VzIHNjb3BlIGluc2lkZSBvZiBhIHNoYWRvdyBob3N0IG9yIGlmcmFtZS4KKyAgICAgICAg
VG8gdHJhdmVyc2UgU2hhZG93IERPTSBzdWJ0cmVlcywgYSBGb2N1c0NvbnRyb2xsZXIgbWFrZXMg
dXNlIG9mIFJlaWZpZWRUcmVlVHJhdmVyc2FsIEFQSXMsIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGlu
IHIxMTIwNTUuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWZmZWN0IGFuIGV4aXN0
aW5nIGJlaGF2aW9yIGlmIGEgc2hhZG93IGRvbSBpcyBub3QgaW52b2x2ZWQuCisKKyAgICAgICAg
VGVzdDogZmFzdC9kb20vc2hhZG93L2ZvY3VzLW5hdmlnYXRpb24uaHRtbAorCisgICAgICAgICog
ZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Zm9jdXMpOgorICAg
ICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2hh
ZG93SG9zdCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzU2Nv
cGU6OkZvY3VzU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNTY29wZTo6cm9vdE5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNTY29wZTo6b3duZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9jdXNTY29wZTo6Zm9jdXNTY29wZUluY2x1ZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpG
b2N1c1Njb3BlOjpmb2N1c1Njb3BlSW5zaWRlT2YpOgorICAgICAgICAoV2ViQ29yZTo6aGFzQ3Vz
dG9tRm9jdXNMb2dpYyk6CisgICAgICAgIChXZWJDb3JlOjppc05vbkZvY3VzYWJsZVNoYWRvd0hv
c3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNGb2N1c2FibGVTaGFkb3dIb3N0KToKKyAgICAgICAg
KFdlYkNvcmU6OmFkanVzdGVkVGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVmlz
aXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzRm9jdXNTY29wZU93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
Y3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpzZXRJbml0aWFsRm9j
dXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRv
Y3VtZW50T3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kRm9j
dXNhYmxlTm9kZUFjcm9zc0ZvY3VzU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250
cm9sbGVyOjpmaW5kRm9jdXNhYmxlTm9kZURlZXBseSk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1
c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3Vz
Q29udHJvbGxlcjo6ZmluZE5vZGVXaXRoRXhhY3RUYWJJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpuZXh0Tm9kZVdpdGhHcmVhdGVyVGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlv
dXNOb2RlV2l0aExvd2VyVGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9s
bGVyOjpuZXh0Rm9jdXNhYmxlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xs
ZXI6OnByZXZpb3VzRm9jdXNhYmxlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhclNlbGVj
dGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6c2V0Rm9j
dXNlZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpzZXRBY3RpdmUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3Rp
b25hbGx5KToKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5oOgorICAgICAgICAoRm9j
dXNTY29wZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZvY3VzQ29udHJvbGxlcik6
CisKIDIwMTItMDMtMjYgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgTWFrZSBmaWx0ZXJzIGFuZCB0aGUgdGhyZWFkZWQgY29tcG9zaXRvciBwbGF5
IHdlbGwgdG9nZXRoZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYjI5YmZiNGE1ZTIzMDVj
NWExYzZlOGViMWQyNGE5YmRiOGRkY2EwOS4uOTUzMjcwODAzNTU3NjdkZWE4MjZmMzY5ZGJmMmQx
NTBlZTFlNjBmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTU0OCw4ICsxNTQ4LDYgQEAg
dm9pZCBFbGVtZW50Ojpmb2N1cyhib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikKICAgICAg
ICAgLy8gSWYgYSBmb2N1cyBldmVudCBoYW5kbGVyIGNoYW5nZXMgdGhlIGZvY3VzIHRvIGEgZGlm
ZmVyZW50IG5vZGUgaXQKICAgICAgICAgLy8gZG9lcyBub3QgbWFrZSBzZW5zZSB0byBjb250aW51
ZSBhbmQgdXBkYXRlIGFwcGVhcmVuY2UuCiAgICAgICAgIHByb3RlY3QgPSB0aGlzOwotICAgICAg
ICBpZiAoaGFzU2hhZG93Um9vdCgpICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT50cmFuc2Zl
ckZvY3VzVG9FbGVtZW50SW5TaGFkb3dSb290KHRoaXMsIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlv
bikpCi0gICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmICghcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPnNldEZvY3VzZWROb2RlKHRoaXMsIGRvYy0+ZnJhbWUoKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4
IGZiMTZkZjAyMWI2YjQ2NzI2MDk5OWFhZGQ5YWYxZTIwNWYwZGE0MzkuLjgzOGYxYjY2N2E4ZThk
MWRjOWYwZDFlYzYxYzM1YzY4YTIyNzIzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRm9jdXNDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29u
dHJvbGxlci5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIktleWJvYXJkRXZl
bnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJS
ZWlmaWVkVHJlZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCkBAIC02NSw2ICs2
Niw0OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAorc3RhdGljIGlubGluZSBib29sIGlzU2hhZG93SG9zdChj
b25zdCBOb2RlKiBub2RlKQoreworICAgIHJldHVybiBub2RlICYmIG5vZGUtPmlzRWxlbWVudE5v
ZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmhhc1NoYWRvd1Jvb3QoKTsKK30KKworRm9jdXNTY29w
ZTo6Rm9jdXNTY29wZShUcmVlU2NvcGUqIHRyZWVTY29wZSkKKyAgICA6IG1fcm9vdFRyZWVTY29w
ZSh0cmVlU2NvcGUpCit7CisgICAgQVNTRVJUKHRyZWVTY29wZSk7CisgICAgQVNTRVJUKCF0cmVl
U2NvcGUtPnJvb3ROb2RlKCktPmlzU2hhZG93Um9vdCgpIHx8IHRvU2hhZG93Um9vdCh0cmVlU2Nv
cGUtPnJvb3ROb2RlKCkpLT5pc1lvdW5nZXN0KCkpOworfQorCitOb2RlKiBGb2N1c1Njb3BlOjpy
b290Tm9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcm9vdFRyZWVTY29wZS0+cm9vdE5vZGUo
KTsKK30KKworTm9kZSogRm9jdXNTY29wZTo6b3duZXIoKSBjb25zdAoreworICAgIE5vZGUqIHJv
b3QgPSByb290Tm9kZSgpOworICAgIGlmIChyb290LT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAg
cmV0dXJuIHJvb3QtPnNoYWRvd0hvc3QoKTsKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gcm9vdC0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZyYW1lLT5vd25lckVsZW1lbnQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworRm9jdXNTY29wZSBGb2N1c1Njb3BlOjpmb2N1c1Njb3Bl
SW5jbHVkaW5nKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIFRyZWVTY29w
ZSogc2NvcGUgPSBub2RlLT50cmVlU2NvcGUoKTsKKyAgICBpZiAoc2NvcGUtPnJvb3ROb2RlKCkt
PmlzU2hhZG93Um9vdCgpKQorICAgICAgICByZXR1cm4gRm9jdXNTY29wZSh0b1NoYWRvd1Jvb3Qo
c2NvcGUtPnJvb3ROb2RlKCkpLT50cmVlKCktPnlvdW5nZXN0U2hhZG93Um9vdCgpKTsKKyAgICBy
ZXR1cm4gRm9jdXNTY29wZShzY29wZSk7Cit9CisKK0ZvY3VzU2NvcGUgRm9jdXNTY29wZTo6Zm9j
dXNTY29wZUluc2lkZU9mKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKGlzU2hhZG93SG9zdChu
b2RlKSk7CisgICAgcmV0dXJuIEZvY3VzU2NvcGUodG9FbGVtZW50KG5vZGUpLT5zaGFkb3dUcmVl
KCktPnlvdW5nZXN0U2hhZG93Um9vdCgpKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGRpc3Bh
dGNoRXZlbnRzT25XaW5kb3dBbmRGb2N1c2VkTm9kZShEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wg
Zm9jdXNlZCkKIHsKICAgICAvLyBJZiB3ZSBoYXZlIGEgZm9jdXNlZCBub2RlIHdlIHNob3VsZCBk
aXNwYXRjaCBibHVyIG9uIGl0IGJlZm9yZSB3ZSBibHVyIHRoZSB3aW5kb3cuCkBAIC04NCw2ICsx
MjcsMzUgQEAgc3RhdGljIGlubGluZSB2b2lkIGRpc3BhdGNoRXZlbnRzT25XaW5kb3dBbmRGb2N1
c2VkTm9kZShEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wKICAgICAgICAgZG9jdW1lbnQtPmZvY3Vz
ZWROb2RlKCktPmRpc3BhdGNoRm9jdXNFdmVudCgwKTsKIH0KIAorc3RhdGljIGlubGluZSBib29s
IGhhc0N1c3RvbUZvY3VzTG9naWMoTm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZS0+aGFz
VGFnTmFtZShpbnB1dFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykgfHwgbm9k
ZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShhdWRpb1RhZyk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc05vbkZvY3VzYWJsZVNoYWRvd0hvc3QoTm9kZSogbm9k
ZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIHJldHVy
biAhbm9kZS0+aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCkgJiYgaXNTaGFkb3dIb3N0KG5vZGUp
ICYmICFoYXNDdXN0b21Gb2N1c0xvZ2ljKG5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNGb2N1c2FibGVTaGFkb3dIb3N0KE5vZGUqIG5vZGUsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQor
eworICAgIEFTU0VSVChub2RlKTsKKyAgICByZXR1cm4gbm9kZS0+aXNLZXlib2FyZEZvY3VzYWJs
ZShldmVudCkgJiYgaXNTaGFkb3dIb3N0KG5vZGUpICYmICFoYXNDdXN0b21Gb2N1c0xvZ2ljKG5v
ZGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFRhYkluZGV4KE5vZGUqIG5vZGUs
IEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICByZXR1cm4g
aXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KG5vZGUsIGV2ZW50KSA/IDAgOiBub2RlLT50YWJJbmRl
eCgpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVmlzaXQoTm9kZSogbm9kZSwgS2V5
Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIHJldHVybiBub2Rl
LT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSB8fCBpc05vbkZvY3VzYWJsZVNoYWRvd0hvc3Qo
bm9kZSwgZXZlbnQpOworfQorCiBGb2N1c0NvbnRyb2xsZXI6OkZvY3VzQ29udHJvbGxlcihQYWdl
KiBwYWdlKQogICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2lzQWN0aXZlKGZhbHNlKQpAQCAt
MTM4LDcgKzIxMCw3IEBAIHZvaWQgRm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkKGJvb2wgZm9j
dXNlZCkKIHsKICAgICBpZiAoaXNGb2N1c2VkKCkgPT0gZm9jdXNlZCkKICAgICAgICAgcmV0dXJu
OwotICAgIAorCiAgICAgbV9pc0ZvY3VzZWQgPSBmb2N1c2VkOwogCiAgICAgaWYgKCFtX2lzRm9j
dXNlZCkKQEAgLTE1Myw1MiArMjI1LDIxIEBAIHZvaWQgRm9jdXNDb250cm9sbGVyOjpzZXRGb2N1
c2VkKGJvb2wgZm9jdXNlZCkKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgU2hhZG93Um9vdCog
c2hhZG93Um9vdChOb2RlKiBub2RlKQotewotICAgIHJldHVybiBub2RlLT5pc0VsZW1lbnROb2Rl
KCkgJiYgdG9FbGVtZW50KG5vZGUpLT5oYXNTaGFkb3dSb290KCkgPyB0b0VsZW1lbnQobm9kZSkt
PnNoYWRvd1RyZWUoKS0+eW91bmdlc3RTaGFkb3dSb290KCkgOiAwOwotfQotCi1zdGF0aWMgaW5s
aW5lIGJvb2wgaXNUcmVlU2NvcGVPd25lcihOb2RlKiBub2RlKQotewotICAgIHJldHVybiBub2Rl
ICYmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgc2hhZG93Um9vdChub2RlKSk7Ci19
Ci0KLWJvb2wgRm9jdXNDb250cm9sbGVyOjp0cmFuc2ZlckZvY3VzVG9FbGVtZW50SW5TaGFkb3dS
b290KEVsZW1lbnQqIHNoYWRvd0hvc3QsIGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKQot
ewotICAgIEFTU0VSVChzaGFkb3dSb290KHNoYWRvd0hvc3QpKTsKLSAgICBOb2RlKiBub2RlID0g
ZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnRPclNoYWRvd1Jv
b3QoRm9jdXNEaXJlY3Rpb25Gb3J3YXJkLCBzaGFkb3dIb3N0LCAwKTsKLSAgICBpZiAoc2hhZG93
SG9zdCA9PSBub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdG9FbGVtZW50KG5vZGUp
LT5mb2N1cyhyZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaGFzQ3VzdG9tRm9jdXNMb2dpYyhOb2RlKiBub2RlKQorc3Rh
dGljIGlubGluZSBib29sIGlzRm9jdXNTY29wZU93bmVyKE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0
dXJuIG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUodGV4dGFy
ZWFUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
YXVkaW9UYWcpOworICAgIHJldHVybiBub2RlICYmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50
KCkgfHwgaXNTaGFkb3dIb3N0KG5vZGUpKTsKIH0KIAotTm9kZSogRm9jdXNDb250cm9sbGVyOjpm
aW5kRm9jdXNhYmxlTm9kZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVudE9yU2hhZG93Um9v
dChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIE5vZGUqIG5vZGUsIEtleWJvYXJkRXZlbnQqIGV2
ZW50KQorTm9kZSogRm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNhYmxlTm9kZURlY2VuZGluZ0Rv
d25JbnRvRnJhbWVEb2N1bWVudChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIE5vZGUqIG5vZGUs
IEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIC8vIFRoZSBub2RlIHdlIGZvdW5kIG1pZ2h0
IGJlIGEgSFRNTEZyYW1lT3duZXJFbGVtZW50IG9yIGEgc2hhZG93IGhvc3QsIHNvIGRlc2NlbmQg
ZG93biB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGVpdGhlcjoKKyAgICAvLyBUaGUgbm9kZSB3ZSBm
b3VuZCBtaWdodCBiZSBhIEhUTUxGcmFtZU93bmVyRWxlbWVudCwgc28gZGVzY2VuZCBkb3duIHRo
ZSB0cmVlIHVudGlsIHdlIGZpbmQgZWl0aGVyOgogICAgIC8vIDEpIGEgZm9jdXNhYmxlIG5vZGUs
IG9yCi0gICAgLy8gMikgdGhlIGRlZXBlc3QtbmVzdGVkIEhUTUxGcmFtZU93bmVyRWxlbWVudCBv
ciBzaGFkb3cgaG9zdC4KLSAgICB3aGlsZSAoaXNUcmVlU2NvcGVPd25lcihub2RlKSkgewotICAg
ICAgICBOb2RlKiBmb3VuZE5vZGU7Ci0gICAgICAgIGlmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVt
ZW50KCkpIHsKLSAgICAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBzdGF0
aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAgIGlmICgh
b3duZXItPmNvbnRlbnRGcmFtZSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gb3duZXItPmNvbnRlbnRGcmFtZSgpLT5kb2N1bWVudCgp
OwotICAgICAgICAgICAgZm91bmROb2RlID0gZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBk
b2N1bWVudCwgMCwgZXZlbnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRklY
TUU6IFVudGlsIGEgZm9jdXMgcmUtdGFyZ2V0aW5nIChidWcgNjE0MjEpIGlzIGltcGxlbWVudGVk
LAotICAgICAgICAgICAgLy8gc2tpcHBpbmcgdGhlc2UgZWxlbWVudHMgaXMgdGhlIHNhZmVzdCB3
YXkgdG8ga2VlcCBhIGNvbXBhdGliaWxpdHkuCi0gICAgICAgICAgICBpZiAoaGFzQ3VzdG9tRm9j
dXNMb2dpYyhub2RlKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEFTU0VS
VChzaGFkb3dSb290KG5vZGUpKTsKLSAgICAgICAgICAgIGZvdW5kTm9kZSA9IGZpbmRGb2N1c2Fi
bGVOb2RlKGRpcmVjdGlvbiwgc2hhZG93Um9vdChub2RlKSwgMCwgZXZlbnQpOwotICAgICAgICB9
CisgICAgLy8gMikgdGhlIGRlZXBlc3QtbmVzdGVkIEhUTUxGcmFtZU93bmVyRWxlbWVudC4KKyAg
ICB3aGlsZSAobm9kZSAmJiBub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKKyAgICAgICAg
SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVy
RWxlbWVudCo+KG5vZGUpOworICAgICAgICBpZiAoIW93bmVyLT5jb250ZW50RnJhbWUoKSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBOb2RlKiBmb3VuZE5vZGUgPSBmaW5kRm9jdXNhYmxl
Tm9kZShkaXJlY3Rpb24sIG93bmVyLT5jb250ZW50RnJhbWUoKS0+ZG9jdW1lbnQoKSwgMCwgZXZl
bnQpOwogICAgICAgICBpZiAoIWZvdW5kTm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBBU1NFUlQobm9kZSAhPSBmb3VuZE5vZGUpOwpAQCAtMjEwLDggKzI1MSw4IEBAIE5vZGUqIEZv
Y3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9j
dW1lbnRPclNoYWRvd1JvCiBib29sIEZvY3VzQ29udHJvbGxlcjo6c2V0SW5pdGlhbEZvY3VzKEZv
Y3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgYm9v
bCBkaWRBZHZhbmNlRm9jdXMgPSBhZHZhbmNlRm9jdXMoZGlyZWN0aW9uLCBldmVudCwgdHJ1ZSk7
Ci0gICAgCi0gICAgLy8gSWYgZm9jdXMgaXMgYmVpbmcgc2V0IGluaXRpYWxseSwgYWNjZXNzaWJp
bGl0eSBuZWVkcyB0byBiZSBpbmZvcm1lZCB0aGF0IHN5c3RlbSBmb2N1cyBoYXMgbW92ZWQgCisK
KyAgICAvLyBJZiBmb2N1cyBpcyBiZWluZyBzZXQgaW5pdGlhbGx5LCBhY2Nlc3NpYmlsaXR5IG5l
ZWRzIHRvIGJlIGluZm9ybWVkIHRoYXQgc3lzdGVtIGZvY3VzIGhhcyBtb3ZlZAogICAgIC8vIGlu
dG8gdGhlIHdlYiBhcmVhIGFnYWluLCBldmVuIGlmIGZvY3VzIGRpZCBub3QgY2hhbmdlIHdpdGhp
biBXZWJDb3JlLiBQb3N0Tm90aWZpY2F0aW9uIGlzIGNhbGxlZCBpbnN0ZWFkCiAgICAgLy8gb2Yg
aGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQsIGJlY2F1c2UgdGhpcyB3aWxsIHNlbmQgdGhl
IG5vdGlmaWNhdGlvbiBldmVuIGlmIHRoZSBlbGVtZW50IGlzIHRoZSBzYW1lLgogICAgIGlmIChB
WE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQpAQCAtMjUzLDcgKzI5NCw3IEBA
IGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIoRm9jdXNE
aXJlY3Rpb24gZGlyZWN0aW9uLCBLZXliCiAKICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGZpbmRG
b2N1c2FibGVOb2RlQWNyb3NzVHJlZVNjb3BlKGRpcmVjdGlvbiwgY3VycmVudE5vZGUgPyBjdXJy
ZW50Tm9kZS0+dHJlZVNjb3BlKCkgOiBkb2N1bWVudCwgY3VycmVudE5vZGUsIGV2ZW50KTsKKyAg
ICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlQWNyb3NzRm9jdXNTY29wZShk
aXJlY3Rpb24sIGN1cnJlbnROb2RlID8gRm9jdXNTY29wZTo6Zm9jdXNTY29wZUluY2x1ZGluZyhj
dXJyZW50Tm9kZSkgOiBGb2N1c1Njb3BlKGRvY3VtZW50KSwgY3VycmVudE5vZGUsIGV2ZW50KTsK
IAogICAgIGlmICghbm9kZSkgewogICAgICAgICAvLyBXZSBkaWRuJ3QgZmluZCBhIG5vZGUgdG8g
Zm9jdXMsIHNvIHdlIHNob3VsZCB0cnkgdG8gcGFzcyBmb2N1cyB0byBDaHJvbWUuCkBAIC0yNjUs
OCArMzA2LDggQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0luRG9jdW1lbnRP
cmRlcihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWIKICAgICAgICAgfQogCiAgICAgICAg
IC8vIENocm9tZSBkb2Vzbid0IHdhbnQgZm9jdXMsIHNvIHdlIHNob3VsZCB3cmFwIGZvY3VzLgot
ICAgICAgICBub2RlID0gZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBtX3BhZ2UtPm1haW5G
cmFtZSgpLT5kb2N1bWVudCgpLCAwLCBldmVudCk7Ci0gICAgICAgIG5vZGUgPSBmaW5kRm9jdXNh
YmxlTm9kZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVudE9yU2hhZG93Um9vdChkaXJlY3Rp
b24sIG5vZGUuZ2V0KCksIGV2ZW50KTsKKyAgICAgICAgbm9kZSA9IGZpbmRGb2N1c2FibGVOb2Rl
RGVlcGx5KGRpcmVjdGlvbiwgbV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSwgMCwgZXZl
bnQpOworICAgICAgICBub2RlID0gZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0Zy
YW1lRG9jdW1lbnQoZGlyZWN0aW9uLCBub2RlLmdldCgpLCBldmVudCk7CiAKICAgICAgICAgaWYg
KCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjkzLDcgKzMzNCw3IEBAIGJv
b2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIoRm9jdXNEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBLZXliCiAgICAgICAgIHNldEZvY3VzZWRGcmFtZShvd25lci0+Y29u
dGVudEZyYW1lKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICAv
LyBGSVhNRTogSXQgd291bGQgYmUgbmljZSB0byBqdXN0IGJlIGFibGUgdG8gY2FsbCBzZXRGb2N1
c2VkTm9kZShub2RlKSBoZXJlLCBidXQgd2UgY2FuJ3QgZG8KICAgICAvLyB0aGF0IGJlY2F1c2Ug
c29tZSBlbGVtZW50cyAoZS5nLiBIVE1MSW5wdXRFbGVtZW50IGFuZCBIVE1MVGV4dEFyZWFFbGVt
ZW50KSBkbyBleHRyYSB3b3JrIGluCiAgICAgLy8gdGhlaXIgZm9jdXMoKSBtZXRob2RzLgpAQCAt
MzE4LDU2ICszNTksNzkgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0luRG9j
dW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWIKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotc3RhdGljIGlubGluZSBOb2RlKiBvd25lck9mVHJlZVNjb3BlKFRyZWVTY29wZSog
c2NvcGUpCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlQWNyb3NzRm9j
dXNTY29wZShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEZvY3VzU2NvcGUgc2NvcGUsIE5vZGUq
IGN1cnJlbnROb2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBBU1NFUlQoc2NvcGUp
OwotICAgIGlmIChzY29wZS0+cm9vdE5vZGUoKS0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgIHJl
dHVybiBzY29wZS0+cm9vdE5vZGUoKS0+c2hhZG93SG9zdCgpOwotICAgIGlmIChzY29wZS0+cm9v
dE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIHNjb3BlLT5yb290
Tm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5vd25lckVsZW1lbnQoKTsKLSAgICByZXR1cm4g
MDsKLX0KKyAgICBBU1NFUlQoIWN1cnJlbnROb2RlIHx8ICFpc05vbkZvY3VzYWJsZVNoYWRvd0hv
c3QoY3VycmVudE5vZGUsIGV2ZW50KSk7CisgICAgTm9kZSogZm91bmQ7CisgICAgaWYgKGN1cnJl
bnROb2RlICYmIGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQgJiYgaXNGb2N1c2Fi
bGVTaGFkb3dIb3N0KGN1cnJlbnROb2RlLCBldmVudCkpIHsKKyAgICAgICAgTm9kZSogZm91bmRJ
bklubmVyRm9jdXNTY29wZSA9IGZpbmRGb2N1c2FibGVOb2RlRGVlcGx5KGRpcmVjdGlvbiwgRm9j
dXNTY29wZTo6Zm9jdXNTY29wZUluc2lkZU9mKGN1cnJlbnROb2RlKSwgMCwgZXZlbnQpOworICAg
ICAgICBpZiAoZm91bmRJbklubmVyRm9jdXNTY29wZSkKKyAgICAgICAgICAgIGZvdW5kID0gZm91
bmRJbklubmVyRm9jdXNTY29wZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZm91bmQgPSBm
aW5kRm9jdXNhYmxlTm9kZURlZXBseShkaXJlY3Rpb24sIHNjb3BlLCBjdXJyZW50Tm9kZSwgZXZl
bnQpOworICAgIH0gZWxzZQorICAgICAgICBmb3VuZCA9IGZpbmRGb2N1c2FibGVOb2RlRGVlcGx5
KGRpcmVjdGlvbiwgc2NvcGUsIGN1cnJlbnROb2RlLCBldmVudCk7CiAKLU5vZGUqIEZvY3VzQ29u
dHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVBY3Jvc3NUcmVlU2NvcGUoRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBUcmVlU2NvcGUqIHNjb3BlLCBOb2RlKiBjdXJyZW50Tm9kZSwgS2V5Ym9hcmRF
dmVudCogZXZlbnQpCi17Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVj
dGlvbiwgc2NvcGUsIGN1cnJlbnROb2RlLCBldmVudCk7CiAgICAgLy8gSWYgdGhlcmUncyBubyBm
b2N1c2FibGUgbm9kZSB0byBhZHZhbmNlIHRvLCBtb3ZlIHVwIHRoZSB0cmVlIHNjb3BlcyB1bnRp
bCB3ZSBmaW5kIG9uZS4KLSAgICB3aGlsZSAoIW5vZGUgJiYgc2NvcGUpIHsKLSAgICAgICAgTm9k
ZSogb3duZXIgPSBvd25lck9mVHJlZVNjb3BlKHNjb3BlKTsKKyAgICB3aGlsZSAoIWZvdW5kKSB7
CisgICAgICAgIE5vZGUqIG93bmVyID0gc2NvcGUub3duZXIoKTsKICAgICAgICAgaWYgKCFvd25l
cikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBub2RlID0gZmluZEZvY3VzYWJsZU5vZGUo
ZGlyZWN0aW9uLCBvd25lci0+dHJlZVNjb3BlKCksIG93bmVyLCBldmVudCk7Ci0gICAgICAgIHNj
b3BlID0gb3duZXItPnRyZWVTY29wZSgpOworICAgICAgICBzY29wZSA9IEZvY3VzU2NvcGU6OmZv
Y3VzU2NvcGVJbmNsdWRpbmcob3duZXIpOworICAgICAgICBpZiAoZGlyZWN0aW9uID09IEZvY3Vz
RGlyZWN0aW9uQmFja3dhcmQgJiYgaXNGb2N1c2FibGVTaGFkb3dIb3N0KG93bmVyLCBldmVudCkp
IHsKKyAgICAgICAgICAgIGZvdW5kID0gb3duZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBmb3VuZCA9IGZpbmRGb2N1c2FibGVOb2RlRGVlcGx5KGRpcmVjdGlvbiwg
c2NvcGUsIG93bmVyLCBldmVudCk7CiAgICAgfQotICAgIG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9k
ZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVudE9yU2hhZG93Um9vdChkaXJlY3Rpb24sIG5v
ZGUsIGV2ZW50KTsKLSAgICByZXR1cm4gbm9kZTsKKyAgICBmb3VuZCA9IGZpbmRGb2N1c2FibGVO
b2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50KGRpcmVjdGlvbiwgZm91bmQsIGV2ZW50
KTsKKyAgICByZXR1cm4gZm91bmQ7Cit9CisKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZv
Y3VzYWJsZU5vZGVEZWVwbHkoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBGb2N1c1Njb3BlIHNj
b3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgLy8gc3RhcnQg
bm9kZSBpcyBleGNsdXNpdmUuCisgICAgTm9kZSogZm91bmQgPSBmaW5kRm9jdXNhYmxlTm9kZShk
aXJlY3Rpb24sIHNjb3BlLCBzdGFydCwgZXZlbnQpOworICAgIGlmICghZm91bmQpCisgICAgICAg
IHJldHVybiAwOworICAgIGlmIChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKSB7
CisgICAgICAgIGlmICghaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KGZvdW5kLCBldmVudCkpCisg
ICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgICAgIE5vZGUqIGZvdW5kSW5Jbm5lckZvY3Vz
U2NvcGUgPSBmaW5kRm9jdXNhYmxlTm9kZURlZXBseShkaXJlY3Rpb24sIEZvY3VzU2NvcGU6OmZv
Y3VzU2NvcGVJbnNpZGVPZihmb3VuZCksIDAsIGV2ZW50KTsKKyAgICAgICAgaWYgKGZvdW5kSW5J
bm5lckZvY3VzU2NvcGUpCisgICAgICAgICAgICByZXR1cm4gZm91bmRJbklubmVyRm9jdXNTY29w
ZTsKKyAgICAgICAgcmV0dXJuIGZpbmRGb2N1c2FibGVOb2RlRGVlcGx5KGRpcmVjdGlvbiwgc2Nv
cGUsIGZvdW5kLCBldmVudCk7CisgICAgfQorICAgIEFTU0VSVChkaXJlY3Rpb24gPT0gRm9jdXNE
aXJlY3Rpb25CYWNrd2FyZCk7CisgICAgaWYgKGlzRm9jdXNhYmxlU2hhZG93SG9zdChmb3VuZCwg
ZXZlbnQpKSB7CisgICAgICAgIE5vZGUqIGZvdW5kSW5Jbm5lckZvY3VzU2NvcGUgPSBmaW5kRm9j
dXNhYmxlTm9kZURlZXBseShkaXJlY3Rpb24sIEZvY3VzU2NvcGU6OmZvY3VzU2NvcGVJbnNpZGVP
Zihmb3VuZCksIDAsIGV2ZW50KTsKKyAgICAgICAgaWYgKGZvdW5kSW5Jbm5lckZvY3VzU2NvcGUp
CisgICAgICAgICAgICByZXR1cm4gZm91bmRJbklubmVyRm9jdXNTY29wZTsKKyAgICAgICAgcmV0
dXJuIGZvdW5kOworICAgIH0KKyAgICBpZiAoaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KGZvdW5k
LCBldmVudCkpIHsKKyAgICAgICAgTm9kZSogZm91bmRJbklubmVyRm9jdXNTY29wZSA9IGZpbmRG
b2N1c2FibGVOb2RlRGVlcGx5KGRpcmVjdGlvbiwgRm9jdXNTY29wZTo6Zm9jdXNTY29wZUluc2lk
ZU9mKGZvdW5kKSwgMCwgZXZlbnQpOworICAgICAgICBpZiAoZm91bmRJbklubmVyRm9jdXNTY29w
ZSkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZEluSW5uZXJGb2N1c1Njb3BlOworICAgICAgICBy
ZXR1cm4gZmluZEZvY3VzYWJsZU5vZGVEZWVwbHkoZGlyZWN0aW9uLCBzY29wZSwgZm91bmQsIGV2
ZW50KTsKKyAgICB9CisgICAgcmV0dXJuIGZvdW5kOwogfQogCi0KLU5vZGUqIEZvY3VzQ29udHJv
bGxlcjo6ZmluZEZvY3VzYWJsZU5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBUcmVlU2Nv
cGUqIHNjb3BlLCBOb2RlKiBub2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK05vZGUqIEZvY3Vz
Q29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBG
b2N1c1Njb3BlIHNjb3BlLCBOb2RlKiBub2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAg
ICByZXR1cm4gKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQpCiAgICAgICAgID8g
bmV4dEZvY3VzYWJsZU5vZGUoc2NvcGUsIG5vZGUsIGV2ZW50KQogICAgICAgICA6IHByZXZpb3Vz
Rm9jdXNhYmxlTm9kZShzY29wZSwgbm9kZSwgZXZlbnQpOwogfQogCi1zdGF0aWMgTm9kZSogbmV4
dE5vZGVXaXRoRXhhY3RUYWJJbmRleChOb2RlKiBzdGFydCwgaW50IHRhYkluZGV4LCBLZXlib2Fy
ZEV2ZW50KiBldmVudCkKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZE5vZGVXaXRoRXhhY3RU
YWJJbmRleChOb2RlKiBzdGFydCwgaW50IHRhYkluZGV4LCBLZXlib2FyZEV2ZW50KiBldmVudCwg
Rm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIC8vIFNlYXJjaCBpcyBpbmNsdXNpdmUg
b2Ygc3RhcnQKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoKSkKLSAgICAgICAgaWYgKG5vZGUtPmlzS2V5Ym9hcmRGb2N1c2Fi
bGUoZXZlbnQpICYmIG5vZGUtPnRhYkluZGV4KCkgPT0gdGFiSW5kZXgpCisgICAgZm9yIChOb2Rl
KiBub2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSAoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9u
Rm9yd2FyZCA/IFJlaWZpZWRUcmVlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHROb2RlV2l0aG91dENy
b3NzaW5nVXBwZXJCb3VuZGFyeShub2RlKTogUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNl
UHJldmlvdXNOb2RlV2l0aG91dENyb3NzaW5nVXBwZXJCb3VuZGFyeShub2RlKSkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFZpc2l0KG5vZGUsIGV2ZW50KSAmJiBhZGp1c3RlZFRhYkluZGV4KG5vZGUs
IGV2ZW50KSA9PSB0YWJJbmRleCkKICAgICAgICAgICAgIHJldHVybiBub2RlOwotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLXN0YXRpYyBOb2RlKiBwcmV2aW91c05vZGVXaXRoRXhhY3RUYWJJbmRleChO
b2RlKiBzdGFydCwgaW50IHRhYkluZGV4LCBLZXlib2FyZEV2ZW50KiBldmVudCkKLXsKLSAgICAv
LyBTZWFyY2ggaXMgaW5jbHVzaXZlIG9mIHN0YXJ0Ci0gICAgZm9yIChOb2RlKiBuID0gc3RhcnQ7
IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQotICAgICAgICBpZiAobi0+aXNLZXli
b2FyZEZvY3VzYWJsZShldmVudCkgJiYgbi0+dGFiSW5kZXgoKSA9PSB0YWJJbmRleCkKLSAgICAg
ICAgICAgIHJldHVybiBuOwotCisgICAgfQogICAgIHJldHVybiAwOwogfQogCkBAIC0zNzYsOCAr
NDQwLDggQEAgc3RhdGljIE5vZGUqIG5leHROb2RlV2l0aEdyZWF0ZXJUYWJJbmRleChOb2RlKiBz
dGFydCwgaW50IHRhYkluZGV4LCBLZXlib2FyZEV2ZW4KICAgICAvLyBTZWFyY2ggaXMgaW5jbHVz
aXZlIG9mIHN0YXJ0CiAgICAgaW50IHdpbm5pbmdUYWJJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8c2hvcnQ+OjptYXgoKSArIDE7CiAgICAgTm9kZSogd2lubmVyID0gMDsKLSAgICBmb3IgKE5v
ZGUqIG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkKLSAgICAgICAgaWYg
KG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYmIG4tPnRhYkluZGV4KCkgPiB0YWJJbmRl
eCAmJiBuLT50YWJJbmRleCgpIDwgd2lubmluZ1RhYkluZGV4KSB7CisgICAgZm9yIChOb2RlKiBu
ID0gc3RhcnQ7IG47IG4gPSBSZWlmaWVkVHJlZVRyYXZlcnNhbDo6dHJhdmVyc2VOZXh0Tm9kZVdp
dGhvdXRDcm9zc2luZ1VwcGVyQm91bmRhcnkobikpCisgICAgICAgIGlmIChzaG91bGRWaXNpdChu
LCBldmVudCkgJiYgbi0+dGFiSW5kZXgoKSA+IHRhYkluZGV4ICYmIG4tPnRhYkluZGV4KCkgPCB3
aW5uaW5nVGFiSW5kZXgpIHsKICAgICAgICAgICAgIHdpbm5lciA9IG47CiAgICAgICAgICAgICB3
aW5uaW5nVGFiSW5kZXggPSBuLT50YWJJbmRleCgpOwogICAgICAgICB9CkBAIC0zOTAsMzAgKzQ1
NCwzMyBAQCBzdGF0aWMgTm9kZSogcHJldmlvdXNOb2RlV2l0aExvd2VyVGFiSW5kZXgoTm9kZSog
c3RhcnQsIGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdgogICAgIC8vIFNlYXJjaCBpcyBpbmNsdXNp
dmUgb2Ygc3RhcnQKICAgICBpbnQgd2lubmluZ1RhYkluZGV4ID0gMDsKICAgICBOb2RlKiB3aW5u
ZXIgPSAwOwotICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2
aW91c05vZGUoKSkKLSAgICAgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYm
IG4tPnRhYkluZGV4KCkgPCB0YWJJbmRleCAmJiBuLT50YWJJbmRleCgpID4gd2lubmluZ1RhYklu
ZGV4KSB7CisgICAgZm9yIChOb2RlKiBuID0gc3RhcnQ7IG47IG4gPSBSZWlmaWVkVHJlZVRyYXZl
cnNhbDo6dHJhdmVyc2VQcmV2aW91c05vZGVXaXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5kYXJ5KG4p
KSB7CisgICAgICAgIGludCBjdXJyZW50VGFiSW5kZXggPSBhZGp1c3RlZFRhYkluZGV4KG4sIGV2
ZW50KTsKKyAgICAgICAgaWYgKChzaG91bGRWaXNpdChuLCBldmVudCkgfHwgaXNOb25Gb2N1c2Fi
bGVTaGFkb3dIb3N0KG4sIGV2ZW50KSkgJiYgY3VycmVudFRhYkluZGV4IDwgdGFiSW5kZXggJiYg
Y3VycmVudFRhYkluZGV4ID4gd2lubmluZ1RhYkluZGV4KSB7CiAgICAgICAgICAgICB3aW5uZXIg
PSBuOwotICAgICAgICAgICAgd2lubmluZ1RhYkluZGV4ID0gbi0+dGFiSW5kZXgoKTsKKyAgICAg
ICAgICAgIHdpbm5pbmdUYWJJbmRleCA9IGN1cnJlbnRUYWJJbmRleDsKICAgICAgICAgfQotCisg
ICAgfQogICAgIHJldHVybiB3aW5uZXI7CiB9CiAKLU5vZGUqIEZvY3VzQ29udHJvbGxlcjo6bmV4
dEZvY3VzYWJsZU5vZGUoVHJlZVNjb3BlKiBzY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZl
bnQqIGV2ZW50KQorTm9kZSogRm9jdXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxlTm9kZShGb2N1
c1Njb3BlIHNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAg
aWYgKHN0YXJ0KSB7CisgICAgICAgIGludCB0YWJJbmRleCA9IGFkanVzdGVkVGFiSW5kZXgoc3Rh
cnQsIGV2ZW50KTsKICAgICAgICAgLy8gSWYgYSBub2RlIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIG5v
cm1hbCB0YWJiaW5nIGN5Y2xlLCB0aGUgbmV4dCBmb2N1c2FibGUgbm9kZSBpcyBkZXRlcm1pbmVk
IGJ5IHRyZWUgb3JkZXIKLSAgICAgICAgaWYgKHN0YXJ0LT50YWJJbmRleCgpIDwgMCkgewotICAg
ICAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnQtPnRyYXZlcnNlTmV4dE5vZGUoKTsgbjsgbiA9
IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkKLSAgICAgICAgICAgICAgICBpZiAobi0+aXNLZXlib2Fy
ZEZvY3VzYWJsZShldmVudCkgJiYgbi0+dGFiSW5kZXgoKSA+PSAwKQorICAgICAgICBpZiAodGFi
SW5kZXggPCAwKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBSZWlmaWVkVHJlZVRyYXZl
cnNhbDo6dHJhdmVyc2VOZXh0Tm9kZVdpdGhvdXRDcm9zc2luZ1VwcGVyQm91bmRhcnkoc3RhcnQp
OyBuOyBuID0gUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlTmV4dE5vZGVXaXRob3V0Q3Jv
c3NpbmdVcHBlckJvdW5kYXJ5KG4pKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFZpc2l0
KG4sIGV2ZW50KSAmJiBhZGp1c3RlZFRhYkluZGV4KG4sIGV2ZW50KSA+PSAwKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAg
IC8vIEZpcnN0IHRyeSB0byBmaW5kIGEgbm9kZSB3aXRoIHRoZSBzYW1lIHRhYmluZGV4IGFzIHN0
YXJ0IHRoYXQgY29tZXMgYWZ0ZXIgc3RhcnQgaW4gdGhlIHNjb3BlLgotICAgICAgICBpZiAoTm9k
ZSogd2lubmVyID0gbmV4dE5vZGVXaXRoRXhhY3RUYWJJbmRleChzdGFydC0+dHJhdmVyc2VOZXh0
Tm9kZSgpLCBzdGFydC0+dGFiSW5kZXgoKSwgZXZlbnQpKQorICAgICAgICBpZiAoTm9kZSogd2lu
bmVyID0gZmluZE5vZGVXaXRoRXhhY3RUYWJJbmRleChSZWlmaWVkVHJlZVRyYXZlcnNhbDo6dHJh
dmVyc2VOZXh0Tm9kZVdpdGhvdXRDcm9zc2luZ1VwcGVyQm91bmRhcnkoc3RhcnQpLCB0YWJJbmRl
eCwgZXZlbnQsIEZvY3VzRGlyZWN0aW9uRm9yd2FyZCkpCiAgICAgICAgICAgICByZXR1cm4gd2lu
bmVyOwogCi0gICAgICAgIGlmICghc3RhcnQtPnRhYkluZGV4KCkpCisgICAgICAgIGlmICghdGFi
SW5kZXgpCiAgICAgICAgICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBsYXN0IG5vZGUgaW4gdGhl
IGRvY3VtZW50IHdpdGggYSB0YWJpbmRleCBvZiAwLiBUaGlzIGlzIHRoZSBlbmQgb2YgdGhlIHRh
YmJpbmcgb3JkZXIuCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC00MjEsMjYgKzQ4
OCwyNiBAQCBOb2RlKiBGb2N1c0NvbnRyb2xsZXI6Om5leHRGb2N1c2FibGVOb2RlKFRyZWVTY29w
ZSogc2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZAogICAgIC8vIExvb2sgZm9yIHRoZSBmaXJz
dCBub2RlIGluIHRoZSBzY29wZSB0aGF0OgogICAgIC8vIDEpIGhhcyB0aGUgbG93ZXN0IHRhYmlu
ZGV4IHRoYXQgaXMgaGlnaGVyIHRoYW4gc3RhcnQncyB0YWJpbmRleCAob3IgMCwgaWYgc3RhcnQg
aXMgbnVsbCksIGFuZAogICAgIC8vIDIpIGNvbWVzIGZpcnN0IGluIHRoZSBzY29wZSwgaWYgdGhl
cmUncyBhIHRpZS4KLSAgICBpZiAoTm9kZSogd2lubmVyID0gbmV4dE5vZGVXaXRoR3JlYXRlclRh
YkluZGV4KHNjb3BlLT5yb290Tm9kZSgpLCBzdGFydCA/IHN0YXJ0LT50YWJJbmRleCgpIDogMCwg
ZXZlbnQpKQorICAgIGlmIChOb2RlKiB3aW5uZXIgPSBuZXh0Tm9kZVdpdGhHcmVhdGVyVGFiSW5k
ZXgoc2NvcGUucm9vdE5vZGUoKSwgc3RhcnQgPyBhZGp1c3RlZFRhYkluZGV4KHN0YXJ0LCBldmVu
dCkgOiAwLCBldmVudCkpCiAgICAgICAgIHJldHVybiB3aW5uZXI7CiAKICAgICAvLyBUaGVyZSBh
cmUgbm8gbm9kZXMgd2l0aCBhIHRhYmluZGV4IGdyZWF0ZXIgdGhhbiBzdGFydCdzIHRhYmluZGV4
LAogICAgIC8vIHNvIGZpbmQgdGhlIGZpcnN0IG5vZGUgd2l0aCBhIHRhYmluZGV4IG9mIDAuCi0g
ICAgcmV0dXJuIG5leHROb2RlV2l0aEV4YWN0VGFiSW5kZXgoc2NvcGUtPnJvb3ROb2RlKCksIDAs
IGV2ZW50KTsKKyAgICByZXR1cm4gZmluZE5vZGVXaXRoRXhhY3RUYWJJbmRleChzY29wZS5yb290
Tm9kZSgpLCAwLCBldmVudCwgRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKTsKIH0KIAotTm9kZSogRm9j
dXNDb250cm9sbGVyOjpwcmV2aW91c0ZvY3VzYWJsZU5vZGUoVHJlZVNjb3BlKiBzY29wZSwgTm9k
ZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQorTm9kZSogRm9jdXNDb250cm9sbGVyOjpw
cmV2aW91c0ZvY3VzYWJsZU5vZGUoRm9jdXNTY29wZSBzY29wZSwgTm9kZSogc3RhcnQsIEtleWJv
YXJkRXZlbnQqIGV2ZW50KQogewogICAgIE5vZGUqIGxhc3Q7Ci0gICAgZm9yIChsYXN0ID0gc2Nv
cGUtPnJvb3ROb2RlKCk7IGxhc3QtPmxhc3RDaGlsZCgpOyBsYXN0ID0gbGFzdC0+bGFzdENoaWxk
KCkpIHsgfQorICAgIGZvciAobGFzdCA9IHNjb3BlLnJvb3ROb2RlKCk7IFJlaWZpZWRUcmVlVHJh
dmVyc2FsOjpsYXN0Q2hpbGRXaXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5kYXJ5KGxhc3QpOyBsYXN0
ID0gUmVpZmllZFRyZWVUcmF2ZXJzYWw6Omxhc3RDaGlsZFdpdGhvdXRDcm9zc2luZ1VwcGVyQm91
bmRhcnkobGFzdCkpIHsgfQogCiAgICAgLy8gRmlyc3QgdHJ5IHRvIGZpbmQgdGhlIGxhc3Qgbm9k
ZSBpbiB0aGUgc2NvcGUgdGhhdCBjb21lcyBiZWZvcmUgc3RhcnQgYW5kIGhhcyB0aGUgc2FtZSB0
YWJpbmRleCBhcyBzdGFydC4KICAgICAvLyBJZiBzdGFydCBpcyBudWxsLCBmaW5kIHRoZSBsYXN0
IG5vZGUgaW4gdGhlIHNjb3BlIHdpdGggYSB0YWJpbmRleCBvZiAwLgogICAgIE5vZGUqIHN0YXJ0
aW5nTm9kZTsKICAgICBpbnQgc3RhcnRpbmdUYWJJbmRleDsKICAgICBpZiAoc3RhcnQpIHsKLSAg
ICAgICAgc3RhcnRpbmdOb2RlID0gc3RhcnQtPnRyYXZlcnNlUHJldmlvdXNOb2RlKCk7Ci0gICAg
ICAgIHN0YXJ0aW5nVGFiSW5kZXggPSBzdGFydC0+dGFiSW5kZXgoKTsKKyAgICAgICAgc3RhcnRp
bmdOb2RlID0gUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlUHJldmlvdXNOb2RlV2l0aG91
dENyb3NzaW5nVXBwZXJCb3VuZGFyeShzdGFydCk7CisgICAgICAgIHN0YXJ0aW5nVGFiSW5kZXgg
PSBhZGp1c3RlZFRhYkluZGV4KHN0YXJ0LCBldmVudCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
c3RhcnRpbmdOb2RlID0gbGFzdDsKICAgICAgICAgc3RhcnRpbmdUYWJJbmRleCA9IDA7CkBAIC00
NDgsMTggKzUxNSwxOSBAQCBOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNhYmxl
Tm9kZShUcmVlU2NvcGUqIHNjb3BlLCBOb2RlKiBzdGFydCwgS2V5YgogCiAgICAgLy8gSG93ZXZl
ciwgaWYgYSBub2RlIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIG5vcm1hbCB0YWJiaW5nIGN5Y2xlLCB0
aGUgcHJldmlvdXMgZm9jdXNhYmxlIG5vZGUgaXMgZGV0ZXJtaW5lZCBieSB0cmVlIG9yZGVyCiAg
ICAgaWYgKHN0YXJ0aW5nVGFiSW5kZXggPCAwKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbiA9IHN0
YXJ0aW5nTm9kZTsgbjsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpCi0gICAgICAgICAg
ICBpZiAobi0+aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCkgJiYgbi0+dGFiSW5kZXgoKSA+PSAw
KQorICAgICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydGluZ05vZGU7IG47IG4gPSBSZWlmaWVkVHJl
ZVRyYXZlcnNhbDo6dHJhdmVyc2VQcmV2aW91c05vZGVXaXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5k
YXJ5KG4pKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVmlzaXQobiwgZXZlbnQpICYmIGFkanVz
dGVkVGFiSW5kZXgobiwgZXZlbnQpID49IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIG47Cisg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoTm9kZSogd2lubmVyID0gcHJldmlvdXNOb2RlV2l0
aEV4YWN0VGFiSW5kZXgoc3RhcnRpbmdOb2RlLCBzdGFydGluZ1RhYkluZGV4LCBldmVudCkpCisg
ICAgaWYgKE5vZGUqIHdpbm5lciA9IGZpbmROb2RlV2l0aEV4YWN0VGFiSW5kZXgoc3RhcnRpbmdO
b2RlLCBzdGFydGluZ1RhYkluZGV4LCBldmVudCwgRm9jdXNEaXJlY3Rpb25CYWNrd2FyZCkpCiAg
ICAgICAgIHJldHVybiB3aW5uZXI7CiAKICAgICAvLyBUaGVyZSBhcmUgbm8gbm9kZXMgYmVmb3Jl
IHN0YXJ0IHdpdGggdGhlIHNhbWUgdGFiaW5kZXggYXMgc3RhcnQsIHNvIGxvb2sgZm9yIGEgbm9k
ZSB0aGF0OgogICAgIC8vIDEpIGhhcyB0aGUgaGlnaGVzdCBub24temVybyB0YWJpbmRleCAodGhh
dCBpcyBsZXNzIHRoYW4gc3RhcnQncyB0YWJpbmRleCksIGFuZAogICAgIC8vIDIpIGNvbWVzIGxh
c3QgaW4gdGhlIHNjb3BlLCBpZiB0aGVyZSdzIGEgdGllLgotICAgIHN0YXJ0aW5nVGFiSW5kZXgg
PSAoc3RhcnQgJiYgc3RhcnQtPnRhYkluZGV4KCkpID8gc3RhcnQtPnRhYkluZGV4KCkgOiBzdGQ6
Om51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCk7CisgICAgc3RhcnRpbmdUYWJJbmRleCA9IChz
dGFydCAmJiBzdGFydGluZ1RhYkluZGV4KSA/IHN0YXJ0aW5nVGFiSW5kZXggOiBzdGQ6Om51bWVy
aWNfbGltaXRzPHNob3J0Pjo6bWF4KCk7CiAgICAgcmV0dXJuIHByZXZpb3VzTm9kZVdpdGhMb3dl
clRhYkluZGV4KGxhc3QsIHN0YXJ0aW5nVGFiSW5kZXgsIGV2ZW50KTsKIH0KIApAQCAtNDgwLDEw
ICs1NDgsMTAgQEAgc3RhdGljIHZvaWQgY2xlYXJTZWxlY3Rpb25JZk5lZWRlZChGcmFtZSogb2xk
Rm9jdXNlZEZyYW1lLCBGcmFtZSogbmV3Rm9jdXNlZEZyYW0KIHsKICAgICBpZiAoIW9sZEZvY3Vz
ZWRGcmFtZSB8fCAhbmV3Rm9jdXNlZEZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAor
CiAgICAgaWYgKG9sZEZvY3VzZWRGcmFtZS0+ZG9jdW1lbnQoKSAhPSBuZXdGb2N1c2VkRnJhbWUt
PmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIEZyYW1lU2VsZWN0aW9u
KiBzID0gb2xkRm9jdXNlZEZyYW1lLT5zZWxlY3Rpb24oKTsKICAgICBpZiAocy0+aXNOb25lKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTQ5NSw3ICs1NjMsNyBAQCBzdGF0aWMgdm9pZCBjbGVhclNl
bGVjdGlvbklmTmVlZGVkKEZyYW1lKiBvbGRGb2N1c2VkRnJhbWUsIEZyYW1lKiBuZXdGb2N1c2Vk
RnJhbQogICAgIE5vZGUqIHNlbGVjdGlvblN0YXJ0Tm9kZSA9IHMtPnNlbGVjdGlvbigpLnN0YXJ0
KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhcnROb2RlID09IG5ld0Zv
Y3VzZWROb2RlIHx8IHNlbGVjdGlvblN0YXJ0Tm9kZS0+aXNEZXNjZW5kYW50T2YobmV3Rm9jdXNl
ZE5vZGUpIHx8IHNlbGVjdGlvblN0YXJ0Tm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbmV3
Rm9jdXNlZE5vZGUpCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICBpZiAoTm9kZSog
bW91c2VQcmVzc05vZGUgPSBuZXdGb2N1c2VkRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZVBy
ZXNzTm9kZSgpKSB7CiAgICAgICAgIGlmIChtb3VzZVByZXNzTm9kZS0+cmVuZGVyZXIoKSAmJiAh
bW91c2VQcmVzc05vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIERv
bid0IGNsZWFyIHRoZSBzZWxlY3Rpb24gZm9yIGNvbnRlbnRFZGl0YWJsZSBlbGVtZW50cywgYnV0
IGRvIGNsZWFyIGl0IGZvciBpbnB1dCBhbmQgdGV4dGFyZWEuIFNlZSBidWcgMzg2OTYuCkBAIC01
MDksNyArNTc3LDcgQEAgc3RhdGljIHZvaWQgY2xlYXJTZWxlY3Rpb25JZk5lZWRlZChGcmFtZSog
b2xkRm9jdXNlZEZyYW1lLCBGcmFtZSogbmV3Rm9jdXNlZEZyYW0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHMtPmNsZWFyKCk7CiB9CiAKQEAgLTUxNyw3ICs1
ODUsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZE5vZGUoTm9kZSogbm9kZSwg
UGFzc1JlZlB0cjxGcmFtZT4gbmV3Rm9jdXNlZEZyYQogewogICAgIFJlZlB0cjxGcmFtZT4gb2xk
Rm9jdXNlZEZyYW1lID0gZm9jdXNlZEZyYW1lKCk7CiAgICAgUmVmUHRyPERvY3VtZW50PiBvbGRE
b2N1bWVudCA9IG9sZEZvY3VzZWRGcmFtZSA/IG9sZEZvY3VzZWRGcmFtZS0+ZG9jdW1lbnQoKSA6
IDA7Ci0gICAgCisKICAgICBOb2RlKiBvbGRGb2N1c2VkTm9kZSA9IG9sZERvY3VtZW50ID8gb2xk
RG9jdW1lbnQtPmZvY3VzZWROb2RlKCkgOiAwOwogICAgIGlmIChvbGRGb2N1c2VkTm9kZSA9PSBu
b2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU0MywxMCArNjExLDEwIEBAIGJvb2wgRm9j
dXNDb250cm9sbGVyOjpzZXRGb2N1c2VkTm9kZShOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEZyYW1l
PiBuZXdGb2N1c2VkRnJhCiAgICAgICAgIG1fcGFnZS0+ZWRpdG9yQ2xpZW50KCktPnNldElucHV0
TWV0aG9kU3RhdGUobm9kZS0+c2hvdWxkVXNlSW5wdXRNZXRob2QoKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIGlmIChvbGREb2N1bWVudCAmJiBvbGREb2N1bWVu
dCAhPSBuZXdEb2N1bWVudCkKICAgICAgICAgb2xkRG9jdW1lbnQtPnNldEZvY3VzZWROb2RlKDAp
OwotICAgIAorCiAgICAgc2V0Rm9jdXNlZEZyYW1lKG5ld0ZvY3VzZWRGcmFtZSk7CiAKICAgICAv
LyBTZXR0aW5nIHRoZSBmb2N1c2VkIG5vZGUgY2FuIHJlc3VsdCBpbiBsb3Npbmcgb3VyIGxhc3Qg
cmVmdCB0byBub2RlIHdoZW4gSlMgZXZlbnQgaGFuZGxlcnMgZmlyZS4KQEAgLTU3OCw3ICs2NDYs
NyBAQCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQogICAgIH0K
IAogICAgIGZvY3VzZWRPck1haW5GcmFtZSgpLT5zZWxlY3Rpb24oKS0+cGFnZUFjdGl2YXRpb25D
aGFuZ2VkKCk7Ci0gICAgCisKICAgICBpZiAobV9mb2N1c2VkRnJhbWUgJiYgaXNGb2N1c2VkKCkp
CiAgICAgICAgIGRpc3BhdGNoRXZlbnRzT25XaW5kb3dBbmRGb2N1c2VkTm9kZShtX2ZvY3VzZWRG
cmFtZS0+ZG9jdW1lbnQoKSwgYWN0aXZlKTsKIH0KQEAgLTc4NSw3ICs4NTMsNyBAQCBib29sIEZv
Y3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseShGb2N1c0RpcmVjdGlvbiBk
aXJlY3Rpb24sIEtleWJvYQogCiAgICAgaWYgKGNvbnRhaW5lci0+aXNEb2N1bWVudE5vZGUoKSkK
ICAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250YWluZXIpLT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgICAgCisKICAgICAvLyBGaWd1cmUgb3V0
IHRoZSBzdGFydGluZyByZWN0LgogICAgIExheW91dFJlY3Qgc3RhcnRpbmdSZWN0OwogICAgIGlm
IChmb2N1c2VkTm9kZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgKaW5kZXgg
M2I1NjM3N2JkNDMxM2M2NTljNWFkNjVmMTBiODRmZGU2Y2ZlNWUzMC4uODI4ZjA5MjRlYjA4NjVj
ZTQ1YTk1ZTczZjIyZGVjOWJhMDdhNmIxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJv
bGxlci5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYg
Rm9jdXNDb250cm9sbGVyX2gKQEAgLTQzLDYgKzQzLDE4IEBAIGNsYXNzIE5vZGU7CiBjbGFzcyBQ
YWdlOwogY2xhc3MgVHJlZVNjb3BlOwogCitjbGFzcyBGb2N1c1Njb3BlIHsKK3B1YmxpYzoKKyAg
ICBGb2N1c1Njb3BlKFRyZWVTY29wZSopOworICAgIE5vZGUqIHJvb3ROb2RlKCkgY29uc3Q7Cisg
ICAgTm9kZSogb3duZXIoKSBjb25zdDsKKyAgICBzdGF0aWMgRm9jdXNTY29wZSBmb2N1c1Njb3Bl
SW5jbHVkaW5nKE5vZGUqKTsKKyAgICBzdGF0aWMgRm9jdXNTY29wZSBmb2N1c1Njb3BlSW5zaWRl
T2YoTm9kZSopOworCitwcml2YXRlOgorICAgIFRyZWVTY29wZSogbV9yb290VHJlZVNjb3BlOwor
fTsKKwogY2xhc3MgRm9jdXNDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShG
b2N1c0NvbnRyb2xsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTU0
LDcgKzY2LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBzZXRJbml0aWFsRm9jdXMoRm9jdXNEaXJl
Y3Rpb24sIEtleWJvYXJkRXZlbnQqKTsKICAgICBib29sIGFkdmFuY2VGb2N1cyhGb2N1c0RpcmVj
dGlvbiwgS2V5Ym9hcmRFdmVudCosIGJvb2wgaW5pdGlhbEZvY3VzID0gZmFsc2UpOwotICAgICAg
ICAKKwogICAgIGJvb2wgc2V0Rm9jdXNlZE5vZGUoTm9kZSosIFBhc3NSZWZQdHI8RnJhbWU+KTsK
IAogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOwpAQCAtNjYsMTYgKzc4LDE1IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldENvbnRhaW5pbmdXaW5kb3dJc1Zpc2libGUoYm9vbCk7CiAgICAgYm9vbCBj
b250YWluaW5nV2luZG93SXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluaW5nV2lu
ZG93SXNWaXNpYmxlOyB9CiAKLSAgICBib29sIHRyYW5zZmVyRm9jdXNUb0VsZW1lbnRJblNoYWRv
d1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24p
OwotCiBwcml2YXRlOgogICAgIEZvY3VzQ29udHJvbGxlcihQYWdlKik7CiAKICAgICBib29sIGFk
dmFuY2VGb2N1c0RpcmVjdGlvbmFsbHkoRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqKTsK
ICAgICBib29sIGFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiwgS2V5
Ym9hcmRFdmVudCosIGJvb2wgaW5pdGlhbEZvY3VzKTsKIAotICAgIE5vZGUqIGZpbmRGb2N1c2Fi
bGVOb2RlQWNyb3NzVHJlZVNjb3BlKEZvY3VzRGlyZWN0aW9uLCBUcmVlU2NvcGUqIHN0YXJ0U2Nv
cGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgTm9kZSogZmluZEZvY3VzYWJs
ZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnRPclNoYWRvd1Jvb3QoRm9jdXNEaXJl
Y3Rpb24sIE5vZGUqLCBLZXlib2FyZEV2ZW50Kik7CisgICAgTm9kZSogZmluZEZvY3VzYWJsZU5v
ZGVBY3Jvc3NGb2N1c1Njb3BlKEZvY3VzRGlyZWN0aW9uLCBGb2N1c1Njb3BlIHN0YXJ0U2NvcGUs
IE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7CisgICAgTm9kZSogZmluZEZvY3VzYWJsZU5v
ZGVEZWVwbHkoRm9jdXNEaXJlY3Rpb24sIEZvY3VzU2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2Fy
ZEV2ZW50Kik7CisgICAgTm9kZSogZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0Zy
YW1lRG9jdW1lbnQoRm9jdXNEaXJlY3Rpb24sIE5vZGUqLCBLZXlib2FyZEV2ZW50Kik7CiAKICAg
ICAvLyBTZWFyY2hlcyB0aHJvdWdoIHRoZSBnaXZlbiB0cmVlIHNjb3BlLCBzdGFydGluZyBmcm9t
IHN0YXJ0IG5vZGUsIGZvciB0aGUgbmV4dC9wcmV2aW91cyBzZWxlY3RhYmxlIGVsZW1lbnQgdGhh
dCBjb21lcyBhZnRlci9iZWZvcmUgc3RhcnQgbm9kZS4KICAgICAvLyBUaGUgb3JkZXIgZm9sbG93
ZWQgaXMgYXMgc3BlY2lmaWVkIGluIHNlY3Rpb24gMTcuMTEuMSBvZiB0aGUgSFRNTDQgc3BlYywg
d2hpY2ggaXMgZWxlbWVudHMgd2l0aCB0YWIgaW5kZXhlcwpAQCAtODYsMTAgKzk3LDEyIEBAIHBy
aXZhdGU6CiAgICAgLy8gQHJldHVybiBUaGUgZm9jdXMgbm9kZSB0aGF0IGNvbWVzIGFmdGVyL2Jl
Zm9yZSBzdGFydCBub2RlLgogICAgIC8vCiAgICAgLy8gU2VlIGh0dHA6Ly93d3cudzMub3JnL1RS
L2h0bWw0L2ludGVyYWN0L2Zvcm1zLmh0bWwjaC0xNy4xMS4xCi0gICAgaW5saW5lIE5vZGUqIGZp
bmRGb2N1c2FibGVOb2RlKEZvY3VzRGlyZWN0aW9uLCBUcmVlU2NvcGUqLCBOb2RlKiBzdGFydCwg
S2V5Ym9hcmRFdmVudCopOworICAgIGlubGluZSBOb2RlKiBmaW5kRm9jdXNhYmxlTm9kZShGb2N1
c0RpcmVjdGlvbiwgRm9jdXNTY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKIAot
ICAgIE5vZGUqIG5leHRGb2N1c2FibGVOb2RlKFRyZWVTY29wZSosIE5vZGUqIHN0YXJ0LCBLZXli
b2FyZEV2ZW50Kik7Ci0gICAgTm9kZSogcHJldmlvdXNGb2N1c2FibGVOb2RlKFRyZWVTY29wZSos
IE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7CisgICAgTm9kZSogbmV4dEZvY3VzYWJsZU5v
ZGUoRm9jdXNTY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKKyAgICBOb2RlKiBw
cmV2aW91c0ZvY3VzYWJsZU5vZGUoRm9jdXNTY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZl
bnQqKTsKKworICAgIE5vZGUqIGZpbmROb2RlV2l0aEV4YWN0VGFiSW5kZXgoTm9kZSogc3RhcnQs
IGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdmVudCosIEZvY3VzRGlyZWN0aW9uKTsKIAogICAgIGJv
b2wgYWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRF
dmVudCopOwogICAgIHZvaWQgZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIoTm9kZSogY29u
dGFpbmVyLCBjb25zdCBMYXlvdXRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uLCBL
ZXlib2FyZEV2ZW50KiwgRm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpOwpAQCAtMTA0LDUgKzExNyw1
IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0gICAgCisKICNlbmRp
ZiAvLyBGb2N1c0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQyYjdkODliNjQzNzFkYWVkM2Q5MzgzMjVm
NzE5OWYyYzRmMjg5OGQuLjM4MGQ3ZWVlMjIzNjY0YWY4NmVkMjEzMDg0YjI0OGM5ZDFmN2UxMzEg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMi0wMy0yMSAgSGF5YXRvIEl0byAgPGhheWF0b0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgTWFrZSBmb2N1cyBuYXZpZ2F0aW9uIGJlIGNvbXBsaWFu
dCB3aXRoIFNoYWRvdyBET00gc3BlYy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4NTg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvZm9jdXMtbmF2aWdhdGlvbi1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9mb2N1cy1uYXZpZ2F0aW9u
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9yZXNvdXJjZXMvc2hhZG93
LWRvbS5qczoKKyAgICAgICAgKGlzU2hhZG93SG9zdCk6CisgICAgICAgIChpc0lmcmFtZUVsZW1l
bnQpOgorICAgICAgICAoZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKToKKyAgICAgICAgKGR1bXBO
b2RlKToKKyAgICAgICAgKGlubmVybW9zdEFjdGl2ZUVsZW1lbnQpOgorICAgICAgICAoaXNJbm5l
cm1vc3RBY3RpdmVFbGVtZW50KToKKyAgICAgICAgKHNob3VsZE5hdmlnYXRlRm9jdXMpOgorICAg
ICAgICAobmF2aWdhdGVGb2N1c0ZvcndhcmQpOgorICAgICAgICAobmF2aWdhdGVGb2N1c0JhY2t3
YXJkKToKKyAgICAgICAgKHRlc3RGb2N1c05hdmlnYXRpb25Gb3dyYWQpOgorICAgICAgICAodGVz
dEZvY3VzTmF2aWdhdGlvbkJhY2t3YXJkKToKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hh
ZG93LWhvc3QtdHJhbnNmZXItZm9jdXMtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAq
IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy5odG1sOiBSZW1vdmVk
LgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3ct
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1l
LWFuZC1zaGFkb3cuaHRtbDoKKwogMjAxMi0wMy0yNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZWJhc2VsaW5lIGFmdGVyIHIxMTIxNzcuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvZm9jdXMtbmF2aWdhdGlvbi1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvZm9jdXMtbmF2aWdhdGlvbi1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDE5NThkZTM2ZTk1MDk0ZWNiMzBmMDFiM2ZhNGNmMjhiNmRhNGMw
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9mb2N1cy1u
YXZpZ2F0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwNiBAQAorVGhpcyB0ZXN0cyB0aGF0
IHByZXNzaW5nIFRhYiBrZXkgc2hvdWxkIHRyYXZlcnNlIGludG8gc2hhZG93IERPTSBzdWJ0cmVl
cywgYW5kIHByZXNzaW5nIFNoaWZ0LVRhYiBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIuCisKK1No
b3VsZCBtb3ZlIGZyb20gaW5wdXQtQS0xIHRvIGlucHV0LUItMSBpbiBmb3J3YXJkCitQQVNTCitT
aG91bGQgbW92ZSBmcm9tIGlucHV0LUItMSB0byBpbnB1dC1DLTEgaW4gZm9yd2FyZAorUEFTUwor
U2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1DLTEgdG8gaG9zdC1CIGluIGZvcndhcmQKK1BBU1MKK1No
b3VsZCBtb3ZlIGZyb20gaG9zdC1CIHRvIGhvc3QtQi8veW91bmdlci1pbnB1dC1BLTEgaW4gZm9y
d2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvL3lvdW5nZXItaW5wdXQtQS0xIHRv
IGhvc3QtQi9vbGRlci1pbnB1dC1BLTEgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJv
bSBob3N0LUIvb2xkZXItaW5wdXQtQS0xIHRvIGxpZ2h0LWNoaWxkLXNlbGVjdGVkLTEgaW4gZm9y
d2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBsaWdodC1jaGlsZC1zZWxlY3RlZC0xIHRvIGhv
c3QtQi9vbGRlci1pbnB1dC1CLTEgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBo
b3N0LUIvb2xkZXItaW5wdXQtQi0xIHRvIGhvc3QtQi8veW91bmdlci1pbnB1dC1CLTEgaW4gZm9y
d2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvL3lvdW5nZXItaW5wdXQtQi0xIHRv
IGhvc3QtQi8veW91bmdlci1pbnB1dC1BLTAgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBob3N0LUIvL3lvdW5nZXItaW5wdXQtQS0wIHRvIGhvc3QtQi9vbGRlci1pbnB1dC1BLTAg
aW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvb2xkZXItaW5wdXQtQS0w
IHRvIGxpZ2h0LWNoaWxkLXNlbGVjdGVkLTAgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBsaWdodC1jaGlsZC1zZWxlY3RlZC0wIHRvIGhvc3QtQi9vbGRlci1pbnB1dC1CLTAgaW4g
Zm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvb2xkZXItaW5wdXQtQi0wIHRv
IGhvc3QtQi8veW91bmdlci1pbnB1dC1CLTAgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBob3N0LUIvL3lvdW5nZXItaW5wdXQtQi0wIHRvIGlucHV0LUQtMSBpbiBmb3J3YXJkCitQ
QVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUQtMSB0byBpbnB1dC1BLTAgaW4gZm9yd2FyZAor
UEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1BLTAgdG8gaG9zdC1BL2lucHV0LTEgaW4gZm9y
d2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUEvaW5wdXQtMSB0byBob3N0LUEvaW5w
dXQtMjAgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUEvaW5wdXQtMjAg
dG8gaG9zdC1BL25lc3RlZC1ob3N0IGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20g
aG9zdC1BL25lc3RlZC1ob3N0IHRvIGhvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0xNSBpbiBmb3J3
YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0xNSB0
byBob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQtMjUgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1v
dmUgZnJvbSBob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQtMjUgdG8gaW5wdXQtQi0wIGluIGZvcndh
cmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQi0wIHRvIGlucHV0LUMtMCBpbiBmb3J3
YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUMtMCB0byBpbnB1dC1ELTAgaW4gZm9y
d2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1ELTAgdG8gaW5wdXQtQS0xIGluIGZv
cndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQS0xIHRvIGlucHV0LUQtMCBpbiBi
YWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1ELTAgdG8gaW5wdXQtQy0wIGlu
IGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUMtMCB0byBpbnB1dC1CLTAg
aW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQi0wIHRvIGhvc3QtQS9u
ZXN0ZWQtaG9zdC9pbnB1dC0yNSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBo
b3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQtMjUgdG8gaG9zdC1BL25lc3RlZC1ob3N0L2lucHV0LTE1
IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQS9uZXN0ZWQtaG9zdC9p
bnB1dC0xNSB0byBob3N0LUEvbmVzdGVkLWhvc3QgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBt
b3ZlIGZyb20gaG9zdC1BL25lc3RlZC1ob3N0IHRvIGhvc3QtQS9pbnB1dC0yMCBpbiBiYWNrd2Fy
ZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUEvaW5wdXQtMjAgdG8gaG9zdC1BL2lucHV0
LTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1BL2lucHV0LTEgdG8g
aW5wdXQtQS0wIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUEtMCB0
byBpbnB1dC1ELTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtRC0x
IHRvIGhvc3QtQi8veW91bmdlci1pbnB1dC1CLTAgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBt
b3ZlIGZyb20gaG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMCB0byBob3N0LUIvb2xkZXItaW5wdXQt
Qi0wIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi9vbGRlci1pbnB1
dC1CLTAgdG8gbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMCBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxk
IG1vdmUgZnJvbSBsaWdodC1jaGlsZC1zZWxlY3RlZC0wIHRvIGhvc3QtQi9vbGRlci1pbnB1dC1B
LTAgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1CL29sZGVyLWlucHV0
LUEtMCB0byBob3N0LUIvL3lvdW5nZXItaW5wdXQtQS0wIGluIGJhY2t3YXJkCitQQVNTCitTaG91
bGQgbW92ZSBmcm9tIGhvc3QtQi8veW91bmdlci1pbnB1dC1BLTAgdG8gaG9zdC1CLy95b3VuZ2Vy
LWlucHV0LUItMSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvL3lv
dW5nZXItaW5wdXQtQi0xIHRvIGhvc3QtQi9vbGRlci1pbnB1dC1CLTEgaW4gYmFja3dhcmQKK1BB
U1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1CL29sZGVyLWlucHV0LUItMSB0byBsaWdodC1jaGls
ZC1zZWxlY3RlZC0xIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGxpZ2h0LWNo
aWxkLXNlbGVjdGVkLTEgdG8gaG9zdC1CL29sZGVyLWlucHV0LUEtMSBpbiBiYWNrd2FyZAorUEFT
UworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvb2xkZXItaW5wdXQtQS0xIHRvIGhvc3QtQi8veW91
bmdlci1pbnB1dC1BLTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1C
Ly95b3VuZ2VyLWlucHV0LUEtMSB0byBob3N0LUIgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBt
b3ZlIGZyb20gaG9zdC1CIHRvIGlucHV0LUMtMSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1v
dmUgZnJvbSBpbnB1dC1DLTEgdG8gaW5wdXQtQi0xIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQg
bW92ZSBmcm9tIGlucHV0LUItMSB0byBpbnB1dC1BLTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3Vs
ZCBtb3ZlIGZyb20gaW5wdXQtQS0xIHRvIGlucHV0LUQtMCBpbiBiYWNrd2FyZAorUEFTUworVGVz
dCBmaW5pc2hlZC4KKworCisKKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9z
aGFkb3cvZm9jdXMtbmF2aWdhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L2ZvY3VzLW5hdmlnYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTcwOTU3MGRlYmVjMzJkNjk4YWE2
NGYxYTI2ZDI3ZTZkZmJmODc2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vc2hhZG93L2ZvY3VzLW5hdmlnYXRpb24uaHRtbApAQCAtMCwwICsxLDE3OSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYWRv
dy1kb20uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGlzIHRlc3RzIHRoYXQg
cHJlc3NpbmcgVGFiIGtleSBzaG91bGQgdHJhdmVyc2UgaW50byBzaGFkb3cgRE9NIHN1YnRyZWVz
LCBhbmQgcHJlc3NpbmcgU2hpZnQtVGFiIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlci48L3A+Cis8
cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHByZXBhcmVET01U
cmVlKHBhcmVudCkKK3sKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoCisgICAgICAgIC8vIEZJWE1F
OiBVc2UgbW9yZSBkZXNjcmlwdGl2ZSBpZHMgZm9yIGVhY2ggZWxlbWVudHMuCisgICAgICAgIGNy
ZWF0ZURPTSgnZGl2JywgeydpZCc6ICd0b3AtZGl2J30sCisgICAgICAgICAgICAgICAgICBjcmVh
dGVET00oJ2lucHV0JywgeydpZCc6ICdpbnB1dC1BLTEnLCAndGFiaW5kZXgnOiAxfSksCisgICAg
ICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdpbnB1dC1CLTEnLCAndGFi
aW5kZXgnOiAxfSksCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicpLCAgLy8gU2hv
dWxkIG5vdCBiZSBzZWxlY3RlZC4KKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQn
LCB7J2lkJzogJ2lucHV0LUEtMCcsICd0YWJpbmRleCc6IDB9KSwKKyAgICAgICAgICAgICAgICAg
IGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdob3N0LUEnLCAndGFiaW5kZXgnOiAtMX0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtMScsICd0
YWJpbmRleCc6IDF9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9N
KCdkaXYnLCB7J2lkJzogJ25lc3RlZC1ob3N0JywgJ3RhYmluZGV4JzogMzB9LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0
Jywgeyd0YWJpbmRleCc6IC0xfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtMTUnLCAndGFiaW5k
ZXgnOiAxNX0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0LTI1JywgJ3RhYmluZGV4JzogMjV9KSkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0Jywgeydp
ZCc6ICdpbnB1dC0yMCcsICd0YWJpbmRleCc6IDIwfSkpKSwKKyAgICAgICAgICAgICAgICAgIGNy
ZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0LUMtMScsICd0YWJpbmRleCc6IDF9KSwKKyAg
ICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0LUItMCcsICd0
YWJpbmRleCc6IDB9KSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6
ICdob3N0LUInLCAndGFiaW5kZXgnOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
cmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVE
T00oJ2lucHV0JywgeydpZCc6ICdvbGRlci1pbnB1dC1BLTAnLCAndGFiaW5kZXgnOiAwfSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzog
J29sZGVyLWlucHV0LUEtMScsICd0YWJpbmRleCc6IDF9KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3JlYXRlRE9NKCdjb250ZW50JywgeydzZWxlY3QnOiAnI2xpZ2h0LWNoaWxk
LXNlbGVjdGVkLTAsICNsaWdodC1jaGlsZC1zZWxlY3RlZC0xJ30pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdvbGRlci1pbnB1dC1C
LTAnLCAndGFiaW5kZXgnOiAwfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ29sZGVyLWlucHV0LUItMScsICd0YWJpbmRleCc6IDF9
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAneW91
bmdlci1pbnB1dC1BLTAnLCAndGFiaW5kZXgnOiAwfSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ3lvdW5nZXItaW5wdXQtQS0xJywg
J3RhYmluZGV4JzogMX0pLCAgLy8gVGhlIGZpcnN0IG5vZGUgaW4gdGhlIGZvY3VzU2NvcGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdzaGFkb3cnKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAneW91
bmdlci1pbnB1dC1CLTAnLCAndGFiaW5kZXgnOiAwfSksICAvLyBUaGUgbGFzdCBub2RlIGluIHRo
ZSBmb2N1c1Njb3BlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgn
aW5wdXQnLCB7J2lkJzogJ3lvdW5nZXItaW5wdXQtQi0xJywgJ3RhYmluZGV4JzogMX0pKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdsaWdo
dC1jaGlsZC1zZWxlY3RlZC0wJywgJ3RhYmluZGV4JzogMH0pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2xpZ2h0LWNoaWxkLXNlbGVjdGVk
LTEnLCAndGFiaW5kZXgnOiAxfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRl
RE9NKCdpbnB1dCcsIHsnaWQnOiAnbGlnaHQtY2hpbGQtbm9uLXNlbGVjdGVkLTEnLCAndGFiaW5k
ZXgnOiAxfSkpLAorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAn
aW5wdXQtRC0xJywgJ3RhYmluZGV4JzogMX0pLAorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9N
KCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtQy0wJywgJ3RhYmluZGV4JzogMH0pLAorICAgICAgICAg
ICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2hvc3QtQycsICd0YWJpbmRleCc6IC0x
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0Jywgeyd0YWJpbmRleCc6
IC0xfSkpKSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2lu
cHV0LUQtMCcsICd0YWJpbmRleCc6IDB9KSkpOworCisgICAgcGFyZW50Lm9mZnNldExlZnQ7Cit9
CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgaWYg
KCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnJyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBwcmVwYXJlRE9NVHJlZShkb2N1bWVudC5ib2R5KTsKKwor
ICAgIC8vIEZJWE1FOiBPdXRwdXQgaW5zZXJ0ZWQgY29tbWVudHMgaW4gdGhpcyBhcnJheSB0byBl
eHBlY3RlZC50eHQgZm9yIHJlYWRhYmlsaXR5IG9mIHRoZSByZXN1bHQuCisgICAgZWxlbWVudHNO
YXZpZ2F0ZWRJbkZvcndhcmQgPSBbCisgICAgICAgICdpbnB1dC1BLTEnLCAnaW5wdXQtQi0xJywK
KyAgICAgICAgLy8gVHJhdmVyc2UgZWxlbWVudHMgd2hpY2ggaGF2ZSB0YWJpbmRleD0xLgorICAg
ICAgICAvLyBTaG91bGQgc2tpcCBldmVyeSBlbGVtZW50cywgZXZlbiB0aG91Z2ggdGhleSBoYXZl
IHRoZSBzYW1lIHRhYmluZGV4LCBpbiBub24tZm9jdXNhYmxlIHNoYWRvdyBob3N0IChpZD1ob3N0
LUEpIAorICAgICAgICAvLyBzaW5jZSBub24tZm9jdXNhYmxlIHNoYWRvdyBob3N0IGFjdGVkIGFz
IGlmIHRoZXkgd2VyZSBhc3NpbmdlZCB0byB0YWJpbmRleD0wIHNvIGl0IHdhcyBza2lwcGVkIGlu
IHRoaXMgdHVybi4KKyAgICAgICAgJ2lucHV0LUMtMScsCisKKyAgICAgICAgLy8gVHJhdmVyc2Ug
YSBmb2N1c2FibGUgc2hhZG93IGhvc3QuCisgICAgICAgICdob3N0LUInLAorCisgICAgICAgIC8v
IEVudGVyIGEgZm9jdXMgc2NvcGUgb2YgdGhlIHNoYWRvdyBob3N0IGFuZCB0cmF2ZXNlIHRoZSBm
aXJzdCBmb2N1c2FibGUgbm9kZSBpbiBzaGFkb3cgRE9NIG5hdmlnYXRpb24uCisgICAgICAgICdo
b3N0LUIvL3lvdW5nZXItaW5wdXQtQS0xJywKKworICAgICAgICAvLyBBIDxzaGFkb3c+IGVsZW1l
bnQgc2hvdWxkIGJlIHJlc29sdmVkLgorICAgICAgICAnaG9zdC1CL29sZGVyLWlucHV0LUEtMScs
CisKKyAgICAgICAgLy8gQSA8Y29udGVudD4gZWxlbWVudCBzaG91bGQgYmUgcmVzb2x2ZWQuCisg
ICAgICAgICdsaWdodC1jaGlsZC1zZWxlY3RlZC0xJywKKyAgICAgICAgJ2hvc3QtQi9vbGRlci1p
bnB1dC1CLTEnLAorICAgICAgICAnaG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMScsCisKKyAgICAg
ICAgLy8gQWxsIGVsZW1lbnRzIHdpdGggdGFiaW5kZXg9MSBoYWQgYmVlbiB0cmF2ZXJzZWQuIFNv
IGVsZW1lbnRzIHdpdGggdGFiaW5kZXg9MCBzaG9vdWQgZm9sbG93LgorICAgICAgICAnaG9zdC1C
Ly95b3VuZ2VyLWlucHV0LUEtMCcsCisgICAgICAgICdob3N0LUIvb2xkZXItaW5wdXQtQS0wJywK
KyAgICAgICAgJ2xpZ2h0LWNoaWxkLXNlbGVjdGVkLTAnLAorICAgICAgICAnaG9zdC1CL29sZGVy
LWlucHV0LUItMCcsCisgICAgICAgICdob3N0LUIvL3lvdW5nZXItaW5wdXQtQi0wJywKKworICAg
ICAgICAvLyBFeGl0IGEgZm9jdXMgc2NvcGUgb2YgdGhlIHNoYWRvdyBob3N0IChpZD1ob3N0LUIp
IGFuZCB0cmF2ZXJzZSB0aGUgbmV4dC4KKyAgICAgICAgJ2lucHV0LUQtMScsCisKKyAgICAgICAg
Ly8gQWxsIGVsZW1lbnRzIHdpdGggdGFiaW5kZXg9MSBoYWQgYmVlbiB0cmF2ZXJzZWQgaW4gdGhl
IG91dGVybW9zdCBzY29wZS4KKyAgICAgICAgLy8gU28gdHJhdmVyc2UgZWxlbWVudHMgd2l0aCB0
YWJpbmRleD0wIGluIG5leHQuCisgICAgICAgICdpbnB1dC1BLTAnLAorCisgICAgICAgIC8vIEEg
bm9uLWZvY3VzYWJsZSBzaGFkb3cgaG9zdCAoaWQ9aG9zdC1BKSB3aWxsIGJlICJyZXBsYWNlZCIg
d2l0aCBpdHMgc2hhZG93IERPTSBuYXZpZ2F0aW9uLgorICAgICAgICAnaG9zdC1BL2lucHV0LTEn
LAorICAgICAgICAnaG9zdC1BL2lucHV0LTIwJywKKyAgICAgICAgJ2hvc3QtQS9uZXN0ZWQtaG9z
dCcsCisKKyAgICAgICAgLy8gRW50ZXIgYSBuZXN0ZWQgZm9jdXMgc2NvcGUgaW5zaWRlIG9mIGEg
c2hhZG93IGhvc3QgKGlkPW5lc3RlZC1ob3N0KS4KKyAgICAgICAgJ2hvc3QtQS9uZXN0ZWQtaG9z
dC9pbnB1dC0xNScsCisgICAgICAgICdob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQtMjUnLAorCisg
ICAgICAgIC8vIEV4aXQgYSBuZXN0ZWQgc2hhZG93IGhvc3QuCisgICAgICAgICdpbnB1dC1CLTAn
LAorICAgICAgICAnaW5wdXQtQy0wJywKKworICAgICAgICAvLyBBIG5vbi1mb2N1c2FibGUgc2hh
ZG93IGhvc3QgKGlkPWhvc3QtQyksIHdoaWNoIGRvZXMgbm90IGhhdmUgZm9jdXNhYmxlIGVsZW1l
bnRzLCBzaG91bGQgYmUgc2tpcHBlZCBlbnRpcmVseS4KKyAgICAgICAgJ2lucHV0LUQtMCcsCisK
KyAgICAgICAgLy8gV3JhcHMgdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIG91dGVybW9zdCBm
b2N1cyBzY29wZS4KKyAgICAgICAgJ2lucHV0LUEtMScsCisgICAgXTsKKworCisgICAgZWxlbWVu
dHNOYXZpZ2F0ZWRJbkJhY2t3YXJkID0gWworICAgICAgICAnaW5wdXQtQS0xJywKKyAgICAgICAg
J2lucHV0LUQtMCcsCisgICAgICAgICdpbnB1dC1DLTAnLAorICAgICAgICAnaW5wdXQtQi0wJywK
KworICAgICAgICAvLyBUcmlja3kgbmF2aWdhdGlvbi4gVHJhdmFyc2UgdGhlIGRlZXBseSBsYXN0
IGVsZW1lbnQgaW4gbmVzdGVkIHNoYWRvdyBET00gbmF2aWdhdGlvbi4KKyAgICAgICAgJ2hvc3Qt
QS9uZXN0ZWQtaG9zdC9pbnB1dC0yNScsCisgICAgICAgICdob3N0LUEvbmVzdGVkLWhvc3QvaW5w
dXQtMTUnLAorICAgICAgICAnaG9zdC1BL25lc3RlZC1ob3N0JywKKyAgICAgICAgJ2hvc3QtQS9p
bnB1dC0yMCcsCisgICAgICAgICdob3N0LUEvaW5wdXQtMScsCisKKyAgICAgICAgLy8gRXhpdCBh
IHNoYWRvIGhvc3QuCisgICAgICAgICdpbnB1dC1BLTAnLAorCisgICAgICAgIC8vIEFsbCBlbGVt
ZW50cyB3aXRoIHRhYmluZGV4PTAgaGFkIGJlZW4gdHJhdmVyc2VkLiBTbyB0cmF2ZXJzZSBlbGVt
ZW50cyB3aXRoIHRhYmluZGV4PTEgaW4gcmV2ZXJzZSBvcmRlci4KKyAgICAgICAgJ2lucHV0LUQt
MScsCisKKyAgICAgICAgLy8gWWV0IGFub3RoZXIgdHJpY2t5IG5hdmlnYXRpb24uIFNob3VsZCB0
cmF2ZXJzZSB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBzaGFkb3cgRE9NIG5hdmlnYXRpb24uCisg
ICAgICAgICdob3N0LUIvL3lvdW5nZXItaW5wdXQtQi0wJywKKyAgICAgICAgJ2hvc3QtQi9vbGRl
ci1pbnB1dC1CLTAnLAorICAgICAgICAnbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMCcsCisgICAgICAg
ICdob3N0LUIvb2xkZXItaW5wdXQtQS0wJywKKyAgICAgICAgJ2hvc3QtQi8veW91bmdlci1pbnB1
dC1BLTAnLAorCisgICAgICAgICdob3N0LUIvL3lvdW5nZXItaW5wdXQtQi0xJywKKyAgICAgICAg
J2hvc3QtQi9vbGRlci1pbnB1dC1CLTEnLAorICAgICAgICAnbGlnaHQtY2hpbGQtc2VsZWN0ZWQt
MScsCisgICAgICAgICdob3N0LUIvb2xkZXItaW5wdXQtQS0xJywKKyAgICAgICAgJ2hvc3QtQi8v
eW91bmdlci1pbnB1dC1BLTEnLAorCisgICAgICAgIC8vIEEgc2hhZG93IGhvc3Qgc2hvdWxkIGJl
IHNlbGVjdGVkIGp1c3QgYWZ0ZXIgdGhlIGZpcnN0IGVsZW1lbnQgaW4gaXRzIHNoYWRvdyBET00g
bmF2aWdhdGlvbi4KKyAgICAgICAgLy8gTm90ZSB0aGF0IGEgJ2ZvY3VzJyBldmVudCBpcyBub3Qg
Y2FsbGVkIGhlcmUgc2luY2UgYSBmb2N1cyBtb3ZlcyB3aXRoaW4gdGhlIHNhbWUgc2hhZG93IGhv
c3QuCisgICAgICAgICdob3N0LUInLAorICAgICAgICAnaW5wdXQtQy0xJywKKyAgICAgICAgJ2lu
cHV0LUItMScsCisgICAgICAgICdpbnB1dC1BLTEnLAorCisgICAgICAgIC8vIFdyYXBzIHRvIHRo
ZSBsYXN0IGVsZW1lbnQgaW4gdGhlIG91dGVybW9zdCBmb2N1cyBzY29wZS4KKyAgICAgICAgJ2lu
cHV0LUQtMCcsCisgICAgXTsKKworICAgIHRlc3RGb2N1c05hdmlnYXRpb25Gb3dyYWQoZWxlbWVu
dHNOYXZpZ2F0ZWRJbkZvcndhcmQpOworICAgIHRlc3RGb2N1c05hdmlnYXRpb25CYWNrd2FyZChl
bGVtZW50c05hdmlnYXRlZEluQmFja3dhcmQpOworCisgICAgZGVidWcoJ1Rlc3QgZmluaXNoZWQu
Jyk7Cit9CisKK3Rlc3QoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcmVzb3VyY2VzL3NoYWRvdy1kb20uanMg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcmVzb3VyY2VzL3NoYWRvdy1kb20uanMKaW5k
ZXggMTU1NzYwMjEyOTllMTNmMzkwZDQzMTM0MzEwZTU1YjNhYTEzNDAzZS4uYzNiZThhNzFhNmVk
YWIxZWU3ZDE5ZGM3NGQ2ZDhmYjgwN2E2OGU0OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2hhZG93L3Jlc291cmNlcy9zaGFkb3ctZG9tLmpzCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NoYWRvdy9yZXNvdXJjZXMvc2hhZG93LWRvbS5qcwpAQCAtMzQsMTIgKzM0LDIyIEBA
IGZ1bmN0aW9uIGNyZWF0ZURPTSh0YWdOYW1lLCBhdHRyaWJ1dGVzKQogICAgIHJldHVybiBlbGVt
ZW50OwogfQogCitmdW5jdGlvbiBpc1NoYWRvd0hvc3Qobm9kZSkKK3sKKyAgICByZXR1cm4gd2lu
ZG93LmludGVybmFscy5vbGRlc3RTaGFkb3dSb290KG5vZGUpOworfQorCiBmdW5jdGlvbiBpc1No
YWRvd1Jvb3Qobm9kZSkKIHsKICAgICAvLyBGSVhNRTogd2luZG93LmludGVybmFscyBzaG91bGQg
aGF2ZSBpbnRlcm5hbHMuaXNTaGFkb3dSb290KG5vZGUpLgogICAgIHJldHVybiBub2RlLm5vZGVO
YW1lID09ICIjc2hhZG93LXJvb3QiIHx8IG5vZGUuaG9zdDsKIH0KIAorZnVuY3Rpb24gaXNJZnJh
bWVFbGVtZW50KGVsZW1lbnQpCit7CisgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5ub2Rl
TmFtZSA9PSAnSUZSQU1FJzsKK30KKwogLy8gWW91IGNhbiBzcGVmaWZ5IHlvdW5nZXJTaGFkb3dS
b290IGJ5IGNvbnNlY3V0aXZlIHNsYXNoZXMuCiAvLyBTZWUgTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L2dldC1lbGVtZW50LWJ5LWlkLWluLXNoYWRvdy1yb290Lmh0bWwgZm9yIGFjdHVhbCB1
c2FnZXMuCiBmdW5jdGlvbiBnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2socGF0aCkKQEAgLTQ3LDEz
ICs1NywxMDEgQEAgZnVuY3Rpb24gZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKHBhdGgpCiAgICAg
dmFyIGlkcyA9IHBhdGguc3BsaXQoJy8nKTsKICAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKGlkc1swXSk7CiAgICAgZm9yICh2YXIgaSA9IDE7IG5vZGUgIT0gbnVsbCAmJiBp
IDwgaWRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChpc0lmcmFtZUVsZW1lbnQobm9kZSkp
IHsKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLmNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZChpZHNbaV0pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICAgICAgICAgaWYg
KGlzU2hhZG93Um9vdChub2RlKSkKICAgICAgICAgICAgIG5vZGUgPSBpbnRlcm5hbHMueW91bmdl
clNoYWRvd1Jvb3Qobm9kZSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSBpZiAoaW50ZXJu
YWxzLm9sZGVzdFNoYWRvd1Jvb3Qobm9kZSkpCiAgICAgICAgICAgICBub2RlID0gaW50ZXJuYWxz
Lm9sZGVzdFNoYWRvd1Jvb3Qobm9kZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBudWxsOwogICAgICAgICBpZiAoaWRzW2ldICE9ICcnKQogICAgICAgICAgICAgbm9kZSA9IGlu
dGVybmFscy5nZXRFbGVtZW50QnlJZEluU2hhZG93Um9vdChub2RlLCBpZHNbaV0pOwogICAgIH0K
ICAgICByZXR1cm4gbm9kZTsKIH0KIAorZnVuY3Rpb24gZHVtcE5vZGUobm9kZSkKK3sKKyAgICBp
ZiAoIW5vZGUpCisgICAgICByZXR1cm4gJ251bGwnOworICAgIHZhciBvdXRwdXQgPSAnJyArIG5v
ZGU7CisgICAgaWYgKG5vZGUuaWQpCisgICAgICAgIG91dHB1dCArPSAnIGlkPScgKyBub2RlLmlk
OworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2Z1bmN0aW9uIGlubmVybW9zdEFjdGl2ZUVsZW1l
bnQoZWxlbWVudCkKK3sKKyAgICBlbGVtZW50ID0gZWxlbWVudCB8fCBkb2N1bWVudC5hY3RpdmVF
bGVtZW50OworICAgIGlmIChpc0lmcmFtZUVsZW1lbnQoZWxlbWVudCkpIHsKKyAgICAgICAgaWYg
KGVsZW1lbnQuY29udGVudERvY3VtZW50LmFjdGl2ZUVsZW1lbnQpCisgICAgICAgICAgICByZXR1
cm4gaW5uZXJtb3N0QWN0aXZlRWxlbWVudChlbGVtZW50LmNvbnRlbnREb2N1bWVudC5hY3RpdmVF
bGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorICAgIGlmIChpc1NoYWRv
d0hvc3QoZWxlbWVudCkpIHsKKyAgICAgICAgdmFyIHNoYWRvd1Jvb3QgPSB3aW5kb3cuaW50ZXJu
YWxzLm9sZGVzdFNoYWRvd1Jvb3QoZWxlbWVudCk7CisgICAgICAgIHdoaWxlIChzaGFkb3dSb290
KSB7CisgICAgICAgICAgICBpZiAoc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50KQorICAgICAgICAg
ICAgICAgIHJldHVybiBpbm5lcm1vc3RBY3RpdmVFbGVtZW50KHNoYWRvd1Jvb3QuYWN0aXZlRWxl
bWVudCk7CisgICAgICAgICAgICBzaGFkb3dSb290ID0gd2luZG93LmludGVybmFscy55b3VuZ2Vy
U2hhZG93Um9vdChzaGFkb3dSb290KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZWxl
bWVudDsKK30KKworZnVuY3Rpb24gaXNJbm5lcm1vc3RBY3RpdmVFbGVtZW50KGlkKQoreworICAg
IHZhciBlbGVtZW50ID0gZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKGlkKTsKKyAgICBpZiAoIWVs
ZW1lbnQpIHsKKyAgICAgICAgZGVidWcoJ0ZBSUw6IFRoZXJlIGlzIG5vIHN1Y2ggZWxlbWVudCB3
aXRoIGlkOiAnKyBmcm9tKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAo
ZWxlbWVudCA9PSBpbm5lcm1vc3RBY3RpdmVFbGVtZW50KCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGRlYnVnKCdFeHBlY3RlZCBpbm5lcm1vc3QgYWN0aXZlRWxlbWVudCBpcyAnICsgaWQg
KyAnLCBidXQgYWN0dWFsIGlubmVybW9zdCBhY3RpdmVFbGVtZW50IGlzICcgKyBkdW1wTm9kZShp
bm5lcm1vc3RBY3RpdmVFbGVtZW50KCkpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0
aW9uIHNob3VsZE5hdmlnYXRlRm9jdXMoZnJvbSwgdG8sIGRpcmVjdGlvbikKK3sKKyAgICBkZWJ1
ZygnU2hvdWxkIG1vdmUgZnJvbSAnICsgZnJvbSArICcgdG8gJyArIHRvICsgJyBpbiAnICsgZGly
ZWN0aW9uKTsKKyAgICB2YXIgZnJvbUVsZW1lbnQgPSBnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2so
ZnJvbSk7CisgICAgaWYgKCFmcm9tRWxlbWVudCkgeworICAgICAgZGVidWcoJ0ZBSUw6IFRoZXJl
IGlzIG5vIHN1Y2ggZWxlbWVudCB3aXRoIGlkOiAnKyBmcm9tKTsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgZnJvbUVsZW1lbnQuZm9jdXMoKTsKKyAgICBpZiAoZGlyZWN0aW9uID09ICdmb3J3
YXJkJykKKyAgICAgICAgbmF2aWdhdGVGb2N1c0ZvcndhcmQoKTsKKyAgICBlbHNlCisgICAgICAg
IG5hdmlnYXRlRm9jdXNCYWNrd2FyZCgpOworICAgIGlmIChpc0lubmVybW9zdEFjdGl2ZUVsZW1l
bnQodG8pKQorICAgICAgICBkZWJ1ZygnUEFTUycpOworICAgIGVsc2UKKyAgICAgICAgZGVidWco
J0ZBSUwnKTsKK30KKworZnVuY3Rpb24gbmF2aWdhdGVGb2N1c0ZvcndhcmQoKQoreworICAgIGV2
ZW50U2VuZGVyLmtleURvd24oJ1x0Jyk7Cit9CisKK2Z1bmN0aW9uIG5hdmlnYXRlRm9jdXNCYWNr
d2FyZCgpCit7CisgICAgZXZlbnRTZW5kZXIua2V5RG93bignXHQnLCBbJ3NoaWZ0S2V5J10pOwor
fQorCitmdW5jdGlvbiB0ZXN0Rm9jdXNOYXZpZ2F0aW9uRm93cmFkKGVsZW1lbnRzKQoreworICAg
IGZvciAodmFyIGkgPSAwOyBpICsgMSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAgICBz
aG91bGROYXZpZ2F0ZUZvY3VzKGVsZW1lbnRzW2ldLCBlbGVtZW50c1tpICsgMV0sICdmb3J3YXJk
Jyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RGb2N1c05hdmlnYXRpb25CYWNrd2FyZChlbGVtZW50cykK
K3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSArIDEgPCBlbGVtZW50cy5sZW5ndGg7ICsraSkKKyAg
ICAgICAgc2hvdWxkTmF2aWdhdGVGb2N1cyhlbGVtZW50c1tpXSwgZWxlbWVudHNbaSArIDFdLCAn
YmFja3dhcmQnKTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9z
aGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMtZXhwZWN0ZWQudHh0CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjgxYjA5YTViMmNhMTk2NjU2MTgyMjEyYmY3ODJh
N2I3ZWViODU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy1l
eHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1XaGVuIGEgc2hhZG93
IGhvc3QgaXMgZm9jdXNlZCwgdGhlIHNoYWRvdyBob3N0IHNob3VsZCB0cmFuc2ZlciBmb2N1cyB0
byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhlIHNoYWRvdyByb290IGlmIHRoZXJl
IGlzIGFuIHN1Y2ggYW4gZWxlbWVudC4KLQotRm9jdXNpbmc6IHNoYWRvdzAKLVBBU1MgZWxlbWVu
dFdhc0ZvY3VzZWQoaW5wdXQwKSBpcyBmYWxzZQotUEFTUyBlbGVtZW50V2FzRm9jdXNlZChpbnB1
dDEpIGlzIHRydWUKLVBBU1MgZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQyKSBpcyBmYWxzZQotUEFT
UyBpbnB1dDAudmFsdWUgaXMgIiIKLVBBU1MgaW5wdXQxLnZhbHVlIGlzICIiCi1QQVNTIGlucHV0
Mi52YWx1ZSBpcyAiIgotUHJlc3Npbmc6ICJhIgotUEFTUyBpbnB1dDAudmFsdWUgaXMgIiIKLVBB
U1MgaW5wdXQxLnZhbHVlIGlzICJhIgotUEFTUyBpbnB1dDIudmFsdWUgaXMgIiIKLVBBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1
cy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmI2ZGE3NGM3OTE0NmFmZGZi
NTEyNmJiOTE2MGM3ZGYxMWNlOTdmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFu
c2Zlci1mb2N1cy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPCFET0NUWVBF
IGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPgotV2hlbiBhIHNo
YWRvdyBob3N0IGlzIGZvY3VzZWQsIHRoZSBzaGFkb3cgaG9zdCBzaG91bGQgdHJhbnNmZXIgZm9j
dXMgdG8gdGhlIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50IGluIHRoZSBzaGFkb3cgcm9vdCBpZiB0
aGVyZSBpcyBhbiBzdWNoIGFuIGVsZW1lbnQuCi08L3A+Ci08ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KLTxzY3JpcHQ+Ci1pZiAod2luZG93LmludGVybmFscykgewotICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7Ci0KLSAgZnVuY3Rpb24gc2hhZG93Um9vdChzaGFkb3dIb3N0KSB7
Ci0gICAgcmV0dXJuIGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHNoYWRvd0hvc3QpOwotICB9
Ci0KLSAgZnVuY3Rpb24gYXBwZW5kQ2hpbGRUb1NoYWRvdyhzaGFkb3dIb3N0LCBjaGlsZCkgewot
ICAgIHJldHVybiBzaGFkb3dSb290KHNoYWRvd0hvc3QpLmFwcGVuZENoaWxkKGNoaWxkKQotICB9
Ci0KLSAgZnVuY3Rpb24gYXBwZW5kU2hhZG93SG9zdChkb2MsIHBhcmVudCkgewotICAgIHZhciBz
aGFkb3dIb3N0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3AnKTsKLSAgICBzaGFkb3dIb3N0LnRhYklu
ZGV4ID0gMTsgIC8vIE1ha2VzIHN1cmUgdGhhdCB0aGUgc2hhZG93IGhvc3QgaXMgZm9jdXNhYmxl
LgotICAgIHBhcmVudCA9IHBhcmVudCB8fCBkb2MuYm9keTsKLSAgICByZXR1cm4gcGFyZW50LmFw
cGVuZENoaWxkKHNoYWRvd0hvc3QpOwotICB9Ci0KLSAgdmFyIGZvY3VzZWRFbGVtZW1lbnRzID0g
W107Ci0KLSAgZnVuY3Rpb24gZm9jdXNlZChlbGVtKSB7Ci0gICAgZm9jdXNlZEVsZW1lbnRzLnB1
c2goZWxlbSkKLSAgfQotCi0gIGZ1bmN0aW9uIGRvRm9jdXMoZWxlbSkgewotICAgIGZvY3VzZWRF
bGVtZW50cyA9IFtdCi0gICAgZWxlbS5mb2N1cygpCi0gIH0KLQotICBmdW5jdGlvbiBlbGVtZW50
V2FzRm9jdXNlZChlbGVtKSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2N1c2VkRWxlbWVu
dHMubGVuZ3RoOyArK2kpIHsKLSAgICAgIGlmIChmb2N1c2VkRWxlbWVudHNbaV0gPT0gZWxlbSkg
ewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotICB9Ci0KLSAgLy8gRm9yIHJlYWRhYmlsaXR5LCBJIG5vdGVkIHRoZSBET00gdHJlZSB1bmRl
ciB0aGUgdGVzdCBoZXJlLgotICAvLwotICAvLyAtIGRvY3VtZW50Ci0gIC8vICAgLSBzaGFkb3cw
ICh0YWJpbmRleD0xKQotICAvLyAgICAgLSBpbnB1dDAgKHRhYmluZGV4PS0xKQotICAvLyAgICAg
LSBpbnB1dDEKLSAgLy8gICAgIC0gaW5wdXQyCi0gIHZhciBzaGFkb3cwID0gYXBwZW5kU2hhZG93
SG9zdChkb2N1bWVudCk7Ci0gIHZhciBpbnB1dDAgPSBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRv
dzAsIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOwotICBpbnB1dDAudGFiSW5kZXgg
PSAtMQotICB2YXIgaW5wdXQxID0gYXBwZW5kQ2hpbGRUb1NoYWRvdyhzaGFkb3cwLCBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKLSAgdmFyIGlucHV0MiA9IGFwcGVuZENoaWxkVG9T
aGFkb3coc2hhZG93MCwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSk7Ci0KLSAgdmFy
IGVsZW1lbnRJZHMgPSBbJ3NoYWRvdzAnLCAnaW5wdXQwJywgJ2lucHV0MScsICdpbnB1dDInXQot
ICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRJZHMubGVuZ3RoOyBpKyspIHsKLSAgICB2YXIg
aWQgPSBlbGVtZW50SWRzW2ldOwotICAgIHZhciBlbGVtZW50ID0gd2luZG93W2lkXTsKLSAgICBl
bGVtZW50LmlkID0gaWQ7Ci0gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGZ1
bmN0aW9uKCkge2ZvY3VzZWQodGhpcyk7fSwgZmFsc2UpOwotICB9Ci0KLSAgZGVidWcoJ0ZvY3Vz
aW5nOiBzaGFkb3cwJyk7Ci0gIGRvRm9jdXMoc2hhZG93MCk7Ci0gIC8vIENvbW1lbnRlZCBvdXQg
ZHVlIHRvIGJ1ZyA2MTQyMS4KLSAgLy8gc2hvdWxkQmVUcnVlKCdlbGVtZW50V2FzRm9jdXNlZChz
aGFkb3cwKScpOwotICBzaG91bGRCZUZhbHNlKCdlbGVtZW50V2FzRm9jdXNlZChpbnB1dDApJyk7
Ci0gIHNob3VsZEJlVHJ1ZSgnZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQxKScpOwotICBzaG91bGRC
ZUZhbHNlKCdlbGVtZW50V2FzRm9jdXNlZChpbnB1dDIpJyk7Ci0gIGlmICh3aW5kb3cuZXZlbnRT
ZW5kZXIpIHsKLSAgICAvLyBNYWtlcyBzdXJlIHRoYXQgd2UgY2FuIGNoYW5nZSAnaW5wdXQxJyBl
bGVtZW50J3MgdmFsdWUgYnkgcHJlc3NpbmcgYSBrZXkuCi0gICAgc2hvdWxkQmUoJ2lucHV0MC52
YWx1ZScsICciIicpOwotICAgIHNob3VsZEJlKCdpbnB1dDEudmFsdWUnLCAnIiInKTsKLSAgICBz
aG91bGRCZSgnaW5wdXQyLnZhbHVlJywgJyIiJyk7Ci0gICAgZGVidWcoJ1ByZXNzaW5nOiAiYSIn
KQotICAgIGV2ZW50U2VuZGVyLmtleURvd24oJ2EnKTsKLSAgICBzaG91bGRCZSgnaW5wdXQwLnZh
bHVlJywgJyIiJyk7Ci0gICAgc2hvdWxkQmUoJ2lucHV0MS52YWx1ZScsICciYSInKTsKLSAgICBz
aG91bGRCZSgnaW5wdXQyLnZhbHVlJywgJyIiJyk7Ci0gIH0KLX0KLTwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9i
b2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3Rh
Yi1vcmRlci1pZnJhbWUtYW5kLXNoYWRvdy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93LWV4cGVjdGVkLnR4dAppbmRl
eCA5M2E1ZThjODc1NjY5YmRiZTM1YjI4YmJhYzQyODEwZGYzODA0MmRkLi5mODZhM2EwNmY3ZDQ5
YzUxNmQwODJiYWNjYzEyNWU1ZmZiNDU4Mzg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93LWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93
LWV4cGVjdGVkLnR4dApAQCAtMSwzNCArMSw1NyBAQAotVGhpcyB0ZXN0cyB0aGF0IHByZXNzaW5n
IFRhYiBrZXkgc2hvdWxkIHRyYXZlcnNlIGludG8gaWZyYW1lIGFuZCBzaGFkb3cgdHJlZSwgYW5k
IHByZXNzaW5nIFNoaWZ0LVRhYiBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIuIE1ha2VzIHN1cmUg
dGhhdCBhIHNoYWRvdyBob3N0IGVsZW1lbnQgc2hvdWxkIGFjdCBsaWtlIGEgaWZyYW1lIGVsZW1l
bnQuCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTA0OiBVbmNhdWdodCBSZWZlcmVuY2VFcnJvcjog
bG9nIGlzIG5vdCBkZWZpbmVkCitUaGlzIHRlc3RzIHRoYXQgcHJlc3NpbmcgVGFiIGtleSBzaG91
bGQgdHJhdmVyc2UgaW50byBpZnJhbWUgYW5kIHNoYWRvdyB0cmVlLCBhbmQgcHJlc3NpbmcgU2hp
ZnQtVGFiIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlci4KIAotRm9jdXMgaW5wdXQtMDEuCi1pZDpp
bnB1dC0wMSh0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgotCi1QcmVzcyBUYWIgMTEgdGltZXMuCi1p
ZDppbnB1dC0xMyh0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgotaWQ6aW5wdXQtMTUodGFiSW5kZXg9
MikgaXMgZm9jdXNlZC4KLWlkOmlucHV0LTAyKHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCi1pZDpp
bnB1dC0wNCh0YWJJbmRleD0wKSBpcyBmb2N1c2VkLgotaWQ6aWZyYW1lLWlucHV0LTA2KHRhYklu
ZGV4PTEpIGlzIGZvY3VzZWQuCi1pZDppZnJhbWUtc2hhZG93LWlucHV0LTA5KHRhYkluZGV4PTEp
IGlzIGZvY3VzZWQuCi1pZDppZnJhbWUtc2hhZG93LWlucHV0LTA4KHRhYkluZGV4PTApIGlzIGZv
Y3VzZWQuCi1pZDppZnJhbWUtaW5wdXQtMTIodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KLWlkOmlm
cmFtZS1pbnB1dC0xMSh0YWJJbmRleD0yKSBpcyBmb2N1c2VkLgotaWQ6aWZyYW1lLWlucHV0LTA1
KHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCi1pZDppbnB1dC0xNCh0YWJJbmRleD0wKSBpcyBmb2N1
c2VkLgotCi1QcmVzcyBTaGlmdC1UYWIgMTEgdGltZXMuCi1pZDppZnJhbWUtaW5wdXQtMDUodGFi
SW5kZXg9MCkgaXMgZm9jdXNlZC4KLWlkOmlmcmFtZS1pbnB1dC0xMSh0YWJJbmRleD0yKSBpcyBm
b2N1c2VkLgotaWQ6aWZyYW1lLWlucHV0LTEyKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi1pZDpp
ZnJhbWUtc2hhZG93LWlucHV0LTA4KHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCi1pZDppZnJhbWUt
c2hhZG93LWlucHV0LTA5KHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi1pZDppZnJhbWUtaW5wdXQt
MDYodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KLWlkOmlucHV0LTA0KHRhYkluZGV4PTApIGlzIGZv
Y3VzZWQuCi1pZDppbnB1dC0wMih0YWJJbmRleD0wKSBpcyBmb2N1c2VkLgotaWQ6aW5wdXQtMTUo
dGFiSW5kZXg9MikgaXMgZm9jdXNlZC4KLWlkOmlucHV0LTEzKHRhYkluZGV4PTEpIGlzIGZvY3Vz
ZWQuCi1pZDppbnB1dC0wMSh0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgotCi1UZXN0IGZpbmlzaGVk
LgorU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC0wMSB0byBpbnB1dC0xMyBpbiBmb3J3YXJkCitQQVNT
CitTaG91bGQgbW92ZSBmcm9tIGlucHV0LTEzIHRvIGlucHV0LTE1IGluIGZvcndhcmQKK1BBU1MK
K1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtMTUgdG8gaW5wdXQtMDIgaW4gZm9yd2FyZAorUEFTUwor
U2hvdWxkIG1vdmUgZnJvbSBpbnB1dC0wMiB0byBob3N0LTAxL2lucHV0LTAzIGluIGZvcndhcmQK
K1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC0wMS9pbnB1dC0wMyB0byBpbnB1dC0wNCBpbiBm
b3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LTA0IHRvIGlmcmFtZS9pbnB1dC0w
NiBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9pbnB1dC0wNiB0byBp
ZnJhbWUvaG9zdC0wMiBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9o
b3N0LTAyIHRvIGlmcmFtZS9ob3N0LTAyL2lucHV0LTA5IGluIGZvcndhcmQKK1BBU1MKK1Nob3Vs
ZCBtb3ZlIGZyb20gaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDkgdG8gaWZyYW1lL2hvc3QtMDIvaW5w
dXQtMDggaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaG9zdC0wMi9p
bnB1dC0wOCB0byBpZnJhbWUvaW5wdXQtMTIgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBpZnJhbWUvaW5wdXQtMTIgdG8gaWZyYW1lL2lucHV0LTExIGluIGZvcndhcmQKK1BBU1MK
K1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2lucHV0LTExIHRvIGlmcmFtZS9pbnB1dC0wNSBpbiBm
b3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9pbnB1dC0wNSB0byBpbnB1dC0x
NCBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LTE0IHRvIGlmcmFtZS9p
bnB1dC0wNSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaW5wdXQt
MDUgdG8gaWZyYW1lL2lucHV0LTExIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9t
IGlmcmFtZS9pbnB1dC0xMSB0byBpZnJhbWUvaW5wdXQtMTIgaW4gYmFja3dhcmQKK1BBU1MKK1No
b3VsZCBtb3ZlIGZyb20gaWZyYW1lL2lucHV0LTEyIHRvIGlmcmFtZS9ob3N0LTAyL2lucHV0LTA4
IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9ob3N0LTAyL2lucHV0
LTA4IHRvIGlmcmFtZS9ob3N0LTAyL2lucHV0LTA5IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQg
bW92ZSBmcm9tIGlmcmFtZS9ob3N0LTAyL2lucHV0LTA5IHRvIGlmcmFtZS9ob3N0LTAyIGluIGJh
Y2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9ob3N0LTAyIHRvIGlmcmFtZS9p
bnB1dC0wNiBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaW5wdXQt
MDYgdG8gaW5wdXQtMDQgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQt
MDQgdG8gaG9zdC0wMS9pbnB1dC0wMyBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJv
bSBob3N0LTAxL2lucHV0LTAzIHRvIGlucHV0LTAyIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQg
bW92ZSBmcm9tIGlucHV0LTAyIHRvIGlucHV0LTE1IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQg
bW92ZSBmcm9tIGlucHV0LTE1IHRvIGlucHV0LTEzIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQg
bW92ZSBmcm9tIGlucHV0LTEzIHRvIGlucHV0LTAxIGluIGJhY2t3YXJkCitQQVNTCiAKIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUtYW5k
LXNoYWRvdy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJh
bWUtYW5kLXNoYWRvdy5odG1sCmluZGV4IDEwZTkxNjJlNGM0OGMyOTA4YjU1NzViYTkwZTY0ZmU5
MjAxMjUxY2QuLjU4YmJhOGEwODU2MGZkOWI0NThmYTZlNTEyNzI2YzFmNTE1YjcxZGUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1z
aGFkb3cuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlm
cmFtZS1hbmQtc2hhZG93Lmh0bWwKQEAgLTEsMzcgKzEsMTggQEAKIDwhRE9DVFlQRSBodG1sPgog
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFkb3ctZG9tLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KIDxib2R5PgotPHA+VGhpcyB0ZXN0cyB0aGF0IHByZXNzaW5nIFRh
YiBrZXkgc2hvdWxkIHRyYXZlcnNlIGludG8gaWZyYW1lIGFuZCBzaGFkb3cgdHJlZSwgYW5kIHBy
ZXNzaW5nIFNoaWZ0LVRhYiBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIuCi0gTWFrZXMgc3VyZSB0
aGF0IGEgc2hhZG93IGhvc3QgZWxlbWVudCBzaG91bGQgYWN0IGxpa2UgYSBpZnJhbWUgZWxlbWVu
dC48L3A+Cis8cD5UaGlzIHRlc3RzIHRoYXQgcHJlc3NpbmcgVGFiIGtleSBzaG91bGQgdHJhdmVy
c2UgaW50byBpZnJhbWUgYW5kIHNoYWRvdyB0cmVlLCBhbmQgcHJlc3NpbmcgU2hpZnQtVGFiIHNo
b3VsZCByZXZlcnNlIHRoZSBvcmRlci48L3A+CiA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KIDxz
Y3JpcHQ+Ci1mdW5jdGlvbiBsb2cobXNnKSB7Ci0gICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcign
I2NvbnNvbGUnKS50ZXh0Q29udGVudCArPSAobXNnICsgJ1xuJyk7Ci19Ci0KLWZ1bmN0aW9uIGRl
c2NyaXB0aW9uKGVsZW1lbnQpIHsKLSAgIHZhciBtc2cgPSAnJzsKLSAgICBpZiAoZWxlbWVudC5p
ZCkgewotICAgICAgbXNnICs9ICdpZDonICsgZWxlbWVudC5pZDsKLSAgICB9Ci0gICAgbXNnICs9
ICcodGFiSW5kZXg9JyArIGVsZW1lbnQudGFiSW5kZXggKyAnKSc7Ci0gICAgcmV0dXJuIG1zZzsK
LX0KLQotZnVuY3Rpb24gb25Gb2N1cyhldmVudCkgewotICAgIGxvZyhkZXNjcmlwdGlvbihldmVu
dC50YXJnZXQpICsgJyBpcyBmb2N1c2VkLicpOwotfQotCi1mdW5jdGlvbiBhZGRGb2N1c0V2ZW50
TGlzdGVuZXIoZWxlbWVudCkgewotICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMn
LCBvbkZvY3VzLCBmYWxzZSk7Ci19Ci0KIGZ1bmN0aW9uIGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQo
ZG9jLCBpZCwgdGFiSW5kZXgpIHsKICAgICB2YXIgaW5wdXQgPSBkb2MuY3JlYXRlRWxlbWVudCgn
aW5wdXQnKTsKICAgICBpbnB1dC50eXBlID0gJ3RleHQnOwogICAgIGlucHV0LmlkID0gaWQ7CiAg
ICAgaW5wdXQudGFiSW5kZXggPSB0YWJJbmRleDsKLSAgICBhZGRGb2N1c0V2ZW50TGlzdGVuZXIo
aW5wdXQpOwogICAgIHJldHVybiBpbnB1dDsKIH0KIApAQCAtNDQsMTAgKzI1LDExIEBAIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKIAogICAgIGZ1bmN0aW9uIGFkZFNoYWRvd0hv
c3QoZG9jKSB7CiAgICAgICAgIHZhciBzaGFkb3dIb3N0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3An
KTsKLSAgICAgICAgc2hhZG93SG9zdC50YWJJbmRleCA9IC0xOyAgLy8gVGhpcyBzaGFkb3cgaG9z
dCAoYW5kIGEgc2hhZG93IHRyZWUgaW4gdGhhdCkgc2hvdWxkIGJlIHNraXBwZWQuCisgICAgICAg
IHNoYWRvd0hvc3QuaWQgPSAnaG9zdC0wMSc7CisgICAgICAgIHNoYWRvd0hvc3QudGFiSW5kZXgg
PSAtMTsKICAgICAgICAgdmFyIHNoYWRvdyA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHNo
YWRvd0hvc3QpOwogICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChzaGFkb3dIb3N0KTsKLSAg
ICAgICAgc2hhZG93LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnc2hh
ZG93LWlucHV0LTAzJywgMCkpOworICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4
dElucHV0RWxlbWVudChkb2MsICdpbnB1dC0wMycsIDApKTsKICAgICB9CiAgICAgYWRkU2hhZG93
SG9zdChkb2MpOwogCkBAIC01NSwyNyArMzcsMjkgQEAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgewogCiAgICAgZnVuY3Rpb24gYWRkSWZyYW1lKGRvYykgewogICAgICAgICB2YXIg
aWZyYW1lID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworICAgICAgICBpZnJhbWUuaWQg
PSAnaWZyYW1lJzsKICAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKICAgICAg
ICAgZG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudDsKIAotICAgICAgICBkb2MuYm9keS5hcHBl
bmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lmcmFtZS1pbnB1dC0wNScsIDAp
KTsKLSAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChk
b2MsICdpZnJhbWUtaW5wdXQtMDYnLCAxKSk7Ci0gICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxk
KGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaWZyYW1lLWlucHV0LTA3JywgLTEpKTsKKyAg
ICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdp
bnB1dC0wNScsIDApKTsKKyAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElu
cHV0RWxlbWVudChkb2MsICdpbnB1dC0wNicsIDEpKTsKKyAgICAgICAgZG9jLmJvZHkuYXBwZW5k
Q2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpbnB1dC0wNycsIC0xKSk7CiAKICAg
ICAgICAgZnVuY3Rpb24gYWRkU2hhZG93SG9zdChkb2MpIHsKICAgICAgICAgICAgIHZhciBzaGFk
b3dIb3N0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3AnKTsKKyAgICAgICAgICAgIHNoYWRvd0hvc3Qu
aWQgPSAnaG9zdC0wMic7CiAgICAgICAgICAgICBzaGFkb3dIb3N0LnRhYkluZGV4ID0gMTsKICAg
ICAgICAgICAgIHZhciBzaGFkb3cgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChzaGFkb3dI
b3N0KTsKICAgICAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHNoYWRvd0hvc3QpOwogCi0g
ICAgICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2Ms
ICdpZnJhbWUtc2hhZG93LWlucHV0LTA4JywgMCkpOwotICAgICAgICAgICAgc2hhZG93LmFwcGVu
ZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaWZyYW1lLXNoYWRvdy1pbnB1dC0w
OScsIDEpKTsKLSAgICAgICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRF
bGVtZW50KGRvYywgJ2lmcmFtZS1zaGFkb3ctaW5wdXQtMTAnLCAtMSkpOworICAgICAgICAgICAg
c2hhZG93LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMDgn
LCAwKSk7CisgICAgICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxl
bWVudChkb2MsICdpbnB1dC0wOScsIDEpKTsKKyAgICAgICAgICAgIHNoYWRvdy5hcHBlbmRDaGls
ZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTEwJywgLTEpKTsKICAgICAgICAg
fQogICAgICAgICBhZGRTaGFkb3dIb3N0KGRvYyk7CiAKLSAgICAgICAgZG9jLmJvZHkuYXBwZW5k
Q2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtaW5wdXQtMTEnLCAyKSk7
Ci0gICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9j
LCAnaWZyYW1lLWlucHV0LTEyJywgMSkpOworICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChj
cmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTExJywgMikpOworICAgICAgICBkb2Mu
Ym9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTEyJywg
MSkpOwogICAgIH0KICAgICBhZGRJZnJhbWUoZG9jKTsKIApAQCAtODMsMjAgKzY3LDQwIEBAIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICBkb2MuYm9keS5hcHBlbmRDaGls
ZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTE0JywgMCkpOwogICAgIGRvYy5i
b2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMTUnLCAy
KSk7CiAKLSAgICBsb2coJ0ZvY3VzIGlucHV0LTAxLicpOwotICAgIGRvYy5nZXRFbGVtZW50QnlJ
ZCgnaW5wdXQtMDEnKS5mb2N1cygpOworICAgIHRlc3RGb2N1c05hdmlnYXRpb25Gb3dyYWQoWwor
ICAgICAgICAnaW5wdXQtMDEnLAorICAgICAgICAnaW5wdXQtMTMnLAorICAgICAgICAnaW5wdXQt
MTUnLAorICAgICAgICAnaW5wdXQtMDInLAorICAgICAgICAnaG9zdC0wMS9pbnB1dC0wMycsCisg
ICAgICAgICdpbnB1dC0wNCcsCisgICAgICAgICdpZnJhbWUvaW5wdXQtMDYnLAorICAgICAgICAn
aWZyYW1lL2hvc3QtMDInLAorICAgICAgICAnaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDknLAorICAg
ICAgICAnaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDgnLAorICAgICAgICAnaWZyYW1lL2lucHV0LTEy
JywKKyAgICAgICAgJ2lmcmFtZS9pbnB1dC0xMScsCisgICAgICAgICdpZnJhbWUvaW5wdXQtMDUn
LAorICAgICAgICAnaW5wdXQtMTQnLAorICAgIF0pOworCisgICAgdGVzdEZvY3VzTmF2aWdhdGlv
bkJhY2t3YXJkKFsKKyAgICAgICAgJ2lucHV0LTE0JywKKyAgICAgICAgJ2lmcmFtZS9pbnB1dC0w
NScsCisgICAgICAgICdpZnJhbWUvaW5wdXQtMTEnLAorICAgICAgICAnaWZyYW1lL2lucHV0LTEy
JywKKyAgICAgICAgJ2lmcmFtZS9ob3N0LTAyL2lucHV0LTA4JywKKyAgICAgICAgJ2lmcmFtZS9o
b3N0LTAyL2lucHV0LTA5JywKKyAgICAgICAgJ2lmcmFtZS9ob3N0LTAyJywKKyAgICAgICAgJ2lm
cmFtZS9pbnB1dC0wNicsCisgICAgICAgICdpbnB1dC0wNCcsCisgICAgICAgICdob3N0LTAxL2lu
cHV0LTAzJywKKyAgICAgICAgJ2lucHV0LTAyJywKKyAgICAgICAgJ2lucHV0LTE1JywKKyAgICAg
ICAgJ2lucHV0LTEzJywKKyAgICAgICAgJ2lucHV0LTAxJywKKyAgICBdKTsKIAotICAgIGlmICh3
aW5kb3cuZXZlbnRTZW5kZXIpIHsKLSAgICAgICAgdmFyIHByZXNzZWQgPSAxMTsKLSAgICAgICAg
bG9nKCdcblByZXNzIFRhYiAnICsgcHJlc3NlZCArICcgdGltZXMuJyk7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcHJlc3NlZDsgKytpKSB7Ci0gICAgICAgICAgICBldmVudFNlbmRlci5r
ZXlEb3duKCdcdCcpOwotICAgICAgICB9Ci0gICAgICAgIGxvZygnXG5QcmVzcyBTaGlmdC1UYWIg
JyArIHByZXNzZWQgKyAnIHRpbWVzLicpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBy
ZXNzZWQ7ICsraSkgewotICAgICAgICAgICAgZXZlbnRTZW5kZXIua2V5RG93bignXHQnLCBbJ3No
aWZ0S2V5J10pOwotICAgICAgICB9Ci0gICB9CiAgICBsb2coJ1xuVGVzdCBmaW5pc2hlZC4nKTsK
IH0KIDwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134229</attachid>
            <date>2012-03-28 00:29:42 -0700</date>
            <delta_ts>2012-03-28 21:14:57 -0700</delta_ts>
            <desc>update</desc>
            <filename>bug-78588-20120328162940.patch</filename>
            <type>text/plain</type>
            <size>57636</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjE3MWM1MjFlOWY3MTYw
OTI5YzdlOWRmMjViNzg0MWQyNDNiODgyMS4uODZiMzJiZjBjMzViZjI2OTg1ZDU1ODA0MDU0MGY5
MmU5NmQzYzljNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTAzLTIxICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBMZXQgZm9jdXMgbmF2aWdh
dGlvbiBiZSBjb21wbGlhbnQgd2l0aCBTaGFkb3cgRE9NIHNwZWMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU4OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlcXVlbnRpYWwgZm9jdXMgbmF2aWdhdGlv
biBub3cgYmVoYXZlcyBleGFjdGx5IGFzIHNwZWNpZmllZCBpbiB0aGUgU2hhZG93IERPTSBzcGVj
LgorCisgICAgICAgIEFjY29yZGluZyB0byB0aGUgU2hhZG93IERPTSBzcGVjOgorICAgICAgICBU
aGUgc2hhZG93IERPTSBuYXZpZ2F0aW9uIG9yZGVyIHNlcXVlbmNlIGlzIGluc2VydGVkIGludG8g
dGhlIGRvY3VtZW50IG5hdmlnYXRpb24gb3JkZXI6CisgICAgICAgIDEuIGltbWVkaWF0ZWx5IGFm
dGVyIHRoZSBzaGFkb3cgaG9zdCwgaWYgdGhlIHNoYWRvdyBob3N0IGlzIGZvY3VzYWJsZTsgb3IK
KyAgICAgICAgMi4gaW4gcGxhY2Ugb2YgdGhlIHNoYWRvdyBob3N0IGFzIGlmIHRoZSBzaGFkb3cg
aG9zdCB3ZXJlIGFzc2lnbmVkIHRoZSB2YWx1ZSBvZiBhdXRvIGZvciBkZXRlcm1pbmluZyBpdHMg
cG9zaXRpb24uCisKKyAgICAgICAgUHJpb3IgdG8gdGhpcyBwYXRjaCwgc2VxdWVudGlhbCBmb2N1
cyBuYXZpZ2F0aW9uIGdvZXMgaW50byBTaGFkb3cgRE9NLCBidXQgaXQgaXMgaW5jb21wbGV0ZQor
ICAgICAgICBzaW5jZSBpbnNlcnRpb24gcG9pbnRzLCBzdWNoIGFzIDxjb250ZW50PiBlbGVtZW50
cyBvciA8c2hhZG93PiBlbGVtZW50cywgYXJlIG5vdCByZXNvbHZlZCBhdCBhbGwuCisgICAgICAg
IE5vdyBmb2N1cyBuYXZpZ2F0aW9uIGNhbiB0cmF2ZXJzZSBzaGFkb3cgRE9NIHN1YnRyZWVzIGlu
ICdyZWlmaWVkIHRyZWUgb3JkZXInLCByZXNvbHZpbmcgbG93ZXIgYm91bmRhcmllcyB0cmFuc3Bh
cmVudGx5LgorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgICBQcmlvciB0
byB0aGlzIHBhdGNoLCBzZXF1ZW50aWFsIGZvY3VzIG5hdmlnYXRpb24gZG9lcyBub3QgZ28gaW50
byBTaGFkb3cgRE9NIGlmIGEgc2hhZG93IGhvc3QgaXMgbm9uLWZvY3VzYWJsZS4KKyAgICAgICAg
Tm93IGZvY3VzIG5hdmlnYXRpb24gbXVzdCBnbyBpbnRvIFNoYWRvdyBET00gc3VidHJlZXMgZXZl
biBpZiBhIHNob3cgaG9zdCBpcyBub3QgZm9jdXNhYmxlIGFzIGRlc2NyaWJlZCBpbiAyKS4KKyAg
ICAgICAgVG8gc3VwcG9ydCB0aGlzIGJlaGF2aW9yLCB0aGlzIHBhdGNoIGludHJvZHVjZWQgYWRq
dXN0ZWRUYWJJbmRleCgpIGxvY2FsbHkgaW4gRm9jdXNDb250cm9sbGVyIHNvIHRoYXQKKyAgICAg
ICAgaXQgZG9lcyBub3Qgc2tpcCBhIG5vbi1mb2N1c2FibGUgc2hhZG93IGhvc3QgaW4gY3VycmVu
dCBmb2N1cyBzY29wZS4KKyAgICAgICAgQWZ0ZXIgZmluZGluZyBhICpwc2V1ZG8qIGZvY3VzYWJs
ZSBlbGVtZW50IGluIGN1cnJlbnQgZm9jdXMgc2NvcGUsIGl0IHRyaWVzIHRvIHJlc29sdmUgYSBm
b2N1c2VkIGVsZW1lbnQgcmVjdXJzaXZlbHksCisgICAgICAgIGNvbnNpZGVyaW5nIGEgbmVzdGVk
IGZvY3VzIHNjb3BlIGluc2lkZSBvZiBhIHNoYWRvdyBob3N0IG9yIGlmcmFtZS4KKyAgICAgICAg
VG8gdHJhdmVyc2UgU2hhZG93IERPTSBzdWJ0cmVlcywgYSBGb2N1c0NvbnRyb2xsZXIgbWFrZXMg
dXNlIG9mIFJlaWZpZWRUcmVlVHJhdmVyc2FsIEFQSXMsIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGlu
IHIxMTIwNTUuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWZmZWN0IGFuIGV4aXN0
aW5nIGJlaGF2aW9yIGlmIGEgc2hhZG93IGRvbSBpcyBub3QgaW52b2x2ZWQuCisKKyAgICAgICAg
VGVzdDogZmFzdC9kb20vc2hhZG93L2ZvY3VzLW5hdmlnYXRpb24uaHRtbAorCisgICAgICAgICog
ZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Zm9jdXMpOgorICAg
ICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2hh
ZG93SG9zdCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzU2Nv
cGU6OkZvY3VzU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNTY29wZTo6cm9vdE5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNTY29wZTo6b3duZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9jdXNTY29wZTo6Zm9jdXNTY29wZU9mKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzU2Nv
cGU6OmZvY3VzU2NvcGVPd25lZEJ5U2hhZG93SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1
c1Njb3BlOjpmb2N1c1Njb3BlT3duZWRCeUlGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpoYXND
dXN0b21Gb2N1c0xvZ2ljKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9uRm9jdXNhYmxlU2hhZG93
SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjppc0ZvY3VzYWJsZVNoYWRvd0hvc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6YWRqdXN0ZWRUYWJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRW
aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVO
b2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
Y3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVBY3Jvc3NGb2N1c1Njb3Bl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVS
ZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1
c2FibGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZE5vZGVX
aXRoRXhhY3RUYWJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Tm9kZVdpdGhHcmVhdGVy
VGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNOb2RlV2l0aExvd2VyVGFiSW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxlTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNhYmxl
Tm9kZSk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoRm9jdXNTY29wZSk6CisgICAgICAgIChGb2N1c0NvbnRyb2xsZXIpOgor
CiAyMDEyLTAzLTI2ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIE1ha2UgZmlsdGVycyBhbmQgdGhlIHRocmVhZGVkIGNvbXBvc2l0b3IgcGxheSB3
ZWxsIHRvZ2V0aGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGIyOWJmYjRhNWUyMzA1YzVh
MWM2ZThlYjFkMjRhOWJkYjhkZGNhMDkuLjk1MzI3MDgwMzU1NzY3ZGVhODI2ZjM2OWRiZjJkMTUw
ZWUxZTYwZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTE1NDgsOCArMTU0OCw2IEBAIHZv
aWQgRWxlbWVudDo6Zm9jdXMoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pCiAgICAgICAg
IC8vIElmIGEgZm9jdXMgZXZlbnQgaGFuZGxlciBjaGFuZ2VzIHRoZSBmb2N1cyB0byBhIGRpZmZl
cmVudCBub2RlIGl0CiAgICAgICAgIC8vIGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gY29udGludWUg
YW5kIHVwZGF0ZSBhcHBlYXJlbmNlLgogICAgICAgICBwcm90ZWN0ID0gdGhpczsKLSAgICAgICAg
aWYgKGhhc1NoYWRvd1Jvb3QoKSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+dHJhbnNmZXJG
b2N1c1RvRWxlbWVudEluU2hhZG93Um9vdCh0aGlzLCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24p
KQotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIXBhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLT5zZXRGb2N1c2VkTm9kZSh0aGlzLCBkb2MtPmZyYW1lKCkpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAppbmRleCBm
YjE2ZGYwMjFiNmI0NjcyNjA5OTlhYWRkOWFmMWUyMDVmMGRhNDM5Li5hNTFmZTc0ZmRkODIzNTY0
ZTAxMGFiMmE1MDAzZTllZmZiNTRlMzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZvY3VzQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlJlaWZpZWRU
cmVlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKQEAgLTY1LDYgKzY2LDU0IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTaGFkb3dIb3N0KGNvbnN0IE5v
ZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYm
IHRvRWxlbWVudChub2RlKS0+aGFzU2hhZG93Um9vdCgpOworfQorCitGb2N1c1Njb3BlOjpGb2N1
c1Njb3BlKFRyZWVTY29wZSogdHJlZVNjb3BlKQorICAgIDogbV9yb290VHJlZVNjb3BlKHRyZWVT
Y29wZSkKK3sKKyAgICBBU1NFUlQodHJlZVNjb3BlKTsKKyAgICBBU1NFUlQoIXRyZWVTY29wZS0+
cm9vdE5vZGUoKS0+aXNTaGFkb3dSb290KCkgfHwgdG9TaGFkb3dSb290KHRyZWVTY29wZS0+cm9v
dE5vZGUoKSktPmlzWW91bmdlc3QoKSk7Cit9CisKK05vZGUqIEZvY3VzU2NvcGU6OnJvb3ROb2Rl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yb290VHJlZVNjb3BlLT5yb290Tm9kZSgpOworfQor
CitFbGVtZW50KiBGb2N1c1Njb3BlOjpvd25lcigpIGNvbnN0Cit7CisgICAgTm9kZSogcm9vdCA9
IHJvb3ROb2RlKCk7CisgICAgaWYgKHJvb3QtPmlzU2hhZG93Um9vdCgpKQorICAgICAgICByZXR1
cm4gcm9vdC0+c2hhZG93SG9zdCgpOworICAgIGlmIChGcmFtZSogZnJhbWUgPSByb290LT5kb2N1
bWVudCgpLT5mcmFtZSgpKQorICAgICAgICByZXR1cm4gZnJhbWUtPm93bmVyRWxlbWVudCgpOwor
ICAgIHJldHVybiAwOworfQorCitGb2N1c1Njb3BlIEZvY3VzU2NvcGU6OmZvY3VzU2NvcGVPZihO
b2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICBUcmVlU2NvcGUqIHNjb3BlID0g
bm9kZS0+dHJlZVNjb3BlKCk7CisgICAgaWYgKHNjb3BlLT5yb290Tm9kZSgpLT5pc1NoYWRvd1Jv
b3QoKSkKKyAgICAgICAgcmV0dXJuIEZvY3VzU2NvcGUodG9TaGFkb3dSb290KHNjb3BlLT5yb290
Tm9kZSgpKS0+dHJlZSgpLT55b3VuZ2VzdFNoYWRvd1Jvb3QoKSk7CisgICAgcmV0dXJuIEZvY3Vz
U2NvcGUoc2NvcGUpOworfQorCitGb2N1c1Njb3BlIEZvY3VzU2NvcGU6OmZvY3VzU2NvcGVPd25l
ZEJ5U2hhZG93SG9zdChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChpc1NoYWRvd0hvc3Qobm9k
ZSkpOworICAgIHJldHVybiBGb2N1c1Njb3BlKHRvRWxlbWVudChub2RlKS0+c2hhZG93VHJlZSgp
LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKSk7Cit9CisKK0ZvY3VzU2NvcGUgRm9jdXNTY29wZTo6Zm9j
dXNTY29wZU93bmVkQnlJRnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZSkKK3sKKyAg
ICBBU1NFUlQoZnJhbWUgJiYgZnJhbWUtPmNvbnRlbnRGcmFtZSgpKTsKKyAgICByZXR1cm4gRm9j
dXNTY29wZShmcmFtZS0+Y29udGVudEZyYW1lKCktPmRvY3VtZW50KCkpOworfQorCiBzdGF0aWMg
aW5saW5lIHZvaWQgZGlzcGF0Y2hFdmVudHNPbldpbmRvd0FuZEZvY3VzZWROb2RlKERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBmb2N1c2VkKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBmb2N1c2Vk
IG5vZGUgd2Ugc2hvdWxkIGRpc3BhdGNoIGJsdXIgb24gaXQgYmVmb3JlIHdlIGJsdXIgdGhlIHdp
bmRvdy4KQEAgLTg0LDYgKzEzMywzNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGlzcGF0Y2hFdmVu
dHNPbldpbmRvd0FuZEZvY3VzZWROb2RlKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbAogICAgICAg
ICBkb2N1bWVudC0+Zm9jdXNlZE5vZGUoKS0+ZGlzcGF0Y2hGb2N1c0V2ZW50KDApOwogfQogCitz
dGF0aWMgaW5saW5lIGJvb2wgaGFzQ3VzdG9tRm9jdXNMb2dpYyhOb2RlKiBub2RlKQoreworICAg
IHJldHVybiBub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHRl
eHRhcmVhVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSB8fCBub2RlLT5oYXNUYWdO
YW1lKGF1ZGlvVGFnKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzTm9uRm9jdXNhYmxlU2hh
ZG93SG9zdChOb2RlKiBub2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQo
bm9kZSk7CisgICAgcmV0dXJuICFub2RlLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBp
c1NoYWRvd0hvc3Qobm9kZSkgJiYgIWhhc0N1c3RvbUZvY3VzTG9naWMobm9kZSk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc0ZvY3VzYWJsZVNoYWRvd0hvc3QoTm9kZSogbm9kZSwgS2V5Ym9h
cmRFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIHJldHVybiBub2RlLT5p
c0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBpc1NoYWRvd0hvc3Qobm9kZSkgJiYgIWhhc0N1
c3RvbUZvY3VzTG9naWMobm9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkVGFi
SW5kZXgoTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKG5v
ZGUpOworICAgIHJldHVybiBpc05vbkZvY3VzYWJsZVNoYWRvd0hvc3Qobm9kZSwgZXZlbnQpID8g
MCA6IG5vZGUtPnRhYkluZGV4KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRWaXNp
dChOb2RlKiBub2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQobm9kZSk7
CisgICAgcmV0dXJuIG5vZGUtPmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpIHx8IGlzTm9uRm9j
dXNhYmxlU2hhZG93SG9zdChub2RlLCBldmVudCk7Cit9CisKIEZvY3VzQ29udHJvbGxlcjo6Rm9j
dXNDb250cm9sbGVyKFBhZ2UqIHBhZ2UpCiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1faXNB
Y3RpdmUoZmFsc2UpCkBAIC0xNTMsNTIgKzIzMSwxNiBAQCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6
c2V0Rm9jdXNlZChib29sIGZvY3VzZWQpCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIFNoYWRv
d1Jvb3QqIHNoYWRvd1Jvb3QoTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aGFzU2hhZG93Um9vdCgpID8gdG9FbGVtZW50
KG5vZGUpLT5zaGFkb3dUcmVlKCktPnlvdW5nZXN0U2hhZG93Um9vdCgpIDogMDsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIGlzVHJlZVNjb3BlT3duZXIoTm9kZSogbm9kZSkKLXsKLSAgICByZXR1
cm4gbm9kZSAmJiAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8IHNoYWRvd1Jvb3Qobm9k
ZSkpOwotfQotCi1ib29sIEZvY3VzQ29udHJvbGxlcjo6dHJhbnNmZXJGb2N1c1RvRWxlbWVudElu
U2hhZG93Um9vdChFbGVtZW50KiBzaGFkb3dIb3N0LCBib29sIHJlc3RvcmVQcmV2aW91c1NlbGVj
dGlvbikKLXsKLSAgICBBU1NFUlQoc2hhZG93Um9vdChzaGFkb3dIb3N0KSk7Ci0gICAgTm9kZSog
bm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50T3JT
aGFkb3dSb290KEZvY3VzRGlyZWN0aW9uRm9yd2FyZCwgc2hhZG93SG9zdCwgMCk7Ci0gICAgaWYg
KHNoYWRvd0hvc3QgPT0gbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRvRWxlbWVu
dChub2RlKS0+Zm9jdXMocmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGhhc0N1c3RvbUZvY3VzTG9naWMoTm9kZSogbm9k
ZSkKLXsKLSAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykgfHwgbm9kZS0+aGFz
VGFnTmFtZSh0ZXh0YXJlYVRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgbm9k
ZS0+aGFzVGFnTmFtZShhdWRpb1RhZyk7Ci19Ci0KLU5vZGUqIEZvY3VzQ29udHJvbGxlcjo6Zmlu
ZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnRPclNoYWRvd1Jvb3Qo
Rm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBub2RlLCBLZXlib2FyZEV2ZW50KiBldmVu
dCkKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3du
SW50b0ZyYW1lRG9jdW1lbnQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBub2RlLCBL
ZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICAvLyBUaGUgbm9kZSB3ZSBmb3VuZCBtaWdodCBi
ZSBhIEhUTUxGcmFtZU93bmVyRWxlbWVudCBvciBhIHNoYWRvdyBob3N0LCBzbyBkZXNjZW5kIGRv
d24gdGhlIHRyZWUgdW50aWwgd2UgZmluZCBlaXRoZXI6CisgICAgLy8gVGhlIG5vZGUgd2UgZm91
bmQgbWlnaHQgYmUgYSBIVE1MRnJhbWVPd25lckVsZW1lbnQsIHNvIGRlc2NlbmQgZG93biB0aGUg
dHJlZSB1bnRpbCB3ZSBmaW5kIGVpdGhlcjoKICAgICAvLyAxKSBhIGZvY3VzYWJsZSBub2RlLCBv
cgotICAgIC8vIDIpIHRoZSBkZWVwZXN0LW5lc3RlZCBIVE1MRnJhbWVPd25lckVsZW1lbnQgb3Ig
c2hhZG93IGhvc3QuCi0gICAgd2hpbGUgKGlzVHJlZVNjb3BlT3duZXIobm9kZSkpIHsKLSAgICAg
ICAgTm9kZSogZm91bmROb2RlOwotICAgICAgICBpZiAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVu
dCgpKSB7Ci0gICAgICAgICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gc3RhdGlj
X2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBpZiAoIW93
bmVyLT5jb250ZW50RnJhbWUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG93bmVyLT5jb250ZW50RnJhbWUoKS0+ZG9jdW1lbnQoKTsK
LSAgICAgICAgICAgIGZvdW5kTm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgZG9j
dW1lbnQsIDAsIGV2ZW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBVbnRpbCBhIGZvY3VzIHJlLXRhcmdldGluZyAoYnVnIDYxNDIxKSBpcyBpbXBsZW1lbnRlZCwK
LSAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZXNlIGVsZW1lbnRzIGlzIHRoZSBzYWZlc3Qgd2F5
IHRvIGtlZXAgYSBjb21wYXRpYmlsaXR5LgotICAgICAgICAgICAgaWYgKGhhc0N1c3RvbUZvY3Vz
TG9naWMobm9kZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBBU1NFUlQo
c2hhZG93Um9vdChub2RlKSk7Ci0gICAgICAgICAgICBmb3VuZE5vZGUgPSBmaW5kRm9jdXNhYmxl
Tm9kZShkaXJlY3Rpb24sIHNoYWRvd1Jvb3Qobm9kZSksIDAsIGV2ZW50KTsKLSAgICAgICAgfQor
ICAgIC8vIDIpIHRoZSBkZWVwZXN0LW5lc3RlZCBIVE1MRnJhbWVPd25lckVsZW1lbnQuCisgICAg
d2hpbGUgKG5vZGUgJiYgbm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7CisgICAgICAgIEhU
TUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVs
ZW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYgKCFvd25lci0+Y29udGVudEZyYW1lKCkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgTm9kZSogZm91bmROb2RlID0gZmluZEZvY3VzYWJsZU5v
ZGUoZGlyZWN0aW9uLCBGb2N1c1Njb3BlOjpmb2N1c1Njb3BlT3duZWRCeUlGcmFtZShvd25lciks
IDAsIGV2ZW50KTsKICAgICAgICAgaWYgKCFmb3VuZE5vZGUpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgQVNTRVJUKG5vZGUgIT0gZm91bmROb2RlKTsKQEAgLTI1Myw3ICsyOTUsNyBAQCBi
b29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9yZGVyKEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbiwgS2V5YgogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBmaW5kRm9j
dXNhYmxlTm9kZUFjcm9zc1RyZWVTY29wZShkaXJlY3Rpb24sIGN1cnJlbnROb2RlID8gY3VycmVu
dE5vZGUtPnRyZWVTY29wZSgpIDogZG9jdW1lbnQsIGN1cnJlbnROb2RlLCBldmVudCk7CisgICAg
UmVmUHRyPE5vZGU+IG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZUFjcm9zc0ZvY3VzU2NvcGUoZGly
ZWN0aW9uLCBjdXJyZW50Tm9kZSA/IEZvY3VzU2NvcGU6OmZvY3VzU2NvcGVPZihjdXJyZW50Tm9k
ZSkgOiBGb2N1c1Njb3BlOjpmb2N1c1Njb3BlT2YoZG9jdW1lbnQpLCBjdXJyZW50Tm9kZSwgZXZl
bnQpOwogCiAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgIC8vIFdlIGRpZG4ndCBmaW5kIGEgbm9k
ZSB0byBmb2N1cywgc28gd2Ugc2hvdWxkIHRyeSB0byBwYXNzIGZvY3VzIHRvIENocm9tZS4KQEAg
LTI2NSw4ICszMDcsOCBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1
bWVudE9yZGVyKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5YgogICAgICAgICB9CiAKICAg
ICAgICAgLy8gQ2hyb21lIGRvZXNuJ3Qgd2FudCBmb2N1cywgc28gd2Ugc2hvdWxkIHdyYXAgZm9j
dXMuCi0gICAgICAgIG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZShkaXJlY3Rpb24sIG1fcGFnZS0+
bWFpbkZyYW1lKCktPmRvY3VtZW50KCksIDAsIGV2ZW50KTsKLSAgICAgICAgbm9kZSA9IGZpbmRG
b2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50T3JTaGFkb3dSb290KGRp
cmVjdGlvbiwgbm9kZS5nZXQoKSwgZXZlbnQpOworICAgICAgICBub2RlID0gZmluZEZvY3VzYWJs
ZU5vZGVSZWN1cnNpdmVseShkaXJlY3Rpb24sIEZvY3VzU2NvcGU6OmZvY3VzU2NvcGVPZihtX3Bh
Z2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpKSwgMCwgZXZlbnQpOworICAgICAgICBub2RlID0g
ZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnQoZGlyZWN0aW9u
LCBub2RlLmdldCgpLCBldmVudCk7CiAKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzE4LDU2ICszNjAsNzkgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6
OmFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtl
eWIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBOb2RlKiBvd25lck9mVHJl
ZVNjb3BlKFRyZWVTY29wZSogc2NvcGUpCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1
c2FibGVOb2RlQWNyb3NzRm9jdXNTY29wZShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEZvY3Vz
U2NvcGUgc2NvcGUsIE5vZGUqIGN1cnJlbnROb2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsK
LSAgICBBU1NFUlQoc2NvcGUpOwotICAgIGlmIChzY29wZS0+cm9vdE5vZGUoKS0+aXNTaGFkb3dS
b290KCkpCi0gICAgICAgIHJldHVybiBzY29wZS0+cm9vdE5vZGUoKS0+c2hhZG93SG9zdCgpOwot
ICAgIGlmIChzY29wZS0+cm9vdE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAg
cmV0dXJuIHNjb3BlLT5yb290Tm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5vd25lckVsZW1l
bnQoKTsKLSAgICByZXR1cm4gMDsKLX0KKyAgICBBU1NFUlQoIWN1cnJlbnROb2RlIHx8ICFpc05v
bkZvY3VzYWJsZVNoYWRvd0hvc3QoY3VycmVudE5vZGUsIGV2ZW50KSk7CisgICAgTm9kZSogZm91
bmQ7CisgICAgaWYgKGN1cnJlbnROb2RlICYmIGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZv
cndhcmQgJiYgaXNGb2N1c2FibGVTaGFkb3dIb3N0KGN1cnJlbnROb2RlLCBldmVudCkpIHsKKyAg
ICAgICAgTm9kZSogZm91bmRJbklubmVyRm9jdXNTY29wZSA9IGZpbmRGb2N1c2FibGVOb2RlUmVj
dXJzaXZlbHkoZGlyZWN0aW9uLCBGb2N1c1Njb3BlOjpmb2N1c1Njb3BlT3duZWRCeVNoYWRvd0hv
c3QoY3VycmVudE5vZGUpLCAwLCBldmVudCk7CisgICAgICAgIGlmIChmb3VuZEluSW5uZXJGb2N1
c1Njb3BlKQorICAgICAgICAgICAgZm91bmQgPSBmb3VuZEluSW5uZXJGb2N1c1Njb3BlOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBmb3VuZCA9IGZpbmRGb2N1c2FibGVOb2RlUmVjdXJzaXZl
bHkoZGlyZWN0aW9uLCBzY29wZSwgY3VycmVudE5vZGUsIGV2ZW50KTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZm91bmQgPSBmaW5kRm9jdXNhYmxlTm9kZVJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgc2Nv
cGUsIGN1cnJlbnROb2RlLCBldmVudCk7CiAKLU5vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZv
Y3VzYWJsZU5vZGVBY3Jvc3NUcmVlU2NvcGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBUcmVl
U2NvcGUqIHNjb3BlLCBOb2RlKiBjdXJyZW50Tm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17
Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgc2NvcGUsIGN1
cnJlbnROb2RlLCBldmVudCk7Ci0gICAgLy8gSWYgdGhlcmUncyBubyBmb2N1c2FibGUgbm9kZSB0
byBhZHZhbmNlIHRvLCBtb3ZlIHVwIHRoZSB0cmVlIHNjb3BlcyB1bnRpbCB3ZSBmaW5kIG9uZS4K
LSAgICB3aGlsZSAoIW5vZGUgJiYgc2NvcGUpIHsKLSAgICAgICAgTm9kZSogb3duZXIgPSBvd25l
ck9mVHJlZVNjb3BlKHNjb3BlKTsKKyAgICAvLyBJZiB0aGVyZSdzIG5vIGZvY3VzYWJsZSBub2Rl
IHRvIGFkdmFuY2UgdG8sIG1vdmUgdXAgdGhlIGZvY3VzIHNjb3BlcyB1bnRpbCB3ZSBmaW5kIG9u
ZS4KKyAgICB3aGlsZSAoIWZvdW5kKSB7CisgICAgICAgIE5vZGUqIG93bmVyID0gc2NvcGUub3du
ZXIoKTsKICAgICAgICAgaWYgKCFvd25lcikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBu
b2RlID0gZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBvd25lci0+dHJlZVNjb3BlKCksIG93
bmVyLCBldmVudCk7Ci0gICAgICAgIHNjb3BlID0gb3duZXItPnRyZWVTY29wZSgpOworICAgICAg
ICBzY29wZSA9IEZvY3VzU2NvcGU6OmZvY3VzU2NvcGVPZihvd25lcik7CisgICAgICAgIGlmIChk
aXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25CYWNrd2FyZCAmJiBpc0ZvY3VzYWJsZVNoYWRvd0hv
c3Qob3duZXIsIGV2ZW50KSkgeworICAgICAgICAgICAgZm91bmQgPSBvd25lcjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvdW5kID0gZmluZEZvY3VzYWJsZU5vZGVS
ZWN1cnNpdmVseShkaXJlY3Rpb24sIHNjb3BlLCBvd25lciwgZXZlbnQpOwogICAgIH0KLSAgICBu
b2RlID0gZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnRPclNo
YWRvd1Jvb3QoZGlyZWN0aW9uLCBub2RlLCBldmVudCk7Ci0gICAgcmV0dXJuIG5vZGU7CisgICAg
Zm91bmQgPSBmaW5kRm9jdXNhYmxlTm9kZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVudChk
aXJlY3Rpb24sIGZvdW5kLCBldmVudCk7CisgICAgcmV0dXJuIGZvdW5kOworfQorCitOb2RlKiBG
b2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlUmVjdXJzaXZlbHkoRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uLCBGb2N1c1Njb3BlIHNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVu
dCogZXZlbnQpCit7CisgICAgLy8gc3RhcnQgbm9kZSBpcyBleGNsdXNpdmUuCisgICAgTm9kZSog
Zm91bmQgPSBmaW5kRm9jdXNhYmxlTm9kZShkaXJlY3Rpb24sIHNjb3BlLCBzdGFydCwgZXZlbnQp
OworICAgIGlmICghZm91bmQpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChkaXJlY3Rpb24g
PT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKSB7CisgICAgICAgIGlmICghaXNOb25Gb2N1c2FibGVT
aGFkb3dIb3N0KGZvdW5kLCBldmVudCkpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAg
ICAgIE5vZGUqIGZvdW5kSW5Jbm5lckZvY3VzU2NvcGUgPSBmaW5kRm9jdXNhYmxlTm9kZVJlY3Vy
c2l2ZWx5KGRpcmVjdGlvbiwgRm9jdXNTY29wZTo6Zm9jdXNTY29wZU93bmVkQnlTaGFkb3dIb3N0
KGZvdW5kKSwgMCwgZXZlbnQpOworICAgICAgICBpZiAoZm91bmRJbklubmVyRm9jdXNTY29wZSkK
KyAgICAgICAgICAgIHJldHVybiBmb3VuZEluSW5uZXJGb2N1c1Njb3BlOworICAgICAgICByZXR1
cm4gZmluZEZvY3VzYWJsZU5vZGVSZWN1cnNpdmVseShkaXJlY3Rpb24sIHNjb3BlLCBmb3VuZCwg
ZXZlbnQpOworICAgIH0KKyAgICBBU1NFUlQoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uQmFj
a3dhcmQpOworICAgIGlmIChpc0ZvY3VzYWJsZVNoYWRvd0hvc3QoZm91bmQsIGV2ZW50KSkgewor
ICAgICAgICBOb2RlKiBmb3VuZEluSW5uZXJGb2N1c1Njb3BlID0gZmluZEZvY3VzYWJsZU5vZGVS
ZWN1cnNpdmVseShkaXJlY3Rpb24sIEZvY3VzU2NvcGU6OmZvY3VzU2NvcGVPd25lZEJ5U2hhZG93
SG9zdChmb3VuZCksIDAsIGV2ZW50KTsKKyAgICAgICAgaWYgKGZvdW5kSW5Jbm5lckZvY3VzU2Nv
cGUpCisgICAgICAgICAgICByZXR1cm4gZm91bmRJbklubmVyRm9jdXNTY29wZTsKKyAgICAgICAg
cmV0dXJuIGZvdW5kOworICAgIH0KKyAgICBpZiAoaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KGZv
dW5kLCBldmVudCkpIHsKKyAgICAgICAgTm9kZSogZm91bmRJbklubmVyRm9jdXNTY29wZSA9IGZp
bmRGb2N1c2FibGVOb2RlUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBGb2N1c1Njb3BlOjpmb2N1c1Nj
b3BlT3duZWRCeVNoYWRvd0hvc3QoZm91bmQpLCAwLCBldmVudCk7CisgICAgICAgIGlmIChmb3Vu
ZEluSW5uZXJGb2N1c1Njb3BlKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kSW5Jbm5lckZvY3Vz
U2NvcGU7CisgICAgICAgIHJldHVybiBmaW5kRm9jdXNhYmxlTm9kZVJlY3Vyc2l2ZWx5KGRpcmVj
dGlvbiwgc2NvcGUsIGZvdW5kLCBldmVudCk7CisgICAgfQorICAgIHJldHVybiBmb3VuZDsKIH0K
IAotCi1Ob2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlKEZvY3VzRGlyZWN0
aW9uIGRpcmVjdGlvbiwgVHJlZVNjb3BlKiBzY29wZSwgTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVu
dCogZXZlbnQpCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlKEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9jdXNTY29wZSBzY29wZSwgTm9kZSogbm9kZSwgS2V5Ym9h
cmRFdmVudCogZXZlbnQpCiB7CiAgICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rp
b25Gb3J3YXJkKQogICAgICAgICA/IG5leHRGb2N1c2FibGVOb2RlKHNjb3BlLCBub2RlLCBldmVu
dCkKICAgICAgICAgOiBwcmV2aW91c0ZvY3VzYWJsZU5vZGUoc2NvcGUsIG5vZGUsIGV2ZW50KTsK
IH0KIAotc3RhdGljIE5vZGUqIG5leHROb2RlV2l0aEV4YWN0VGFiSW5kZXgoTm9kZSogc3RhcnQs
IGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCitOb2RlKiBGb2N1c0NvbnRyb2xs
ZXI6OmZpbmROb2RlV2l0aEV4YWN0VGFiSW5kZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRleCwg
S2V5Ym9hcmRFdmVudCogZXZlbnQsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICAv
LyBTZWFyY2ggaXMgaW5jbHVzaXZlIG9mIHN0YXJ0Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc3Rh
cnQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpCi0gICAgICAgIGlmIChu
b2RlLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBub2RlLT50YWJJbmRleCgpID09IHRh
YkluZGV4KQorICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gKGRpcmVj
dGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQgPyBSZWlmaWVkVHJlZVRyYXZlcnNhbDo6dHJh
dmVyc2VOZXh0Tm9kZVdpdGhvdXRDcm9zc2luZ1VwcGVyQm91bmRhcnkobm9kZSk6IFJlaWZpZWRU
cmVlVHJhdmVyc2FsOjp0cmF2ZXJzZVByZXZpb3VzTm9kZVdpdGhvdXRDcm9zc2luZ1VwcGVyQm91
bmRhcnkobm9kZSkpKSB7CisgICAgICAgIGlmIChzaG91bGRWaXNpdChub2RlLCBldmVudCkgJiYg
YWRqdXN0ZWRUYWJJbmRleChub2RlLCBldmVudCkgPT0gdGFiSW5kZXgpCiAgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgTm9kZSogcHJldmlvdXNO
b2RlV2l0aEV4YWN0VGFiSW5kZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5Ym9hcmRF
dmVudCogZXZlbnQpCi17Ci0gICAgLy8gU2VhcmNoIGlzIGluY2x1c2l2ZSBvZiBzdGFydAotICAg
IGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkK
LSAgICAgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYmIG4tPnRhYkluZGV4
KCkgPT0gdGFiSW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gbjsKLQorICAgIH0KICAgICByZXR1
cm4gMDsKIH0KIApAQCAtMzc2LDggKzQ0MSw4IEBAIHN0YXRpYyBOb2RlKiBuZXh0Tm9kZVdpdGhH
cmVhdGVyVGFiSW5kZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdmVuCiAg
ICAgLy8gU2VhcmNoIGlzIGluY2x1c2l2ZSBvZiBzdGFydAogICAgIGludCB3aW5uaW5nVGFiSW5k
ZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkgKyAxOwogICAgIE5vZGUqIHdp
bm5lciA9IDA7Ci0gICAgZm9yIChOb2RlKiBuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5l
eHROb2RlKCkpCi0gICAgICAgIGlmIChuLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBu
LT50YWJJbmRleCgpID4gdGFiSW5kZXggJiYgbi0+dGFiSW5kZXgoKSA8IHdpbm5pbmdUYWJJbmRl
eCkgeworICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gUmVpZmllZFRyZWVUcmF2ZXJz
YWw6OnRyYXZlcnNlTmV4dE5vZGVXaXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5kYXJ5KG4pKQorICAg
ICAgICBpZiAoc2hvdWxkVmlzaXQobiwgZXZlbnQpICYmIG4tPnRhYkluZGV4KCkgPiB0YWJJbmRl
eCAmJiBuLT50YWJJbmRleCgpIDwgd2lubmluZ1RhYkluZGV4KSB7CiAgICAgICAgICAgICB3aW5u
ZXIgPSBuOwogICAgICAgICAgICAgd2lubmluZ1RhYkluZGV4ID0gbi0+dGFiSW5kZXgoKTsKICAg
ICAgICAgfQpAQCAtMzkwLDMwICs0NTUsMzMgQEAgc3RhdGljIE5vZGUqIHByZXZpb3VzTm9kZVdp
dGhMb3dlclRhYkluZGV4KE5vZGUqIHN0YXJ0LCBpbnQgdGFiSW5kZXgsIEtleWJvYXJkRXYKICAg
ICAvLyBTZWFyY2ggaXMgaW5jbHVzaXZlIG9mIHN0YXJ0CiAgICAgaW50IHdpbm5pbmdUYWJJbmRl
eCA9IDA7CiAgICAgTm9kZSogd2lubmVyID0gMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBzdGFydDsg
bjsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpCi0gICAgICAgIGlmIChuLT5pc0tleWJv
YXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBuLT50YWJJbmRleCgpIDwgdGFiSW5kZXggJiYgbi0+dGFi
SW5kZXgoKSA+IHdpbm5pbmdUYWJJbmRleCkgeworICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBu
OyBuID0gUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlUHJldmlvdXNOb2RlV2l0aG91dENy
b3NzaW5nVXBwZXJCb3VuZGFyeShuKSkgeworICAgICAgICBpbnQgY3VycmVudFRhYkluZGV4ID0g
YWRqdXN0ZWRUYWJJbmRleChuLCBldmVudCk7CisgICAgICAgIGlmICgoc2hvdWxkVmlzaXQobiwg
ZXZlbnQpIHx8IGlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdChuLCBldmVudCkpICYmIGN1cnJlbnRU
YWJJbmRleCA8IHRhYkluZGV4ICYmIGN1cnJlbnRUYWJJbmRleCA+IHdpbm5pbmdUYWJJbmRleCkg
ewogICAgICAgICAgICAgd2lubmVyID0gbjsKLSAgICAgICAgICAgIHdpbm5pbmdUYWJJbmRleCA9
IG4tPnRhYkluZGV4KCk7CisgICAgICAgICAgICB3aW5uaW5nVGFiSW5kZXggPSBjdXJyZW50VGFi
SW5kZXg7CiAgICAgICAgIH0KLQorICAgIH0KICAgICByZXR1cm4gd2lubmVyOwogfQogCi1Ob2Rl
KiBGb2N1c0NvbnRyb2xsZXI6Om5leHRGb2N1c2FibGVOb2RlKFRyZWVTY29wZSogc2NvcGUsIE5v
ZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50KiBldmVudCkKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6
bmV4dEZvY3VzYWJsZU5vZGUoRm9jdXNTY29wZSBzY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJk
RXZlbnQqIGV2ZW50KQogewogICAgIGlmIChzdGFydCkgeworICAgICAgICBpbnQgdGFiSW5kZXgg
PSBhZGp1c3RlZFRhYkluZGV4KHN0YXJ0LCBldmVudCk7CiAgICAgICAgIC8vIElmIGEgbm9kZSBp
cyBleGNsdWRlZCBmcm9tIHRoZSBub3JtYWwgdGFiYmluZyBjeWNsZSwgdGhlIG5leHQgZm9jdXNh
YmxlIG5vZGUgaXMgZGV0ZXJtaW5lZCBieSB0cmVlIG9yZGVyCi0gICAgICAgIGlmIChzdGFydC0+
dGFiSW5kZXgoKSA8IDApIHsKLSAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0LT50cmF2
ZXJzZU5leHROb2RlKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpCi0gICAgICAgICAg
ICAgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYmIG4tPnRhYkluZGV4KCkg
Pj0gMCkKKyAgICAgICAgaWYgKHRhYkluZGV4IDwgMCkgeworICAgICAgICAgICAgZm9yIChOb2Rl
KiBuID0gUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlTmV4dE5vZGVXaXRob3V0Q3Jvc3Np
bmdVcHBlckJvdW5kYXJ5KHN0YXJ0KTsgbjsgbiA9IFJlaWZpZWRUcmVlVHJhdmVyc2FsOjp0cmF2
ZXJzZU5leHROb2RlV2l0aG91dENyb3NzaW5nVXBwZXJCb3VuZGFyeShuKSkgeworICAgICAgICAg
ICAgICAgIGlmIChzaG91bGRWaXNpdChuLCBldmVudCkgJiYgYWRqdXN0ZWRUYWJJbmRleChuLCBl
dmVudCkgPj0gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGaXJzdCB0cnkgdG8gZmluZCBhIG5vZGUgd2l0aCB0
aGUgc2FtZSB0YWJpbmRleCBhcyBzdGFydCB0aGF0IGNvbWVzIGFmdGVyIHN0YXJ0IGluIHRoZSBz
Y29wZS4KLSAgICAgICAgaWYgKE5vZGUqIHdpbm5lciA9IG5leHROb2RlV2l0aEV4YWN0VGFiSW5k
ZXgoc3RhcnQtPnRyYXZlcnNlTmV4dE5vZGUoKSwgc3RhcnQtPnRhYkluZGV4KCksIGV2ZW50KSkK
KyAgICAgICAgaWYgKE5vZGUqIHdpbm5lciA9IGZpbmROb2RlV2l0aEV4YWN0VGFiSW5kZXgoUmVp
ZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlTmV4dE5vZGVXaXRob3V0Q3Jvc3NpbmdVcHBlckJv
dW5kYXJ5KHN0YXJ0KSwgdGFiSW5kZXgsIGV2ZW50LCBGb2N1c0RpcmVjdGlvbkZvcndhcmQpKQog
ICAgICAgICAgICAgcmV0dXJuIHdpbm5lcjsKIAotICAgICAgICBpZiAoIXN0YXJ0LT50YWJJbmRl
eCgpKQorICAgICAgICBpZiAoIXRhYkluZGV4KQogICAgICAgICAgICAgLy8gV2UndmUgcmVhY2hl
ZCB0aGUgbGFzdCBub2RlIGluIHRoZSBkb2N1bWVudCB3aXRoIGEgdGFiaW5kZXggb2YgMC4gVGhp
cyBpcyB0aGUgZW5kIG9mIHRoZSB0YWJiaW5nIG9yZGVyLgogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQpAQCAtNDIxLDI2ICs0ODksMjYgQEAgTm9kZSogRm9jdXNDb250cm9sbGVyOjpuZXh0
Rm9jdXNhYmxlTm9kZShUcmVlU2NvcGUqIHNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmQKICAg
ICAvLyBMb29rIGZvciB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUgc2NvcGUgdGhhdDoKICAgICAvLyAx
KSBoYXMgdGhlIGxvd2VzdCB0YWJpbmRleCB0aGF0IGlzIGhpZ2hlciB0aGFuIHN0YXJ0J3MgdGFi
aW5kZXggKG9yIDAsIGlmIHN0YXJ0IGlzIG51bGwpLCBhbmQKICAgICAvLyAyKSBjb21lcyBmaXJz
dCBpbiB0aGUgc2NvcGUsIGlmIHRoZXJlJ3MgYSB0aWUuCi0gICAgaWYgKE5vZGUqIHdpbm5lciA9
IG5leHROb2RlV2l0aEdyZWF0ZXJUYWJJbmRleChzY29wZS0+cm9vdE5vZGUoKSwgc3RhcnQgPyBz
dGFydC0+dGFiSW5kZXgoKSA6IDAsIGV2ZW50KSkKKyAgICBpZiAoTm9kZSogd2lubmVyID0gbmV4
dE5vZGVXaXRoR3JlYXRlclRhYkluZGV4KHNjb3BlLnJvb3ROb2RlKCksIHN0YXJ0ID8gYWRqdXN0
ZWRUYWJJbmRleChzdGFydCwgZXZlbnQpIDogMCwgZXZlbnQpKQogICAgICAgICByZXR1cm4gd2lu
bmVyOwogCiAgICAgLy8gVGhlcmUgYXJlIG5vIG5vZGVzIHdpdGggYSB0YWJpbmRleCBncmVhdGVy
IHRoYW4gc3RhcnQncyB0YWJpbmRleCwKICAgICAvLyBzbyBmaW5kIHRoZSBmaXJzdCBub2RlIHdp
dGggYSB0YWJpbmRleCBvZiAwLgotICAgIHJldHVybiBuZXh0Tm9kZVdpdGhFeGFjdFRhYkluZGV4
KHNjb3BlLT5yb290Tm9kZSgpLCAwLCBldmVudCk7CisgICAgcmV0dXJuIGZpbmROb2RlV2l0aEV4
YWN0VGFiSW5kZXgoc2NvcGUucm9vdE5vZGUoKSwgMCwgZXZlbnQsIEZvY3VzRGlyZWN0aW9uRm9y
d2FyZCk7CiB9CiAKLU5vZGUqIEZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVOb2Rl
KFRyZWVTY29wZSogc2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50KiBldmVudCkKK05v
ZGUqIEZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVOb2RlKEZvY3VzU2NvcGUgc2Nv
cGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBOb2RlKiBsYXN0
OwotICAgIGZvciAobGFzdCA9IHNjb3BlLT5yb290Tm9kZSgpOyBsYXN0LT5sYXN0Q2hpbGQoKTsg
bGFzdCA9IGxhc3QtPmxhc3RDaGlsZCgpKSB7IH0KKyAgICBmb3IgKGxhc3QgPSBzY29wZS5yb290
Tm9kZSgpOyBSZWlmaWVkVHJlZVRyYXZlcnNhbDo6bGFzdENoaWxkV2l0aG91dENyb3NzaW5nVXBw
ZXJCb3VuZGFyeShsYXN0KTsgbGFzdCA9IFJlaWZpZWRUcmVlVHJhdmVyc2FsOjpsYXN0Q2hpbGRX
aXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5kYXJ5KGxhc3QpKSB7IH0KIAogICAgIC8vIEZpcnN0IHRy
eSB0byBmaW5kIHRoZSBsYXN0IG5vZGUgaW4gdGhlIHNjb3BlIHRoYXQgY29tZXMgYmVmb3JlIHN0
YXJ0IGFuZCBoYXMgdGhlIHNhbWUgdGFiaW5kZXggYXMgc3RhcnQuCiAgICAgLy8gSWYgc3RhcnQg
aXMgbnVsbCwgZmluZCB0aGUgbGFzdCBub2RlIGluIHRoZSBzY29wZSB3aXRoIGEgdGFiaW5kZXgg
b2YgMC4KICAgICBOb2RlKiBzdGFydGluZ05vZGU7CiAgICAgaW50IHN0YXJ0aW5nVGFiSW5kZXg7
CiAgICAgaWYgKHN0YXJ0KSB7Ci0gICAgICAgIHN0YXJ0aW5nTm9kZSA9IHN0YXJ0LT50cmF2ZXJz
ZVByZXZpb3VzTm9kZSgpOwotICAgICAgICBzdGFydGluZ1RhYkluZGV4ID0gc3RhcnQtPnRhYklu
ZGV4KCk7CisgICAgICAgIHN0YXJ0aW5nTm9kZSA9IFJlaWZpZWRUcmVlVHJhdmVyc2FsOjp0cmF2
ZXJzZVByZXZpb3VzTm9kZVdpdGhvdXRDcm9zc2luZ1VwcGVyQm91bmRhcnkoc3RhcnQpOworICAg
ICAgICBzdGFydGluZ1RhYkluZGV4ID0gYWRqdXN0ZWRUYWJJbmRleChzdGFydCwgZXZlbnQpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHN0YXJ0aW5nTm9kZSA9IGxhc3Q7CiAgICAgICAgIHN0YXJ0
aW5nVGFiSW5kZXggPSAwOwpAQCAtNDQ4LDE4ICs1MTYsMTkgQEAgTm9kZSogRm9jdXNDb250cm9s
bGVyOjpwcmV2aW91c0ZvY3VzYWJsZU5vZGUoVHJlZVNjb3BlKiBzY29wZSwgTm9kZSogc3RhcnQs
IEtleWIKIAogICAgIC8vIEhvd2V2ZXIsIGlmIGEgbm9kZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBu
b3JtYWwgdGFiYmluZyBjeWNsZSwgdGhlIHByZXZpb3VzIGZvY3VzYWJsZSBub2RlIGlzIGRldGVy
bWluZWQgYnkgdHJlZSBvcmRlcgogICAgIGlmIChzdGFydGluZ1RhYkluZGV4IDwgMCkgewotICAg
ICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydGluZ05vZGU7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZp
b3VzTm9kZSgpKQotICAgICAgICAgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQp
ICYmIG4tPnRhYkluZGV4KCkgPj0gMCkKKyAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnRpbmdO
b2RlOyBuOyBuID0gUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlUHJldmlvdXNOb2RlV2l0
aG91dENyb3NzaW5nVXBwZXJCb3VuZGFyeShuKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFZp
c2l0KG4sIGV2ZW50KSAmJiBhZGp1c3RlZFRhYkluZGV4KG4sIGV2ZW50KSA+PSAwKQogICAgICAg
ICAgICAgICAgIHJldHVybiBuOworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKE5vZGUqIHdp
bm5lciA9IHByZXZpb3VzTm9kZVdpdGhFeGFjdFRhYkluZGV4KHN0YXJ0aW5nTm9kZSwgc3RhcnRp
bmdUYWJJbmRleCwgZXZlbnQpKQorICAgIGlmIChOb2RlKiB3aW5uZXIgPSBmaW5kTm9kZVdpdGhF
eGFjdFRhYkluZGV4KHN0YXJ0aW5nTm9kZSwgc3RhcnRpbmdUYWJJbmRleCwgZXZlbnQsIEZvY3Vz
RGlyZWN0aW9uQmFja3dhcmQpKQogICAgICAgICByZXR1cm4gd2lubmVyOwogCiAgICAgLy8gVGhl
cmUgYXJlIG5vIG5vZGVzIGJlZm9yZSBzdGFydCB3aXRoIHRoZSBzYW1lIHRhYmluZGV4IGFzIHN0
YXJ0LCBzbyBsb29rIGZvciBhIG5vZGUgdGhhdDoKICAgICAvLyAxKSBoYXMgdGhlIGhpZ2hlc3Qg
bm9uLXplcm8gdGFiaW5kZXggKHRoYXQgaXMgbGVzcyB0aGFuIHN0YXJ0J3MgdGFiaW5kZXgpLCBh
bmQKICAgICAvLyAyKSBjb21lcyBsYXN0IGluIHRoZSBzY29wZSwgaWYgdGhlcmUncyBhIHRpZS4K
LSAgICBzdGFydGluZ1RhYkluZGV4ID0gKHN0YXJ0ICYmIHN0YXJ0LT50YWJJbmRleCgpKSA/IHN0
YXJ0LT50YWJJbmRleCgpIDogc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgpOworICAg
IHN0YXJ0aW5nVGFiSW5kZXggPSAoc3RhcnQgJiYgc3RhcnRpbmdUYWJJbmRleCkgPyBzdGFydGlu
Z1RhYkluZGV4IDogc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgpOwogICAgIHJldHVy
biBwcmV2aW91c05vZGVXaXRoTG93ZXJUYWJJbmRleChsYXN0LCBzdGFydGluZ1RhYkluZGV4LCBl
dmVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCmluZGV4IDNiNTYz
NzdiZDQzMTNjNjU5YzVhZDY1ZjEwYjg0ZmRlNmNmZTVlMzAuLjg5MDg5ZTcxMDdiNjVmY2YzOWQ0
ZGQyZmI5MDAxYzA1MGVkMDlkNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9j
dXNDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
aApAQCAtMzUsMTQgKzM1LDI5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBGb2N1
c0NhbmRpZGF0ZTsKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1l
OworY2xhc3MgSFRNTEZyYW1lT3duZXJFbGVtZW50OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEtl
eWJvYXJkRXZlbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFRyZWVTY29wZTsK
IAorY2xhc3MgRm9jdXNTY29wZSB7CitwdWJsaWM6CisgICAgTm9kZSogcm9vdE5vZGUoKSBjb25z
dDsKKyAgICBFbGVtZW50KiBvd25lcigpIGNvbnN0OworICAgIHN0YXRpYyBGb2N1c1Njb3BlIGZv
Y3VzU2NvcGVPZihOb2RlKik7CisgICAgc3RhdGljIEZvY3VzU2NvcGUgZm9jdXNTY29wZU93bmVk
QnlTaGFkb3dIb3N0KE5vZGUqKTsKKyAgICBzdGF0aWMgRm9jdXNTY29wZSBmb2N1c1Njb3BlT3du
ZWRCeUlGcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqKTsKKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBGb2N1c1Njb3BlKFRyZWVTY29wZSopOworICAgIFRyZWVTY29wZSogbV9yb290VHJlZVNj
b3BlOworfTsKKwogY2xhc3MgRm9jdXNDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShGb2N1c0NvbnRyb2xsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
QEAgLTY2LDE2ICs4MSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb250YWluaW5nV2luZG93
SXNWaXNpYmxlKGJvb2wpOwogICAgIGJvb2wgY29udGFpbmluZ1dpbmRvd0lzVmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGFpbmluZ1dpbmRvd0lzVmlzaWJsZTsgfQogCi0gICAgYm9vbCB0
cmFuc2ZlckZvY3VzVG9FbGVtZW50SW5TaGFkb3dSb290KEVsZW1lbnQqIHNoYWRvd0hvc3QsIGJv
b2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKLQogcHJpdmF0ZToKICAgICBGb2N1c0NvbnRy
b2xsZXIoUGFnZSopOwogCiAgICAgYm9vbCBhZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5KEZvY3Vz
RGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CiAgICAgYm9vbCBhZHZhbmNlRm9jdXNJbkRvY3Vt
ZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBib29sIGluaXRpYWxGb2N1
cyk7CiAKLSAgICBOb2RlKiBmaW5kRm9jdXNhYmxlTm9kZUFjcm9zc1RyZWVTY29wZShGb2N1c0Rp
cmVjdGlvbiwgVHJlZVNjb3BlKiBzdGFydFNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVu
dCopOwotICAgIE5vZGUqIGZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURv
Y3VtZW50T3JTaGFkb3dSb290KEZvY3VzRGlyZWN0aW9uLCBOb2RlKiwgS2V5Ym9hcmRFdmVudCop
OworICAgIE5vZGUqIGZpbmRGb2N1c2FibGVOb2RlQWNyb3NzRm9jdXNTY29wZShGb2N1c0RpcmVj
dGlvbiwgRm9jdXNTY29wZSBzdGFydFNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCop
OworICAgIE5vZGUqIGZpbmRGb2N1c2FibGVOb2RlUmVjdXJzaXZlbHkoRm9jdXNEaXJlY3Rpb24s
IEZvY3VzU2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7CisgICAgTm9kZSogZmlu
ZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnQoRm9jdXNEaXJlY3Rp
b24sIE5vZGUqLCBLZXlib2FyZEV2ZW50Kik7CiAKICAgICAvLyBTZWFyY2hlcyB0aHJvdWdoIHRo
ZSBnaXZlbiB0cmVlIHNjb3BlLCBzdGFydGluZyBmcm9tIHN0YXJ0IG5vZGUsIGZvciB0aGUgbmV4
dC9wcmV2aW91cyBzZWxlY3RhYmxlIGVsZW1lbnQgdGhhdCBjb21lcyBhZnRlci9iZWZvcmUgc3Rh
cnQgbm9kZS4KICAgICAvLyBUaGUgb3JkZXIgZm9sbG93ZWQgaXMgYXMgc3BlY2lmaWVkIGluIHNl
Y3Rpb24gMTcuMTEuMSBvZiB0aGUgSFRNTDQgc3BlYywgd2hpY2ggaXMgZWxlbWVudHMgd2l0aCB0
YWIgaW5kZXhlcwpAQCAtODYsMTAgKzEwMCwxMiBAQCBwcml2YXRlOgogICAgIC8vIEByZXR1cm4g
VGhlIGZvY3VzIG5vZGUgdGhhdCBjb21lcyBhZnRlci9iZWZvcmUgc3RhcnQgbm9kZS4KICAgICAv
LwogICAgIC8vIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9pbnRlcmFjdC9mb3Jtcy5o
dG1sI2gtMTcuMTEuMQotICAgIGlubGluZSBOb2RlKiBmaW5kRm9jdXNhYmxlTm9kZShGb2N1c0Rp
cmVjdGlvbiwgVHJlZVNjb3BlKiwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKKyAgICBp
bmxpbmUgTm9kZSogZmluZEZvY3VzYWJsZU5vZGUoRm9jdXNEaXJlY3Rpb24sIEZvY3VzU2NvcGUs
IE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7CisKKyAgICBOb2RlKiBuZXh0Rm9jdXNhYmxl
Tm9kZShGb2N1c1Njb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCopOworICAgIE5vZGUq
IHByZXZpb3VzRm9jdXNhYmxlTm9kZShGb2N1c1Njb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRF
dmVudCopOwogCi0gICAgTm9kZSogbmV4dEZvY3VzYWJsZU5vZGUoVHJlZVNjb3BlKiwgTm9kZSog
c3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKLSAgICBOb2RlKiBwcmV2aW91c0ZvY3VzYWJsZU5vZGUo
VHJlZVNjb3BlKiwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKKyAgICBOb2RlKiBmaW5k
Tm9kZVdpdGhFeGFjdFRhYkluZGV4KE5vZGUqIHN0YXJ0LCBpbnQgdGFiSW5kZXgsIEtleWJvYXJk
RXZlbnQqLCBGb2N1c0RpcmVjdGlvbik7CiAKICAgICBib29sIGFkdmFuY2VGb2N1c0RpcmVjdGlv
bmFsbHlJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IExheW91dFJlY3QmIHN0YXJ0
aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqKTsKICAgICB2b2lkIGZpbmRG
b2N1c0NhbmRpZGF0ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3QgTGF5b3V0UmVj
dCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCosIEZvY3VzQ2Fu
ZGlkYXRlJiBjbG9zZXN0KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkMmI3ZDg5YjY0MzcxZGFlZDNkOTM4MzI1ZjcxOTlm
MmM0ZjI4OThkLi4zODBkN2VlZTIyMzY2NGFmODZlZDIxMzA4NGIyNDhjOWQxZjdlMTMxIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjkgQEAKKzIwMTItMDMtMjEgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21p
dW0ub3JnPgorCisgICAgICAgIE1ha2UgZm9jdXMgbmF2aWdhdGlvbiBiZSBjb21wbGlhbnQgd2l0
aCBTaGFkb3cgRE9NIHNwZWMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03ODU4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogZmFzdC9kb20vc2hhZG93L2ZvY3VzLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvZm9jdXMtbmF2aWdhdGlvbi5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvcmVzb3VyY2VzL3NoYWRvdy1kb20u
anM6CisgICAgICAgIChpc1NoYWRvd0hvc3QpOgorICAgICAgICAoaXNJZnJhbWVFbGVtZW50KToK
KyAgICAgICAgKGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayk6CisgICAgICAgIChkdW1wTm9kZSk6
CisgICAgICAgIChpbm5lcm1vc3RBY3RpdmVFbGVtZW50KToKKyAgICAgICAgKGlzSW5uZXJtb3N0
QWN0aXZlRWxlbWVudCk6CisgICAgICAgIChzaG91bGROYXZpZ2F0ZUZvY3VzKToKKyAgICAgICAg
KG5hdmlnYXRlRm9jdXNGb3J3YXJkKToKKyAgICAgICAgKG5hdmlnYXRlRm9jdXNCYWNrd2FyZCk6
CisgICAgICAgICh0ZXN0Rm9jdXNOYXZpZ2F0aW9uRm93cmFkKToKKyAgICAgICAgKHRlc3RGb2N1
c05hdmlnYXRpb25CYWNrd2FyZCk6CisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3NoYWRvdy1o
b3N0LXRyYW5zZmVyLWZvY3VzLWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMuaHRtbDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93LWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQt
c2hhZG93Lmh0bWw6CisKIDIwMTItMDMtMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmViYXNlbGluZSBhZnRlciByMTEyMTc3LgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2ZvY3VzLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2ZvY3VzLW5hdmlnYXRpb24tZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjAxOTU4ZGUzNmU5NTA5NGVjYjMwZjAxYjNmYTRjZjI4YjZkYTRjMGQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvZm9jdXMtbmF2aWdh
dGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMDYgQEAKK1RoaXMgdGVzdHMgdGhhdCBwcmVz
c2luZyBUYWIga2V5IHNob3VsZCB0cmF2ZXJzZSBpbnRvIHNoYWRvdyBET00gc3VidHJlZXMsIGFu
ZCBwcmVzc2luZyBTaGlmdC1UYWIgc2hvdWxkIHJldmVyc2UgdGhlIG9yZGVyLgorCitTaG91bGQg
bW92ZSBmcm9tIGlucHV0LUEtMSB0byBpbnB1dC1CLTEgaW4gZm9yd2FyZAorUEFTUworU2hvdWxk
IG1vdmUgZnJvbSBpbnB1dC1CLTEgdG8gaW5wdXQtQy0xIGluIGZvcndhcmQKK1BBU1MKK1Nob3Vs
ZCBtb3ZlIGZyb20gaW5wdXQtQy0xIHRvIGhvc3QtQiBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQg
bW92ZSBmcm9tIGhvc3QtQiB0byBob3N0LUIvL3lvdW5nZXItaW5wdXQtQS0xIGluIGZvcndhcmQK
K1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1CLy95b3VuZ2VyLWlucHV0LUEtMSB0byBob3N0
LUIvb2xkZXItaW5wdXQtQS0xIGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9z
dC1CL29sZGVyLWlucHV0LUEtMSB0byBsaWdodC1jaGlsZC1zZWxlY3RlZC0xIGluIGZvcndhcmQK
K1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMSB0byBob3N0LUIv
b2xkZXItaW5wdXQtQi0xIGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1C
L29sZGVyLWlucHV0LUItMSB0byBob3N0LUIvL3lvdW5nZXItaW5wdXQtQi0xIGluIGZvcndhcmQK
K1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMSB0byBob3N0
LUIvL3lvdW5nZXItaW5wdXQtQS0wIGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20g
aG9zdC1CLy95b3VuZ2VyLWlucHV0LUEtMCB0byBob3N0LUIvb2xkZXItaW5wdXQtQS0wIGluIGZv
cndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1CL29sZGVyLWlucHV0LUEtMCB0byBs
aWdodC1jaGlsZC1zZWxlY3RlZC0wIGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20g
bGlnaHQtY2hpbGQtc2VsZWN0ZWQtMCB0byBob3N0LUIvb2xkZXItaW5wdXQtQi0wIGluIGZvcndh
cmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1CL29sZGVyLWlucHV0LUItMCB0byBob3N0
LUIvL3lvdW5nZXItaW5wdXQtQi0wIGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20g
aG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMCB0byBpbnB1dC1ELTEgaW4gZm9yd2FyZAorUEFTUwor
U2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1ELTEgdG8gaW5wdXQtQS0wIGluIGZvcndhcmQKK1BBU1MK
K1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQS0wIHRvIGhvc3QtQS9pbnB1dC0xIGluIGZvcndhcmQK
K1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1BL2lucHV0LTEgdG8gaG9zdC1BL2lucHV0LTIw
IGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1BL2lucHV0LTIwIHRvIGhv
c3QtQS9uZXN0ZWQtaG9zdCBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3Qt
QS9uZXN0ZWQtaG9zdCB0byBob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQtMTUgaW4gZm9yd2FyZAor
UEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQtMTUgdG8gaG9z
dC1BL25lc3RlZC1ob3N0L2lucHV0LTI1IGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZy
b20gaG9zdC1BL25lc3RlZC1ob3N0L2lucHV0LTI1IHRvIGlucHV0LUItMCBpbiBmb3J3YXJkCitQ
QVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUItMCB0byBpbnB1dC1DLTAgaW4gZm9yd2FyZAor
UEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1DLTAgdG8gaW5wdXQtRC0wIGluIGZvcndhcmQK
K1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtRC0wIHRvIGlucHV0LUEtMSBpbiBmb3J3YXJk
CitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUEtMSB0byBpbnB1dC1ELTAgaW4gYmFja3dh
cmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtRC0wIHRvIGlucHV0LUMtMCBpbiBiYWNr
d2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1DLTAgdG8gaW5wdXQtQi0wIGluIGJh
Y2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUItMCB0byBob3N0LUEvbmVzdGVk
LWhvc3QvaW5wdXQtMjUgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1B
L25lc3RlZC1ob3N0L2lucHV0LTI1IHRvIGhvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0xNSBpbiBi
YWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQt
MTUgdG8gaG9zdC1BL25lc3RlZC1ob3N0IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBm
cm9tIGhvc3QtQS9uZXN0ZWQtaG9zdCB0byBob3N0LUEvaW5wdXQtMjAgaW4gYmFja3dhcmQKK1BB
U1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1BL2lucHV0LTIwIHRvIGhvc3QtQS9pbnB1dC0xIGlu
IGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQS9pbnB1dC0xIHRvIGlucHV0
LUEtMCBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1BLTAgdG8gaW5w
dXQtRC0xIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUQtMSB0byBo
b3N0LUIvL3lvdW5nZXItaW5wdXQtQi0wIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBm
cm9tIGhvc3QtQi8veW91bmdlci1pbnB1dC1CLTAgdG8gaG9zdC1CL29sZGVyLWlucHV0LUItMCBp
biBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvb2xkZXItaW5wdXQtQi0w
IHRvIGxpZ2h0LWNoaWxkLXNlbGVjdGVkLTAgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3Zl
IGZyb20gbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMCB0byBob3N0LUIvb2xkZXItaW5wdXQtQS0wIGlu
IGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi9vbGRlci1pbnB1dC1BLTAg
dG8gaG9zdC1CLy95b3VuZ2VyLWlucHV0LUEtMCBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1v
dmUgZnJvbSBob3N0LUIvL3lvdW5nZXItaW5wdXQtQS0wIHRvIGhvc3QtQi8veW91bmdlci1pbnB1
dC1CLTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1CLy95b3VuZ2Vy
LWlucHV0LUItMSB0byBob3N0LUIvb2xkZXItaW5wdXQtQi0xIGluIGJhY2t3YXJkCitQQVNTCitT
aG91bGQgbW92ZSBmcm9tIGhvc3QtQi9vbGRlci1pbnB1dC1CLTEgdG8gbGlnaHQtY2hpbGQtc2Vs
ZWN0ZWQtMSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBsaWdodC1jaGlsZC1z
ZWxlY3RlZC0xIHRvIGhvc3QtQi9vbGRlci1pbnB1dC1BLTEgaW4gYmFja3dhcmQKK1BBU1MKK1No
b3VsZCBtb3ZlIGZyb20gaG9zdC1CL29sZGVyLWlucHV0LUEtMSB0byBob3N0LUIvL3lvdW5nZXIt
aW5wdXQtQS0xIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi8veW91
bmdlci1pbnB1dC1BLTEgdG8gaG9zdC1CIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBm
cm9tIGhvc3QtQiB0byBpbnB1dC1DLTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZy
b20gaW5wdXQtQy0xIHRvIGlucHV0LUItMSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBpbnB1dC1CLTEgdG8gaW5wdXQtQS0xIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92
ZSBmcm9tIGlucHV0LUEtMSB0byBpbnB1dC1ELTAgaW4gYmFja3dhcmQKK1BBU1MKK1Rlc3QgZmlu
aXNoZWQuCisKKworCisKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L2ZvY3VzLW5hdmlnYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9mb2N1
cy1uYXZpZ2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2U3MDk1NzBkZWJlYzMyZDY5OGFhNjRmMWEy
NmQyN2U2ZGZiZjg3NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3No
YWRvdy9mb2N1cy1uYXZpZ2F0aW9uLmh0bWwKQEAgLTAsMCArMSwxNzkgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFkb3ctZG9t
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0cyB0aGF0IHByZXNz
aW5nIFRhYiBrZXkgc2hvdWxkIHRyYXZlcnNlIGludG8gc2hhZG93IERPTSBzdWJ0cmVlcywgYW5k
IHByZXNzaW5nIFNoaWZ0LVRhYiBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIuPC9wPgorPHByZSBp
ZD0iY29uc29sZSI+PC9wcmU+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBwcmVwYXJlRE9NVHJlZShw
YXJlbnQpCit7CisgICAgcGFyZW50LmFwcGVuZENoaWxkKAorICAgICAgICAvLyBGSVhNRTogVXNl
IG1vcmUgZGVzY3JpcHRpdmUgaWRzIGZvciBlYWNoIGVsZW1lbnRzLgorICAgICAgICBjcmVhdGVE
T00oJ2RpdicsIHsnaWQnOiAndG9wLWRpdid9LAorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9N
KCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtQS0xJywgJ3RhYmluZGV4JzogMX0pLAorICAgICAgICAg
ICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtQi0xJywgJ3RhYmluZGV4
JzogMX0pLAorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnKSwgIC8vIFNob3VsZCBu
b3QgYmUgc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0Jywgeydp
ZCc6ICdpbnB1dC1BLTAnLCAndGFiaW5kZXgnOiAwfSksCisgICAgICAgICAgICAgICAgICBjcmVh
dGVET00oJ2RpdicsIHsnaWQnOiAnaG9zdC1BJywgJ3RhYmluZGV4JzogLTF9LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0LTEnLCAndGFiaW5k
ZXgnOiAxfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2
JywgeydpZCc6ICduZXN0ZWQtaG9zdCcsICd0YWJpbmRleCc6IDMwfSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsn
dGFiaW5kZXgnOiAtMX0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0LTE1JywgJ3RhYmluZGV4Jzog
MTV9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVh
dGVET00oJ2lucHV0JywgeydpZCc6ICdpbnB1dC0yNScsICd0YWJpbmRleCc6IDI1fSkpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAn
aW5wdXQtMjAnLCAndGFiaW5kZXgnOiAyMH0pKSksCisgICAgICAgICAgICAgICAgICBjcmVhdGVE
T00oJ2lucHV0JywgeydpZCc6ICdpbnB1dC1DLTEnLCAndGFiaW5kZXgnOiAxfSksCisgICAgICAg
ICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdpbnB1dC1CLTAnLCAndGFiaW5k
ZXgnOiAwfSksCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnaG9z
dC1CJywgJ3RhYmluZGV4JzogMX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRl
U2hhZG93Um9vdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdp
bnB1dCcsIHsnaWQnOiAnb2xkZXItaW5wdXQtQS0wJywgJ3RhYmluZGV4JzogMH0pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdvbGRl
ci1pbnB1dC1BLTEnLCAndGFiaW5kZXgnOiAxfSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZURPTSgnY29udGVudCcsIHsnc2VsZWN0JzogJyNsaWdodC1jaGlsZC1zZWxl
Y3RlZC0wLCAjbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMSd9KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnb2xkZXItaW5wdXQtQi0wJywg
J3RhYmluZGV4JzogMH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVE
T00oJ2lucHV0JywgeydpZCc6ICdvbGRlci1pbnB1dC1CLTEnLCAndGFiaW5kZXgnOiAxfSkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ3lvdW5nZXIt
aW5wdXQtQS0wJywgJ3RhYmluZGV4JzogMH0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICd5b3VuZ2VyLWlucHV0LUEtMScsICd0YWJp
bmRleCc6IDF9KSwgIC8vIFRoZSBmaXJzdCBub2RlIGluIHRoZSBmb2N1c1Njb3BlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnc2hhZG93JyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ3lvdW5nZXIt
aW5wdXQtQi0wJywgJ3RhYmluZGV4JzogMH0pLCAgLy8gVGhlIGxhc3Qgbm9kZSBpbiB0aGUgZm9j
dXNTY29wZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0
JywgeydpZCc6ICd5b3VuZ2VyLWlucHV0LUItMScsICd0YWJpbmRleCc6IDF9KSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnbGlnaHQtY2hp
bGQtc2VsZWN0ZWQtMCcsICd0YWJpbmRleCc6IDB9KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdsaWdodC1jaGlsZC1zZWxlY3RlZC0xJywg
J3RhYmluZGV4JzogMX0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgn
aW5wdXQnLCB7J2lkJzogJ2xpZ2h0LWNoaWxkLW5vbi1zZWxlY3RlZC0xJywgJ3RhYmluZGV4Jzog
MX0pKSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0
LUQtMScsICd0YWJpbmRleCc6IDF9KSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5w
dXQnLCB7J2lkJzogJ2lucHV0LUMtMCcsICd0YWJpbmRleCc6IDB9KSwKKyAgICAgICAgICAgICAg
ICAgIGNyZWF0ZURPTSgnZGl2JywgeydpZCc6ICdob3N0LUMnLCAndGFiaW5kZXgnOiAtMX0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2hhZG93Um9vdCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsndGFiaW5kZXgnOiAtMX0p
KSksCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdpbnB1dC1E
LTAnLCAndGFiaW5kZXgnOiAwfSkpKTsKKworICAgIHBhcmVudC5vZmZzZXRMZWZ0OworfQorCitm
dW5jdGlvbiB0ZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIGlmICghd2lu
ZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJycpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgcHJlcGFyZURPTVRyZWUoZG9jdW1lbnQuYm9keSk7CisKKyAgICAv
LyBGSVhNRTogT3V0cHV0IGluc2VydGVkIGNvbW1lbnRzIGluIHRoaXMgYXJyYXkgdG8gZXhwZWN0
ZWQudHh0IGZvciByZWFkYWJpbGl0eSBvZiB0aGUgcmVzdWx0LgorICAgIGVsZW1lbnRzTmF2aWdh
dGVkSW5Gb3J3YXJkID0gWworICAgICAgICAnaW5wdXQtQS0xJywgJ2lucHV0LUItMScsCisgICAg
ICAgIC8vIFRyYXZlcnNlIGVsZW1lbnRzIHdoaWNoIGhhdmUgdGFiaW5kZXg9MS4KKyAgICAgICAg
Ly8gU2hvdWxkIHNraXAgZXZlcnkgZWxlbWVudHMsIGV2ZW4gdGhvdWdoIHRoZXkgaGF2ZSB0aGUg
c2FtZSB0YWJpbmRleCwgaW4gbm9uLWZvY3VzYWJsZSBzaGFkb3cgaG9zdCAoaWQ9aG9zdC1BKSAK
KyAgICAgICAgLy8gc2luY2Ugbm9uLWZvY3VzYWJsZSBzaGFkb3cgaG9zdCBhY3RlZCBhcyBpZiB0
aGV5IHdlcmUgYXNzaW5nZWQgdG8gdGFiaW5kZXg9MCBzbyBpdCB3YXMgc2tpcHBlZCBpbiB0aGlz
IHR1cm4uCisgICAgICAgICdpbnB1dC1DLTEnLAorCisgICAgICAgIC8vIFRyYXZlcnNlIGEgZm9j
dXNhYmxlIHNoYWRvdyBob3N0LgorICAgICAgICAnaG9zdC1CJywKKworICAgICAgICAvLyBFbnRl
ciBhIGZvY3VzIHNjb3BlIG9mIHRoZSBzaGFkb3cgaG9zdCBhbmQgdHJhdmVzZSB0aGUgZmlyc3Qg
Zm9jdXNhYmxlIG5vZGUgaW4gc2hhZG93IERPTSBuYXZpZ2F0aW9uLgorICAgICAgICAnaG9zdC1C
Ly95b3VuZ2VyLWlucHV0LUEtMScsCisKKyAgICAgICAgLy8gQSA8c2hhZG93PiBlbGVtZW50IHNo
b3VsZCBiZSByZXNvbHZlZC4KKyAgICAgICAgJ2hvc3QtQi9vbGRlci1pbnB1dC1BLTEnLAorCisg
ICAgICAgIC8vIEEgPGNvbnRlbnQ+IGVsZW1lbnQgc2hvdWxkIGJlIHJlc29sdmVkLgorICAgICAg
ICAnbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMScsCisgICAgICAgICdob3N0LUIvb2xkZXItaW5wdXQt
Qi0xJywKKyAgICAgICAgJ2hvc3QtQi8veW91bmdlci1pbnB1dC1CLTEnLAorCisgICAgICAgIC8v
IEFsbCBlbGVtZW50cyB3aXRoIHRhYmluZGV4PTEgaGFkIGJlZW4gdHJhdmVyc2VkLiBTbyBlbGVt
ZW50cyB3aXRoIHRhYmluZGV4PTAgc2hvb3VkIGZvbGxvdy4KKyAgICAgICAgJ2hvc3QtQi8veW91
bmdlci1pbnB1dC1BLTAnLAorICAgICAgICAnaG9zdC1CL29sZGVyLWlucHV0LUEtMCcsCisgICAg
ICAgICdsaWdodC1jaGlsZC1zZWxlY3RlZC0wJywKKyAgICAgICAgJ2hvc3QtQi9vbGRlci1pbnB1
dC1CLTAnLAorICAgICAgICAnaG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMCcsCisKKyAgICAgICAg
Ly8gRXhpdCBhIGZvY3VzIHNjb3BlIG9mIHRoZSBzaGFkb3cgaG9zdCAoaWQ9aG9zdC1CKSBhbmQg
dHJhdmVyc2UgdGhlIG5leHQuCisgICAgICAgICdpbnB1dC1ELTEnLAorCisgICAgICAgIC8vIEFs
bCBlbGVtZW50cyB3aXRoIHRhYmluZGV4PTEgaGFkIGJlZW4gdHJhdmVyc2VkIGluIHRoZSBvdXRl
cm1vc3Qgc2NvcGUuCisgICAgICAgIC8vIFNvIHRyYXZlcnNlIGVsZW1lbnRzIHdpdGggdGFiaW5k
ZXg9MCBpbiBuZXh0LgorICAgICAgICAnaW5wdXQtQS0wJywKKworICAgICAgICAvLyBBIG5vbi1m
b2N1c2FibGUgc2hhZG93IGhvc3QgKGlkPWhvc3QtQSkgd2lsbCBiZSAicmVwbGFjZWQiIHdpdGgg
aXRzIHNoYWRvdyBET00gbmF2aWdhdGlvbi4KKyAgICAgICAgJ2hvc3QtQS9pbnB1dC0xJywKKyAg
ICAgICAgJ2hvc3QtQS9pbnB1dC0yMCcsCisgICAgICAgICdob3N0LUEvbmVzdGVkLWhvc3QnLAor
CisgICAgICAgIC8vIEVudGVyIGEgbmVzdGVkIGZvY3VzIHNjb3BlIGluc2lkZSBvZiBhIHNoYWRv
dyBob3N0IChpZD1uZXN0ZWQtaG9zdCkuCisgICAgICAgICdob3N0LUEvbmVzdGVkLWhvc3QvaW5w
dXQtMTUnLAorICAgICAgICAnaG9zdC1BL25lc3RlZC1ob3N0L2lucHV0LTI1JywKKworICAgICAg
ICAvLyBFeGl0IGEgbmVzdGVkIHNoYWRvdyBob3N0LgorICAgICAgICAnaW5wdXQtQi0wJywKKyAg
ICAgICAgJ2lucHV0LUMtMCcsCisKKyAgICAgICAgLy8gQSBub24tZm9jdXNhYmxlIHNoYWRvdyBo
b3N0IChpZD1ob3N0LUMpLCB3aGljaCBkb2VzIG5vdCBoYXZlIGZvY3VzYWJsZSBlbGVtZW50cywg
c2hvdWxkIGJlIHNraXBwZWQgZW50aXJlbHkuCisgICAgICAgICdpbnB1dC1ELTAnLAorCisgICAg
ICAgIC8vIFdyYXBzIHRvIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBvdXRlcm1vc3QgZm9jdXMg
c2NvcGUuCisgICAgICAgICdpbnB1dC1BLTEnLAorICAgIF07CisKKworICAgIGVsZW1lbnRzTmF2
aWdhdGVkSW5CYWNrd2FyZCA9IFsKKyAgICAgICAgJ2lucHV0LUEtMScsCisgICAgICAgICdpbnB1
dC1ELTAnLAorICAgICAgICAnaW5wdXQtQy0wJywKKyAgICAgICAgJ2lucHV0LUItMCcsCisKKyAg
ICAgICAgLy8gVHJpY2t5IG5hdmlnYXRpb24uIFRyYXZhcnNlIHRoZSBkZWVwbHkgbGFzdCBlbGVt
ZW50IGluIG5lc3RlZCBzaGFkb3cgRE9NIG5hdmlnYXRpb24uCisgICAgICAgICdob3N0LUEvbmVz
dGVkLWhvc3QvaW5wdXQtMjUnLAorICAgICAgICAnaG9zdC1BL25lc3RlZC1ob3N0L2lucHV0LTE1
JywKKyAgICAgICAgJ2hvc3QtQS9uZXN0ZWQtaG9zdCcsCisgICAgICAgICdob3N0LUEvaW5wdXQt
MjAnLAorICAgICAgICAnaG9zdC1BL2lucHV0LTEnLAorCisgICAgICAgIC8vIEV4aXQgYSBzaGFk
byBob3N0LgorICAgICAgICAnaW5wdXQtQS0wJywKKworICAgICAgICAvLyBBbGwgZWxlbWVudHMg
d2l0aCB0YWJpbmRleD0wIGhhZCBiZWVuIHRyYXZlcnNlZC4gU28gdHJhdmVyc2UgZWxlbWVudHMg
d2l0aCB0YWJpbmRleD0xIGluIHJldmVyc2Ugb3JkZXIuCisgICAgICAgICdpbnB1dC1ELTEnLAor
CisgICAgICAgIC8vIFlldCBhbm90aGVyIHRyaWNreSBuYXZpZ2F0aW9uLiBTaG91bGQgdHJhdmVy
c2UgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgc2hhZG93IERPTSBuYXZpZ2F0aW9uLgorICAgICAg
ICAnaG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMCcsCisgICAgICAgICdob3N0LUIvb2xkZXItaW5w
dXQtQi0wJywKKyAgICAgICAgJ2xpZ2h0LWNoaWxkLXNlbGVjdGVkLTAnLAorICAgICAgICAnaG9z
dC1CL29sZGVyLWlucHV0LUEtMCcsCisgICAgICAgICdob3N0LUIvL3lvdW5nZXItaW5wdXQtQS0w
JywKKworICAgICAgICAnaG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMScsCisgICAgICAgICdob3N0
LUIvb2xkZXItaW5wdXQtQi0xJywKKyAgICAgICAgJ2xpZ2h0LWNoaWxkLXNlbGVjdGVkLTEnLAor
ICAgICAgICAnaG9zdC1CL29sZGVyLWlucHV0LUEtMScsCisgICAgICAgICdob3N0LUIvL3lvdW5n
ZXItaW5wdXQtQS0xJywKKworICAgICAgICAvLyBBIHNoYWRvdyBob3N0IHNob3VsZCBiZSBzZWxl
Y3RlZCBqdXN0IGFmdGVyIHRoZSBmaXJzdCBlbGVtZW50IGluIGl0cyBzaGFkb3cgRE9NIG5hdmln
YXRpb24uCisgICAgICAgIC8vIE5vdGUgdGhhdCBhICdmb2N1cycgZXZlbnQgaXMgbm90IGNhbGxl
ZCBoZXJlIHNpbmNlIGEgZm9jdXMgbW92ZXMgd2l0aGluIHRoZSBzYW1lIHNoYWRvdyBob3N0Lgor
ICAgICAgICAnaG9zdC1CJywKKyAgICAgICAgJ2lucHV0LUMtMScsCisgICAgICAgICdpbnB1dC1C
LTEnLAorICAgICAgICAnaW5wdXQtQS0xJywKKworICAgICAgICAvLyBXcmFwcyB0byB0aGUgbGFz
dCBlbGVtZW50IGluIHRoZSBvdXRlcm1vc3QgZm9jdXMgc2NvcGUuCisgICAgICAgICdpbnB1dC1E
LTAnLAorICAgIF07CisKKyAgICB0ZXN0Rm9jdXNOYXZpZ2F0aW9uRm93cmFkKGVsZW1lbnRzTmF2
aWdhdGVkSW5Gb3J3YXJkKTsKKyAgICB0ZXN0Rm9jdXNOYXZpZ2F0aW9uQmFja3dhcmQoZWxlbWVu
dHNOYXZpZ2F0ZWRJbkJhY2t3YXJkKTsKKworICAgIGRlYnVnKCdUZXN0IGZpbmlzaGVkLicpOwor
fQorCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3Jlc291cmNlcy9zaGFkb3ctZG9tLmpzIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3Jlc291cmNlcy9zaGFkb3ctZG9tLmpzCmluZGV4IDE1
NTc2MDIxMjk5ZTEzZjM5MGQ0MzEzNDMxMGU1NWIzYWExMzQwM2UuLmMzYmU4YTcxYTZlZGFiMWVl
N2QxOWRjNzRkNmQ4ZmI4MDdhNjhlNDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9yZXNvdXJjZXMvc2hhZG93LWRvbS5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9zaGFkb3cvcmVzb3VyY2VzL3NoYWRvdy1kb20uanMKQEAgLTM0LDEyICszNCwyMiBAQCBmdW5j
dGlvbiBjcmVhdGVET00odGFnTmFtZSwgYXR0cmlidXRlcykKICAgICByZXR1cm4gZWxlbWVudDsK
IH0KIAorZnVuY3Rpb24gaXNTaGFkb3dIb3N0KG5vZGUpCit7CisgICAgcmV0dXJuIHdpbmRvdy5p
bnRlcm5hbHMub2xkZXN0U2hhZG93Um9vdChub2RlKTsKK30KKwogZnVuY3Rpb24gaXNTaGFkb3dS
b290KG5vZGUpCiB7CiAgICAgLy8gRklYTUU6IHdpbmRvdy5pbnRlcm5hbHMgc2hvdWxkIGhhdmUg
aW50ZXJuYWxzLmlzU2hhZG93Um9vdChub2RlKS4KICAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9
PSAiI3NoYWRvdy1yb290IiB8fCBub2RlLmhvc3Q7CiB9CiAKK2Z1bmN0aW9uIGlzSWZyYW1lRWxl
bWVudChlbGVtZW50KQoreworICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZU5hbWUg
PT0gJ0lGUkFNRSc7Cit9CisKIC8vIFlvdSBjYW4gc3BlZmlmeSB5b3VuZ2VyU2hhZG93Um9vdCBi
eSBjb25zZWN1dGl2ZSBzbGFzaGVzLgogLy8gU2VlIExheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRv
dy9nZXQtZWxlbWVudC1ieS1pZC1pbi1zaGFkb3ctcm9vdC5odG1sIGZvciBhY3R1YWwgdXNhZ2Vz
LgogZnVuY3Rpb24gZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKHBhdGgpCkBAIC00NywxMyArNTcs
MTAxIEBAIGZ1bmN0aW9uIGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhwYXRoKQogICAgIHZhciBp
ZHMgPSBwYXRoLnNwbGl0KCcvJyk7CiAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChpZHNbMF0pOwogICAgIGZvciAodmFyIGkgPSAxOyBub2RlICE9IG51bGwgJiYgaSA8IGlk
cy5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaXNJZnJhbWVFbGVtZW50KG5vZGUpKSB7Cisg
ICAgICAgICAgICBub2RlID0gbm9kZS5jb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRz
W2ldKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAgICAgICAgIGlmIChpc1No
YWRvd1Jvb3Qobm9kZSkpCiAgICAgICAgICAgICBub2RlID0gaW50ZXJuYWxzLnlvdW5nZXJTaGFk
b3dSb290KG5vZGUpOwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgaWYgKGludGVybmFscy5v
bGRlc3RTaGFkb3dSb290KG5vZGUpKQogICAgICAgICAgICAgbm9kZSA9IGludGVybmFscy5vbGRl
c3RTaGFkb3dSb290KG5vZGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbnVs
bDsKICAgICAgICAgaWYgKGlkc1tpXSAhPSAnJykKICAgICAgICAgICAgIG5vZGUgPSBpbnRlcm5h
bHMuZ2V0RWxlbWVudEJ5SWRJblNoYWRvd1Jvb3Qobm9kZSwgaWRzW2ldKTsKICAgICB9CiAgICAg
cmV0dXJuIG5vZGU7CiB9CiAKK2Z1bmN0aW9uIGR1bXBOb2RlKG5vZGUpCit7CisgICAgaWYgKCFu
b2RlKQorICAgICAgcmV0dXJuICdudWxsJzsKKyAgICB2YXIgb3V0cHV0ID0gJycgKyBub2RlOwor
ICAgIGlmIChub2RlLmlkKQorICAgICAgICBvdXRwdXQgKz0gJyBpZD0nICsgbm9kZS5pZDsKKyAg
ICByZXR1cm4gb3V0cHV0OworfQorCitmdW5jdGlvbiBpbm5lcm1vc3RBY3RpdmVFbGVtZW50KGVs
ZW1lbnQpCit7CisgICAgZWxlbWVudCA9IGVsZW1lbnQgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dDsKKyAgICBpZiAoaXNJZnJhbWVFbGVtZW50KGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChlbGVt
ZW50LmNvbnRlbnREb2N1bWVudC5hY3RpdmVFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGlu
bmVybW9zdEFjdGl2ZUVsZW1lbnQoZWxlbWVudC5jb250ZW50RG9jdW1lbnQuYWN0aXZlRWxlbWVu
dCk7CisgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0KKyAgICBpZiAoaXNTaGFkb3dIb3N0
KGVsZW1lbnQpKSB7CisgICAgICAgIHZhciBzaGFkb3dSb290ID0gd2luZG93LmludGVybmFscy5v
bGRlc3RTaGFkb3dSb290KGVsZW1lbnQpOworICAgICAgICB3aGlsZSAoc2hhZG93Um9vdCkgewor
ICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gaW5uZXJtb3N0QWN0aXZlRWxlbWVudChzaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQp
OworICAgICAgICAgICAgc2hhZG93Um9vdCA9IHdpbmRvdy5pbnRlcm5hbHMueW91bmdlclNoYWRv
d1Jvb3Qoc2hhZG93Um9vdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQ7
Cit9CisKK2Z1bmN0aW9uIGlzSW5uZXJtb3N0QWN0aXZlRWxlbWVudChpZCkKK3sKKyAgICB2YXIg
ZWxlbWVudCA9IGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhpZCk7CisgICAgaWYgKCFlbGVtZW50
KSB7CisgICAgICAgIGRlYnVnKCdGQUlMOiBUaGVyZSBpcyBubyBzdWNoIGVsZW1lbnQgd2l0aCBp
ZDogJysgZnJvbSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGVsZW1l
bnQgPT0gaW5uZXJtb3N0QWN0aXZlRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWJ1ZygnRXhwZWN0ZWQgaW5uZXJtb3N0IGFjdGl2ZUVsZW1lbnQgaXMgJyArIGlkICsgJywg
YnV0IGFjdHVhbCBpbm5lcm1vc3QgYWN0aXZlRWxlbWVudCBpcyAnICsgZHVtcE5vZGUoaW5uZXJt
b3N0QWN0aXZlRWxlbWVudCgpKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBz
aG91bGROYXZpZ2F0ZUZvY3VzKGZyb20sIHRvLCBkaXJlY3Rpb24pCit7CisgICAgZGVidWcoJ1No
b3VsZCBtb3ZlIGZyb20gJyArIGZyb20gKyAnIHRvICcgKyB0byArICcgaW4gJyArIGRpcmVjdGlv
bik7CisgICAgdmFyIGZyb21FbGVtZW50ID0gZ2V0Tm9kZUluU2hhZG93VHJlZVN0YWNrKGZyb20p
OworICAgIGlmICghZnJvbUVsZW1lbnQpIHsKKyAgICAgIGRlYnVnKCdGQUlMOiBUaGVyZSBpcyBu
byBzdWNoIGVsZW1lbnQgd2l0aCBpZDogJysgZnJvbSk7CisgICAgICByZXR1cm47CisgICAgfQor
ICAgIGZyb21FbGVtZW50LmZvY3VzKCk7CisgICAgaWYgKGRpcmVjdGlvbiA9PSAnZm9yd2FyZCcp
CisgICAgICAgIG5hdmlnYXRlRm9jdXNGb3J3YXJkKCk7CisgICAgZWxzZQorICAgICAgICBuYXZp
Z2F0ZUZvY3VzQmFja3dhcmQoKTsKKyAgICBpZiAoaXNJbm5lcm1vc3RBY3RpdmVFbGVtZW50KHRv
KSkKKyAgICAgICAgZGVidWcoJ1BBU1MnKTsKKyAgICBlbHNlCisgICAgICAgIGRlYnVnKCdGQUlM
Jyk7Cit9CisKK2Z1bmN0aW9uIG5hdmlnYXRlRm9jdXNGb3J3YXJkKCkKK3sKKyAgICBldmVudFNl
bmRlci5rZXlEb3duKCdcdCcpOworfQorCitmdW5jdGlvbiBuYXZpZ2F0ZUZvY3VzQmFja3dhcmQo
KQoreworICAgIGV2ZW50U2VuZGVyLmtleURvd24oJ1x0JywgWydzaGlmdEtleSddKTsKK30KKwor
ZnVuY3Rpb24gdGVzdEZvY3VzTmF2aWdhdGlvbkZvd3JhZChlbGVtZW50cykKK3sKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSArIDEgPCBlbGVtZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgc2hvdWxk
TmF2aWdhdGVGb2N1cyhlbGVtZW50c1tpXSwgZWxlbWVudHNbaSArIDFdLCAnZm9yd2FyZCcpOwor
fQorCitmdW5jdGlvbiB0ZXN0Rm9jdXNOYXZpZ2F0aW9uQmFja3dhcmQoZWxlbWVudHMpCit7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgKyAxIDwgZWxlbWVudHMubGVuZ3RoOyArK2kpCisgICAgICAg
IHNob3VsZE5hdmlnYXRlRm9jdXMoZWxlbWVudHNbaV0sIGVsZW1lbnRzW2kgKyAxXSwgJ2JhY2t3
YXJkJyk7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93
LWhvc3QtdHJhbnNmZXItZm9jdXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVyLWZvY3VzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZjY4MWIwOWE1YjJjYTE5NjY1NjE4MjIxMmJmNzgyYTdiN2Vl
Yjg1Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMtZXhwZWN0
ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotV2hlbiBhIHNoYWRvdyBob3N0
IGlzIGZvY3VzZWQsIHRoZSBzaGFkb3cgaG9zdCBzaG91bGQgdHJhbnNmZXIgZm9jdXMgdG8gdGhl
IGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50IGluIHRoZSBzaGFkb3cgcm9vdCBpZiB0aGVyZSBpcyBh
biBzdWNoIGFuIGVsZW1lbnQuCi0KLUZvY3VzaW5nOiBzaGFkb3cwCi1QQVNTIGVsZW1lbnRXYXNG
b2N1c2VkKGlucHV0MCkgaXMgZmFsc2UKLVBBU1MgZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQxKSBp
cyB0cnVlCi1QQVNTIGVsZW1lbnRXYXNGb2N1c2VkKGlucHV0MikgaXMgZmFsc2UKLVBBU1MgaW5w
dXQwLnZhbHVlIGlzICIiCi1QQVNTIGlucHV0MS52YWx1ZSBpcyAiIgotUEFTUyBpbnB1dDIudmFs
dWUgaXMgIiIKLVByZXNzaW5nOiAiYSIKLVBBU1MgaW5wdXQwLnZhbHVlIGlzICIiCi1QQVNTIGlu
cHV0MS52YWx1ZSBpcyAiYSIKLVBBU1MgaW5wdXQyLnZhbHVlIGlzICIiCi1QQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVyLWZvY3VzLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9jdXMuaHRt
bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZiNmRhNzRjNzkxNDZhZmRmYjUxMjZi
YjkxNjBjN2RmMTFjZTk3Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXIt
Zm9jdXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTwhRE9DVFlQRSBodG1s
PgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08cD4KLVdoZW4gYSBzaGFkb3cg
aG9zdCBpcyBmb2N1c2VkLCB0aGUgc2hhZG93IGhvc3Qgc2hvdWxkIHRyYW5zZmVyIGZvY3VzIHRv
IHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBpbiB0aGUgc2hhZG93IHJvb3QgaWYgdGhlcmUg
aXMgYW4gc3VjaCBhbiBlbGVtZW50LgotPC9wPgotPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Ci08
c2NyaXB0PgotaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKLSAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOwotCi0gIGZ1bmN0aW9uIHNoYWRvd1Jvb3Qoc2hhZG93SG9zdCkgewotICAg
IHJldHVybiBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChzaGFkb3dIb3N0KTsKLSAgfQotCi0g
IGZ1bmN0aW9uIGFwcGVuZENoaWxkVG9TaGFkb3coc2hhZG93SG9zdCwgY2hpbGQpIHsKLSAgICBy
ZXR1cm4gc2hhZG93Um9vdChzaGFkb3dIb3N0KS5hcHBlbmRDaGlsZChjaGlsZCkKLSAgfQotCi0g
IGZ1bmN0aW9uIGFwcGVuZFNoYWRvd0hvc3QoZG9jLCBwYXJlbnQpIHsKLSAgICB2YXIgc2hhZG93
SG9zdCA9IGRvYy5jcmVhdGVFbGVtZW50KCdwJyk7Ci0gICAgc2hhZG93SG9zdC50YWJJbmRleCA9
IDE7ICAvLyBNYWtlcyBzdXJlIHRoYXQgdGhlIHNoYWRvdyBob3N0IGlzIGZvY3VzYWJsZS4KLSAg
ICBwYXJlbnQgPSBwYXJlbnQgfHwgZG9jLmJvZHk7Ci0gICAgcmV0dXJuIHBhcmVudC5hcHBlbmRD
aGlsZChzaGFkb3dIb3N0KTsKLSAgfQotCi0gIHZhciBmb2N1c2VkRWxlbWVtZW50cyA9IFtdOwot
Ci0gIGZ1bmN0aW9uIGZvY3VzZWQoZWxlbSkgewotICAgIGZvY3VzZWRFbGVtZW50cy5wdXNoKGVs
ZW0pCi0gIH0KLQotICBmdW5jdGlvbiBkb0ZvY3VzKGVsZW0pIHsKLSAgICBmb2N1c2VkRWxlbWVu
dHMgPSBbXQotICAgIGVsZW0uZm9jdXMoKQotICB9Ci0KLSAgZnVuY3Rpb24gZWxlbWVudFdhc0Zv
Y3VzZWQoZWxlbSkgewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9jdXNlZEVsZW1lbnRzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICBpZiAoZm9jdXNlZEVsZW1lbnRzW2ldID09IGVsZW0pIHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotCi0gIC8vIEZvciByZWFkYWJpbGl0eSwgSSBub3RlZCB0aGUgRE9NIHRyZWUgdW5kZXIgdGhl
IHRlc3QgaGVyZS4KLSAgLy8KLSAgLy8gLSBkb2N1bWVudAotICAvLyAgIC0gc2hhZG93MCAodGFi
aW5kZXg9MSkKLSAgLy8gICAgIC0gaW5wdXQwICh0YWJpbmRleD0tMSkKLSAgLy8gICAgIC0gaW5w
dXQxCi0gIC8vICAgICAtIGlucHV0MgotICB2YXIgc2hhZG93MCA9IGFwcGVuZFNoYWRvd0hvc3Qo
ZG9jdW1lbnQpOwotICB2YXIgaW5wdXQwID0gYXBwZW5kQ2hpbGRUb1NoYWRvdyhzaGFkb3cwLCBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKLSAgaW5wdXQwLnRhYkluZGV4ID0gLTEK
LSAgdmFyIGlucHV0MSA9IGFwcGVuZENoaWxkVG9TaGFkb3coc2hhZG93MCwgZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnaW5wdXQnKSk7Ci0gIHZhciBpbnB1dDIgPSBhcHBlbmRDaGlsZFRvU2hhZG93
KHNoYWRvdzAsIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOwotCi0gIHZhciBlbGVt
ZW50SWRzID0gWydzaGFkb3cwJywgJ2lucHV0MCcsICdpbnB1dDEnLCAnaW5wdXQyJ10KLSAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50SWRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgdmFyIGlkID0g
ZWxlbWVudElkc1tpXTsKLSAgICB2YXIgZWxlbWVudCA9IHdpbmRvd1tpZF07Ci0gICAgZWxlbWVu
dC5pZCA9IGlkOwotICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBmdW5jdGlv
bigpIHtmb2N1c2VkKHRoaXMpO30sIGZhbHNlKTsKLSAgfQotCi0gIGRlYnVnKCdGb2N1c2luZzog
c2hhZG93MCcpOwotICBkb0ZvY3VzKHNoYWRvdzApOwotICAvLyBDb21tZW50ZWQgb3V0IGR1ZSB0
byBidWcgNjE0MjEuCi0gIC8vIHNob3VsZEJlVHJ1ZSgnZWxlbWVudFdhc0ZvY3VzZWQoc2hhZG93
MCknKTsKLSAgc2hvdWxkQmVGYWxzZSgnZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQwKScpOwotICBz
aG91bGRCZVRydWUoJ2VsZW1lbnRXYXNGb2N1c2VkKGlucHV0MSknKTsKLSAgc2hvdWxkQmVGYWxz
ZSgnZWxlbWVudFdhc0ZvY3VzZWQoaW5wdXQyKScpOwotICBpZiAod2luZG93LmV2ZW50U2VuZGVy
KSB7Ci0gICAgLy8gTWFrZXMgc3VyZSB0aGF0IHdlIGNhbiBjaGFuZ2UgJ2lucHV0MScgZWxlbWVu
dCdzIHZhbHVlIGJ5IHByZXNzaW5nIGEga2V5LgotICAgIHNob3VsZEJlKCdpbnB1dDAudmFsdWUn
LCAnIiInKTsKLSAgICBzaG91bGRCZSgnaW5wdXQxLnZhbHVlJywgJyIiJyk7Ci0gICAgc2hvdWxk
QmUoJ2lucHV0Mi52YWx1ZScsICciIicpOwotICAgIGRlYnVnKCdQcmVzc2luZzogImEiJykKLSAg
ICBldmVudFNlbmRlci5rZXlEb3duKCdhJyk7Ci0gICAgc2hvdWxkQmUoJ2lucHV0MC52YWx1ZScs
ICciIicpOwotICAgIHNob3VsZEJlKCdpbnB1dDEudmFsdWUnLCAnImEiJyk7Ci0gICAgc2hvdWxk
QmUoJ2lucHV0Mi52YWx1ZScsICciIicpOwotICB9Ci19Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4K
LTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90YWItb3Jk
ZXItaWZyYW1lLWFuZC1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L3RhYi1vcmRlci1pZnJhbWUtYW5kLXNoYWRvdy1leHBlY3RlZC50eHQKaW5kZXggOTNh
NWU4Yzg3NTY2OWJkYmUzNWIyOGJiYWM0MjgxMGRmMzgwNDJkZC4uZjg2YTNhMDZmN2Q0OWM1MTZk
MDgyYmFjY2MxMjVlNWZmYjQ1ODM4OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L3RhYi1vcmRlci1pZnJhbWUtYW5kLXNoYWRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUtYW5kLXNoYWRvdy1leHBl
Y3RlZC50eHQKQEAgLTEsMzQgKzEsNTcgQEAKLVRoaXMgdGVzdHMgdGhhdCBwcmVzc2luZyBUYWIg
a2V5IHNob3VsZCB0cmF2ZXJzZSBpbnRvIGlmcmFtZSBhbmQgc2hhZG93IHRyZWUsIGFuZCBwcmVz
c2luZyBTaGlmdC1UYWIgc2hvdWxkIHJldmVyc2UgdGhlIG9yZGVyLiBNYWtlcyBzdXJlIHRoYXQg
YSBzaGFkb3cgaG9zdCBlbGVtZW50IHNob3VsZCBhY3QgbGlrZSBhIGlmcmFtZSBlbGVtZW50Lgor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDEwNDogVW5jYXVnaHQgUmVmZXJlbmNlRXJyb3I6IGxvZyBp
cyBub3QgZGVmaW5lZAorVGhpcyB0ZXN0cyB0aGF0IHByZXNzaW5nIFRhYiBrZXkgc2hvdWxkIHRy
YXZlcnNlIGludG8gaWZyYW1lIGFuZCBzaGFkb3cgdHJlZSwgYW5kIHByZXNzaW5nIFNoaWZ0LVRh
YiBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIuCiAKLUZvY3VzIGlucHV0LTAxLgotaWQ6aW5wdXQt
MDEodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KLQotUHJlc3MgVGFiIDExIHRpbWVzLgotaWQ6aW5w
dXQtMTModGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KLWlkOmlucHV0LTE1KHRhYkluZGV4PTIpIGlz
IGZvY3VzZWQuCi1pZDppbnB1dC0wMih0YWJJbmRleD0wKSBpcyBmb2N1c2VkLgotaWQ6aW5wdXQt
MDQodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KLWlkOmlmcmFtZS1pbnB1dC0wNih0YWJJbmRleD0x
KSBpcyBmb2N1c2VkLgotaWQ6aWZyYW1lLXNoYWRvdy1pbnB1dC0wOSh0YWJJbmRleD0xKSBpcyBm
b2N1c2VkLgotaWQ6aWZyYW1lLXNoYWRvdy1pbnB1dC0wOCh0YWJJbmRleD0wKSBpcyBmb2N1c2Vk
LgotaWQ6aWZyYW1lLWlucHV0LTEyKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi1pZDppZnJhbWUt
aW5wdXQtMTEodGFiSW5kZXg9MikgaXMgZm9jdXNlZC4KLWlkOmlmcmFtZS1pbnB1dC0wNSh0YWJJ
bmRleD0wKSBpcyBmb2N1c2VkLgotaWQ6aW5wdXQtMTQodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4K
LQotUHJlc3MgU2hpZnQtVGFiIDExIHRpbWVzLgotaWQ6aWZyYW1lLWlucHV0LTA1KHRhYkluZGV4
PTApIGlzIGZvY3VzZWQuCi1pZDppZnJhbWUtaW5wdXQtMTEodGFiSW5kZXg9MikgaXMgZm9jdXNl
ZC4KLWlkOmlmcmFtZS1pbnB1dC0xMih0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgotaWQ6aWZyYW1l
LXNoYWRvdy1pbnB1dC0wOCh0YWJJbmRleD0wKSBpcyBmb2N1c2VkLgotaWQ6aWZyYW1lLXNoYWRv
dy1pbnB1dC0wOSh0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgotaWQ6aWZyYW1lLWlucHV0LTA2KHRh
YkluZGV4PTEpIGlzIGZvY3VzZWQuCi1pZDppbnB1dC0wNCh0YWJJbmRleD0wKSBpcyBmb2N1c2Vk
LgotaWQ6aW5wdXQtMDIodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KLWlkOmlucHV0LTE1KHRhYklu
ZGV4PTIpIGlzIGZvY3VzZWQuCi1pZDppbnB1dC0xMyh0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgot
aWQ6aW5wdXQtMDEodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KLQotVGVzdCBmaW5pc2hlZC4KK1No
b3VsZCBtb3ZlIGZyb20gaW5wdXQtMDEgdG8gaW5wdXQtMTMgaW4gZm9yd2FyZAorUEFTUworU2hv
dWxkIG1vdmUgZnJvbSBpbnB1dC0xMyB0byBpbnB1dC0xNSBpbiBmb3J3YXJkCitQQVNTCitTaG91
bGQgbW92ZSBmcm9tIGlucHV0LTE1IHRvIGlucHV0LTAyIGluIGZvcndhcmQKK1BBU1MKK1Nob3Vs
ZCBtb3ZlIGZyb20gaW5wdXQtMDIgdG8gaG9zdC0wMS9pbnB1dC0wMyBpbiBmb3J3YXJkCitQQVNT
CitTaG91bGQgbW92ZSBmcm9tIGhvc3QtMDEvaW5wdXQtMDMgdG8gaW5wdXQtMDQgaW4gZm9yd2Fy
ZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC0wNCB0byBpZnJhbWUvaW5wdXQtMDYgaW4g
Zm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaW5wdXQtMDYgdG8gaWZyYW1l
L2hvc3QtMDIgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaG9zdC0w
MiB0byBpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOSBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92
ZSBmcm9tIGlmcmFtZS9ob3N0LTAyL2lucHV0LTA5IHRvIGlmcmFtZS9ob3N0LTAyL2lucHV0LTA4
IGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2hvc3QtMDIvaW5wdXQt
MDggdG8gaWZyYW1lL2lucHV0LTEyIGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20g
aWZyYW1lL2lucHV0LTEyIHRvIGlmcmFtZS9pbnB1dC0xMSBpbiBmb3J3YXJkCitQQVNTCitTaG91
bGQgbW92ZSBmcm9tIGlmcmFtZS9pbnB1dC0xMSB0byBpZnJhbWUvaW5wdXQtMDUgaW4gZm9yd2Fy
ZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaW5wdXQtMDUgdG8gaW5wdXQtMTQgaW4g
Zm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC0xNCB0byBpZnJhbWUvaW5wdXQt
MDUgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2lucHV0LTA1IHRv
IGlmcmFtZS9pbnB1dC0xMSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJh
bWUvaW5wdXQtMTEgdG8gaWZyYW1lL2lucHV0LTEyIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQg
bW92ZSBmcm9tIGlmcmFtZS9pbnB1dC0xMiB0byBpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOCBpbiBi
YWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOCB0
byBpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOSB0byBpZnJhbWUvaG9zdC0wMiBpbiBiYWNrd2Fy
ZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaG9zdC0wMiB0byBpZnJhbWUvaW5wdXQt
MDYgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2lucHV0LTA2IHRv
IGlucHV0LTA0IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LTA0IHRv
IGhvc3QtMDEvaW5wdXQtMDMgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9z
dC0wMS9pbnB1dC0wMyB0byBpbnB1dC0wMiBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBpbnB1dC0wMiB0byBpbnB1dC0xNSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBpbnB1dC0xNSB0byBpbnB1dC0xMyBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBpbnB1dC0xMyB0byBpbnB1dC0wMSBpbiBiYWNrd2FyZAorUEFTUwogCiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFk
b3cuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFu
ZC1zaGFkb3cuaHRtbAppbmRleCAxMGU5MTYyZTRjNDhjMjkwOGI1NTc1YmE5MGU2NGZlOTIwMTI1
MWNkLi41OGJiYThhMDg1NjBmZDliNDU4ZmE2ZTUxMjcyNmMxZjUxNWI3MWRlIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUt
YW5kLXNoYWRvdy5odG1sCkBAIC0xLDM3ICsxLDE4IEBACiA8IURPQ1RZUEUgaHRtbD4KIDxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhZG93LWRvbS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+CiA8Ym9keT4KLTxwPlRoaXMgdGVzdHMgdGhhdCBwcmVzc2luZyBUYWIga2V5
IHNob3VsZCB0cmF2ZXJzZSBpbnRvIGlmcmFtZSBhbmQgc2hhZG93IHRyZWUsIGFuZCBwcmVzc2lu
ZyBTaGlmdC1UYWIgc2hvdWxkIHJldmVyc2UgdGhlIG9yZGVyLgotIE1ha2VzIHN1cmUgdGhhdCBh
IHNoYWRvdyBob3N0IGVsZW1lbnQgc2hvdWxkIGFjdCBsaWtlIGEgaWZyYW1lIGVsZW1lbnQuPC9w
PgorPHA+VGhpcyB0ZXN0cyB0aGF0IHByZXNzaW5nIFRhYiBrZXkgc2hvdWxkIHRyYXZlcnNlIGlu
dG8gaWZyYW1lIGFuZCBzaGFkb3cgdHJlZSwgYW5kIHByZXNzaW5nIFNoaWZ0LVRhYiBzaG91bGQg
cmV2ZXJzZSB0aGUgb3JkZXIuPC9wPgogPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CiA8c2NyaXB0
PgotZnVuY3Rpb24gbG9nKG1zZykgewotICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjb25z
b2xlJykudGV4dENvbnRlbnQgKz0gKG1zZyArICdcbicpOwotfQotCi1mdW5jdGlvbiBkZXNjcmlw
dGlvbihlbGVtZW50KSB7Ci0gICB2YXIgbXNnID0gJyc7Ci0gICAgaWYgKGVsZW1lbnQuaWQpIHsK
LSAgICAgIG1zZyArPSAnaWQ6JyArIGVsZW1lbnQuaWQ7Ci0gICAgfQotICAgIG1zZyArPSAnKHRh
YkluZGV4PScgKyBlbGVtZW50LnRhYkluZGV4ICsgJyknOwotICAgIHJldHVybiBtc2c7Ci19Ci0K
LWZ1bmN0aW9uIG9uRm9jdXMoZXZlbnQpIHsKLSAgICBsb2coZGVzY3JpcHRpb24oZXZlbnQudGFy
Z2V0KSArICcgaXMgZm9jdXNlZC4nKTsKLX0KLQotZnVuY3Rpb24gYWRkRm9jdXNFdmVudExpc3Rl
bmVyKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgb25G
b2N1cywgZmFsc2UpOwotfQotCiBmdW5jdGlvbiBjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywg
aWQsIHRhYkluZGV4KSB7CiAgICAgdmFyIGlucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0
Jyk7CiAgICAgaW5wdXQudHlwZSA9ICd0ZXh0JzsKICAgICBpbnB1dC5pZCA9IGlkOwogICAgIGlu
cHV0LnRhYkluZGV4ID0gdGFiSW5kZXg7Ci0gICAgYWRkRm9jdXNFdmVudExpc3RlbmVyKGlucHV0
KTsKICAgICByZXR1cm4gaW5wdXQ7CiB9CiAKQEAgLTQ0LDEwICsyNSwxMSBAQCBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAKICAgICBmdW5jdGlvbiBhZGRTaGFkb3dIb3N0KGRv
YykgewogICAgICAgICB2YXIgc2hhZG93SG9zdCA9IGRvYy5jcmVhdGVFbGVtZW50KCdwJyk7Ci0g
ICAgICAgIHNoYWRvd0hvc3QudGFiSW5kZXggPSAtMTsgIC8vIFRoaXMgc2hhZG93IGhvc3QgKGFu
ZCBhIHNoYWRvdyB0cmVlIGluIHRoYXQpIHNob3VsZCBiZSBza2lwcGVkLgorICAgICAgICBzaGFk
b3dIb3N0LmlkID0gJ2hvc3QtMDEnOworICAgICAgICBzaGFkb3dIb3N0LnRhYkluZGV4ID0gLTE7
CiAgICAgICAgIHZhciBzaGFkb3cgPSBpbnRlcm5hbHMuZW5zdXJlU2hhZG93Um9vdChzaGFkb3dI
b3N0KTsKICAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc2hhZG93SG9zdCk7Ci0gICAgICAg
IHNoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ3NoYWRvdy1p
bnB1dC0wMycsIDApKTsKKyAgICAgICAgc2hhZG93LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1
dEVsZW1lbnQoZG9jLCAnaW5wdXQtMDMnLCAwKSk7CiAgICAgfQogICAgIGFkZFNoYWRvd0hvc3Qo
ZG9jKTsKIApAQCAtNTUsMjcgKzM3LDI5IEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKIAogICAgIGZ1bmN0aW9uIGFkZElmcmFtZShkb2MpIHsKICAgICAgICAgdmFyIGlmcmFt
ZSA9IGRvYy5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICAgICAgaWZyYW1lLmlkID0gJ2lm
cmFtZSc7CiAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CiAgICAgICAgIGRv
YyA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQ7CiAKLSAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hp
bGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtaW5wdXQtMDUnLCAwKSk7Ci0g
ICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAn
aWZyYW1lLWlucHV0LTA2JywgMSkpOwotICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVh
dGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lmcmFtZS1pbnB1dC0wNycsIC0xKSk7CisgICAgICAg
IGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQt
MDUnLCAwKSk7CisgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVs
ZW1lbnQoZG9jLCAnaW5wdXQtMDYnLCAxKSk7CisgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxk
KGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMDcnLCAtMSkpOwogCiAgICAgICAg
IGZ1bmN0aW9uIGFkZFNoYWRvd0hvc3QoZG9jKSB7CiAgICAgICAgICAgICB2YXIgc2hhZG93SG9z
dCA9IGRvYy5jcmVhdGVFbGVtZW50KCdwJyk7CisgICAgICAgICAgICBzaGFkb3dIb3N0LmlkID0g
J2hvc3QtMDInOwogICAgICAgICAgICAgc2hhZG93SG9zdC50YWJJbmRleCA9IDE7CiAgICAgICAg
ICAgICB2YXIgc2hhZG93ID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qoc2hhZG93SG9zdCk7
CiAgICAgICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChzaGFkb3dIb3N0KTsKIAotICAgICAg
ICAgICAgc2hhZG93LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaWZy
YW1lLXNoYWRvdy1pbnB1dC0wOCcsIDApKTsKLSAgICAgICAgICAgIHNoYWRvdy5hcHBlbmRDaGls
ZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lmcmFtZS1zaGFkb3ctaW5wdXQtMDknLCAx
KSk7Ci0gICAgICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVu
dChkb2MsICdpZnJhbWUtc2hhZG93LWlucHV0LTEwJywgLTEpKTsKKyAgICAgICAgICAgIHNoYWRv
dy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTA4JywgMCkp
OworICAgICAgICAgICAgc2hhZG93LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQo
ZG9jLCAnaW5wdXQtMDknLCAxKSk7CisgICAgICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3Jl
YXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpbnB1dC0xMCcsIC0xKSk7CiAgICAgICAgIH0KICAg
ICAgICAgYWRkU2hhZG93SG9zdChkb2MpOwogCi0gICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxk
KGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaWZyYW1lLWlucHV0LTExJywgMikpOwotICAg
ICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lm
cmFtZS1pbnB1dC0xMicsIDEpKTsKKyAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRl
VGV4dElucHV0RWxlbWVudChkb2MsICdpbnB1dC0xMScsIDIpKTsKKyAgICAgICAgZG9jLmJvZHku
YXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpbnB1dC0xMicsIDEpKTsK
ICAgICB9CiAgICAgYWRkSWZyYW1lKGRvYyk7CiAKQEAgLTgzLDIwICs2Nyw0MCBAQCBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3Jl
YXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpbnB1dC0xNCcsIDApKTsKICAgICBkb2MuYm9keS5h
cHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTE1JywgMikpOwog
Ci0gICAgbG9nKCdGb2N1cyBpbnB1dC0wMS4nKTsKLSAgICBkb2MuZ2V0RWxlbWVudEJ5SWQoJ2lu
cHV0LTAxJykuZm9jdXMoKTsKKyAgICB0ZXN0Rm9jdXNOYXZpZ2F0aW9uRm93cmFkKFsKKyAgICAg
ICAgJ2lucHV0LTAxJywKKyAgICAgICAgJ2lucHV0LTEzJywKKyAgICAgICAgJ2lucHV0LTE1JywK
KyAgICAgICAgJ2lucHV0LTAyJywKKyAgICAgICAgJ2hvc3QtMDEvaW5wdXQtMDMnLAorICAgICAg
ICAnaW5wdXQtMDQnLAorICAgICAgICAnaWZyYW1lL2lucHV0LTA2JywKKyAgICAgICAgJ2lmcmFt
ZS9ob3N0LTAyJywKKyAgICAgICAgJ2lmcmFtZS9ob3N0LTAyL2lucHV0LTA5JywKKyAgICAgICAg
J2lmcmFtZS9ob3N0LTAyL2lucHV0LTA4JywKKyAgICAgICAgJ2lmcmFtZS9pbnB1dC0xMicsCisg
ICAgICAgICdpZnJhbWUvaW5wdXQtMTEnLAorICAgICAgICAnaWZyYW1lL2lucHV0LTA1JywKKyAg
ICAgICAgJ2lucHV0LTE0JywKKyAgICBdKTsKKworICAgIHRlc3RGb2N1c05hdmlnYXRpb25CYWNr
d2FyZChbCisgICAgICAgICdpbnB1dC0xNCcsCisgICAgICAgICdpZnJhbWUvaW5wdXQtMDUnLAor
ICAgICAgICAnaWZyYW1lL2lucHV0LTExJywKKyAgICAgICAgJ2lmcmFtZS9pbnB1dC0xMicsCisg
ICAgICAgICdpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOCcsCisgICAgICAgICdpZnJhbWUvaG9zdC0w
Mi9pbnB1dC0wOScsCisgICAgICAgICdpZnJhbWUvaG9zdC0wMicsCisgICAgICAgICdpZnJhbWUv
aW5wdXQtMDYnLAorICAgICAgICAnaW5wdXQtMDQnLAorICAgICAgICAnaG9zdC0wMS9pbnB1dC0w
MycsCisgICAgICAgICdpbnB1dC0wMicsCisgICAgICAgICdpbnB1dC0xNScsCisgICAgICAgICdp
bnB1dC0xMycsCisgICAgICAgICdpbnB1dC0wMScsCisgICAgXSk7CiAKLSAgICBpZiAod2luZG93
LmV2ZW50U2VuZGVyKSB7Ci0gICAgICAgIHZhciBwcmVzc2VkID0gMTE7Ci0gICAgICAgIGxvZygn
XG5QcmVzcyBUYWIgJyArIHByZXNzZWQgKyAnIHRpbWVzLicpOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHByZXNzZWQ7ICsraSkgewotICAgICAgICAgICAgZXZlbnRTZW5kZXIua2V5RG93
bignXHQnKTsKLSAgICAgICAgfQotICAgICAgICBsb2coJ1xuUHJlc3MgU2hpZnQtVGFiICcgKyBw
cmVzc2VkICsgJyB0aW1lcy4nKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVzc2Vk
OyArK2kpIHsKLSAgICAgICAgICAgIGV2ZW50U2VuZGVyLmtleURvd24oJ1x0JywgWydzaGlmdEtl
eSddKTsKLSAgICAgICAgfQotICAgfQogICAgbG9nKCdcblRlc3QgZmluaXNoZWQuJyk7CiB9CiA8
L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134492</attachid>
            <date>2012-03-28 21:15:06 -0700</date>
            <delta_ts>2012-03-29 01:45:13 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-78588-20120329131504.patch</filename>
            <type>text/plain</type>
            <size>57469</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjE3MWM1MjFlOWY3MTYw
OTI5YzdlOWRmMjViNzg0MWQyNDNiODgyMS4uOTJmMjU2MDQyYTNlYjVlNWMwNjBmZWVlZGI0NDYz
NTFkM2IxM2ViNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTAzLTIxICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBMZXQgZm9jdXMgbmF2aWdh
dGlvbiBiZSBjb21wbGlhbnQgd2l0aCBTaGFkb3cgRE9NIHNwZWMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU4OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IERpbWl0cmkgR2xhemtvdi4KKworICAgICAgICBTZXF1ZW50aWFsIGZvY3VzIG5hdmlnYXRp
b24gbm93IGJlaGF2ZXMgZXhhY3RseSBhcyBzcGVjaWZpZWQgaW4gdGhlIFNoYWRvdyBET00gc3Bl
Yy4KKworICAgICAgICBBY2NvcmRpbmcgdG8gdGhlIFNoYWRvdyBET00gc3BlYzoKKyAgICAgICAg
VGhlIHNoYWRvdyBET00gbmF2aWdhdGlvbiBvcmRlciBzZXF1ZW5jZSBpcyBpbnNlcnRlZCBpbnRv
IHRoZSBkb2N1bWVudCBuYXZpZ2F0aW9uIG9yZGVyOgorICAgICAgICAxLiBpbW1lZGlhdGVseSBh
ZnRlciB0aGUgc2hhZG93IGhvc3QsIGlmIHRoZSBzaGFkb3cgaG9zdCBpcyBmb2N1c2FibGU7IG9y
CisgICAgICAgIDIuIGluIHBsYWNlIG9mIHRoZSBzaGFkb3cgaG9zdCBhcyBpZiB0aGUgc2hhZG93
IGhvc3Qgd2VyZSBhc3NpZ25lZCB0aGUgdmFsdWUgb2YgYXV0byBmb3IgZGV0ZXJtaW5pbmcgaXRz
IHBvc2l0aW9uLgorCisgICAgICAgIFByaW9yIHRvIHRoaXMgcGF0Y2gsIHNlcXVlbnRpYWwgZm9j
dXMgbmF2aWdhdGlvbiBnb2VzIGludG8gU2hhZG93IERPTSwgYnV0IGl0IGlzIGluY29tcGxldGUK
KyAgICAgICAgc2luY2UgaW5zZXJ0aW9uIHBvaW50cywgc3VjaCBhcyA8Y29udGVudD4gZWxlbWVu
dHMgb3IgPHNoYWRvdz4gZWxlbWVudHMsIGFyZSBub3QgcmVzb2x2ZWQgYXQgYWxsLgorICAgICAg
ICBOb3cgZm9jdXMgbmF2aWdhdGlvbiBjYW4gdHJhdmVyc2Ugc2hhZG93IERPTSBzdWJ0cmVlcyBp
biAncmVpZmllZCB0cmVlIG9yZGVyJywgcmVzb2x2aW5nIGxvd2VyIGJvdW5kYXJpZXMgdHJhbnNw
YXJlbnRseS4KKworICAgICAgICBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAgICAgICAgUHJpb3Ig
dG8gdGhpcyBwYXRjaCwgc2VxdWVudGlhbCBmb2N1cyBuYXZpZ2F0aW9uIGRvZXMgbm90IGdvIGlu
dG8gU2hhZG93IERPTSBpZiBhIHNoYWRvdyBob3N0IGlzIG5vbi1mb2N1c2FibGUuCisgICAgICAg
IE5vdyBmb2N1cyBuYXZpZ2F0aW9uIG11c3QgZ28gaW50byBTaGFkb3cgRE9NIHN1YnRyZWVzIGV2
ZW4gaWYgYSBzaG93IGhvc3QgaXMgbm90IGZvY3VzYWJsZSBhcyBkZXNjcmliZWQgaW4gMikuCisg
ICAgICAgIFRvIHN1cHBvcnQgdGhpcyBiZWhhdmlvciwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VkIGFk
anVzdGVkVGFiSW5kZXgoKSBsb2NhbGx5IGluIEZvY3VzQ29udHJvbGxlciBzbyB0aGF0CisgICAg
ICAgIGl0IGRvZXMgbm90IHNraXAgYSBub24tZm9jdXNhYmxlIHNoYWRvdyBob3N0IGluIGN1cnJl
bnQgZm9jdXMgc2NvcGUuCisgICAgICAgIEFmdGVyIGZpbmRpbmcgYSAqcHNldWRvKiBmb2N1c2Fi
bGUgZWxlbWVudCBpbiBjdXJyZW50IGZvY3VzIHNjb3BlLCBpdCB0cmllcyB0byByZXNvbHZlIGEg
Zm9jdXNlZCBlbGVtZW50IHJlY3Vyc2l2ZWx5LAorICAgICAgICBjb25zaWRlcmluZyBhIG5lc3Rl
ZCBmb2N1cyBzY29wZSBpbnNpZGUgb2YgYSBzaGFkb3cgaG9zdCBvciBpZnJhbWUuCisgICAgICAg
IFRvIHRyYXZlcnNlIFNoYWRvdyBET00gc3VidHJlZXMsIGEgRm9jdXNDb250cm9sbGVyIG1ha2Vz
IHVzZSBvZiBSZWlmaWVkVHJlZVRyYXZlcnNhbCBBUElzLCB3aGljaCB3YXMgaW50cm9kdWNlZCBp
biByMTEyMDU1LgorCisgICAgICAgIFRoaXMgY2hhbmdlIGRvZXMgbm90IGFmZmVjdCBhbiBleGlz
dGluZyBiZWhhdmlvciBpZiBhIHNoYWRvdyBkb20gaXMgbm90IGludm9sdmVkLgorCisgICAgICAg
IFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9mb2N1cy1uYXZpZ2F0aW9uLmh0bWwKKworICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZvY3VzKToKKyAg
ICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1No
YWRvd0hvc3QpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c1Nj
b3BlOjpGb2N1c1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzU2NvcGU6OnJvb3ROb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzU2NvcGU6Om93bmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvY3VzU2NvcGU6OmZvY3VzU2NvcGVPZik6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c1Nj
b3BlOjpmb2N1c1Njb3BlT3duZWRCeVNoYWRvd0hvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9j
dXNTY29wZTo6Zm9jdXNTY29wZU93bmVkQnlJRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6aGFz
Q3VzdG9tRm9jdXNMb2dpYyk6CisgICAgICAgIChXZWJDb3JlOjppc05vbkZvY3VzYWJsZVNoYWRv
d0hvc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNGb2N1c2FibGVTaGFkb3dIb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmFkanVzdGVkVGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxk
VmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNhYmxl
Tm9kZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
b2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlQWNyb3NzRm9jdXNTY29w
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2Rl
UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kRm9j
dXNhYmxlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmZpbmROb2Rl
V2l0aEV4YWN0VGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dE5vZGVXaXRoR3JlYXRl
clRhYkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTm9kZVdpdGhMb3dlclRhYklu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6bmV4dEZvY3VzYWJsZU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpwcmV2aW91c0ZvY3VzYWJs
ZU5vZGUpOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKEZvY3VzU2NvcGUpOgorICAgICAgICAoRm9jdXNDb250cm9sbGVyKToK
KwogMjAxMi0wMy0yNiAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBNYWtlIGZpbHRlcnMgYW5kIHRoZSB0aHJlYWRlZCBjb21wb3NpdG9yIHBsYXkg
d2VsbCB0b2dldGhlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBiMjliZmI0YTVlMjMwNWM1
YTFjNmU4ZWIxZDI0YTliZGI4ZGRjYTA5Li45NTMyNzA4MDM1NTc2N2RlYTgyNmYzNjlkYmYyZDE1
MGVlMWU2MGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xNTQ4LDggKzE1NDgsNiBAQCB2
b2lkIEVsZW1lbnQ6OmZvY3VzKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKQogICAgICAg
ICAvLyBJZiBhIGZvY3VzIGV2ZW50IGhhbmRsZXIgY2hhbmdlcyB0aGUgZm9jdXMgdG8gYSBkaWZm
ZXJlbnQgbm9kZSBpdAogICAgICAgICAvLyBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGNvbnRpbnVl
IGFuZCB1cGRhdGUgYXBwZWFyZW5jZS4KICAgICAgICAgcHJvdGVjdCA9IHRoaXM7Ci0gICAgICAg
IGlmIChoYXNTaGFkb3dSb290KCkgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnRyYW5zZmVy
Rm9jdXNUb0VsZW1lbnRJblNoYWRvd1Jvb3QodGhpcywgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9u
KSkKLSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFwYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+c2V0Rm9jdXNlZE5vZGUodGhpcywgZG9jLT5mcmFtZSgpKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKaW5kZXgg
ZmIxNmRmMDIxYjZiNDY3MjYwOTk5YWFkZDlhZjFlMjA1ZjBkYTQzOS4uNTA0ZTRiZWEzY2NhOWM0
ZGQ1N2M5YmYxZTFiMzY5ODk5YWVlODRhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250
cm9sbGVyLmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZWlmaWVk
VHJlZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCkBAIC02NSw2ICs2Niw1NCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAorc3RhdGljIGlubGluZSBib29sIGlzU2hhZG93SG9zdChjb25zdCBO
b2RlKiBub2RlKQoreworICAgIHJldHVybiBub2RlICYmIG5vZGUtPmlzRWxlbWVudE5vZGUoKSAm
JiB0b0VsZW1lbnQobm9kZSktPmhhc1NoYWRvd1Jvb3QoKTsKK30KKworRm9jdXNTY29wZTo6Rm9j
dXNTY29wZShUcmVlU2NvcGUqIHRyZWVTY29wZSkKKyAgICA6IG1fcm9vdFRyZWVTY29wZSh0cmVl
U2NvcGUpCit7CisgICAgQVNTRVJUKHRyZWVTY29wZSk7CisgICAgQVNTRVJUKCF0cmVlU2NvcGUt
PnJvb3ROb2RlKCktPmlzU2hhZG93Um9vdCgpIHx8IHRvU2hhZG93Um9vdCh0cmVlU2NvcGUtPnJv
b3ROb2RlKCkpLT5pc1lvdW5nZXN0KCkpOworfQorCitOb2RlKiBGb2N1c1Njb3BlOjpyb290Tm9k
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcm9vdFRyZWVTY29wZS0+cm9vdE5vZGUoKTsKK30K
KworRWxlbWVudCogRm9jdXNTY29wZTo6b3duZXIoKSBjb25zdAoreworICAgIE5vZGUqIHJvb3Qg
PSByb290Tm9kZSgpOworICAgIGlmIChyb290LT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmV0
dXJuIHJvb3QtPnNoYWRvd0hvc3QoKTsKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gcm9vdC0+ZG9j
dW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZyYW1lLT5vd25lckVsZW1lbnQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworRm9jdXNTY29wZSBGb2N1c1Njb3BlOjpmb2N1c1Njb3BlT2Yo
Tm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgVHJlZVNjb3BlKiBzY29wZSA9
IG5vZGUtPnRyZWVTY29wZSgpOworICAgIGlmIChzY29wZS0+cm9vdE5vZGUoKS0+aXNTaGFkb3dS
b290KCkpCisgICAgICAgIHJldHVybiBGb2N1c1Njb3BlKHRvU2hhZG93Um9vdChzY29wZS0+cm9v
dE5vZGUoKSktPnRyZWUoKS0+eW91bmdlc3RTaGFkb3dSb290KCkpOworICAgIHJldHVybiBGb2N1
c1Njb3BlKHNjb3BlKTsKK30KKworRm9jdXNTY29wZSBGb2N1c1Njb3BlOjpmb2N1c1Njb3BlT3du
ZWRCeVNoYWRvd0hvc3QoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoaXNTaGFkb3dIb3N0KG5v
ZGUpKTsKKyAgICByZXR1cm4gRm9jdXNTY29wZSh0b0VsZW1lbnQobm9kZSktPnNoYWRvd1RyZWUo
KS0+eW91bmdlc3RTaGFkb3dSb290KCkpOworfQorCitGb2N1c1Njb3BlIEZvY3VzU2NvcGU6OmZv
Y3VzU2NvcGVPd25lZEJ5SUZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWUpCit7Cisg
ICAgQVNTRVJUKGZyYW1lICYmIGZyYW1lLT5jb250ZW50RnJhbWUoKSk7CisgICAgcmV0dXJuIEZv
Y3VzU2NvcGUoZnJhbWUtPmNvbnRlbnRGcmFtZSgpLT5kb2N1bWVudCgpKTsKK30KKwogc3RhdGlj
IGlubGluZSB2b2lkIGRpc3BhdGNoRXZlbnRzT25XaW5kb3dBbmRGb2N1c2VkTm9kZShEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgZm9jdXNlZCkKIHsKICAgICAvLyBJZiB3ZSBoYXZlIGEgZm9jdXNl
ZCBub2RlIHdlIHNob3VsZCBkaXNwYXRjaCBibHVyIG9uIGl0IGJlZm9yZSB3ZSBibHVyIHRoZSB3
aW5kb3cuCkBAIC04NCw2ICsxMzMsMzUgQEAgc3RhdGljIGlubGluZSB2b2lkIGRpc3BhdGNoRXZl
bnRzT25XaW5kb3dBbmRGb2N1c2VkTm9kZShEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wKICAgICAg
ICAgZG9jdW1lbnQtPmZvY3VzZWROb2RlKCktPmRpc3BhdGNoRm9jdXNFdmVudCgwKTsKIH0KIAor
c3RhdGljIGlubGluZSBib29sIGhhc0N1c3RvbUZvY3VzTG9naWMoTm9kZSogbm9kZSkKK3sKKyAg
ICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZSh0
ZXh0YXJlYVRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgbm9kZS0+aGFzVGFn
TmFtZShhdWRpb1RhZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc05vbkZvY3VzYWJsZVNo
YWRvd0hvc3QoTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJU
KG5vZGUpOworICAgIHJldHVybiAhbm9kZS0+aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCkgJiYg
aXNTaGFkb3dIb3N0KG5vZGUpICYmICFoYXNDdXN0b21Gb2N1c0xvZ2ljKG5vZGUpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgaXNGb2N1c2FibGVTaGFkb3dIb3N0KE5vZGUqIG5vZGUsIEtleWJv
YXJkRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICByZXR1cm4gbm9kZS0+
aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCkgJiYgaXNTaGFkb3dIb3N0KG5vZGUpICYmICFoYXND
dXN0b21Gb2N1c0xvZ2ljKG5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFRh
YkluZGV4KE5vZGUqIG5vZGUsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChu
b2RlKTsKKyAgICByZXR1cm4gaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KG5vZGUsIGV2ZW50KSA/
IDAgOiBub2RlLT50YWJJbmRleCgpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVmlz
aXQoTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKG5vZGUp
OworICAgIHJldHVybiBub2RlLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSB8fCBpc05vbkZv
Y3VzYWJsZVNoYWRvd0hvc3Qobm9kZSwgZXZlbnQpOworfQorCiBGb2N1c0NvbnRyb2xsZXI6OkZv
Y3VzQ29udHJvbGxlcihQYWdlKiBwYWdlKQogICAgIDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2lz
QWN0aXZlKGZhbHNlKQpAQCAtMTUzLDUyICsyMzEsMTYgQEAgdm9pZCBGb2N1c0NvbnRyb2xsZXI6
OnNldEZvY3VzZWQoYm9vbCBmb2N1c2VkKQogICAgIH0KIH0KIAotc3RhdGljIGlubGluZSBTaGFk
b3dSb290KiBzaGFkb3dSb290KE5vZGUqIG5vZGUpCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZp
bmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50KEZvY3VzRGlyZWN0
aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAg
cmV0dXJuIG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmhhc1NoYWRv
d1Jvb3QoKSA/IHRvRWxlbWVudChub2RlKS0+c2hhZG93VHJlZSgpLT55b3VuZ2VzdFNoYWRvd1Jv
b3QoKSA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1RyZWVTY29wZU93bmVyKE5vZGUq
IG5vZGUpCi17Ci0gICAgcmV0dXJuIG5vZGUgJiYgKG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQo
KSB8fCBzaGFkb3dSb290KG5vZGUpKTsKLX0KLQotYm9vbCBGb2N1c0NvbnRyb2xsZXI6OnRyYW5z
ZmVyRm9jdXNUb0VsZW1lbnRJblNoYWRvd1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgYm9vbCBy
ZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pCi17Ci0gICAgQVNTRVJUKHNoYWRvd1Jvb3Qoc2hhZG93
SG9zdCkpOwotICAgIE5vZGUqIG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZURlY2VuZGluZ0Rvd25J
bnRvRnJhbWVEb2N1bWVudE9yU2hhZG93Um9vdChGb2N1c0RpcmVjdGlvbkZvcndhcmQsIHNoYWRv
d0hvc3QsIDApOwotICAgIGlmIChzaGFkb3dIb3N0ID09IG5vZGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB0b0VsZW1lbnQobm9kZSktPmZvY3VzKHJlc3RvcmVQcmV2aW91c1NlbGVjdGlv
bik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBoYXNDdXN0b21G
b2N1c0xvZ2ljKE5vZGUqIG5vZGUpCi17Ci0gICAgcmV0dXJuIG5vZGUtPmhhc1RhZ05hbWUoaW5w
dXRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpIHx8IG5vZGUtPmhhc1RhZ05h
bWUodmlkZW9UYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYXVkaW9UYWcpOwotfQotCi1Ob2RlKiBG
b2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURv
Y3VtZW50T3JTaGFkb3dSb290KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSwg
S2V5Ym9hcmRFdmVudCogZXZlbnQpCi17Ci0gICAgLy8gVGhlIG5vZGUgd2UgZm91bmQgbWlnaHQg
YmUgYSBIVE1MRnJhbWVPd25lckVsZW1lbnQgb3IgYSBzaGFkb3cgaG9zdCwgc28gZGVzY2VuZCBk
b3duIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgZWl0aGVyOgorICAgIC8vIFRoZSBub2RlIHdlIGZv
dW5kIG1pZ2h0IGJlIGEgSFRNTEZyYW1lT3duZXJFbGVtZW50LCBzbyBkZXNjZW5kIGRvd24gdGhl
IHRyZWUgdW50aWwgd2UgZmluZCBlaXRoZXI6CiAgICAgLy8gMSkgYSBmb2N1c2FibGUgbm9kZSwg
b3IKLSAgICAvLyAyKSB0aGUgZGVlcGVzdC1uZXN0ZWQgSFRNTEZyYW1lT3duZXJFbGVtZW50IG9y
IHNoYWRvdyBob3N0LgotICAgIHdoaWxlIChpc1RyZWVTY29wZU93bmVyKG5vZGUpKSB7Ci0gICAg
ICAgIE5vZGUqIGZvdW5kTm9kZTsKLSAgICAgICAgaWYgKG5vZGUtPmlzRnJhbWVPd25lckVsZW1l
bnQoKSkgewotICAgICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IHN0YXRp
Y19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KG5vZGUpOwotICAgICAgICAgICAgaWYgKCFv
d25lci0+Y29udGVudEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBvd25lci0+Y29udGVudEZyYW1lKCktPmRvY3VtZW50KCk7
Ci0gICAgICAgICAgICBmb3VuZE5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZShkaXJlY3Rpb24sIGRv
Y3VtZW50LCAwLCBldmVudCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogVW50aWwgYSBmb2N1cyByZS10YXJnZXRpbmcgKGJ1ZyA2MTQyMSkgaXMgaW1wbGVtZW50ZWQs
Ci0gICAgICAgICAgICAvLyBza2lwcGluZyB0aGVzZSBlbGVtZW50cyBpcyB0aGUgc2FmZXN0IHdh
eSB0byBrZWVwIGEgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgIGlmIChoYXNDdXN0b21Gb2N1
c0xvZ2ljKG5vZGUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgQVNTRVJU
KHNoYWRvd1Jvb3Qobm9kZSkpOwotICAgICAgICAgICAgZm91bmROb2RlID0gZmluZEZvY3VzYWJs
ZU5vZGUoZGlyZWN0aW9uLCBzaGFkb3dSb290KG5vZGUpLCAwLCBldmVudCk7Ci0gICAgICAgIH0K
KyAgICAvLyAyKSB0aGUgZGVlcGVzdC1uZXN0ZWQgSFRNTEZyYW1lT3duZXJFbGVtZW50LgorICAg
IHdoaWxlIChub2RlICYmIG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkgeworICAgICAgICBI
VE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJF
bGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlmICghb3duZXItPmNvbnRlbnRGcmFtZSgpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIE5vZGUqIGZvdW5kTm9kZSA9IGZpbmRGb2N1c2FibGVO
b2RlKGRpcmVjdGlvbiwgRm9jdXNTY29wZTo6Zm9jdXNTY29wZU93bmVkQnlJRnJhbWUob3duZXIp
LCAwLCBldmVudCk7CiAgICAgICAgIGlmICghZm91bmROb2RlKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIEFTU0VSVChub2RlICE9IGZvdW5kTm9kZSk7CkBAIC0yNTMsNyArMjk1LDcgQEAg
Ym9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcihGb2N1c0Rp
cmVjdGlvbiBkaXJlY3Rpb24sIEtleWIKIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gZmluZEZv
Y3VzYWJsZU5vZGVBY3Jvc3NUcmVlU2NvcGUoZGlyZWN0aW9uLCBjdXJyZW50Tm9kZSA/IGN1cnJl
bnROb2RlLT50cmVlU2NvcGUoKSA6IGRvY3VtZW50LCBjdXJyZW50Tm9kZSwgZXZlbnQpOworICAg
IFJlZlB0cjxOb2RlPiBub2RlID0gZmluZEZvY3VzYWJsZU5vZGVBY3Jvc3NGb2N1c1Njb3BlKGRp
cmVjdGlvbiwgRm9jdXNTY29wZTo6Zm9jdXNTY29wZU9mKGN1cnJlbnROb2RlID8gY3VycmVudE5v
ZGUgOiBkb2N1bWVudCksIGN1cnJlbnROb2RlLCBldmVudCk7CiAKICAgICBpZiAoIW5vZGUpIHsK
ICAgICAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBub2RlIHRvIGZvY3VzLCBzbyB3ZSBzaG91bGQg
dHJ5IHRvIHBhc3MgZm9jdXMgdG8gQ2hyb21lLgpAQCAtMjY1LDggKzMwNyw4IEBAIGJvb2wgRm9j
dXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBLZXliCiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaHJvbWUgZG9lc24ndCB3
YW50IGZvY3VzLCBzbyB3ZSBzaG91bGQgd3JhcCBmb2N1cy4KLSAgICAgICAgbm9kZSA9IGZpbmRG
b2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgbV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSwg
MCwgZXZlbnQpOwotICAgICAgICBub2RlID0gZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3du
SW50b0ZyYW1lRG9jdW1lbnRPclNoYWRvd1Jvb3QoZGlyZWN0aW9uLCBub2RlLmdldCgpLCBldmVu
dCk7CisgICAgICAgIG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZVJlY3Vyc2l2ZWx5KGRpcmVjdGlv
biwgRm9jdXNTY29wZTo6Zm9jdXNTY29wZU9mKG1fcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50
KCkpLCAwLCBldmVudCk7CisgICAgICAgIG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZURlY2VuZGlu
Z0Rvd25JbnRvRnJhbWVEb2N1bWVudChkaXJlY3Rpb24sIG5vZGUuZ2V0KCksIGV2ZW50KTsKIAog
ICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTgsNTYg
KzM2MCw3MCBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9y
ZGVyKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5YgogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgaW5saW5lIE5vZGUqIG93bmVyT2ZUcmVlU2NvcGUoVHJlZVNjb3BlKiBzY29wZSkK
K05vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVBY3Jvc3NGb2N1c1Njb3Bl
KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9jdXNTY29wZSBzY29wZSwgTm9kZSogY3VycmVu
dE5vZGUsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEFTU0VSVChzY29wZSk7Ci0gICAg
aWYgKHNjb3BlLT5yb290Tm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgcmV0dXJuIHNj
b3BlLT5yb290Tm9kZSgpLT5zaGFkb3dIb3N0KCk7Ci0gICAgaWYgKHNjb3BlLT5yb290Tm9kZSgp
LT5kb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gc2NvcGUtPnJvb3ROb2RlKCkt
PmRvY3VtZW50KCktPmZyYW1lKCktPm93bmVyRWxlbWVudCgpOwotICAgIHJldHVybiAwOwotfQor
ICAgIEFTU0VSVCghY3VycmVudE5vZGUgfHwgIWlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdChjdXJy
ZW50Tm9kZSwgZXZlbnQpKTsKKyAgICBOb2RlKiBmb3VuZDsKKyAgICBpZiAoY3VycmVudE5vZGUg
JiYgZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRm9yd2FyZCAmJiBpc0ZvY3VzYWJsZVNoYWRv
d0hvc3QoY3VycmVudE5vZGUsIGV2ZW50KSkgeworICAgICAgICBOb2RlKiBmb3VuZEluSW5uZXJG
b2N1c1Njb3BlID0gZmluZEZvY3VzYWJsZU5vZGVSZWN1cnNpdmVseShkaXJlY3Rpb24sIEZvY3Vz
U2NvcGU6OmZvY3VzU2NvcGVPd25lZEJ5U2hhZG93SG9zdChjdXJyZW50Tm9kZSksIDAsIGV2ZW50
KTsKKyAgICAgICAgZm91bmQgPSBmb3VuZEluSW5uZXJGb2N1c1Njb3BlID8gZm91bmRJbklubmVy
Rm9jdXNTY29wZSA6IGZpbmRGb2N1c2FibGVOb2RlUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBzY29w
ZSwgY3VycmVudE5vZGUsIGV2ZW50KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZm91bmQgPSBmaW5k
Rm9jdXNhYmxlTm9kZVJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgc2NvcGUsIGN1cnJlbnROb2RlLCBl
dmVudCk7CiAKLU5vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVBY3Jvc3NU
cmVlU2NvcGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBUcmVlU2NvcGUqIHNjb3BlLCBOb2Rl
KiBjdXJyZW50Tm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17Ci0gICAgTm9kZSogbm9kZSA9
IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgc2NvcGUsIGN1cnJlbnROb2RlLCBldmVudCk7
Ci0gICAgLy8gSWYgdGhlcmUncyBubyBmb2N1c2FibGUgbm9kZSB0byBhZHZhbmNlIHRvLCBtb3Zl
IHVwIHRoZSB0cmVlIHNjb3BlcyB1bnRpbCB3ZSBmaW5kIG9uZS4KLSAgICB3aGlsZSAoIW5vZGUg
JiYgc2NvcGUpIHsKLSAgICAgICAgTm9kZSogb3duZXIgPSBvd25lck9mVHJlZVNjb3BlKHNjb3Bl
KTsKKyAgICAvLyBJZiB0aGVyZSdzIG5vIGZvY3VzYWJsZSBub2RlIHRvIGFkdmFuY2UgdG8sIG1v
dmUgdXAgdGhlIGZvY3VzIHNjb3BlcyB1bnRpbCB3ZSBmaW5kIG9uZS4KKyAgICB3aGlsZSAoIWZv
dW5kKSB7CisgICAgICAgIE5vZGUqIG93bmVyID0gc2NvcGUub3duZXIoKTsKICAgICAgICAgaWYg
KCFvd25lcikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBub2RlID0gZmluZEZvY3VzYWJs
ZU5vZGUoZGlyZWN0aW9uLCBvd25lci0+dHJlZVNjb3BlKCksIG93bmVyLCBldmVudCk7Ci0gICAg
ICAgIHNjb3BlID0gb3duZXItPnRyZWVTY29wZSgpOworICAgICAgICBzY29wZSA9IEZvY3VzU2Nv
cGU6OmZvY3VzU2NvcGVPZihvd25lcik7CisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gRm9jdXNE
aXJlY3Rpb25CYWNrd2FyZCAmJiBpc0ZvY3VzYWJsZVNoYWRvd0hvc3Qob3duZXIsIGV2ZW50KSkg
eworICAgICAgICAgICAgZm91bmQgPSBvd25lcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGZvdW5kID0gZmluZEZvY3VzYWJsZU5vZGVSZWN1cnNpdmVseShkaXJlY3Rp
b24sIHNjb3BlLCBvd25lciwgZXZlbnQpOwogICAgIH0KLSAgICBub2RlID0gZmluZEZvY3VzYWJs
ZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnRPclNoYWRvd1Jvb3QoZGlyZWN0aW9u
LCBub2RlLCBldmVudCk7Ci0gICAgcmV0dXJuIG5vZGU7CisgICAgZm91bmQgPSBmaW5kRm9jdXNh
YmxlTm9kZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVudChkaXJlY3Rpb24sIGZvdW5kLCBl
dmVudCk7CisgICAgcmV0dXJuIGZvdW5kOwogfQogCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZp
bmRGb2N1c2FibGVOb2RlUmVjdXJzaXZlbHkoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBGb2N1
c1Njb3BlIHNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAg
Ly8gU3RhcnRpbmcgbm9kZSBpcyBleGNsdXNpdmUuCisgICAgTm9kZSogZm91bmQgPSBmaW5kRm9j
dXNhYmxlTm9kZShkaXJlY3Rpb24sIHNjb3BlLCBzdGFydCwgZXZlbnQpOworICAgIGlmICghZm91
bmQpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rp
b25Gb3J3YXJkKSB7CisgICAgICAgIGlmICghaXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KGZvdW5k
LCBldmVudCkpCisgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgICAgIE5vZGUqIGZvdW5k
SW5Jbm5lckZvY3VzU2NvcGUgPSBmaW5kRm9jdXNhYmxlTm9kZVJlY3Vyc2l2ZWx5KGRpcmVjdGlv
biwgRm9jdXNTY29wZTo6Zm9jdXNTY29wZU93bmVkQnlTaGFkb3dIb3N0KGZvdW5kKSwgMCwgZXZl
bnQpOworICAgICAgICByZXR1cm4gZm91bmRJbklubmVyRm9jdXNTY29wZSA/IGZvdW5kSW5Jbm5l
ckZvY3VzU2NvcGUgOiBmaW5kRm9jdXNhYmxlTm9kZVJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgc2Nv
cGUsIGZvdW5kLCBldmVudCk7CisgICAgfQorICAgIEFTU0VSVChkaXJlY3Rpb24gPT0gRm9jdXNE
aXJlY3Rpb25CYWNrd2FyZCk7CisgICAgaWYgKGlzRm9jdXNhYmxlU2hhZG93SG9zdChmb3VuZCwg
ZXZlbnQpKSB7CisgICAgICAgIE5vZGUqIGZvdW5kSW5Jbm5lckZvY3VzU2NvcGUgPSBmaW5kRm9j
dXNhYmxlTm9kZVJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgRm9jdXNTY29wZTo6Zm9jdXNTY29wZU93
bmVkQnlTaGFkb3dIb3N0KGZvdW5kKSwgMCwgZXZlbnQpOworICAgICAgICByZXR1cm4gZm91bmRJ
bklubmVyRm9jdXNTY29wZSA/IGZvdW5kSW5Jbm5lckZvY3VzU2NvcGUgOiBmb3VuZDsKKyAgICB9
CisgICAgaWYgKGlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdChmb3VuZCwgZXZlbnQpKSB7CisgICAg
ICAgIE5vZGUqIGZvdW5kSW5Jbm5lckZvY3VzU2NvcGUgPSBmaW5kRm9jdXNhYmxlTm9kZVJlY3Vy
c2l2ZWx5KGRpcmVjdGlvbiwgRm9jdXNTY29wZTo6Zm9jdXNTY29wZU93bmVkQnlTaGFkb3dIb3N0
KGZvdW5kKSwgMCwgZXZlbnQpOworICAgICAgICByZXR1cm4gZm91bmRJbklubmVyRm9jdXNTY29w
ZSA/IGZvdW5kSW5Jbm5lckZvY3VzU2NvcGUgOmZpbmRGb2N1c2FibGVOb2RlUmVjdXJzaXZlbHko
ZGlyZWN0aW9uLCBzY29wZSwgZm91bmQsIGV2ZW50KTsKKyAgICB9CisgICAgcmV0dXJuIGZvdW5k
OworfQogCi1Ob2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlKEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbiwgVHJlZVNjb3BlKiBzY29wZSwgTm9kZSogbm9kZSwgS2V5Ym9hcmRF
dmVudCogZXZlbnQpCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlKEZv
Y3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9jdXNTY29wZSBzY29wZSwgTm9kZSogbm9kZSwgS2V5
Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gRm9jdXNEaXJl
Y3Rpb25Gb3J3YXJkKQogICAgICAgICA/IG5leHRGb2N1c2FibGVOb2RlKHNjb3BlLCBub2RlLCBl
dmVudCkKICAgICAgICAgOiBwcmV2aW91c0ZvY3VzYWJsZU5vZGUoc2NvcGUsIG5vZGUsIGV2ZW50
KTsKIH0KIAotc3RhdGljIE5vZGUqIG5leHROb2RlV2l0aEV4YWN0VGFiSW5kZXgoTm9kZSogc3Rh
cnQsIGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCitOb2RlKiBGb2N1c0NvbnRy
b2xsZXI6OmZpbmROb2RlV2l0aEV4YWN0VGFiSW5kZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRl
eCwgS2V5Ym9hcmRFdmVudCogZXZlbnQsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAg
ICAvLyBTZWFyY2ggaXMgaW5jbHVzaXZlIG9mIHN0YXJ0Ci0gICAgZm9yIChOb2RlKiBub2RlID0g
c3RhcnQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpCi0gICAgICAgIGlm
IChub2RlLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBub2RlLT50YWJJbmRleCgpID09
IHRhYkluZGV4KQorICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gKGRp
cmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQgPyBSZWlmaWVkVHJlZVRyYXZlcnNhbDo6
dHJhdmVyc2VOZXh0Tm9kZVdpdGhvdXRDcm9zc2luZ1VwcGVyQm91bmRhcnkobm9kZSk6IFJlaWZp
ZWRUcmVlVHJhdmVyc2FsOjp0cmF2ZXJzZVByZXZpb3VzTm9kZVdpdGhvdXRDcm9zc2luZ1VwcGVy
Qm91bmRhcnkobm9kZSkpKSB7CisgICAgICAgIGlmIChzaG91bGRWaXNpdChub2RlLCBldmVudCkg
JiYgYWRqdXN0ZWRUYWJJbmRleChub2RlLCBldmVudCkgPT0gdGFiSW5kZXgpCiAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgTm9kZSogcHJldmlv
dXNOb2RlV2l0aEV4YWN0VGFiSW5kZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5Ym9h
cmRFdmVudCogZXZlbnQpCi17Ci0gICAgLy8gU2VhcmNoIGlzIGluY2x1c2l2ZSBvZiBzdGFydAot
ICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUo
KSkKLSAgICAgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYmIG4tPnRhYklu
ZGV4KCkgPT0gdGFiSW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gbjsKLQorICAgIH0KICAgICBy
ZXR1cm4gMDsKIH0KIApAQCAtMzc2LDggKzQzMiw4IEBAIHN0YXRpYyBOb2RlKiBuZXh0Tm9kZVdp
dGhHcmVhdGVyVGFiSW5kZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdmVu
CiAgICAgLy8gU2VhcmNoIGlzIGluY2x1c2l2ZSBvZiBzdGFydAogICAgIGludCB3aW5uaW5nVGFi
SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkgKyAxOwogICAgIE5vZGUq
IHdpbm5lciA9IDA7Ci0gICAgZm9yIChOb2RlKiBuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJz
ZU5leHROb2RlKCkpCi0gICAgICAgIGlmIChuLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAm
JiBuLT50YWJJbmRleCgpID4gdGFiSW5kZXggJiYgbi0+dGFiSW5kZXgoKSA8IHdpbm5pbmdUYWJJ
bmRleCkgeworICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gUmVpZmllZFRyZWVUcmF2
ZXJzYWw6OnRyYXZlcnNlTmV4dE5vZGVXaXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5kYXJ5KG4pKQor
ICAgICAgICBpZiAoc2hvdWxkVmlzaXQobiwgZXZlbnQpICYmIG4tPnRhYkluZGV4KCkgPiB0YWJJ
bmRleCAmJiBuLT50YWJJbmRleCgpIDwgd2lubmluZ1RhYkluZGV4KSB7CiAgICAgICAgICAgICB3
aW5uZXIgPSBuOwogICAgICAgICAgICAgd2lubmluZ1RhYkluZGV4ID0gbi0+dGFiSW5kZXgoKTsK
ICAgICAgICAgfQpAQCAtMzkwLDMwICs0NDYsMzMgQEAgc3RhdGljIE5vZGUqIHByZXZpb3VzTm9k
ZVdpdGhMb3dlclRhYkluZGV4KE5vZGUqIHN0YXJ0LCBpbnQgdGFiSW5kZXgsIEtleWJvYXJkRXYK
ICAgICAvLyBTZWFyY2ggaXMgaW5jbHVzaXZlIG9mIHN0YXJ0CiAgICAgaW50IHdpbm5pbmdUYWJJ
bmRleCA9IDA7CiAgICAgTm9kZSogd2lubmVyID0gMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBzdGFy
dDsgbjsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpCi0gICAgICAgIGlmIChuLT5pc0tl
eWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBuLT50YWJJbmRleCgpIDwgdGFiSW5kZXggJiYgbi0+
dGFiSW5kZXgoKSA+IHdpbm5pbmdUYWJJbmRleCkgeworICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0
OyBuOyBuID0gUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlUHJldmlvdXNOb2RlV2l0aG91
dENyb3NzaW5nVXBwZXJCb3VuZGFyeShuKSkgeworICAgICAgICBpbnQgY3VycmVudFRhYkluZGV4
ID0gYWRqdXN0ZWRUYWJJbmRleChuLCBldmVudCk7CisgICAgICAgIGlmICgoc2hvdWxkVmlzaXQo
biwgZXZlbnQpIHx8IGlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdChuLCBldmVudCkpICYmIGN1cnJl
bnRUYWJJbmRleCA8IHRhYkluZGV4ICYmIGN1cnJlbnRUYWJJbmRleCA+IHdpbm5pbmdUYWJJbmRl
eCkgewogICAgICAgICAgICAgd2lubmVyID0gbjsKLSAgICAgICAgICAgIHdpbm5pbmdUYWJJbmRl
eCA9IG4tPnRhYkluZGV4KCk7CisgICAgICAgICAgICB3aW5uaW5nVGFiSW5kZXggPSBjdXJyZW50
VGFiSW5kZXg7CiAgICAgICAgIH0KLQorICAgIH0KICAgICByZXR1cm4gd2lubmVyOwogfQogCi1O
b2RlKiBGb2N1c0NvbnRyb2xsZXI6Om5leHRGb2N1c2FibGVOb2RlKFRyZWVTY29wZSogc2NvcGUs
IE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50KiBldmVudCkKK05vZGUqIEZvY3VzQ29udHJvbGxl
cjo6bmV4dEZvY3VzYWJsZU5vZGUoRm9jdXNTY29wZSBzY29wZSwgTm9kZSogc3RhcnQsIEtleWJv
YXJkRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChzdGFydCkgeworICAgICAgICBpbnQgdGFiSW5k
ZXggPSBhZGp1c3RlZFRhYkluZGV4KHN0YXJ0LCBldmVudCk7CiAgICAgICAgIC8vIElmIGEgbm9k
ZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBub3JtYWwgdGFiYmluZyBjeWNsZSwgdGhlIG5leHQgZm9j
dXNhYmxlIG5vZGUgaXMgZGV0ZXJtaW5lZCBieSB0cmVlIG9yZGVyCi0gICAgICAgIGlmIChzdGFy
dC0+dGFiSW5kZXgoKSA8IDApIHsKLSAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0LT50
cmF2ZXJzZU5leHROb2RlKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpCi0gICAgICAg
ICAgICAgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYmIG4tPnRhYkluZGV4
KCkgPj0gMCkKKyAgICAgICAgaWYgKHRhYkluZGV4IDwgMCkgeworICAgICAgICAgICAgZm9yIChO
b2RlKiBuID0gUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlTmV4dE5vZGVXaXRob3V0Q3Jv
c3NpbmdVcHBlckJvdW5kYXJ5KHN0YXJ0KTsgbjsgbiA9IFJlaWZpZWRUcmVlVHJhdmVyc2FsOjp0
cmF2ZXJzZU5leHROb2RlV2l0aG91dENyb3NzaW5nVXBwZXJCb3VuZGFyeShuKSkgeworICAgICAg
ICAgICAgICAgIGlmIChzaG91bGRWaXNpdChuLCBldmVudCkgJiYgYWRqdXN0ZWRUYWJJbmRleChu
LCBldmVudCkgPj0gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGaXJzdCB0cnkgdG8gZmluZCBhIG5vZGUgd2l0
aCB0aGUgc2FtZSB0YWJpbmRleCBhcyBzdGFydCB0aGF0IGNvbWVzIGFmdGVyIHN0YXJ0IGluIHRo
ZSBzY29wZS4KLSAgICAgICAgaWYgKE5vZGUqIHdpbm5lciA9IG5leHROb2RlV2l0aEV4YWN0VGFi
SW5kZXgoc3RhcnQtPnRyYXZlcnNlTmV4dE5vZGUoKSwgc3RhcnQtPnRhYkluZGV4KCksIGV2ZW50
KSkKKyAgICAgICAgaWYgKE5vZGUqIHdpbm5lciA9IGZpbmROb2RlV2l0aEV4YWN0VGFiSW5kZXgo
UmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlTmV4dE5vZGVXaXRob3V0Q3Jvc3NpbmdVcHBl
ckJvdW5kYXJ5KHN0YXJ0KSwgdGFiSW5kZXgsIGV2ZW50LCBGb2N1c0RpcmVjdGlvbkZvcndhcmQp
KQogICAgICAgICAgICAgcmV0dXJuIHdpbm5lcjsKIAotICAgICAgICBpZiAoIXN0YXJ0LT50YWJJ
bmRleCgpKQorICAgICAgICBpZiAoIXRhYkluZGV4KQogICAgICAgICAgICAgLy8gV2UndmUgcmVh
Y2hlZCB0aGUgbGFzdCBub2RlIGluIHRoZSBkb2N1bWVudCB3aXRoIGEgdGFiaW5kZXggb2YgMC4g
VGhpcyBpcyB0aGUgZW5kIG9mIHRoZSB0YWJiaW5nIG9yZGVyLgogICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQpAQCAtNDIxLDI2ICs0ODAsMjYgQEAgTm9kZSogRm9jdXNDb250cm9sbGVyOjpu
ZXh0Rm9jdXNhYmxlTm9kZShUcmVlU2NvcGUqIHNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmQK
ICAgICAvLyBMb29rIGZvciB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUgc2NvcGUgdGhhdDoKICAgICAv
LyAxKSBoYXMgdGhlIGxvd2VzdCB0YWJpbmRleCB0aGF0IGlzIGhpZ2hlciB0aGFuIHN0YXJ0J3Mg
dGFiaW5kZXggKG9yIDAsIGlmIHN0YXJ0IGlzIG51bGwpLCBhbmQKICAgICAvLyAyKSBjb21lcyBm
aXJzdCBpbiB0aGUgc2NvcGUsIGlmIHRoZXJlJ3MgYSB0aWUuCi0gICAgaWYgKE5vZGUqIHdpbm5l
ciA9IG5leHROb2RlV2l0aEdyZWF0ZXJUYWJJbmRleChzY29wZS0+cm9vdE5vZGUoKSwgc3RhcnQg
PyBzdGFydC0+dGFiSW5kZXgoKSA6IDAsIGV2ZW50KSkKKyAgICBpZiAoTm9kZSogd2lubmVyID0g
bmV4dE5vZGVXaXRoR3JlYXRlclRhYkluZGV4KHNjb3BlLnJvb3ROb2RlKCksIHN0YXJ0ID8gYWRq
dXN0ZWRUYWJJbmRleChzdGFydCwgZXZlbnQpIDogMCwgZXZlbnQpKQogICAgICAgICByZXR1cm4g
d2lubmVyOwogCiAgICAgLy8gVGhlcmUgYXJlIG5vIG5vZGVzIHdpdGggYSB0YWJpbmRleCBncmVh
dGVyIHRoYW4gc3RhcnQncyB0YWJpbmRleCwKICAgICAvLyBzbyBmaW5kIHRoZSBmaXJzdCBub2Rl
IHdpdGggYSB0YWJpbmRleCBvZiAwLgotICAgIHJldHVybiBuZXh0Tm9kZVdpdGhFeGFjdFRhYklu
ZGV4KHNjb3BlLT5yb290Tm9kZSgpLCAwLCBldmVudCk7CisgICAgcmV0dXJuIGZpbmROb2RlV2l0
aEV4YWN0VGFiSW5kZXgoc2NvcGUucm9vdE5vZGUoKSwgMCwgZXZlbnQsIEZvY3VzRGlyZWN0aW9u
Rm9yd2FyZCk7CiB9CiAKLU5vZGUqIEZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVO
b2RlKFRyZWVTY29wZSogc2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50KiBldmVudCkK
K05vZGUqIEZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVOb2RlKEZvY3VzU2NvcGUg
c2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBOb2RlKiBs
YXN0OwotICAgIGZvciAobGFzdCA9IHNjb3BlLT5yb290Tm9kZSgpOyBsYXN0LT5sYXN0Q2hpbGQo
KTsgbGFzdCA9IGxhc3QtPmxhc3RDaGlsZCgpKSB7IH0KKyAgICBmb3IgKGxhc3QgPSBzY29wZS5y
b290Tm9kZSgpOyBSZWlmaWVkVHJlZVRyYXZlcnNhbDo6bGFzdENoaWxkV2l0aG91dENyb3NzaW5n
VXBwZXJCb3VuZGFyeShsYXN0KTsgbGFzdCA9IFJlaWZpZWRUcmVlVHJhdmVyc2FsOjpsYXN0Q2hp
bGRXaXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5kYXJ5KGxhc3QpKSB7IH0KIAogICAgIC8vIEZpcnN0
IHRyeSB0byBmaW5kIHRoZSBsYXN0IG5vZGUgaW4gdGhlIHNjb3BlIHRoYXQgY29tZXMgYmVmb3Jl
IHN0YXJ0IGFuZCBoYXMgdGhlIHNhbWUgdGFiaW5kZXggYXMgc3RhcnQuCiAgICAgLy8gSWYgc3Rh
cnQgaXMgbnVsbCwgZmluZCB0aGUgbGFzdCBub2RlIGluIHRoZSBzY29wZSB3aXRoIGEgdGFiaW5k
ZXggb2YgMC4KICAgICBOb2RlKiBzdGFydGluZ05vZGU7CiAgICAgaW50IHN0YXJ0aW5nVGFiSW5k
ZXg7CiAgICAgaWYgKHN0YXJ0KSB7Ci0gICAgICAgIHN0YXJ0aW5nTm9kZSA9IHN0YXJ0LT50cmF2
ZXJzZVByZXZpb3VzTm9kZSgpOwotICAgICAgICBzdGFydGluZ1RhYkluZGV4ID0gc3RhcnQtPnRh
YkluZGV4KCk7CisgICAgICAgIHN0YXJ0aW5nTm9kZSA9IFJlaWZpZWRUcmVlVHJhdmVyc2FsOjp0
cmF2ZXJzZVByZXZpb3VzTm9kZVdpdGhvdXRDcm9zc2luZ1VwcGVyQm91bmRhcnkoc3RhcnQpOwor
ICAgICAgICBzdGFydGluZ1RhYkluZGV4ID0gYWRqdXN0ZWRUYWJJbmRleChzdGFydCwgZXZlbnQp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0YXJ0aW5nTm9kZSA9IGxhc3Q7CiAgICAgICAgIHN0
YXJ0aW5nVGFiSW5kZXggPSAwOwpAQCAtNDQ4LDE4ICs1MDcsMTkgQEAgTm9kZSogRm9jdXNDb250
cm9sbGVyOjpwcmV2aW91c0ZvY3VzYWJsZU5vZGUoVHJlZVNjb3BlKiBzY29wZSwgTm9kZSogc3Rh
cnQsIEtleWIKIAogICAgIC8vIEhvd2V2ZXIsIGlmIGEgbm9kZSBpcyBleGNsdWRlZCBmcm9tIHRo
ZSBub3JtYWwgdGFiYmluZyBjeWNsZSwgdGhlIHByZXZpb3VzIGZvY3VzYWJsZSBub2RlIGlzIGRl
dGVybWluZWQgYnkgdHJlZSBvcmRlcgogICAgIGlmIChzdGFydGluZ1RhYkluZGV4IDwgMCkgewot
ICAgICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydGluZ05vZGU7IG47IG4gPSBuLT50cmF2ZXJzZVBy
ZXZpb3VzTm9kZSgpKQotICAgICAgICAgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZl
bnQpICYmIG4tPnRhYkluZGV4KCkgPj0gMCkKKyAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnRp
bmdOb2RlOyBuOyBuID0gUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlUHJldmlvdXNOb2Rl
V2l0aG91dENyb3NzaW5nVXBwZXJCb3VuZGFyeShuKSkgeworICAgICAgICAgICAgaWYgKHNob3Vs
ZFZpc2l0KG4sIGV2ZW50KSAmJiBhZGp1c3RlZFRhYkluZGV4KG4sIGV2ZW50KSA+PSAwKQogICAg
ICAgICAgICAgICAgIHJldHVybiBuOworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKE5vZGUq
IHdpbm5lciA9IHByZXZpb3VzTm9kZVdpdGhFeGFjdFRhYkluZGV4KHN0YXJ0aW5nTm9kZSwgc3Rh
cnRpbmdUYWJJbmRleCwgZXZlbnQpKQorICAgIGlmIChOb2RlKiB3aW5uZXIgPSBmaW5kTm9kZVdp
dGhFeGFjdFRhYkluZGV4KHN0YXJ0aW5nTm9kZSwgc3RhcnRpbmdUYWJJbmRleCwgZXZlbnQsIEZv
Y3VzRGlyZWN0aW9uQmFja3dhcmQpKQogICAgICAgICByZXR1cm4gd2lubmVyOwogCiAgICAgLy8g
VGhlcmUgYXJlIG5vIG5vZGVzIGJlZm9yZSBzdGFydCB3aXRoIHRoZSBzYW1lIHRhYmluZGV4IGFz
IHN0YXJ0LCBzbyBsb29rIGZvciBhIG5vZGUgdGhhdDoKICAgICAvLyAxKSBoYXMgdGhlIGhpZ2hl
c3Qgbm9uLXplcm8gdGFiaW5kZXggKHRoYXQgaXMgbGVzcyB0aGFuIHN0YXJ0J3MgdGFiaW5kZXgp
LCBhbmQKICAgICAvLyAyKSBjb21lcyBsYXN0IGluIHRoZSBzY29wZSwgaWYgdGhlcmUncyBhIHRp
ZS4KLSAgICBzdGFydGluZ1RhYkluZGV4ID0gKHN0YXJ0ICYmIHN0YXJ0LT50YWJJbmRleCgpKSA/
IHN0YXJ0LT50YWJJbmRleCgpIDogc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgpOwor
ICAgIHN0YXJ0aW5nVGFiSW5kZXggPSAoc3RhcnQgJiYgc3RhcnRpbmdUYWJJbmRleCkgPyBzdGFy
dGluZ1RhYkluZGV4IDogc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgpOwogICAgIHJl
dHVybiBwcmV2aW91c05vZGVXaXRoTG93ZXJUYWJJbmRleChsYXN0LCBzdGFydGluZ1RhYkluZGV4
LCBldmVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCmluZGV4IDNi
NTYzNzdiZDQzMTNjNjU5YzVhZDY1ZjEwYjg0ZmRlNmNmZTVlMzAuLjg5MDg5ZTcxMDdiNjVmY2Yz
OWQ0ZGQyZmI5MDAxYzA1MGVkMDlkNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Rm9jdXNDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuaApAQCAtMzUsMTQgKzM1LDI5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBG
b2N1c0NhbmRpZGF0ZTsKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZy
YW1lOworY2xhc3MgSFRNTEZyYW1lT3duZXJFbGVtZW50OwogY2xhc3MgSW50UmVjdDsKIGNsYXNz
IEtleWJvYXJkRXZlbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFRyZWVTY29w
ZTsKIAorY2xhc3MgRm9jdXNTY29wZSB7CitwdWJsaWM6CisgICAgTm9kZSogcm9vdE5vZGUoKSBj
b25zdDsKKyAgICBFbGVtZW50KiBvd25lcigpIGNvbnN0OworICAgIHN0YXRpYyBGb2N1c1Njb3Bl
IGZvY3VzU2NvcGVPZihOb2RlKik7CisgICAgc3RhdGljIEZvY3VzU2NvcGUgZm9jdXNTY29wZU93
bmVkQnlTaGFkb3dIb3N0KE5vZGUqKTsKKyAgICBzdGF0aWMgRm9jdXNTY29wZSBmb2N1c1Njb3Bl
T3duZWRCeUlGcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqKTsKKworcHJpdmF0ZToKKyAgICBl
eHBsaWNpdCBGb2N1c1Njb3BlKFRyZWVTY29wZSopOworICAgIFRyZWVTY29wZSogbV9yb290VHJl
ZVNjb3BlOworfTsKKwogY2xhc3MgRm9jdXNDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShGb2N1c0NvbnRyb2xsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKQEAgLTY2LDE2ICs4MSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb250YWluaW5nV2lu
ZG93SXNWaXNpYmxlKGJvb2wpOwogICAgIGJvb2wgY29udGFpbmluZ1dpbmRvd0lzVmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbmluZ1dpbmRvd0lzVmlzaWJsZTsgfQogCi0gICAgYm9v
bCB0cmFuc2ZlckZvY3VzVG9FbGVtZW50SW5TaGFkb3dSb290KEVsZW1lbnQqIHNoYWRvd0hvc3Qs
IGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKLQogcHJpdmF0ZToKICAgICBGb2N1c0Nv
bnRyb2xsZXIoUGFnZSopOwogCiAgICAgYm9vbCBhZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5KEZv
Y3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CiAgICAgYm9vbCBhZHZhbmNlRm9jdXNJbkRv
Y3VtZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBib29sIGluaXRpYWxG
b2N1cyk7CiAKLSAgICBOb2RlKiBmaW5kRm9jdXNhYmxlTm9kZUFjcm9zc1RyZWVTY29wZShGb2N1
c0RpcmVjdGlvbiwgVHJlZVNjb3BlKiBzdGFydFNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRF
dmVudCopOwotICAgIE5vZGUqIGZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFt
ZURvY3VtZW50T3JTaGFkb3dSb290KEZvY3VzRGlyZWN0aW9uLCBOb2RlKiwgS2V5Ym9hcmRFdmVu
dCopOworICAgIE5vZGUqIGZpbmRGb2N1c2FibGVOb2RlQWNyb3NzRm9jdXNTY29wZShGb2N1c0Rp
cmVjdGlvbiwgRm9jdXNTY29wZSBzdGFydFNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVu
dCopOworICAgIE5vZGUqIGZpbmRGb2N1c2FibGVOb2RlUmVjdXJzaXZlbHkoRm9jdXNEaXJlY3Rp
b24sIEZvY3VzU2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7CisgICAgTm9kZSog
ZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnQoRm9jdXNEaXJl
Y3Rpb24sIE5vZGUqLCBLZXlib2FyZEV2ZW50Kik7CiAKICAgICAvLyBTZWFyY2hlcyB0aHJvdWdo
IHRoZSBnaXZlbiB0cmVlIHNjb3BlLCBzdGFydGluZyBmcm9tIHN0YXJ0IG5vZGUsIGZvciB0aGUg
bmV4dC9wcmV2aW91cyBzZWxlY3RhYmxlIGVsZW1lbnQgdGhhdCBjb21lcyBhZnRlci9iZWZvcmUg
c3RhcnQgbm9kZS4KICAgICAvLyBUaGUgb3JkZXIgZm9sbG93ZWQgaXMgYXMgc3BlY2lmaWVkIGlu
IHNlY3Rpb24gMTcuMTEuMSBvZiB0aGUgSFRNTDQgc3BlYywgd2hpY2ggaXMgZWxlbWVudHMgd2l0
aCB0YWIgaW5kZXhlcwpAQCAtODYsMTAgKzEwMCwxMiBAQCBwcml2YXRlOgogICAgIC8vIEByZXR1
cm4gVGhlIGZvY3VzIG5vZGUgdGhhdCBjb21lcyBhZnRlci9iZWZvcmUgc3RhcnQgbm9kZS4KICAg
ICAvLwogICAgIC8vIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9pbnRlcmFjdC9mb3Jt
cy5odG1sI2gtMTcuMTEuMQotICAgIGlubGluZSBOb2RlKiBmaW5kRm9jdXNhYmxlTm9kZShGb2N1
c0RpcmVjdGlvbiwgVHJlZVNjb3BlKiwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKKyAg
ICBpbmxpbmUgTm9kZSogZmluZEZvY3VzYWJsZU5vZGUoRm9jdXNEaXJlY3Rpb24sIEZvY3VzU2Nv
cGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7CisKKyAgICBOb2RlKiBuZXh0Rm9jdXNh
YmxlTm9kZShGb2N1c1Njb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCopOworICAgIE5v
ZGUqIHByZXZpb3VzRm9jdXNhYmxlTm9kZShGb2N1c1Njb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9h
cmRFdmVudCopOwogCi0gICAgTm9kZSogbmV4dEZvY3VzYWJsZU5vZGUoVHJlZVNjb3BlKiwgTm9k
ZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKLSAgICBOb2RlKiBwcmV2aW91c0ZvY3VzYWJsZU5v
ZGUoVHJlZVNjb3BlKiwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKKyAgICBOb2RlKiBm
aW5kTm9kZVdpdGhFeGFjdFRhYkluZGV4KE5vZGUqIHN0YXJ0LCBpbnQgdGFiSW5kZXgsIEtleWJv
YXJkRXZlbnQqLCBGb2N1c0RpcmVjdGlvbik7CiAKICAgICBib29sIGFkdmFuY2VGb2N1c0RpcmVj
dGlvbmFsbHlJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IExheW91dFJlY3QmIHN0
YXJ0aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqKTsKICAgICB2b2lkIGZp
bmRGb2N1c0NhbmRpZGF0ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCosIEZvY3Vz
Q2FuZGlkYXRlJiBjbG9zZXN0KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkMmI3ZDg5YjY0MzcxZGFlZDNkOTM4MzI1Zjcx
OTlmMmM0ZjI4OThkLi5iZTZhZjVlZjVlNWUzZWZhZjQzMmE1ZjgwMjgyY2YwZmVjZDNmNjA1IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTItMDMtMjEgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIE1ha2UgZm9jdXMgbmF2aWdhdGlvbiBiZSBjb21wbGlhbnQg
d2l0aCBTaGFkb3cgRE9NIHNwZWMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03ODU4OAorCisgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtv
di4KKworICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9mb2N1cy1uYXZpZ2F0aW9uLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L2ZvY3VzLW5hdmlnYXRpb24u
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3Jlc291cmNlcy9zaGFkb3ct
ZG9tLmpzOgorICAgICAgICAoaXNTaGFkb3dIb3N0KToKKyAgICAgICAgKGlzSWZyYW1lRWxlbWVu
dCk6CisgICAgICAgIChnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2spOgorICAgICAgICAoZHVtcE5v
ZGUpOgorICAgICAgICAoaW5uZXJtb3N0QWN0aXZlRWxlbWVudCk6CisgICAgICAgIChpc0lubmVy
bW9zdEFjdGl2ZUVsZW1lbnQpOgorICAgICAgICAoc2hvdWxkTmF2aWdhdGVGb2N1cyk6CisgICAg
ICAgIChuYXZpZ2F0ZUZvY3VzRm9yd2FyZCk6CisgICAgICAgIChuYXZpZ2F0ZUZvY3VzQmFja3dh
cmQpOgorICAgICAgICAodGVzdEZvY3VzTmF2aWdhdGlvbkZvd3JhZCk6CisgICAgICAgICh0ZXN0
Rm9jdXNOYXZpZ2F0aW9uQmFja3dhcmQpOgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFk
b3ctaG9zdC10cmFuc2Zlci1mb2N1cy1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICog
ZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVyLWZvY3VzLmh0bWw6IFJlbW92ZWQu
CisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUtYW5kLXNoYWRvdy1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUt
YW5kLXNoYWRvdy5odG1sOgorCiAyMDEyLTAzLTI2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJlYmFzZWxpbmUgYWZ0ZXIgcjExMjE3Ny4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9mb2N1cy1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9mb2N1cy1uYXZpZ2F0aW9uLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wMTk1OGRlMzZlOTUwOTRlY2IzMGYwMWIzZmE0Y2YyOGI2ZGE0YzBk
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2ZvY3VzLW5h
dmlnYXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTA2IEBACitUaGlzIHRlc3RzIHRoYXQg
cHJlc3NpbmcgVGFiIGtleSBzaG91bGQgdHJhdmVyc2UgaW50byBzaGFkb3cgRE9NIHN1YnRyZWVz
LCBhbmQgcHJlc3NpbmcgU2hpZnQtVGFiIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlci4KKworU2hv
dWxkIG1vdmUgZnJvbSBpbnB1dC1BLTEgdG8gaW5wdXQtQi0xIGluIGZvcndhcmQKK1BBU1MKK1No
b3VsZCBtb3ZlIGZyb20gaW5wdXQtQi0xIHRvIGlucHV0LUMtMSBpbiBmb3J3YXJkCitQQVNTCitT
aG91bGQgbW92ZSBmcm9tIGlucHV0LUMtMSB0byBob3N0LUIgaW4gZm9yd2FyZAorUEFTUworU2hv
dWxkIG1vdmUgZnJvbSBob3N0LUIgdG8gaG9zdC1CLy95b3VuZ2VyLWlucHV0LUEtMSBpbiBmb3J3
YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi8veW91bmdlci1pbnB1dC1BLTEgdG8g
aG9zdC1CL29sZGVyLWlucHV0LUEtMSBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9t
IGhvc3QtQi9vbGRlci1pbnB1dC1BLTEgdG8gbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMSBpbiBmb3J3
YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGxpZ2h0LWNoaWxkLXNlbGVjdGVkLTEgdG8gaG9z
dC1CL29sZGVyLWlucHV0LUItMSBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhv
c3QtQi9vbGRlci1pbnB1dC1CLTEgdG8gaG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMSBpbiBmb3J3
YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi8veW91bmdlci1pbnB1dC1CLTEgdG8g
aG9zdC1CLy95b3VuZ2VyLWlucHV0LUEtMCBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBm
cm9tIGhvc3QtQi8veW91bmdlci1pbnB1dC1BLTAgdG8gaG9zdC1CL29sZGVyLWlucHV0LUEtMCBp
biBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi9vbGRlci1pbnB1dC1BLTAg
dG8gbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMCBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBm
cm9tIGxpZ2h0LWNoaWxkLXNlbGVjdGVkLTAgdG8gaG9zdC1CL29sZGVyLWlucHV0LUItMCBpbiBm
b3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi9vbGRlci1pbnB1dC1CLTAgdG8g
aG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMCBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBm
cm9tIGhvc3QtQi8veW91bmdlci1pbnB1dC1CLTAgdG8gaW5wdXQtRC0xIGluIGZvcndhcmQKK1BB
U1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtRC0xIHRvIGlucHV0LUEtMCBpbiBmb3J3YXJkCitQ
QVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUEtMCB0byBob3N0LUEvaW5wdXQtMSBpbiBmb3J3
YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQS9pbnB1dC0xIHRvIGhvc3QtQS9pbnB1
dC0yMCBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQS9pbnB1dC0yMCB0
byBob3N0LUEvbmVzdGVkLWhvc3QgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBo
b3N0LUEvbmVzdGVkLWhvc3QgdG8gaG9zdC1BL25lc3RlZC1ob3N0L2lucHV0LTE1IGluIGZvcndh
cmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1BL25lc3RlZC1ob3N0L2lucHV0LTE1IHRv
IGhvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0yNSBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92
ZSBmcm9tIGhvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0yNSB0byBpbnB1dC1CLTAgaW4gZm9yd2Fy
ZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1CLTAgdG8gaW5wdXQtQy0wIGluIGZvcndh
cmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQy0wIHRvIGlucHV0LUQtMCBpbiBmb3J3
YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUQtMCB0byBpbnB1dC1BLTEgaW4gZm9y
d2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1BLTEgdG8gaW5wdXQtRC0wIGluIGJh
Y2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUQtMCB0byBpbnB1dC1DLTAgaW4g
YmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQy0wIHRvIGlucHV0LUItMCBp
biBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1CLTAgdG8gaG9zdC1BL25l
c3RlZC1ob3N0L2lucHV0LTI1IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhv
c3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0yNSB0byBob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQtMTUg
aW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1BL25lc3RlZC1ob3N0L2lu
cHV0LTE1IHRvIGhvc3QtQS9uZXN0ZWQtaG9zdCBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1v
dmUgZnJvbSBob3N0LUEvbmVzdGVkLWhvc3QgdG8gaG9zdC1BL2lucHV0LTIwIGluIGJhY2t3YXJk
CitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQS9pbnB1dC0yMCB0byBob3N0LUEvaW5wdXQt
MSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUEvaW5wdXQtMSB0byBp
bnB1dC1BLTAgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQS0wIHRv
IGlucHV0LUQtMSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1ELTEg
dG8gaG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMCBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1v
dmUgZnJvbSBob3N0LUIvL3lvdW5nZXItaW5wdXQtQi0wIHRvIGhvc3QtQi9vbGRlci1pbnB1dC1C
LTAgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1CL29sZGVyLWlucHV0
LUItMCB0byBsaWdodC1jaGlsZC1zZWxlY3RlZC0wIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQg
bW92ZSBmcm9tIGxpZ2h0LWNoaWxkLXNlbGVjdGVkLTAgdG8gaG9zdC1CL29sZGVyLWlucHV0LUEt
MCBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvb2xkZXItaW5wdXQt
QS0wIHRvIGhvc3QtQi8veW91bmdlci1pbnB1dC1BLTAgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3Vs
ZCBtb3ZlIGZyb20gaG9zdC1CLy95b3VuZ2VyLWlucHV0LUEtMCB0byBob3N0LUIvL3lvdW5nZXIt
aW5wdXQtQi0xIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi8veW91
bmdlci1pbnB1dC1CLTEgdG8gaG9zdC1CL29sZGVyLWlucHV0LUItMSBpbiBiYWNrd2FyZAorUEFT
UworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvb2xkZXItaW5wdXQtQi0xIHRvIGxpZ2h0LWNoaWxk
LXNlbGVjdGVkLTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gbGlnaHQtY2hp
bGQtc2VsZWN0ZWQtMSB0byBob3N0LUIvb2xkZXItaW5wdXQtQS0xIGluIGJhY2t3YXJkCitQQVNT
CitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi9vbGRlci1pbnB1dC1BLTEgdG8gaG9zdC1CLy95b3Vu
Z2VyLWlucHV0LUEtMSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIv
L3lvdW5nZXItaW5wdXQtQS0xIHRvIGhvc3QtQiBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1v
dmUgZnJvbSBob3N0LUIgdG8gaW5wdXQtQy0xIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92
ZSBmcm9tIGlucHV0LUMtMSB0byBpbnB1dC1CLTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBt
b3ZlIGZyb20gaW5wdXQtQi0xIHRvIGlucHV0LUEtMSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxk
IG1vdmUgZnJvbSBpbnB1dC1BLTEgdG8gaW5wdXQtRC0wIGluIGJhY2t3YXJkCitQQVNTCitUZXN0
IGZpbmlzaGVkLgorCisKKworCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3No
YWRvdy9mb2N1cy1uYXZpZ2F0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cv
Zm9jdXMtbmF2aWdhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlNzA5NTcwZGViZWMzMmQ2OThhYTY0
ZjFhMjZkMjdlNmRmYmY4NzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9zaGFkb3cvZm9jdXMtbmF2aWdhdGlvbi5odG1sCkBAIC0wLDAgKzEsMTc5IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhZG93
LWRvbS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdHMgdGhhdCBw
cmVzc2luZyBUYWIga2V5IHNob3VsZCB0cmF2ZXJzZSBpbnRvIHNoYWRvdyBET00gc3VidHJlZXMs
IGFuZCBwcmVzc2luZyBTaGlmdC1UYWIgc2hvdWxkIHJldmVyc2UgdGhlIG9yZGVyLjwvcD4KKzxw
cmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPHNjcmlwdD4KKworZnVuY3Rpb24gcHJlcGFyZURPTVRy
ZWUocGFyZW50KQoreworICAgIHBhcmVudC5hcHBlbmRDaGlsZCgKKyAgICAgICAgLy8gRklYTUU6
IFVzZSBtb3JlIGRlc2NyaXB0aXZlIGlkcyBmb3IgZWFjaCBlbGVtZW50cy4KKyAgICAgICAgY3Jl
YXRlRE9NKCdkaXYnLCB7J2lkJzogJ3RvcC1kaXYnfSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0
ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0LUEtMScsICd0YWJpbmRleCc6IDF9KSwKKyAgICAg
ICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0LUItMScsICd0YWJp
bmRleCc6IDF9KSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JyksICAvLyBTaG91
bGQgbm90IGJlIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcs
IHsnaWQnOiAnaW5wdXQtQS0wJywgJ3RhYmluZGV4JzogMH0pLAorICAgICAgICAgICAgICAgICAg
Y3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2hvc3QtQScsICd0YWJpbmRleCc6IC0xfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdpbnB1dC0xJywgJ3Rh
YmluZGV4JzogMX0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00o
J2RpdicsIHsnaWQnOiAnbmVzdGVkLWhvc3QnLCAndGFiaW5kZXgnOiAzMH0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQn
LCB7J3RhYmluZGV4JzogLTF9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdpbnB1dC0xNScsICd0YWJpbmRl
eCc6IDE1fSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtMjUnLCAndGFiaW5kZXgnOiAyNX0pKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lk
JzogJ2lucHV0LTIwJywgJ3RhYmluZGV4JzogMjB9KSkpLAorICAgICAgICAgICAgICAgICAgY3Jl
YXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtQy0xJywgJ3RhYmluZGV4JzogMX0pLAorICAg
ICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtQi0wJywgJ3Rh
YmluZGV4JzogMH0pLAorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzog
J2hvc3QtQicsICd0YWJpbmRleCc6IDF9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURP
TSgnaW5wdXQnLCB7J2lkJzogJ29sZGVyLWlucHV0LUEtMCcsICd0YWJpbmRleCc6IDB9KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAn
b2xkZXItaW5wdXQtQS0xJywgJ3RhYmluZGV4JzogMX0pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVET00oJ2NvbnRlbnQnLCB7J3NlbGVjdCc6ICcjbGlnaHQtY2hpbGQt
c2VsZWN0ZWQtMCwgI2xpZ2h0LWNoaWxkLXNlbGVjdGVkLTEnfSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ29sZGVyLWlucHV0LUIt
MCcsICd0YWJpbmRleCc6IDB9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnb2xkZXItaW5wdXQtQi0xJywgJ3RhYmluZGV4JzogMX0p
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICd5b3Vu
Z2VyLWlucHV0LUEtMCcsICd0YWJpbmRleCc6IDB9KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAneW91bmdlci1pbnB1dC1BLTEnLCAn
dGFiaW5kZXgnOiAxfSksICAvLyBUaGUgZmlyc3Qgbm9kZSBpbiB0aGUgZm9jdXNTY29wZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ3NoYWRvdycpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICd5b3Vu
Z2VyLWlucHV0LUItMCcsICd0YWJpbmRleCc6IDB9KSwgIC8vIFRoZSBsYXN0IG5vZGUgaW4gdGhl
IGZvY3VzU2NvcGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdp
bnB1dCcsIHsnaWQnOiAneW91bmdlci1pbnB1dC1CLTEnLCAndGFiaW5kZXgnOiAxfSkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2xpZ2h0
LWNoaWxkLXNlbGVjdGVkLTAnLCAndGFiaW5kZXgnOiAwfSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnbGlnaHQtY2hpbGQtc2VsZWN0ZWQt
MScsICd0YWJpbmRleCc6IDF9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVE
T00oJ2lucHV0JywgeydpZCc6ICdsaWdodC1jaGlsZC1ub24tc2VsZWN0ZWQtMScsICd0YWJpbmRl
eCc6IDF9KSksCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdp
bnB1dC1ELTEnLCAndGFiaW5kZXgnOiAxfSksCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00o
J2lucHV0JywgeydpZCc6ICdpbnB1dC1DLTAnLCAndGFiaW5kZXgnOiAwfSksCisgICAgICAgICAg
ICAgICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnaG9zdC1DJywgJ3RhYmluZGV4JzogLTF9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J3RhYmluZGV4Jzog
LTF9KSkpLAorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5w
dXQtRC0wJywgJ3RhYmluZGV4JzogMH0pKSk7CisKKyAgICBwYXJlbnQub2Zmc2V0TGVmdDsKK30K
KworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICBpZiAo
IXdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICB0ZXN0RmFpbGVkKCcnKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHByZXBhcmVET01UcmVlKGRvY3VtZW50LmJvZHkpOworCisg
ICAgLy8gRklYTUU6IE91dHB1dCBpbnNlcnRlZCBjb21tZW50cyBpbiB0aGlzIGFycmF5IHRvIGV4
cGVjdGVkLnR4dCBmb3IgcmVhZGFiaWxpdHkgb2YgdGhlIHJlc3VsdC4KKyAgICBlbGVtZW50c05h
dmlnYXRlZEluRm9yd2FyZCA9IFsKKyAgICAgICAgJ2lucHV0LUEtMScsICdpbnB1dC1CLTEnLAor
ICAgICAgICAvLyBUcmF2ZXJzZSBlbGVtZW50cyB3aGljaCBoYXZlIHRhYmluZGV4PTEuCisgICAg
ICAgIC8vIFNob3VsZCBza2lwIGV2ZXJ5IGVsZW1lbnRzLCBldmVuIHRob3VnaCB0aGV5IGhhdmUg
dGhlIHNhbWUgdGFiaW5kZXgsIGluIG5vbi1mb2N1c2FibGUgc2hhZG93IGhvc3QgKGlkPWhvc3Qt
QSkgCisgICAgICAgIC8vIHNpbmNlIG5vbi1mb2N1c2FibGUgc2hhZG93IGhvc3QgYWN0ZWQgYXMg
aWYgdGhleSB3ZXJlIGFzc2luZ2VkIHRvIHRhYmluZGV4PTAgc28gaXQgd2FzIHNraXBwZWQgaW4g
dGhpcyB0dXJuLgorICAgICAgICAnaW5wdXQtQy0xJywKKworICAgICAgICAvLyBUcmF2ZXJzZSBh
IGZvY3VzYWJsZSBzaGFkb3cgaG9zdC4KKyAgICAgICAgJ2hvc3QtQicsCisKKyAgICAgICAgLy8g
RW50ZXIgYSBmb2N1cyBzY29wZSBvZiB0aGUgc2hhZG93IGhvc3QgYW5kIHRyYXZlc2UgdGhlIGZp
cnN0IGZvY3VzYWJsZSBub2RlIGluIHNoYWRvdyBET00gbmF2aWdhdGlvbi4KKyAgICAgICAgJ2hv
c3QtQi8veW91bmdlci1pbnB1dC1BLTEnLAorCisgICAgICAgIC8vIEEgPHNoYWRvdz4gZWxlbWVu
dCBzaG91bGQgYmUgcmVzb2x2ZWQuCisgICAgICAgICdob3N0LUIvb2xkZXItaW5wdXQtQS0xJywK
KworICAgICAgICAvLyBBIDxjb250ZW50PiBlbGVtZW50IHNob3VsZCBiZSByZXNvbHZlZC4KKyAg
ICAgICAgJ2xpZ2h0LWNoaWxkLXNlbGVjdGVkLTEnLAorICAgICAgICAnaG9zdC1CL29sZGVyLWlu
cHV0LUItMScsCisgICAgICAgICdob3N0LUIvL3lvdW5nZXItaW5wdXQtQi0xJywKKworICAgICAg
ICAvLyBBbGwgZWxlbWVudHMgd2l0aCB0YWJpbmRleD0xIGhhZCBiZWVuIHRyYXZlcnNlZC4gU28g
ZWxlbWVudHMgd2l0aCB0YWJpbmRleD0wIHNob291ZCBmb2xsb3cuCisgICAgICAgICdob3N0LUIv
L3lvdW5nZXItaW5wdXQtQS0wJywKKyAgICAgICAgJ2hvc3QtQi9vbGRlci1pbnB1dC1BLTAnLAor
ICAgICAgICAnbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMCcsCisgICAgICAgICdob3N0LUIvb2xkZXIt
aW5wdXQtQi0wJywKKyAgICAgICAgJ2hvc3QtQi8veW91bmdlci1pbnB1dC1CLTAnLAorCisgICAg
ICAgIC8vIEV4aXQgYSBmb2N1cyBzY29wZSBvZiB0aGUgc2hhZG93IGhvc3QgKGlkPWhvc3QtQikg
YW5kIHRyYXZlcnNlIHRoZSBuZXh0LgorICAgICAgICAnaW5wdXQtRC0xJywKKworICAgICAgICAv
LyBBbGwgZWxlbWVudHMgd2l0aCB0YWJpbmRleD0xIGhhZCBiZWVuIHRyYXZlcnNlZCBpbiB0aGUg
b3V0ZXJtb3N0IHNjb3BlLgorICAgICAgICAvLyBTbyB0cmF2ZXJzZSBlbGVtZW50cyB3aXRoIHRh
YmluZGV4PTAgaW4gbmV4dC4KKyAgICAgICAgJ2lucHV0LUEtMCcsCisKKyAgICAgICAgLy8gQSBu
b24tZm9jdXNhYmxlIHNoYWRvdyBob3N0IChpZD1ob3N0LUEpIHdpbGwgYmUgInJlcGxhY2VkIiB3
aXRoIGl0cyBzaGFkb3cgRE9NIG5hdmlnYXRpb24uCisgICAgICAgICdob3N0LUEvaW5wdXQtMScs
CisgICAgICAgICdob3N0LUEvaW5wdXQtMjAnLAorICAgICAgICAnaG9zdC1BL25lc3RlZC1ob3N0
JywKKworICAgICAgICAvLyBFbnRlciBhIG5lc3RlZCBmb2N1cyBzY29wZSBpbnNpZGUgb2YgYSBz
aGFkb3cgaG9zdCAoaWQ9bmVzdGVkLWhvc3QpLgorICAgICAgICAnaG9zdC1BL25lc3RlZC1ob3N0
L2lucHV0LTE1JywKKyAgICAgICAgJ2hvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0yNScsCisKKyAg
ICAgICAgLy8gRXhpdCBhIG5lc3RlZCBzaGFkb3cgaG9zdC4KKyAgICAgICAgJ2lucHV0LUItMCcs
CisgICAgICAgICdpbnB1dC1DLTAnLAorCisgICAgICAgIC8vIEEgbm9uLWZvY3VzYWJsZSBzaGFk
b3cgaG9zdCAoaWQ9aG9zdC1DKSwgd2hpY2ggZG9lcyBub3QgaGF2ZSBmb2N1c2FibGUgZWxlbWVu
dHMsIHNob3VsZCBiZSBza2lwcGVkIGVudGlyZWx5LgorICAgICAgICAnaW5wdXQtRC0wJywKKwor
ICAgICAgICAvLyBXcmFwcyB0byB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgb3V0ZXJtb3N0IGZv
Y3VzIHNjb3BlLgorICAgICAgICAnaW5wdXQtQS0xJywKKyAgICBdOworCisKKyAgICBlbGVtZW50
c05hdmlnYXRlZEluQmFja3dhcmQgPSBbCisgICAgICAgICdpbnB1dC1BLTEnLAorICAgICAgICAn
aW5wdXQtRC0wJywKKyAgICAgICAgJ2lucHV0LUMtMCcsCisgICAgICAgICdpbnB1dC1CLTAnLAor
CisgICAgICAgIC8vIFRyaWNreSBuYXZpZ2F0aW9uLiBUcmF2YXJzZSB0aGUgZGVlcGx5IGxhc3Qg
ZWxlbWVudCBpbiBuZXN0ZWQgc2hhZG93IERPTSBuYXZpZ2F0aW9uLgorICAgICAgICAnaG9zdC1B
L25lc3RlZC1ob3N0L2lucHV0LTI1JywKKyAgICAgICAgJ2hvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1
dC0xNScsCisgICAgICAgICdob3N0LUEvbmVzdGVkLWhvc3QnLAorICAgICAgICAnaG9zdC1BL2lu
cHV0LTIwJywKKyAgICAgICAgJ2hvc3QtQS9pbnB1dC0xJywKKworICAgICAgICAvLyBFeGl0IGEg
c2hhZG8gaG9zdC4KKyAgICAgICAgJ2lucHV0LUEtMCcsCisKKyAgICAgICAgLy8gQWxsIGVsZW1l
bnRzIHdpdGggdGFiaW5kZXg9MCBoYWQgYmVlbiB0cmF2ZXJzZWQuIFNvIHRyYXZlcnNlIGVsZW1l
bnRzIHdpdGggdGFiaW5kZXg9MSBpbiByZXZlcnNlIG9yZGVyLgorICAgICAgICAnaW5wdXQtRC0x
JywKKworICAgICAgICAvLyBZZXQgYW5vdGhlciB0cmlja3kgbmF2aWdhdGlvbi4gU2hvdWxkIHRy
YXZlcnNlIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIHNoYWRvdyBET00gbmF2aWdhdGlvbi4KKyAg
ICAgICAgJ2hvc3QtQi8veW91bmdlci1pbnB1dC1CLTAnLAorICAgICAgICAnaG9zdC1CL29sZGVy
LWlucHV0LUItMCcsCisgICAgICAgICdsaWdodC1jaGlsZC1zZWxlY3RlZC0wJywKKyAgICAgICAg
J2hvc3QtQi9vbGRlci1pbnB1dC1BLTAnLAorICAgICAgICAnaG9zdC1CLy95b3VuZ2VyLWlucHV0
LUEtMCcsCisKKyAgICAgICAgJ2hvc3QtQi8veW91bmdlci1pbnB1dC1CLTEnLAorICAgICAgICAn
aG9zdC1CL29sZGVyLWlucHV0LUItMScsCisgICAgICAgICdsaWdodC1jaGlsZC1zZWxlY3RlZC0x
JywKKyAgICAgICAgJ2hvc3QtQi9vbGRlci1pbnB1dC1BLTEnLAorICAgICAgICAnaG9zdC1CLy95
b3VuZ2VyLWlucHV0LUEtMScsCisKKyAgICAgICAgLy8gQSBzaGFkb3cgaG9zdCBzaG91bGQgYmUg
c2VsZWN0ZWQganVzdCBhZnRlciB0aGUgZmlyc3QgZWxlbWVudCBpbiBpdHMgc2hhZG93IERPTSBu
YXZpZ2F0aW9uLgorICAgICAgICAvLyBOb3RlIHRoYXQgYSAnZm9jdXMnIGV2ZW50IGlzIG5vdCBj
YWxsZWQgaGVyZSBzaW5jZSBhIGZvY3VzIG1vdmVzIHdpdGhpbiB0aGUgc2FtZSBzaGFkb3cgaG9z
dC4KKyAgICAgICAgJ2hvc3QtQicsCisgICAgICAgICdpbnB1dC1DLTEnLAorICAgICAgICAnaW5w
dXQtQi0xJywKKyAgICAgICAgJ2lucHV0LUEtMScsCisKKyAgICAgICAgLy8gV3JhcHMgdG8gdGhl
IGxhc3QgZWxlbWVudCBpbiB0aGUgb3V0ZXJtb3N0IGZvY3VzIHNjb3BlLgorICAgICAgICAnaW5w
dXQtRC0wJywKKyAgICBdOworCisgICAgdGVzdEZvY3VzTmF2aWdhdGlvbkZvd3JhZChlbGVtZW50
c05hdmlnYXRlZEluRm9yd2FyZCk7CisgICAgdGVzdEZvY3VzTmF2aWdhdGlvbkJhY2t3YXJkKGVs
ZW1lbnRzTmF2aWdhdGVkSW5CYWNrd2FyZCk7CisKKyAgICBkZWJ1ZygnVGVzdCBmaW5pc2hlZC4n
KTsKK30KKwordGVzdCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9yZXNvdXJjZXMvc2hhZG93LWRvbS5qcyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9yZXNvdXJjZXMvc2hhZG93LWRvbS5qcwppbmRl
eCAxNTU3NjAyMTI5OWUxM2YzOTBkNDMxMzQzMTBlNTViM2FhMTM0MDNlLi5jM2JlOGE3MWE2ZWRh
YjFlZTdkMTlkYzc0ZDZkOGZiODA3YTY4ZTQ5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvcmVzb3VyY2VzL3NoYWRvdy1kb20uanMKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2hhZG93L3Jlc291cmNlcy9zaGFkb3ctZG9tLmpzCkBAIC0zNCwxMiArMzQsMjIgQEAg
ZnVuY3Rpb24gY3JlYXRlRE9NKHRhZ05hbWUsIGF0dHJpYnV0ZXMpCiAgICAgcmV0dXJuIGVsZW1l
bnQ7CiB9CiAKK2Z1bmN0aW9uIGlzU2hhZG93SG9zdChub2RlKQoreworICAgIHJldHVybiB3aW5k
b3cuaW50ZXJuYWxzLm9sZGVzdFNoYWRvd1Jvb3Qobm9kZSk7Cit9CisKIGZ1bmN0aW9uIGlzU2hh
ZG93Um9vdChub2RlKQogewogICAgIC8vIEZJWE1FOiB3aW5kb3cuaW50ZXJuYWxzIHNob3VsZCBo
YXZlIGludGVybmFscy5pc1NoYWRvd1Jvb3Qobm9kZSkuCiAgICAgcmV0dXJuIG5vZGUubm9kZU5h
bWUgPT0gIiNzaGFkb3ctcm9vdCIgfHwgbm9kZS5ob3N0OwogfQogCitmdW5jdGlvbiBpc0lmcmFt
ZUVsZW1lbnQoZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVO
YW1lID09ICdJRlJBTUUnOworfQorCiAvLyBZb3UgY2FuIHNwZWZpZnkgeW91bmdlclNoYWRvd1Jv
b3QgYnkgY29uc2VjdXRpdmUgc2xhc2hlcy4KIC8vIFNlZSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9z
aGFkb3cvZ2V0LWVsZW1lbnQtYnktaWQtaW4tc2hhZG93LXJvb3QuaHRtbCBmb3IgYWN0dWFsIHVz
YWdlcy4KIGZ1bmN0aW9uIGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhwYXRoKQpAQCAtNDcsMTMg
KzU3LDEwMSBAQCBmdW5jdGlvbiBnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2socGF0aCkKICAgICB2
YXIgaWRzID0gcGF0aC5zcGxpdCgnLycpOwogICAgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoaWRzWzBdKTsKICAgICBmb3IgKHZhciBpID0gMTsgbm9kZSAhPSBudWxsICYmIGkg
PCBpZHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGlzSWZyYW1lRWxlbWVudChub2RlKSkg
eworICAgICAgICAgICAgbm9kZSA9IG5vZGUuY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlk
KGlkc1tpXSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAo
aXNTaGFkb3dSb290KG5vZGUpKQogICAgICAgICAgICAgbm9kZSA9IGludGVybmFscy55b3VuZ2Vy
U2hhZG93Um9vdChub2RlKTsKLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIGlmIChpbnRlcm5h
bHMub2xkZXN0U2hhZG93Um9vdChub2RlKSkKICAgICAgICAgICAgIG5vZGUgPSBpbnRlcm5hbHMu
b2xkZXN0U2hhZG93Um9vdChub2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJu
IG51bGw7CiAgICAgICAgIGlmIChpZHNbaV0gIT0gJycpCiAgICAgICAgICAgICBub2RlID0gaW50
ZXJuYWxzLmdldEVsZW1lbnRCeUlkSW5TaGFkb3dSb290KG5vZGUsIGlkc1tpXSk7CiAgICAgfQog
ICAgIHJldHVybiBub2RlOwogfQogCitmdW5jdGlvbiBkdW1wTm9kZShub2RlKQoreworICAgIGlm
ICghbm9kZSkKKyAgICAgIHJldHVybiAnbnVsbCc7CisgICAgdmFyIG91dHB1dCA9ICcnICsgbm9k
ZTsKKyAgICBpZiAobm9kZS5pZCkKKyAgICAgICAgb3V0cHV0ICs9ICcgaWQ9JyArIG5vZGUuaWQ7
CisgICAgcmV0dXJuIG91dHB1dDsKK30KKworZnVuY3Rpb24gaW5uZXJtb3N0QWN0aXZlRWxlbWVu
dChlbGVtZW50KQoreworICAgIGVsZW1lbnQgPSBlbGVtZW50IHx8IGRvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQ7CisgICAgaWYgKGlzSWZyYW1lRWxlbWVudChlbGVtZW50KSkgeworICAgICAgICBpZiAo
ZWxlbWVudC5jb250ZW50RG9jdW1lbnQuYWN0aXZlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVy
biBpbm5lcm1vc3RBY3RpdmVFbGVtZW50KGVsZW1lbnQuY29udGVudERvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQpOworICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9CisgICAgaWYgKGlzU2hhZG93
SG9zdChlbGVtZW50KSkgeworICAgICAgICB2YXIgc2hhZG93Um9vdCA9IHdpbmRvdy5pbnRlcm5h
bHMub2xkZXN0U2hhZG93Um9vdChlbGVtZW50KTsKKyAgICAgICAgd2hpbGUgKHNoYWRvd1Jvb3Qp
IHsKKyAgICAgICAgICAgIGlmIChzaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGlubmVybW9zdEFjdGl2ZUVsZW1lbnQoc2hhZG93Um9vdC5hY3RpdmVFbGVt
ZW50KTsKKyAgICAgICAgICAgIHNoYWRvd1Jvb3QgPSB3aW5kb3cuaW50ZXJuYWxzLnlvdW5nZXJT
aGFkb3dSb290KHNoYWRvd1Jvb3QpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBlbGVt
ZW50OworfQorCitmdW5jdGlvbiBpc0lubmVybW9zdEFjdGl2ZUVsZW1lbnQoaWQpCit7CisgICAg
dmFyIGVsZW1lbnQgPSBnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2soaWQpOworICAgIGlmICghZWxl
bWVudCkgeworICAgICAgICBkZWJ1ZygnRkFJTDogVGhlcmUgaXMgbm8gc3VjaCBlbGVtZW50IHdp
dGggaWQ6ICcrIGZyb20pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChl
bGVtZW50ID09IGlubmVybW9zdEFjdGl2ZUVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVidWcoJ0V4cGVjdGVkIGlubmVybW9zdCBhY3RpdmVFbGVtZW50IGlzICcgKyBpZCAr
ICcsIGJ1dCBhY3R1YWwgaW5uZXJtb3N0IGFjdGl2ZUVsZW1lbnQgaXMgJyArIGR1bXBOb2RlKGlu
bmVybW9zdEFjdGl2ZUVsZW1lbnQoKSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rp
b24gc2hvdWxkTmF2aWdhdGVGb2N1cyhmcm9tLCB0bywgZGlyZWN0aW9uKQoreworICAgIGRlYnVn
KCdTaG91bGQgbW92ZSBmcm9tICcgKyBmcm9tICsgJyB0byAnICsgdG8gKyAnIGluICcgKyBkaXJl
Y3Rpb24pOworICAgIHZhciBmcm9tRWxlbWVudCA9IGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhm
cm9tKTsKKyAgICBpZiAoIWZyb21FbGVtZW50KSB7CisgICAgICBkZWJ1ZygnRkFJTDogVGhlcmUg
aXMgbm8gc3VjaCBlbGVtZW50IHdpdGggaWQ6ICcrIGZyb20pOworICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBmcm9tRWxlbWVudC5mb2N1cygpOworICAgIGlmIChkaXJlY3Rpb24gPT0gJ2Zvcndh
cmQnKQorICAgICAgICBuYXZpZ2F0ZUZvY3VzRm9yd2FyZCgpOworICAgIGVsc2UKKyAgICAgICAg
bmF2aWdhdGVGb2N1c0JhY2t3YXJkKCk7CisgICAgaWYgKGlzSW5uZXJtb3N0QWN0aXZlRWxlbWVu
dCh0bykpCisgICAgICAgIGRlYnVnKCdQQVNTJyk7CisgICAgZWxzZQorICAgICAgICBkZWJ1Zygn
RkFJTCcpOworfQorCitmdW5jdGlvbiBuYXZpZ2F0ZUZvY3VzRm9yd2FyZCgpCit7CisgICAgZXZl
bnRTZW5kZXIua2V5RG93bignXHQnKTsKK30KKworZnVuY3Rpb24gbmF2aWdhdGVGb2N1c0JhY2t3
YXJkKCkKK3sKKyAgICBldmVudFNlbmRlci5rZXlEb3duKCdcdCcsIFsnc2hpZnRLZXknXSk7Cit9
CisKK2Z1bmN0aW9uIHRlc3RGb2N1c05hdmlnYXRpb25Gb3dyYWQoZWxlbWVudHMpCit7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgKyAxIDwgZWxlbWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIHNo
b3VsZE5hdmlnYXRlRm9jdXMoZWxlbWVudHNbaV0sIGVsZW1lbnRzW2kgKyAxXSwgJ2ZvcndhcmQn
KTsKK30KKworZnVuY3Rpb24gdGVzdEZvY3VzTmF2aWdhdGlvbkJhY2t3YXJkKGVsZW1lbnRzKQor
eworICAgIGZvciAodmFyIGkgPSAwOyBpICsgMSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKQorICAg
ICAgICBzaG91bGROYXZpZ2F0ZUZvY3VzKGVsZW1lbnRzW2ldLCBlbGVtZW50c1tpICsgMV0sICdi
YWNrd2FyZCcpOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3No
YWRvdy1ob3N0LXRyYW5zZmVyLWZvY3VzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy1leHBlY3RlZC50eHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ODFiMDlhNWIyY2ExOTY2NTYxODIyMTJiZjc4MmE3
YjdlZWI4NTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVyLWZvY3VzLWV4
cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLVdoZW4gYSBzaGFkb3cg
aG9zdCBpcyBmb2N1c2VkLCB0aGUgc2hhZG93IGhvc3Qgc2hvdWxkIHRyYW5zZmVyIGZvY3VzIHRv
IHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBpbiB0aGUgc2hhZG93IHJvb3QgaWYgdGhlcmUg
aXMgYW4gc3VjaCBhbiBlbGVtZW50LgotCi1Gb2N1c2luZzogc2hhZG93MAotUEFTUyBlbGVtZW50
V2FzRm9jdXNlZChpbnB1dDApIGlzIGZhbHNlCi1QQVNTIGVsZW1lbnRXYXNGb2N1c2VkKGlucHV0
MSkgaXMgdHJ1ZQotUEFTUyBlbGVtZW50V2FzRm9jdXNlZChpbnB1dDIpIGlzIGZhbHNlCi1QQVNT
IGlucHV0MC52YWx1ZSBpcyAiIgotUEFTUyBpbnB1dDEudmFsdWUgaXMgIiIKLVBBU1MgaW5wdXQy
LnZhbHVlIGlzICIiCi1QcmVzc2luZzogImEiCi1QQVNTIGlucHV0MC52YWx1ZSBpcyAiIgotUEFT
UyBpbnB1dDEudmFsdWUgaXMgImEiCi1QQVNTIGlucHV0Mi52YWx1ZSBpcyAiIgotUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVyLWZvY3Vz
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYjZkYTc0Yzc5MTQ2YWZkZmI1
MTI2YmI5MTYwYzdkZjExY2U5N2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5z
ZmVyLWZvY3VzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi08IURPQ1RZUEUg
aHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHA+Ci1XaGVuIGEgc2hh
ZG93IGhvc3QgaXMgZm9jdXNlZCwgdGhlIHNoYWRvdyBob3N0IHNob3VsZCB0cmFuc2ZlciBmb2N1
cyB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhlIHNoYWRvdyByb290IGlmIHRo
ZXJlIGlzIGFuIHN1Y2ggYW4gZWxlbWVudC4KLTwvcD4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgotPHNjcmlwdD4KLWlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Ci0gIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKLQotICBmdW5jdGlvbiBzaGFkb3dSb290KHNoYWRvd0hvc3QpIHsK
LSAgICByZXR1cm4gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qoc2hhZG93SG9zdCk7Ci0gIH0K
LQotICBmdW5jdGlvbiBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRvd0hvc3QsIGNoaWxkKSB7Ci0g
ICAgcmV0dXJuIHNoYWRvd1Jvb3Qoc2hhZG93SG9zdCkuYXBwZW5kQ2hpbGQoY2hpbGQpCi0gIH0K
LQotICBmdW5jdGlvbiBhcHBlbmRTaGFkb3dIb3N0KGRvYywgcGFyZW50KSB7Ci0gICAgdmFyIHNo
YWRvd0hvc3QgPSBkb2MuY3JlYXRlRWxlbWVudCgncCcpOwotICAgIHNoYWRvd0hvc3QudGFiSW5k
ZXggPSAxOyAgLy8gTWFrZXMgc3VyZSB0aGF0IHRoZSBzaGFkb3cgaG9zdCBpcyBmb2N1c2FibGUu
Ci0gICAgcGFyZW50ID0gcGFyZW50IHx8IGRvYy5ib2R5OwotICAgIHJldHVybiBwYXJlbnQuYXBw
ZW5kQ2hpbGQoc2hhZG93SG9zdCk7Ci0gIH0KLQotICB2YXIgZm9jdXNlZEVsZW1lbWVudHMgPSBb
XTsKLQotICBmdW5jdGlvbiBmb2N1c2VkKGVsZW0pIHsKLSAgICBmb2N1c2VkRWxlbWVudHMucHVz
aChlbGVtKQotICB9Ci0KLSAgZnVuY3Rpb24gZG9Gb2N1cyhlbGVtKSB7Ci0gICAgZm9jdXNlZEVs
ZW1lbnRzID0gW10KLSAgICBlbGVtLmZvY3VzKCkKLSAgfQotCi0gIGZ1bmN0aW9uIGVsZW1lbnRX
YXNGb2N1c2VkKGVsZW0pIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvY3VzZWRFbGVtZW50
cy5sZW5ndGg7ICsraSkgewotICAgICAgaWYgKGZvY3VzZWRFbGVtZW50c1tpXSA9PSBlbGVtKSB7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
Ci0gIH0KLQotICAvLyBGb3IgcmVhZGFiaWxpdHksIEkgbm90ZWQgdGhlIERPTSB0cmVlIHVuZGVy
IHRoZSB0ZXN0IGhlcmUuCi0gIC8vCi0gIC8vIC0gZG9jdW1lbnQKLSAgLy8gICAtIHNoYWRvdzAg
KHRhYmluZGV4PTEpCi0gIC8vICAgICAtIGlucHV0MCAodGFiaW5kZXg9LTEpCi0gIC8vICAgICAt
IGlucHV0MQotICAvLyAgICAgLSBpbnB1dDIKLSAgdmFyIHNoYWRvdzAgPSBhcHBlbmRTaGFkb3dI
b3N0KGRvY3VtZW50KTsKLSAgdmFyIGlucHV0MCA9IGFwcGVuZENoaWxkVG9TaGFkb3coc2hhZG93
MCwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSk7Ci0gIGlucHV0MC50YWJJbmRleCA9
IC0xCi0gIHZhciBpbnB1dDEgPSBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRvdzAsIGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpOwotICB2YXIgaW5wdXQyID0gYXBwZW5kQ2hpbGRUb1No
YWRvdyhzaGFkb3cwLCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKLQotICB2YXIg
ZWxlbWVudElkcyA9IFsnc2hhZG93MCcsICdpbnB1dDAnLCAnaW5wdXQxJywgJ2lucHV0MiddCi0g
IGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudElkcy5sZW5ndGg7IGkrKykgewotICAgIHZhciBp
ZCA9IGVsZW1lbnRJZHNbaV07Ci0gICAgdmFyIGVsZW1lbnQgPSB3aW5kb3dbaWRdOwotICAgIGVs
ZW1lbnQuaWQgPSBpZDsKLSAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZnVu
Y3Rpb24oKSB7Zm9jdXNlZCh0aGlzKTt9LCBmYWxzZSk7Ci0gIH0KLQotICBkZWJ1ZygnRm9jdXNp
bmc6IHNoYWRvdzAnKTsKLSAgZG9Gb2N1cyhzaGFkb3cwKTsKLSAgLy8gQ29tbWVudGVkIG91dCBk
dWUgdG8gYnVnIDYxNDIxLgotICAvLyBzaG91bGRCZVRydWUoJ2VsZW1lbnRXYXNGb2N1c2VkKHNo
YWRvdzApJyk7Ci0gIHNob3VsZEJlRmFsc2UoJ2VsZW1lbnRXYXNGb2N1c2VkKGlucHV0MCknKTsK
LSAgc2hvdWxkQmVUcnVlKCdlbGVtZW50V2FzRm9jdXNlZChpbnB1dDEpJyk7Ci0gIHNob3VsZEJl
RmFsc2UoJ2VsZW1lbnRXYXNGb2N1c2VkKGlucHV0MiknKTsKLSAgaWYgKHdpbmRvdy5ldmVudFNl
bmRlcikgewotICAgIC8vIE1ha2VzIHN1cmUgdGhhdCB3ZSBjYW4gY2hhbmdlICdpbnB1dDEnIGVs
ZW1lbnQncyB2YWx1ZSBieSBwcmVzc2luZyBhIGtleS4KLSAgICBzaG91bGRCZSgnaW5wdXQwLnZh
bHVlJywgJyIiJyk7Ci0gICAgc2hvdWxkQmUoJ2lucHV0MS52YWx1ZScsICciIicpOwotICAgIHNo
b3VsZEJlKCdpbnB1dDIudmFsdWUnLCAnIiInKTsKLSAgICBkZWJ1ZygnUHJlc3Npbmc6ICJhIicp
Ci0gICAgZXZlbnRTZW5kZXIua2V5RG93bignYScpOwotICAgIHNob3VsZEJlKCdpbnB1dDAudmFs
dWUnLCAnIiInKTsKLSAgICBzaG91bGRCZSgnaW5wdXQxLnZhbHVlJywgJyJhIicpOwotICAgIHNo
b3VsZEJlKCdpbnB1dDIudmFsdWUnLCAnIiInKTsKLSAgfQotfQotPC9zY3JpcHQ+Ci08c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2Jv
ZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFi
LW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3ctZXhwZWN0ZWQudHh0CmluZGV4
IDkzYTVlOGM4NzU2NjliZGJlMzViMjhiYmFjNDI4MTBkZjM4MDQyZGQuLmY4NmEzYTA2ZjdkNDlj
NTE2ZDA4MmJhY2NjMTI1ZTVmZmI0NTgzODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3ctZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3ct
ZXhwZWN0ZWQudHh0CkBAIC0xLDM0ICsxLDU3IEBACi1UaGlzIHRlc3RzIHRoYXQgcHJlc3Npbmcg
VGFiIGtleSBzaG91bGQgdHJhdmVyc2UgaW50byBpZnJhbWUgYW5kIHNoYWRvdyB0cmVlLCBhbmQg
cHJlc3NpbmcgU2hpZnQtVGFiIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlci4gTWFrZXMgc3VyZSB0
aGF0IGEgc2hhZG93IGhvc3QgZWxlbWVudCBzaG91bGQgYWN0IGxpa2UgYSBpZnJhbWUgZWxlbWVu
dC4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxMDQ6IFVuY2F1Z2h0IFJlZmVyZW5jZUVycm9yOiBs
b2cgaXMgbm90IGRlZmluZWQKK1RoaXMgdGVzdHMgdGhhdCBwcmVzc2luZyBUYWIga2V5IHNob3Vs
ZCB0cmF2ZXJzZSBpbnRvIGlmcmFtZSBhbmQgc2hhZG93IHRyZWUsIGFuZCBwcmVzc2luZyBTaGlm
dC1UYWIgc2hvdWxkIHJldmVyc2UgdGhlIG9yZGVyLgogCi1Gb2N1cyBpbnB1dC0wMS4KLWlkOmlu
cHV0LTAxKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi0KLVByZXNzIFRhYiAxMSB0aW1lcy4KLWlk
OmlucHV0LTEzKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi1pZDppbnB1dC0xNSh0YWJJbmRleD0y
KSBpcyBmb2N1c2VkLgotaWQ6aW5wdXQtMDIodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KLWlkOmlu
cHV0LTA0KHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCi1pZDppZnJhbWUtaW5wdXQtMDYodGFiSW5k
ZXg9MSkgaXMgZm9jdXNlZC4KLWlkOmlmcmFtZS1zaGFkb3ctaW5wdXQtMDkodGFiSW5kZXg9MSkg
aXMgZm9jdXNlZC4KLWlkOmlmcmFtZS1zaGFkb3ctaW5wdXQtMDgodGFiSW5kZXg9MCkgaXMgZm9j
dXNlZC4KLWlkOmlmcmFtZS1pbnB1dC0xMih0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgotaWQ6aWZy
YW1lLWlucHV0LTExKHRhYkluZGV4PTIpIGlzIGZvY3VzZWQuCi1pZDppZnJhbWUtaW5wdXQtMDUo
dGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KLWlkOmlucHV0LTE0KHRhYkluZGV4PTApIGlzIGZvY3Vz
ZWQuCi0KLVByZXNzIFNoaWZ0LVRhYiAxMSB0aW1lcy4KLWlkOmlmcmFtZS1pbnB1dC0wNSh0YWJJ
bmRleD0wKSBpcyBmb2N1c2VkLgotaWQ6aWZyYW1lLWlucHV0LTExKHRhYkluZGV4PTIpIGlzIGZv
Y3VzZWQuCi1pZDppZnJhbWUtaW5wdXQtMTIodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KLWlkOmlm
cmFtZS1zaGFkb3ctaW5wdXQtMDgodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KLWlkOmlmcmFtZS1z
aGFkb3ctaW5wdXQtMDkodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KLWlkOmlmcmFtZS1pbnB1dC0w
Nih0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgotaWQ6aW5wdXQtMDQodGFiSW5kZXg9MCkgaXMgZm9j
dXNlZC4KLWlkOmlucHV0LTAyKHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCi1pZDppbnB1dC0xNSh0
YWJJbmRleD0yKSBpcyBmb2N1c2VkLgotaWQ6aW5wdXQtMTModGFiSW5kZXg9MSkgaXMgZm9jdXNl
ZC4KLWlkOmlucHV0LTAxKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi0KLVRlc3QgZmluaXNoZWQu
CitTaG91bGQgbW92ZSBmcm9tIGlucHV0LTAxIHRvIGlucHV0LTEzIGluIGZvcndhcmQKK1BBU1MK
K1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtMTMgdG8gaW5wdXQtMTUgaW4gZm9yd2FyZAorUEFTUwor
U2hvdWxkIG1vdmUgZnJvbSBpbnB1dC0xNSB0byBpbnB1dC0wMiBpbiBmb3J3YXJkCitQQVNTCitT
aG91bGQgbW92ZSBmcm9tIGlucHV0LTAyIHRvIGhvc3QtMDEvaW5wdXQtMDMgaW4gZm9yd2FyZAor
UEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LTAxL2lucHV0LTAzIHRvIGlucHV0LTA0IGluIGZv
cndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtMDQgdG8gaWZyYW1lL2lucHV0LTA2
IGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2lucHV0LTA2IHRvIGlm
cmFtZS9ob3N0LTAyIGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2hv
c3QtMDIgdG8gaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDkgaW4gZm9yd2FyZAorUEFTUworU2hvdWxk
IG1vdmUgZnJvbSBpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOSB0byBpZnJhbWUvaG9zdC0wMi9pbnB1
dC0wOCBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9ob3N0LTAyL2lu
cHV0LTA4IHRvIGlmcmFtZS9pbnB1dC0xMiBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBm
cm9tIGlmcmFtZS9pbnB1dC0xMiB0byBpZnJhbWUvaW5wdXQtMTEgaW4gZm9yd2FyZAorUEFTUwor
U2hvdWxkIG1vdmUgZnJvbSBpZnJhbWUvaW5wdXQtMTEgdG8gaWZyYW1lL2lucHV0LTA1IGluIGZv
cndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2lucHV0LTA1IHRvIGlucHV0LTE0
IGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtMTQgdG8gaWZyYW1lL2lu
cHV0LTA1IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9pbnB1dC0w
NSB0byBpZnJhbWUvaW5wdXQtMTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20g
aWZyYW1lL2lucHV0LTExIHRvIGlmcmFtZS9pbnB1dC0xMiBpbiBiYWNrd2FyZAorUEFTUworU2hv
dWxkIG1vdmUgZnJvbSBpZnJhbWUvaW5wdXQtMTIgdG8gaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDgg
aW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2hvc3QtMDIvaW5wdXQt
MDggdG8gaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDkgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBt
b3ZlIGZyb20gaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDkgdG8gaWZyYW1lL2hvc3QtMDIgaW4gYmFj
a3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2hvc3QtMDIgdG8gaWZyYW1lL2lu
cHV0LTA2IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9pbnB1dC0w
NiB0byBpbnB1dC0wNCBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC0w
NCB0byBob3N0LTAxL2lucHV0LTAzIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9t
IGhvc3QtMDEvaW5wdXQtMDMgdG8gaW5wdXQtMDIgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBt
b3ZlIGZyb20gaW5wdXQtMDIgdG8gaW5wdXQtMTUgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBt
b3ZlIGZyb20gaW5wdXQtMTUgdG8gaW5wdXQtMTMgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBt
b3ZlIGZyb20gaW5wdXQtMTMgdG8gaW5wdXQtMDEgaW4gYmFja3dhcmQKK1BBU1MKIAogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQt
c2hhZG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFt
ZS1hbmQtc2hhZG93Lmh0bWwKaW5kZXggMTBlOTE2MmU0YzQ4YzI5MDhiNTU3NWJhOTBlNjRmZTky
MDEyNTFjZC4uNThiYmE4YTA4NTYwZmQ5YjQ1OGZhNmU1MTI3MjZjMWY1MTViNzFkZSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUtYW5kLXNo
YWRvdy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZy
YW1lLWFuZC1zaGFkb3cuaHRtbApAQCAtMSwzNyArMSwxOCBAQAogPCFET0NUWVBFIGh0bWw+CiA8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYWRvdy1kb20uanMiPjwv
c2NyaXB0PgorPC9oZWFkPgogPGJvZHk+Ci08cD5UaGlzIHRlc3RzIHRoYXQgcHJlc3NpbmcgVGFi
IGtleSBzaG91bGQgdHJhdmVyc2UgaW50byBpZnJhbWUgYW5kIHNoYWRvdyB0cmVlLCBhbmQgcHJl
c3NpbmcgU2hpZnQtVGFiIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlci4KLSBNYWtlcyBzdXJlIHRo
YXQgYSBzaGFkb3cgaG9zdCBlbGVtZW50IHNob3VsZCBhY3QgbGlrZSBhIGlmcmFtZSBlbGVtZW50
LjwvcD4KKzxwPlRoaXMgdGVzdHMgdGhhdCBwcmVzc2luZyBUYWIga2V5IHNob3VsZCB0cmF2ZXJz
ZSBpbnRvIGlmcmFtZSBhbmQgc2hhZG93IHRyZWUsIGFuZCBwcmVzc2luZyBTaGlmdC1UYWIgc2hv
dWxkIHJldmVyc2UgdGhlIG9yZGVyLjwvcD4KIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgogPHNj
cmlwdD4KLWZ1bmN0aW9uIGxvZyhtc2cpIHsKLSAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcj
Y29uc29sZScpLnRleHRDb250ZW50ICs9IChtc2cgKyAnXG4nKTsKLX0KLQotZnVuY3Rpb24gZGVz
Y3JpcHRpb24oZWxlbWVudCkgewotICAgdmFyIG1zZyA9ICcnOwotICAgIGlmIChlbGVtZW50Lmlk
KSB7Ci0gICAgICBtc2cgKz0gJ2lkOicgKyBlbGVtZW50LmlkOwotICAgIH0KLSAgICBtc2cgKz0g
Jyh0YWJJbmRleD0nICsgZWxlbWVudC50YWJJbmRleCArICcpJzsKLSAgICByZXR1cm4gbXNnOwot
fQotCi1mdW5jdGlvbiBvbkZvY3VzKGV2ZW50KSB7Ci0gICAgbG9nKGRlc2NyaXB0aW9uKGV2ZW50
LnRhcmdldCkgKyAnIGlzIGZvY3VzZWQuJyk7Ci19Ci0KLWZ1bmN0aW9uIGFkZEZvY3VzRXZlbnRM
aXN0ZW5lcihlbGVtZW50KSB7Ci0gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycs
IG9uRm9jdXMsIGZhbHNlKTsKLX0KLQogZnVuY3Rpb24gY3JlYXRlVGV4dElucHV0RWxlbWVudChk
b2MsIGlkLCB0YWJJbmRleCkgewogICAgIHZhciBpbnB1dCA9IGRvYy5jcmVhdGVFbGVtZW50KCdp
bnB1dCcpOwogICAgIGlucHV0LnR5cGUgPSAndGV4dCc7CiAgICAgaW5wdXQuaWQgPSBpZDsKICAg
ICBpbnB1dC50YWJJbmRleCA9IHRhYkluZGV4OwotICAgIGFkZEZvY3VzRXZlbnRMaXN0ZW5lcihp
bnB1dCk7CiAgICAgcmV0dXJuIGlucHV0OwogfQogCkBAIC00NCwxMCArMjUsMTEgQEAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogCiAgICAgZnVuY3Rpb24gYWRkU2hhZG93SG9z
dChkb2MpIHsKICAgICAgICAgdmFyIHNoYWRvd0hvc3QgPSBkb2MuY3JlYXRlRWxlbWVudCgncCcp
OwotICAgICAgICBzaGFkb3dIb3N0LnRhYkluZGV4ID0gLTE7ICAvLyBUaGlzIHNoYWRvdyBob3N0
IChhbmQgYSBzaGFkb3cgdHJlZSBpbiB0aGF0KSBzaG91bGQgYmUgc2tpcHBlZC4KKyAgICAgICAg
c2hhZG93SG9zdC5pZCA9ICdob3N0LTAxJzsKKyAgICAgICAgc2hhZG93SG9zdC50YWJJbmRleCA9
IC0xOwogICAgICAgICB2YXIgc2hhZG93ID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qoc2hh
ZG93SG9zdCk7CiAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHNoYWRvd0hvc3QpOwotICAg
ICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdzaGFk
b3ctaW5wdXQtMDMnLCAwKSk7CisgICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0
SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTAzJywgMCkpOwogICAgIH0KICAgICBhZGRTaGFkb3dI
b3N0KGRvYyk7CiAKQEAgLTU1LDI3ICszNywyOSBAQCBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CiAKICAgICBmdW5jdGlvbiBhZGRJZnJhbWUoZG9jKSB7CiAgICAgICAgIHZhciBp
ZnJhbWUgPSBkb2MuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgIGlmcmFtZS5pZCA9
ICdpZnJhbWUnOwogICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOwogICAgICAg
ICBkb2MgPSBpZnJhbWUuY29udGVudERvY3VtZW50OwogCi0gICAgICAgIGRvYy5ib2R5LmFwcGVu
ZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaWZyYW1lLWlucHV0LTA1JywgMCkp
OwotICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRv
YywgJ2lmcmFtZS1pbnB1dC0wNicsIDEpKTsKLSAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQo
Y3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtaW5wdXQtMDcnLCAtMSkpOworICAg
ICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lu
cHV0LTA1JywgMCkpOworICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5w
dXRFbGVtZW50KGRvYywgJ2lucHV0LTA2JywgMSkpOworICAgICAgICBkb2MuYm9keS5hcHBlbmRD
aGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTA3JywgLTEpKTsKIAogICAg
ICAgICBmdW5jdGlvbiBhZGRTaGFkb3dIb3N0KGRvYykgewogICAgICAgICAgICAgdmFyIHNoYWRv
d0hvc3QgPSBkb2MuY3JlYXRlRWxlbWVudCgncCcpOworICAgICAgICAgICAgc2hhZG93SG9zdC5p
ZCA9ICdob3N0LTAyJzsKICAgICAgICAgICAgIHNoYWRvd0hvc3QudGFiSW5kZXggPSAxOwogICAg
ICAgICAgICAgdmFyIHNoYWRvdyA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHNoYWRvd0hv
c3QpOwogICAgICAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc2hhZG93SG9zdCk7CiAKLSAg
ICAgICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywg
J2lmcmFtZS1zaGFkb3ctaW5wdXQtMDgnLCAwKSk7Ci0gICAgICAgICAgICBzaGFkb3cuYXBwZW5k
Q2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtc2hhZG93LWlucHV0LTA5
JywgMSkpOwotICAgICAgICAgICAgc2hhZG93LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVs
ZW1lbnQoZG9jLCAnaWZyYW1lLXNoYWRvdy1pbnB1dC0xMCcsIC0xKSk7CisgICAgICAgICAgICBz
aGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpbnB1dC0wOCcs
IDApKTsKKyAgICAgICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVt
ZW50KGRvYywgJ2lucHV0LTA5JywgMSkpOworICAgICAgICAgICAgc2hhZG93LmFwcGVuZENoaWxk
KGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMTAnLCAtMSkpOwogICAgICAgICB9
CiAgICAgICAgIGFkZFNoYWRvd0hvc3QoZG9jKTsKIAotICAgICAgICBkb2MuYm9keS5hcHBlbmRD
aGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lmcmFtZS1pbnB1dC0xMScsIDIpKTsK
LSAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2Ms
ICdpZnJhbWUtaW5wdXQtMTInLCAxKSk7CisgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNy
ZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMTEnLCAyKSk7CisgICAgICAgIGRvYy5i
b2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMTInLCAx
KSk7CiAgICAgfQogICAgIGFkZElmcmFtZShkb2MpOwogCkBAIC04MywyMCArNjcsNDAgQEAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgIGRvYy5ib2R5LmFwcGVuZENoaWxk
KGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMTQnLCAwKSk7CiAgICAgZG9jLmJv
ZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpbnB1dC0xNScsIDIp
KTsKIAotICAgIGxvZygnRm9jdXMgaW5wdXQtMDEuJyk7Ci0gICAgZG9jLmdldEVsZW1lbnRCeUlk
KCdpbnB1dC0wMScpLmZvY3VzKCk7CisgICAgdGVzdEZvY3VzTmF2aWdhdGlvbkZvd3JhZChbCisg
ICAgICAgICdpbnB1dC0wMScsCisgICAgICAgICdpbnB1dC0xMycsCisgICAgICAgICdpbnB1dC0x
NScsCisgICAgICAgICdpbnB1dC0wMicsCisgICAgICAgICdob3N0LTAxL2lucHV0LTAzJywKKyAg
ICAgICAgJ2lucHV0LTA0JywKKyAgICAgICAgJ2lmcmFtZS9pbnB1dC0wNicsCisgICAgICAgICdp
ZnJhbWUvaG9zdC0wMicsCisgICAgICAgICdpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOScsCisgICAg
ICAgICdpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOCcsCisgICAgICAgICdpZnJhbWUvaW5wdXQtMTIn
LAorICAgICAgICAnaWZyYW1lL2lucHV0LTExJywKKyAgICAgICAgJ2lmcmFtZS9pbnB1dC0wNScs
CisgICAgICAgICdpbnB1dC0xNCcsCisgICAgXSk7CisKKyAgICB0ZXN0Rm9jdXNOYXZpZ2F0aW9u
QmFja3dhcmQoWworICAgICAgICAnaW5wdXQtMTQnLAorICAgICAgICAnaWZyYW1lL2lucHV0LTA1
JywKKyAgICAgICAgJ2lmcmFtZS9pbnB1dC0xMScsCisgICAgICAgICdpZnJhbWUvaW5wdXQtMTIn
LAorICAgICAgICAnaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDgnLAorICAgICAgICAnaWZyYW1lL2hv
c3QtMDIvaW5wdXQtMDknLAorICAgICAgICAnaWZyYW1lL2hvc3QtMDInLAorICAgICAgICAnaWZy
YW1lL2lucHV0LTA2JywKKyAgICAgICAgJ2lucHV0LTA0JywKKyAgICAgICAgJ2hvc3QtMDEvaW5w
dXQtMDMnLAorICAgICAgICAnaW5wdXQtMDInLAorICAgICAgICAnaW5wdXQtMTUnLAorICAgICAg
ICAnaW5wdXQtMTMnLAorICAgICAgICAnaW5wdXQtMDEnLAorICAgIF0pOwogCi0gICAgaWYgKHdp
bmRvdy5ldmVudFNlbmRlcikgewotICAgICAgICB2YXIgcHJlc3NlZCA9IDExOwotICAgICAgICBs
b2coJ1xuUHJlc3MgVGFiICcgKyBwcmVzc2VkICsgJyB0aW1lcy4nKTsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBwcmVzc2VkOyArK2kpIHsKLSAgICAgICAgICAgIGV2ZW50U2VuZGVyLmtl
eURvd24oJ1x0Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgbG9nKCdcblByZXNzIFNoaWZ0LVRhYiAn
ICsgcHJlc3NlZCArICcgdGltZXMuJyk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJl
c3NlZDsgKytpKSB7Ci0gICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCdcdCcsIFsnc2hp
ZnRLZXknXSk7Ci0gICAgICAgIH0KLSAgIH0KICAgIGxvZygnXG5UZXN0IGZpbmlzaGVkLicpOwog
fQogPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134527</attachid>
            <date>2012-03-29 01:45:22 -0700</date>
            <delta_ts>2012-03-29 02:46:07 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-78588-20120329174521.patch</filename>
            <type>text/plain</type>
            <size>58435</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2YwNjMzYTU3MzFlYjVk
NGU2ZmE0YmE0ZWVmNWNlNzU3ZmMzN2NkMS4uZDgwNWFmODBmZjdhYjVlZTg4MDFkMjMxNDMzNGY5
NGUyODhlM2FlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTAzLTI5ICBoYXlh
dG9AY2hyb21pdW0ub3JnICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBMZXQgZm9j
dXMgbmF2aWdhdGlvbiBiZSBjb21wbGlhbnQgd2l0aCBTaGFkb3cgRE9NIHNwZWMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU4OAorCisgICAgICAg
IFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KKworICAgICAgICBSZS1sYW5kaW5nIHIxMTI1
MDAuIEZpeGVkIGFuIGFzc2VydGlvbiBmYWlsdXJlIG9uIFJlaWZpZWRUcmVlVHJhdmVyc2FsLgor
CisgICAgICAgIFNlcXVlbnRpYWwgZm9jdXMgbmF2aWdhdGlvbiBub3cgYmVoYXZlcyBleGFjdGx5
IGFzIHNwZWNpZmllZCBpbiB0aGUgU2hhZG93IERPTSBzcGVjLgorCisgICAgICAgIEFjY29yZGlu
ZyB0byB0aGUgU2hhZG93IERPTSBzcGVjOgorICAgICAgICBUaGUgc2hhZG93IERPTSBuYXZpZ2F0
aW9uIG9yZGVyIHNlcXVlbmNlIGlzIGluc2VydGVkIGludG8gdGhlIGRvY3VtZW50IG5hdmlnYXRp
b24gb3JkZXI6CisgICAgICAgIDEuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBzaGFkb3cgaG9zdCwg
aWYgdGhlIHNoYWRvdyBob3N0IGlzIGZvY3VzYWJsZTsgb3IKKyAgICAgICAgMi4gaW4gcGxhY2Ug
b2YgdGhlIHNoYWRvdyBob3N0IGFzIGlmIHRoZSBzaGFkb3cgaG9zdCB3ZXJlIGFzc2lnbmVkIHRo
ZSB2YWx1ZSBvZiBhdXRvIGZvciBkZXRlcm1pbmluZyBpdHMgcG9zaXRpb24uCisKKyAgICAgICAg
UHJpb3IgdG8gdGhpcyBwYXRjaCwgc2VxdWVudGlhbCBmb2N1cyBuYXZpZ2F0aW9uIGdvZXMgaW50
byBTaGFkb3cgRE9NLCBidXQgaXQgaXMgaW5jb21wbGV0ZQorICAgICAgICBzaW5jZSBpbnNlcnRp
b24gcG9pbnRzLCBzdWNoIGFzIDxjb250ZW50PiBlbGVtZW50cyBvciA8c2hhZG93PiBlbGVtZW50
cywgYXJlIG5vdCByZXNvbHZlZCBhdCBhbGwuCisgICAgICAgIE5vdyBmb2N1cyBuYXZpZ2F0aW9u
IGNhbiB0cmF2ZXJzZSBzaGFkb3cgRE9NIHN1YnRyZWVzIGluICdyZWlmaWVkIHRyZWUgb3JkZXIn
LCByZXNvbHZpbmcgbG93ZXIgYm91bmRhcmllcyB0cmFuc3BhcmVudGx5LgorCisgICAgICAgIElt
cGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgICBQcmlvciB0byB0aGlzIHBhdGNoLCBzZXF1ZW50
aWFsIGZvY3VzIG5hdmlnYXRpb24gZG9lcyBub3QgZ28gaW50byBTaGFkb3cgRE9NIGlmIGEgc2hh
ZG93IGhvc3QgaXMgbm9uLWZvY3VzYWJsZS4KKyAgICAgICAgTm93IGZvY3VzIG5hdmlnYXRpb24g
bXVzdCBnbyBpbnRvIFNoYWRvdyBET00gc3VidHJlZXMgZXZlbiBpZiBhIHNob3cgaG9zdCBpcyBu
b3QgZm9jdXNhYmxlIGFzIGRlc2NyaWJlZCBpbiAyKS4KKyAgICAgICAgVG8gc3VwcG9ydCB0aGlz
IGJlaGF2aW9yLCB0aGlzIHBhdGNoIGludHJvZHVjZWQgYWRqdXN0ZWRUYWJJbmRleCgpIGxvY2Fs
bHkgaW4gRm9jdXNDb250cm9sbGVyIHNvIHRoYXQKKyAgICAgICAgaXQgZG9lcyBub3Qgc2tpcCBh
IG5vbi1mb2N1c2FibGUgc2hhZG93IGhvc3QgaW4gY3VycmVudCBmb2N1cyBzY29wZS4KKyAgICAg
ICAgQWZ0ZXIgZmluZGluZyBhICpwc2V1ZG8qIGZvY3VzYWJsZSBlbGVtZW50IGluIGN1cnJlbnQg
Zm9jdXMgc2NvcGUsIGl0IHRyaWVzIHRvIHJlc29sdmUgYSBmb2N1c2VkIGVsZW1lbnQgcmVjdXJz
aXZlbHksCisgICAgICAgIGNvbnNpZGVyaW5nIGEgbmVzdGVkIGZvY3VzIHNjb3BlIGluc2lkZSBv
ZiBhIHNoYWRvdyBob3N0IG9yIGlmcmFtZS4KKyAgICAgICAgVG8gdHJhdmVyc2UgU2hhZG93IERP
TSBzdWJ0cmVlcywgYSBGb2N1c0NvbnRyb2xsZXIgbWFrZXMgdXNlIG9mIFJlaWZpZWRUcmVlVHJh
dmVyc2FsIEFQSXMsIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGluIHIxMTIwNTUuCisKKyAgICAgICAg
VGhpcyBjaGFuZ2UgZG9lcyBub3QgYWZmZWN0IGFuIGV4aXN0aW5nIGJlaGF2aW9yIGlmIGEgc2hh
ZG93IGRvbSBpcyBub3QgaW52b2x2ZWQuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vc2hhZG93
L2ZvY3VzLW5hdmlnYXRpb24uaHRtbAorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Zm9jdXMpOgorICAgICAgICAqIGRvbS9SZWlmaWVkVHJl
ZVRyYXZlcnNhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWlmaWVkVHJlZVRyYXZlcnNhbDo6
cGFyZW50Tm9kZVdpdGhvdXRDcm9zc2luZ1VwcGVyQm91bmRhcnkpOgorICAgICAgICAqIHBhZ2Uv
Rm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU2hhZG93SG9zdCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzU2NvcGU6OkZvY3VzU2Nv
cGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNTY29wZTo6cm9vdE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9jdXNTY29wZTo6b3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNTY29w
ZTo6Zm9jdXNTY29wZU9mKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzU2NvcGU6OmZvY3VzU2Nv
cGVPd25lZEJ5U2hhZG93SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c1Njb3BlOjpmb2N1
c1Njb3BlT3duZWRCeUlGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpoYXNDdXN0b21Gb2N1c0xv
Z2ljKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdCk6CisgICAg
ICAgIChXZWJDb3JlOjppc0ZvY3VzYWJsZVNoYWRvd0hvc3QpOgorICAgICAgICAoV2ViQ29yZTo6
YWRqdXN0ZWRUYWJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRWaXNpdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5n
RG93bkludG9GcmFtZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxl
cjo6YWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3Vz
Q29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVBY3Jvc3NGb2N1c1Njb3BlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVSZWN1cnNpdmVseSk6
CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZE5vZGVXaXRoRXhhY3RUYWJJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Tm9kZVdpdGhHcmVhdGVyVGFiSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNOb2RlV2l0aExvd2VyVGFiSW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxlTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNhYmxlTm9kZSk6CisgICAg
ICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRm9jdXNTY29wZSk6CisgICAgICAgIChGb2N1c0NvbnRyb2xsZXIpOgorCiAyMDEyLTAzLTI5
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByMTEyNTAwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4
IGIyOWJmYjRhNWUyMzA1YzVhMWM2ZThlYjFkMjRhOWJkYjhkZGNhMDkuLjk1MzI3MDgwMzU1NzY3
ZGVhODI2ZjM2OWRiZjJkMTUwZWUxZTYwZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTE1
NDgsOCArMTU0OCw2IEBAIHZvaWQgRWxlbWVudDo6Zm9jdXMoYm9vbCByZXN0b3JlUHJldmlvdXNT
ZWxlY3Rpb24pCiAgICAgICAgIC8vIElmIGEgZm9jdXMgZXZlbnQgaGFuZGxlciBjaGFuZ2VzIHRo
ZSBmb2N1cyB0byBhIGRpZmZlcmVudCBub2RlIGl0CiAgICAgICAgIC8vIGRvZXMgbm90IG1ha2Ug
c2Vuc2UgdG8gY29udGludWUgYW5kIHVwZGF0ZSBhcHBlYXJlbmNlLgogICAgICAgICBwcm90ZWN0
ID0gdGhpczsKLSAgICAgICAgaWYgKGhhc1NoYWRvd1Jvb3QoKSAmJiBwYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS0+dHJhbnNmZXJGb2N1c1RvRWxlbWVudEluU2hhZG93Um9vdCh0aGlzLCByZXN0b3Jl
UHJldmlvdXNTZWxlY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIXBh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkTm9kZSh0aGlzLCBkb2MtPmZyYW1lKCkp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SZWlmaWVkVHJlZVRyYXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVpZmll
ZFRyZWVUcmF2ZXJzYWwuY3BwCmluZGV4IDNjNTQzNTQ4OGY1NzFmZTc1ZTNmOTQyZTYxNDdmYTU0
ODhkMjEyYTQuLmZmNTFlMTZkMmRhODA1ZWM4YTZjMGU1ODgwNWE5ZjczM2Y2MmUzYzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SZWlmaWVkVHJlZVRyYXZlcnNhbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1JlaWZpZWRUcmVlVHJhdmVyc2FsLmNwcApAQCAtMjEwLDcgKzIx
MCw3IEBAIE5vZGUqIFJlaWZpZWRUcmVlVHJhdmVyc2FsOjpwYXJlbnROb2RlV2l0aG91dENyb3Nz
aW5nVXBwZXJCb3VuZGFyeShjb25zdCBOb2RlKiBuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMDEwCiAgICAgLy8gQVNTRVJUKCFpc0luc2VydGlvblBv
aW50KG5vZGUpIHx8ICF0b0luc2VydGlvblBvaW50KG5vZGUpLT5pc0FjdGl2ZSgpKTsKICAgICBD
cm9zc2VkVXBwZXJCb3VuZGFyeSBjcm9zc2VkOwotICAgIE5vZGUqIHBhcmVudCA9IHBhcmVudE5v
ZGVPckJhY2tUb0luc2VydGlvblBvaW50KG5vZGUsIGNyb3NzZWQpOworICAgIE5vZGUqIHBhcmVu
dCA9IHBhcmVudE5vZGUobm9kZSwgY3Jvc3NlZCk7CiAgICAgaWYgKGNyb3NzZWQgPT0gQ3Jvc3Nl
ZCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHBhcmVudDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRm9jdXNDb250cm9sbGVyLmNwcAppbmRleCBmYjE2ZGYwMjFiNmI0NjcyNjA5OTlhYWRkOWFm
MWUyMDVmMGRhNDM5Li41MDRlNGJlYTNjY2E5YzRkZDU3YzliZjFlMWIzNjk4OTlhZWU4NGE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCkBAIC00OCw2ICs0OCw3IEBA
CiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJSYW5nZS5oIgorI2luY2x1ZGUgIlJlaWZpZWRUcmVlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJXaWRnZXQuaCIKQEAgLTY1LDYgKzY2LDU0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNTaGFkb3dIb3N0KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIG5v
ZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aGFzU2hhZG93
Um9vdCgpOworfQorCitGb2N1c1Njb3BlOjpGb2N1c1Njb3BlKFRyZWVTY29wZSogdHJlZVNjb3Bl
KQorICAgIDogbV9yb290VHJlZVNjb3BlKHRyZWVTY29wZSkKK3sKKyAgICBBU1NFUlQodHJlZVNj
b3BlKTsKKyAgICBBU1NFUlQoIXRyZWVTY29wZS0+cm9vdE5vZGUoKS0+aXNTaGFkb3dSb290KCkg
fHwgdG9TaGFkb3dSb290KHRyZWVTY29wZS0+cm9vdE5vZGUoKSktPmlzWW91bmdlc3QoKSk7Cit9
CisKK05vZGUqIEZvY3VzU2NvcGU6OnJvb3ROb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9y
b290VHJlZVNjb3BlLT5yb290Tm9kZSgpOworfQorCitFbGVtZW50KiBGb2N1c1Njb3BlOjpvd25l
cigpIGNvbnN0Cit7CisgICAgTm9kZSogcm9vdCA9IHJvb3ROb2RlKCk7CisgICAgaWYgKHJvb3Qt
PmlzU2hhZG93Um9vdCgpKQorICAgICAgICByZXR1cm4gcm9vdC0+c2hhZG93SG9zdCgpOworICAg
IGlmIChGcmFtZSogZnJhbWUgPSByb290LT5kb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICBy
ZXR1cm4gZnJhbWUtPm93bmVyRWxlbWVudCgpOworICAgIHJldHVybiAwOworfQorCitGb2N1c1Nj
b3BlIEZvY3VzU2NvcGU6OmZvY3VzU2NvcGVPZihOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChu
b2RlKTsKKyAgICBUcmVlU2NvcGUqIHNjb3BlID0gbm9kZS0+dHJlZVNjb3BlKCk7CisgICAgaWYg
KHNjb3BlLT5yb290Tm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmV0dXJuIEZvY3Vz
U2NvcGUodG9TaGFkb3dSb290KHNjb3BlLT5yb290Tm9kZSgpKS0+dHJlZSgpLT55b3VuZ2VzdFNo
YWRvd1Jvb3QoKSk7CisgICAgcmV0dXJuIEZvY3VzU2NvcGUoc2NvcGUpOworfQorCitGb2N1c1Nj
b3BlIEZvY3VzU2NvcGU6OmZvY3VzU2NvcGVPd25lZEJ5U2hhZG93SG9zdChOb2RlKiBub2RlKQor
eworICAgIEFTU0VSVChpc1NoYWRvd0hvc3Qobm9kZSkpOworICAgIHJldHVybiBGb2N1c1Njb3Bl
KHRvRWxlbWVudChub2RlKS0+c2hhZG93VHJlZSgpLT55b3VuZ2VzdFNoYWRvd1Jvb3QoKSk7Cit9
CisKK0ZvY3VzU2NvcGUgRm9jdXNTY29wZTo6Zm9jdXNTY29wZU93bmVkQnlJRnJhbWUoSFRNTEZy
YW1lT3duZXJFbGVtZW50KiBmcmFtZSkKK3sKKyAgICBBU1NFUlQoZnJhbWUgJiYgZnJhbWUtPmNv
bnRlbnRGcmFtZSgpKTsKKyAgICByZXR1cm4gRm9jdXNTY29wZShmcmFtZS0+Y29udGVudEZyYW1l
KCktPmRvY3VtZW50KCkpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZGlzcGF0Y2hFdmVudHNP
bldpbmRvd0FuZEZvY3VzZWROb2RlKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBmb2N1c2VkKQog
ewogICAgIC8vIElmIHdlIGhhdmUgYSBmb2N1c2VkIG5vZGUgd2Ugc2hvdWxkIGRpc3BhdGNoIGJs
dXIgb24gaXQgYmVmb3JlIHdlIGJsdXIgdGhlIHdpbmRvdy4KQEAgLTg0LDYgKzEzMywzNSBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgZGlzcGF0Y2hFdmVudHNPbldpbmRvd0FuZEZvY3VzZWROb2RlKERv
Y3VtZW50KiBkb2N1bWVudCwgYm9vbAogICAgICAgICBkb2N1bWVudC0+Zm9jdXNlZE5vZGUoKS0+
ZGlzcGF0Y2hGb2N1c0V2ZW50KDApOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzQ3VzdG9t
Rm9jdXNMb2dpYyhOb2RlKiBub2RlKQoreworICAgIHJldHVybiBub2RlLT5oYXNUYWdOYW1lKGlu
cHV0VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSB8fCBub2RlLT5oYXNUYWdO
YW1lKHZpZGVvVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGF1ZGlvVGFnKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIGlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdChOb2RlKiBub2RlLCBLZXlib2Fy
ZEV2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgcmV0dXJuICFub2RlLT5p
c0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBpc1NoYWRvd0hvc3Qobm9kZSkgJiYgIWhhc0N1
c3RvbUZvY3VzTG9naWMobm9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvY3VzYWJs
ZVNoYWRvd0hvc3QoTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgQVNT
RVJUKG5vZGUpOworICAgIHJldHVybiBub2RlLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAm
JiBpc1NoYWRvd0hvc3Qobm9kZSkgJiYgIWhhc0N1c3RvbUZvY3VzTG9naWMobm9kZSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkVGFiSW5kZXgoTm9kZSogbm9kZSwgS2V5Ym9hcmRF
dmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIHJldHVybiBpc05vbkZvY3Vz
YWJsZVNoYWRvd0hvc3Qobm9kZSwgZXZlbnQpID8gMCA6IG5vZGUtPnRhYkluZGV4KCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRWaXNpdChOb2RlKiBub2RlLCBLZXlib2FyZEV2ZW50
KiBldmVudCkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAgcmV0dXJuIG5vZGUtPmlzS2V5Ym9h
cmRGb2N1c2FibGUoZXZlbnQpIHx8IGlzTm9uRm9jdXNhYmxlU2hhZG93SG9zdChub2RlLCBldmVu
dCk7Cit9CisKIEZvY3VzQ29udHJvbGxlcjo6Rm9jdXNDb250cm9sbGVyKFBhZ2UqIHBhZ2UpCiAg
ICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1faXNBY3RpdmUoZmFsc2UpCkBAIC0xNTMsNTIgKzIz
MSwxNiBAQCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZChib29sIGZvY3VzZWQpCiAg
ICAgfQogfQogCi1zdGF0aWMgaW5saW5lIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QoTm9kZSogbm9k
ZSkKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVEZWNlbmRpbmdEb3du
SW50b0ZyYW1lRG9jdW1lbnQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBub2RlLCBL
ZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICByZXR1cm4gbm9kZS0+aXNFbGVtZW50Tm9kZSgp
ICYmIHRvRWxlbWVudChub2RlKS0+aGFzU2hhZG93Um9vdCgpID8gdG9FbGVtZW50KG5vZGUpLT5z
aGFkb3dUcmVlKCktPnlvdW5nZXN0U2hhZG93Um9vdCgpIDogMDsKLX0KLQotc3RhdGljIGlubGlu
ZSBib29sIGlzVHJlZVNjb3BlT3duZXIoTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gbm9kZSAm
JiAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8IHNoYWRvd1Jvb3Qobm9kZSkpOwotfQot
Ci1ib29sIEZvY3VzQ29udHJvbGxlcjo6dHJhbnNmZXJGb2N1c1RvRWxlbWVudEluU2hhZG93Um9v
dChFbGVtZW50KiBzaGFkb3dIb3N0LCBib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikKLXsK
LSAgICBBU1NFUlQoc2hhZG93Um9vdChzaGFkb3dIb3N0KSk7Ci0gICAgTm9kZSogbm9kZSA9IGZp
bmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50T3JTaGFkb3dSb290
KEZvY3VzRGlyZWN0aW9uRm9yd2FyZCwgc2hhZG93SG9zdCwgMCk7Ci0gICAgaWYgKHNoYWRvd0hv
c3QgPT0gbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRvRWxlbWVudChub2RlKS0+
Zm9jdXMocmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIGhhc0N1c3RvbUZvY3VzTG9naWMoTm9kZSogbm9kZSkKLXsKLSAg
ICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZSh0
ZXh0YXJlYVRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgbm9kZS0+aGFzVGFn
TmFtZShhdWRpb1RhZyk7Ci19Ci0KLU5vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJs
ZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnRPclNoYWRvd1Jvb3QoRm9jdXNEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBub2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKLXsKLSAg
ICAvLyBUaGUgbm9kZSB3ZSBmb3VuZCBtaWdodCBiZSBhIEhUTUxGcmFtZU93bmVyRWxlbWVudCBv
ciBhIHNoYWRvdyBob3N0LCBzbyBkZXNjZW5kIGRvd24gdGhlIHRyZWUgdW50aWwgd2UgZmluZCBl
aXRoZXI6CisgICAgLy8gVGhlIG5vZGUgd2UgZm91bmQgbWlnaHQgYmUgYSBIVE1MRnJhbWVPd25l
ckVsZW1lbnQsIHNvIGRlc2NlbmQgZG93biB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGVpdGhlcjoK
ICAgICAvLyAxKSBhIGZvY3VzYWJsZSBub2RlLCBvcgotICAgIC8vIDIpIHRoZSBkZWVwZXN0LW5l
c3RlZCBIVE1MRnJhbWVPd25lckVsZW1lbnQgb3Igc2hhZG93IGhvc3QuCi0gICAgd2hpbGUgKGlz
VHJlZVNjb3BlT3duZXIobm9kZSkpIHsKLSAgICAgICAgTm9kZSogZm91bmROb2RlOwotICAgICAg
ICBpZiAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50
Kj4obm9kZSk7Ci0gICAgICAgICAgICBpZiAoIW93bmVyLT5jb250ZW50RnJhbWUoKSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG93bmVy
LT5jb250ZW50RnJhbWUoKS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgIGZvdW5kTm9kZSA9IGZp
bmRGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgZG9jdW1lbnQsIDAsIGV2ZW50KTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBVbnRpbCBhIGZvY3VzIHJlLXRhcmdldGlu
ZyAoYnVnIDYxNDIxKSBpcyBpbXBsZW1lbnRlZCwKLSAgICAgICAgICAgIC8vIHNraXBwaW5nIHRo
ZXNlIGVsZW1lbnRzIGlzIHRoZSBzYWZlc3Qgd2F5IHRvIGtlZXAgYSBjb21wYXRpYmlsaXR5Lgot
ICAgICAgICAgICAgaWYgKGhhc0N1c3RvbUZvY3VzTG9naWMobm9kZSkpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBBU1NFUlQoc2hhZG93Um9vdChub2RlKSk7Ci0gICAgICAg
ICAgICBmb3VuZE5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZShkaXJlY3Rpb24sIHNoYWRvd1Jvb3Qo
bm9kZSksIDAsIGV2ZW50KTsKLSAgICAgICAgfQorICAgIC8vIDIpIHRoZSBkZWVwZXN0LW5lc3Rl
ZCBIVE1MRnJhbWVPd25lckVsZW1lbnQuCisgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+aXNGcmFt
ZU93bmVyRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIg
PSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYg
KCFvd25lci0+Y29udGVudEZyYW1lKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgTm9k
ZSogZm91bmROb2RlID0gZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBGb2N1c1Njb3BlOjpm
b2N1c1Njb3BlT3duZWRCeUlGcmFtZShvd25lciksIDAsIGV2ZW50KTsKICAgICAgICAgaWYgKCFm
b3VuZE5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgQVNTRVJUKG5vZGUgIT0gZm91
bmROb2RlKTsKQEAgLTI1Myw3ICsyOTUsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5j
ZUZvY3VzSW5Eb2N1bWVudE9yZGVyKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5YgogCiAg
ICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0g
ICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZUFjcm9zc1RyZWVTY29wZShk
aXJlY3Rpb24sIGN1cnJlbnROb2RlID8gY3VycmVudE5vZGUtPnRyZWVTY29wZSgpIDogZG9jdW1l
bnQsIGN1cnJlbnROb2RlLCBldmVudCk7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBmaW5kRm9j
dXNhYmxlTm9kZUFjcm9zc0ZvY3VzU2NvcGUoZGlyZWN0aW9uLCBGb2N1c1Njb3BlOjpmb2N1c1Nj
b3BlT2YoY3VycmVudE5vZGUgPyBjdXJyZW50Tm9kZSA6IGRvY3VtZW50KSwgY3VycmVudE5vZGUs
IGV2ZW50KTsKIAogICAgIGlmICghbm9kZSkgewogICAgICAgICAvLyBXZSBkaWRuJ3QgZmluZCBh
IG5vZGUgdG8gZm9jdXMsIHNvIHdlIHNob3VsZCB0cnkgdG8gcGFzcyBmb2N1cyB0byBDaHJvbWUu
CkBAIC0yNjUsOCArMzA3LDggQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0lu
RG9jdW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWIKICAgICAgICAgfQog
CiAgICAgICAgIC8vIENocm9tZSBkb2Vzbid0IHdhbnQgZm9jdXMsIHNvIHdlIHNob3VsZCB3cmFw
IGZvY3VzLgotICAgICAgICBub2RlID0gZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBtX3Bh
Z2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLCAwLCBldmVudCk7Ci0gICAgICAgIG5vZGUgPSBm
aW5kRm9jdXNhYmxlTm9kZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVEb2N1bWVudE9yU2hhZG93Um9v
dChkaXJlY3Rpb24sIG5vZGUuZ2V0KCksIGV2ZW50KTsKKyAgICAgICAgbm9kZSA9IGZpbmRGb2N1
c2FibGVOb2RlUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBGb2N1c1Njb3BlOjpmb2N1c1Njb3BlT2Yo
bV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSksIDAsIGV2ZW50KTsKKyAgICAgICAgbm9k
ZSA9IGZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFtZURvY3VtZW50KGRpcmVj
dGlvbiwgbm9kZS5nZXQoKSwgZXZlbnQpOwogCiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTMxOCw1NiArMzYwLDcwIEBAIGJvb2wgRm9jdXNDb250cm9s
bGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9u
LCBLZXliCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgTm9kZSogb3duZXJP
ZlRyZWVTY29wZShUcmVlU2NvcGUqIHNjb3BlKQorTm9kZSogRm9jdXNDb250cm9sbGVyOjpmaW5k
Rm9jdXNhYmxlTm9kZUFjcm9zc0ZvY3VzU2NvcGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBG
b2N1c1Njb3BlIHNjb3BlLCBOb2RlKiBjdXJyZW50Tm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQp
CiB7Ci0gICAgQVNTRVJUKHNjb3BlKTsKLSAgICBpZiAoc2NvcGUtPnJvb3ROb2RlKCktPmlzU2hh
ZG93Um9vdCgpKQotICAgICAgICByZXR1cm4gc2NvcGUtPnJvb3ROb2RlKCktPnNoYWRvd0hvc3Qo
KTsKLSAgICBpZiAoc2NvcGUtPnJvb3ROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAg
ICAgIHJldHVybiBzY29wZS0+cm9vdE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+b3duZXJF
bGVtZW50KCk7Ci0gICAgcmV0dXJuIDA7Ci19CisgICAgQVNTRVJUKCFjdXJyZW50Tm9kZSB8fCAh
aXNOb25Gb2N1c2FibGVTaGFkb3dIb3N0KGN1cnJlbnROb2RlLCBldmVudCkpOworICAgIE5vZGUq
IGZvdW5kOworICAgIGlmIChjdXJyZW50Tm9kZSAmJiBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rp
b25Gb3J3YXJkICYmIGlzRm9jdXNhYmxlU2hhZG93SG9zdChjdXJyZW50Tm9kZSwgZXZlbnQpKSB7
CisgICAgICAgIE5vZGUqIGZvdW5kSW5Jbm5lckZvY3VzU2NvcGUgPSBmaW5kRm9jdXNhYmxlTm9k
ZVJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgRm9jdXNTY29wZTo6Zm9jdXNTY29wZU93bmVkQnlTaGFk
b3dIb3N0KGN1cnJlbnROb2RlKSwgMCwgZXZlbnQpOworICAgICAgICBmb3VuZCA9IGZvdW5kSW5J
bm5lckZvY3VzU2NvcGUgPyBmb3VuZEluSW5uZXJGb2N1c1Njb3BlIDogZmluZEZvY3VzYWJsZU5v
ZGVSZWN1cnNpdmVseShkaXJlY3Rpb24sIHNjb3BlLCBjdXJyZW50Tm9kZSwgZXZlbnQpOworICAg
IH0gZWxzZQorICAgICAgICBmb3VuZCA9IGZpbmRGb2N1c2FibGVOb2RlUmVjdXJzaXZlbHkoZGly
ZWN0aW9uLCBzY29wZSwgY3VycmVudE5vZGUsIGV2ZW50KTsKIAotTm9kZSogRm9jdXNDb250cm9s
bGVyOjpmaW5kRm9jdXNhYmxlTm9kZUFjcm9zc1RyZWVTY29wZShGb2N1c0RpcmVjdGlvbiBkaXJl
Y3Rpb24sIFRyZWVTY29wZSogc2NvcGUsIE5vZGUqIGN1cnJlbnROb2RlLCBLZXlib2FyZEV2ZW50
KiBldmVudCkKLXsKLSAgICBOb2RlKiBub2RlID0gZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9u
LCBzY29wZSwgY3VycmVudE5vZGUsIGV2ZW50KTsKLSAgICAvLyBJZiB0aGVyZSdzIG5vIGZvY3Vz
YWJsZSBub2RlIHRvIGFkdmFuY2UgdG8sIG1vdmUgdXAgdGhlIHRyZWUgc2NvcGVzIHVudGlsIHdl
IGZpbmQgb25lLgotICAgIHdoaWxlICghbm9kZSAmJiBzY29wZSkgewotICAgICAgICBOb2RlKiBv
d25lciA9IG93bmVyT2ZUcmVlU2NvcGUoc2NvcGUpOworICAgIC8vIElmIHRoZXJlJ3Mgbm8gZm9j
dXNhYmxlIG5vZGUgdG8gYWR2YW5jZSB0bywgbW92ZSB1cCB0aGUgZm9jdXMgc2NvcGVzIHVudGls
IHdlIGZpbmQgb25lLgorICAgIHdoaWxlICghZm91bmQpIHsKKyAgICAgICAgTm9kZSogb3duZXIg
PSBzY29wZS5vd25lcigpOwogICAgICAgICBpZiAoIW93bmVyKQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZShkaXJlY3Rpb24sIG93bmVyLT50cmVl
U2NvcGUoKSwgb3duZXIsIGV2ZW50KTsKLSAgICAgICAgc2NvcGUgPSBvd25lci0+dHJlZVNjb3Bl
KCk7CisgICAgICAgIHNjb3BlID0gRm9jdXNTY29wZTo6Zm9jdXNTY29wZU9mKG93bmVyKTsKKyAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkJhY2t3YXJkICYmIGlzRm9jdXNh
YmxlU2hhZG93SG9zdChvd25lciwgZXZlbnQpKSB7CisgICAgICAgICAgICBmb3VuZCA9IG93bmVy
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm91bmQgPSBmaW5kRm9j
dXNhYmxlTm9kZVJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgc2NvcGUsIG93bmVyLCBldmVudCk7CiAg
ICAgfQotICAgIG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZURlY2VuZGluZ0Rvd25JbnRvRnJhbWVE
b2N1bWVudE9yU2hhZG93Um9vdChkaXJlY3Rpb24sIG5vZGUsIGV2ZW50KTsKLSAgICByZXR1cm4g
bm9kZTsKKyAgICBmb3VuZCA9IGZpbmRGb2N1c2FibGVOb2RlRGVjZW5kaW5nRG93bkludG9GcmFt
ZURvY3VtZW50KGRpcmVjdGlvbiwgZm91bmQsIGV2ZW50KTsKKyAgICByZXR1cm4gZm91bmQ7CiB9
CiAKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVSZWN1cnNpdmVseShG
b2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEZvY3VzU2NvcGUgc2NvcGUsIE5vZGUqIHN0YXJ0LCBL
ZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyBTdGFydGluZyBub2RlIGlzIGV4Y2x1c2l2
ZS4KKyAgICBOb2RlKiBmb3VuZCA9IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgc2NvcGUs
IHN0YXJ0LCBldmVudCk7CisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
aWYgKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQpIHsKKyAgICAgICAgaWYgKCFp
c05vbkZvY3VzYWJsZVNoYWRvd0hvc3QoZm91bmQsIGV2ZW50KSkKKyAgICAgICAgICAgIHJldHVy
biBmb3VuZDsKKyAgICAgICAgTm9kZSogZm91bmRJbklubmVyRm9jdXNTY29wZSA9IGZpbmRGb2N1
c2FibGVOb2RlUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBGb2N1c1Njb3BlOjpmb2N1c1Njb3BlT3du
ZWRCeVNoYWRvd0hvc3QoZm91bmQpLCAwLCBldmVudCk7CisgICAgICAgIHJldHVybiBmb3VuZElu
SW5uZXJGb2N1c1Njb3BlID8gZm91bmRJbklubmVyRm9jdXNTY29wZSA6IGZpbmRGb2N1c2FibGVO
b2RlUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBzY29wZSwgZm91bmQsIGV2ZW50KTsKKyAgICB9Cisg
ICAgQVNTRVJUKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkJhY2t3YXJkKTsKKyAgICBpZiAo
aXNGb2N1c2FibGVTaGFkb3dIb3N0KGZvdW5kLCBldmVudCkpIHsKKyAgICAgICAgTm9kZSogZm91
bmRJbklubmVyRm9jdXNTY29wZSA9IGZpbmRGb2N1c2FibGVOb2RlUmVjdXJzaXZlbHkoZGlyZWN0
aW9uLCBGb2N1c1Njb3BlOjpmb2N1c1Njb3BlT3duZWRCeVNoYWRvd0hvc3QoZm91bmQpLCAwLCBl
dmVudCk7CisgICAgICAgIHJldHVybiBmb3VuZEluSW5uZXJGb2N1c1Njb3BlID8gZm91bmRJbklu
bmVyRm9jdXNTY29wZSA6IGZvdW5kOworICAgIH0KKyAgICBpZiAoaXNOb25Gb2N1c2FibGVTaGFk
b3dIb3N0KGZvdW5kLCBldmVudCkpIHsKKyAgICAgICAgTm9kZSogZm91bmRJbklubmVyRm9jdXNT
Y29wZSA9IGZpbmRGb2N1c2FibGVOb2RlUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBGb2N1c1Njb3Bl
Ojpmb2N1c1Njb3BlT3duZWRCeVNoYWRvd0hvc3QoZm91bmQpLCAwLCBldmVudCk7CisgICAgICAg
IHJldHVybiBmb3VuZEluSW5uZXJGb2N1c1Njb3BlID8gZm91bmRJbklubmVyRm9jdXNTY29wZSA6
ZmluZEZvY3VzYWJsZU5vZGVSZWN1cnNpdmVseShkaXJlY3Rpb24sIHNjb3BlLCBmb3VuZCwgZXZl
bnQpOworICAgIH0KKyAgICByZXR1cm4gZm91bmQ7Cit9CiAKLU5vZGUqIEZvY3VzQ29udHJvbGxl
cjo6ZmluZEZvY3VzYWJsZU5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBUcmVlU2NvcGUq
IHNjb3BlLCBOb2RlKiBub2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK05vZGUqIEZvY3VzQ29u
dHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBGb2N1
c1Njb3BlIHNjb3BlLCBOb2RlKiBub2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBy
ZXR1cm4gKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQpCiAgICAgICAgID8gbmV4
dEZvY3VzYWJsZU5vZGUoc2NvcGUsIG5vZGUsIGV2ZW50KQogICAgICAgICA6IHByZXZpb3VzRm9j
dXNhYmxlTm9kZShzY29wZSwgbm9kZSwgZXZlbnQpOwogfQogCi1zdGF0aWMgTm9kZSogbmV4dE5v
ZGVXaXRoRXhhY3RUYWJJbmRleChOb2RlKiBzdGFydCwgaW50IHRhYkluZGV4LCBLZXlib2FyZEV2
ZW50KiBldmVudCkKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZE5vZGVXaXRoRXhhY3RUYWJJ
bmRleChOb2RlKiBzdGFydCwgaW50IHRhYkluZGV4LCBLZXlib2FyZEV2ZW50KiBldmVudCwgRm9j
dXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIC8vIFNlYXJjaCBpcyBpbmNsdXNpdmUgb2Yg
c3RhcnQKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKSkKLSAgICAgICAgaWYgKG5vZGUtPmlzS2V5Ym9hcmRGb2N1c2FibGUo
ZXZlbnQpICYmIG5vZGUtPnRhYkluZGV4KCkgPT0gdGFiSW5kZXgpCisgICAgZm9yIChOb2RlKiBu
b2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSAoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRm9y
d2FyZCA/IFJlaWZpZWRUcmVlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHROb2RlV2l0aG91dENyb3Nz
aW5nVXBwZXJCb3VuZGFyeShub2RlKTogUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlUHJl
dmlvdXNOb2RlV2l0aG91dENyb3NzaW5nVXBwZXJCb3VuZGFyeShub2RlKSkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFZpc2l0KG5vZGUsIGV2ZW50KSAmJiBhZGp1c3RlZFRhYkluZGV4KG5vZGUsIGV2
ZW50KSA9PSB0YWJJbmRleCkKICAgICAgICAgICAgIHJldHVybiBub2RlOwotCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLXN0YXRpYyBOb2RlKiBwcmV2aW91c05vZGVXaXRoRXhhY3RUYWJJbmRleChOb2Rl
KiBzdGFydCwgaW50IHRhYkluZGV4LCBLZXlib2FyZEV2ZW50KiBldmVudCkKLXsKLSAgICAvLyBT
ZWFyY2ggaXMgaW5jbHVzaXZlIG9mIHN0YXJ0Ci0gICAgZm9yIChOb2RlKiBuID0gc3RhcnQ7IG47
IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQotICAgICAgICBpZiAobi0+aXNLZXlib2Fy
ZEZvY3VzYWJsZShldmVudCkgJiYgbi0+dGFiSW5kZXgoKSA9PSB0YWJJbmRleCkKLSAgICAgICAg
ICAgIHJldHVybiBuOwotCisgICAgfQogICAgIHJldHVybiAwOwogfQogCkBAIC0zNzYsOCArNDMy
LDggQEAgc3RhdGljIE5vZGUqIG5leHROb2RlV2l0aEdyZWF0ZXJUYWJJbmRleChOb2RlKiBzdGFy
dCwgaW50IHRhYkluZGV4LCBLZXlib2FyZEV2ZW4KICAgICAvLyBTZWFyY2ggaXMgaW5jbHVzaXZl
IG9mIHN0YXJ0CiAgICAgaW50IHdpbm5pbmdUYWJJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
c2hvcnQ+OjptYXgoKSArIDE7CiAgICAgTm9kZSogd2lubmVyID0gMDsKLSAgICBmb3IgKE5vZGUq
IG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkKLSAgICAgICAgaWYgKG4t
PmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYmIG4tPnRhYkluZGV4KCkgPiB0YWJJbmRleCAm
JiBuLT50YWJJbmRleCgpIDwgd2lubmluZ1RhYkluZGV4KSB7CisgICAgZm9yIChOb2RlKiBuID0g
c3RhcnQ7IG47IG4gPSBSZWlmaWVkVHJlZVRyYXZlcnNhbDo6dHJhdmVyc2VOZXh0Tm9kZVdpdGhv
dXRDcm9zc2luZ1VwcGVyQm91bmRhcnkobikpCisgICAgICAgIGlmIChzaG91bGRWaXNpdChuLCBl
dmVudCkgJiYgbi0+dGFiSW5kZXgoKSA+IHRhYkluZGV4ICYmIG4tPnRhYkluZGV4KCkgPCB3aW5u
aW5nVGFiSW5kZXgpIHsKICAgICAgICAgICAgIHdpbm5lciA9IG47CiAgICAgICAgICAgICB3aW5u
aW5nVGFiSW5kZXggPSBuLT50YWJJbmRleCgpOwogICAgICAgICB9CkBAIC0zOTAsMzAgKzQ0Niwz
MyBAQCBzdGF0aWMgTm9kZSogcHJldmlvdXNOb2RlV2l0aExvd2VyVGFiSW5kZXgoTm9kZSogc3Rh
cnQsIGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdgogICAgIC8vIFNlYXJjaCBpcyBpbmNsdXNpdmUg
b2Ygc3RhcnQKICAgICBpbnQgd2lubmluZ1RhYkluZGV4ID0gMDsKICAgICBOb2RlKiB3aW5uZXIg
PSAwOwotICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91
c05vZGUoKSkKLSAgICAgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYmIG4t
PnRhYkluZGV4KCkgPCB0YWJJbmRleCAmJiBuLT50YWJJbmRleCgpID4gd2lubmluZ1RhYkluZGV4
KSB7CisgICAgZm9yIChOb2RlKiBuID0gc3RhcnQ7IG47IG4gPSBSZWlmaWVkVHJlZVRyYXZlcnNh
bDo6dHJhdmVyc2VQcmV2aW91c05vZGVXaXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5kYXJ5KG4pKSB7
CisgICAgICAgIGludCBjdXJyZW50VGFiSW5kZXggPSBhZGp1c3RlZFRhYkluZGV4KG4sIGV2ZW50
KTsKKyAgICAgICAgaWYgKChzaG91bGRWaXNpdChuLCBldmVudCkgfHwgaXNOb25Gb2N1c2FibGVT
aGFkb3dIb3N0KG4sIGV2ZW50KSkgJiYgY3VycmVudFRhYkluZGV4IDwgdGFiSW5kZXggJiYgY3Vy
cmVudFRhYkluZGV4ID4gd2lubmluZ1RhYkluZGV4KSB7CiAgICAgICAgICAgICB3aW5uZXIgPSBu
OwotICAgICAgICAgICAgd2lubmluZ1RhYkluZGV4ID0gbi0+dGFiSW5kZXgoKTsKKyAgICAgICAg
ICAgIHdpbm5pbmdUYWJJbmRleCA9IGN1cnJlbnRUYWJJbmRleDsKICAgICAgICAgfQotCisgICAg
fQogICAgIHJldHVybiB3aW5uZXI7CiB9CiAKLU5vZGUqIEZvY3VzQ29udHJvbGxlcjo6bmV4dEZv
Y3VzYWJsZU5vZGUoVHJlZVNjb3BlKiBzY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQq
IGV2ZW50KQorTm9kZSogRm9jdXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxlTm9kZShGb2N1c1Nj
b3BlIHNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgaWYg
KHN0YXJ0KSB7CisgICAgICAgIGludCB0YWJJbmRleCA9IGFkanVzdGVkVGFiSW5kZXgoc3RhcnQs
IGV2ZW50KTsKICAgICAgICAgLy8gSWYgYSBub2RlIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIG5vcm1h
bCB0YWJiaW5nIGN5Y2xlLCB0aGUgbmV4dCBmb2N1c2FibGUgbm9kZSBpcyBkZXRlcm1pbmVkIGJ5
IHRyZWUgb3JkZXIKLSAgICAgICAgaWYgKHN0YXJ0LT50YWJJbmRleCgpIDwgMCkgewotICAgICAg
ICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnQtPnRyYXZlcnNlTmV4dE5vZGUoKTsgbjsgbiA9IG4t
PnRyYXZlcnNlTmV4dE5vZGUoKSkKLSAgICAgICAgICAgICAgICBpZiAobi0+aXNLZXlib2FyZEZv
Y3VzYWJsZShldmVudCkgJiYgbi0+dGFiSW5kZXgoKSA+PSAwKQorICAgICAgICBpZiAodGFiSW5k
ZXggPCAwKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBSZWlmaWVkVHJlZVRyYXZlcnNh
bDo6dHJhdmVyc2VOZXh0Tm9kZVdpdGhvdXRDcm9zc2luZ1VwcGVyQm91bmRhcnkoc3RhcnQpOyBu
OyBuID0gUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlTmV4dE5vZGVXaXRob3V0Q3Jvc3Np
bmdVcHBlckJvdW5kYXJ5KG4pKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFZpc2l0KG4s
IGV2ZW50KSAmJiBhZGp1c3RlZFRhYkluZGV4KG4sIGV2ZW50KSA+PSAwKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIC8v
IEZpcnN0IHRyeSB0byBmaW5kIGEgbm9kZSB3aXRoIHRoZSBzYW1lIHRhYmluZGV4IGFzIHN0YXJ0
IHRoYXQgY29tZXMgYWZ0ZXIgc3RhcnQgaW4gdGhlIHNjb3BlLgotICAgICAgICBpZiAoTm9kZSog
d2lubmVyID0gbmV4dE5vZGVXaXRoRXhhY3RUYWJJbmRleChzdGFydC0+dHJhdmVyc2VOZXh0Tm9k
ZSgpLCBzdGFydC0+dGFiSW5kZXgoKSwgZXZlbnQpKQorICAgICAgICBpZiAoTm9kZSogd2lubmVy
ID0gZmluZE5vZGVXaXRoRXhhY3RUYWJJbmRleChSZWlmaWVkVHJlZVRyYXZlcnNhbDo6dHJhdmVy
c2VOZXh0Tm9kZVdpdGhvdXRDcm9zc2luZ1VwcGVyQm91bmRhcnkoc3RhcnQpLCB0YWJJbmRleCwg
ZXZlbnQsIEZvY3VzRGlyZWN0aW9uRm9yd2FyZCkpCiAgICAgICAgICAgICByZXR1cm4gd2lubmVy
OwogCi0gICAgICAgIGlmICghc3RhcnQtPnRhYkluZGV4KCkpCisgICAgICAgIGlmICghdGFiSW5k
ZXgpCiAgICAgICAgICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBsYXN0IG5vZGUgaW4gdGhlIGRv
Y3VtZW50IHdpdGggYSB0YWJpbmRleCBvZiAwLiBUaGlzIGlzIHRoZSBlbmQgb2YgdGhlIHRhYmJp
bmcgb3JkZXIuCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC00MjEsMjYgKzQ4MCwy
NiBAQCBOb2RlKiBGb2N1c0NvbnRyb2xsZXI6Om5leHRGb2N1c2FibGVOb2RlKFRyZWVTY29wZSog
c2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZAogICAgIC8vIExvb2sgZm9yIHRoZSBmaXJzdCBu
b2RlIGluIHRoZSBzY29wZSB0aGF0OgogICAgIC8vIDEpIGhhcyB0aGUgbG93ZXN0IHRhYmluZGV4
IHRoYXQgaXMgaGlnaGVyIHRoYW4gc3RhcnQncyB0YWJpbmRleCAob3IgMCwgaWYgc3RhcnQgaXMg
bnVsbCksIGFuZAogICAgIC8vIDIpIGNvbWVzIGZpcnN0IGluIHRoZSBzY29wZSwgaWYgdGhlcmUn
cyBhIHRpZS4KLSAgICBpZiAoTm9kZSogd2lubmVyID0gbmV4dE5vZGVXaXRoR3JlYXRlclRhYklu
ZGV4KHNjb3BlLT5yb290Tm9kZSgpLCBzdGFydCA/IHN0YXJ0LT50YWJJbmRleCgpIDogMCwgZXZl
bnQpKQorICAgIGlmIChOb2RlKiB3aW5uZXIgPSBuZXh0Tm9kZVdpdGhHcmVhdGVyVGFiSW5kZXgo
c2NvcGUucm9vdE5vZGUoKSwgc3RhcnQgPyBhZGp1c3RlZFRhYkluZGV4KHN0YXJ0LCBldmVudCkg
OiAwLCBldmVudCkpCiAgICAgICAgIHJldHVybiB3aW5uZXI7CiAKICAgICAvLyBUaGVyZSBhcmUg
bm8gbm9kZXMgd2l0aCBhIHRhYmluZGV4IGdyZWF0ZXIgdGhhbiBzdGFydCdzIHRhYmluZGV4LAog
ICAgIC8vIHNvIGZpbmQgdGhlIGZpcnN0IG5vZGUgd2l0aCBhIHRhYmluZGV4IG9mIDAuCi0gICAg
cmV0dXJuIG5leHROb2RlV2l0aEV4YWN0VGFiSW5kZXgoc2NvcGUtPnJvb3ROb2RlKCksIDAsIGV2
ZW50KTsKKyAgICByZXR1cm4gZmluZE5vZGVXaXRoRXhhY3RUYWJJbmRleChzY29wZS5yb290Tm9k
ZSgpLCAwLCBldmVudCwgRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKTsKIH0KIAotTm9kZSogRm9jdXND
b250cm9sbGVyOjpwcmV2aW91c0ZvY3VzYWJsZU5vZGUoVHJlZVNjb3BlKiBzY29wZSwgTm9kZSog
c3RhcnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQorTm9kZSogRm9jdXNDb250cm9sbGVyOjpwcmV2
aW91c0ZvY3VzYWJsZU5vZGUoRm9jdXNTY29wZSBzY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJk
RXZlbnQqIGV2ZW50KQogewogICAgIE5vZGUqIGxhc3Q7Ci0gICAgZm9yIChsYXN0ID0gc2NvcGUt
PnJvb3ROb2RlKCk7IGxhc3QtPmxhc3RDaGlsZCgpOyBsYXN0ID0gbGFzdC0+bGFzdENoaWxkKCkp
IHsgfQorICAgIGZvciAobGFzdCA9IHNjb3BlLnJvb3ROb2RlKCk7IFJlaWZpZWRUcmVlVHJhdmVy
c2FsOjpsYXN0Q2hpbGRXaXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5kYXJ5KGxhc3QpOyBsYXN0ID0g
UmVpZmllZFRyZWVUcmF2ZXJzYWw6Omxhc3RDaGlsZFdpdGhvdXRDcm9zc2luZ1VwcGVyQm91bmRh
cnkobGFzdCkpIHsgfQogCiAgICAgLy8gRmlyc3QgdHJ5IHRvIGZpbmQgdGhlIGxhc3Qgbm9kZSBp
biB0aGUgc2NvcGUgdGhhdCBjb21lcyBiZWZvcmUgc3RhcnQgYW5kIGhhcyB0aGUgc2FtZSB0YWJp
bmRleCBhcyBzdGFydC4KICAgICAvLyBJZiBzdGFydCBpcyBudWxsLCBmaW5kIHRoZSBsYXN0IG5v
ZGUgaW4gdGhlIHNjb3BlIHdpdGggYSB0YWJpbmRleCBvZiAwLgogICAgIE5vZGUqIHN0YXJ0aW5n
Tm9kZTsKICAgICBpbnQgc3RhcnRpbmdUYWJJbmRleDsKICAgICBpZiAoc3RhcnQpIHsKLSAgICAg
ICAgc3RhcnRpbmdOb2RlID0gc3RhcnQtPnRyYXZlcnNlUHJldmlvdXNOb2RlKCk7Ci0gICAgICAg
IHN0YXJ0aW5nVGFiSW5kZXggPSBzdGFydC0+dGFiSW5kZXgoKTsKKyAgICAgICAgc3RhcnRpbmdO
b2RlID0gUmVpZmllZFRyZWVUcmF2ZXJzYWw6OnRyYXZlcnNlUHJldmlvdXNOb2RlV2l0aG91dENy
b3NzaW5nVXBwZXJCb3VuZGFyeShzdGFydCk7CisgICAgICAgIHN0YXJ0aW5nVGFiSW5kZXggPSBh
ZGp1c3RlZFRhYkluZGV4KHN0YXJ0LCBldmVudCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3Rh
cnRpbmdOb2RlID0gbGFzdDsKICAgICAgICAgc3RhcnRpbmdUYWJJbmRleCA9IDA7CkBAIC00NDgs
MTggKzUwNywxOSBAQCBOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OnByZXZpb3VzRm9jdXNhYmxlTm9k
ZShUcmVlU2NvcGUqIHNjb3BlLCBOb2RlKiBzdGFydCwgS2V5YgogCiAgICAgLy8gSG93ZXZlciwg
aWYgYSBub2RlIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIG5vcm1hbCB0YWJiaW5nIGN5Y2xlLCB0aGUg
cHJldmlvdXMgZm9jdXNhYmxlIG5vZGUgaXMgZGV0ZXJtaW5lZCBieSB0cmVlIG9yZGVyCiAgICAg
aWYgKHN0YXJ0aW5nVGFiSW5kZXggPCAwKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0
aW5nTm9kZTsgbjsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpCi0gICAgICAgICAgICBp
ZiAobi0+aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCkgJiYgbi0+dGFiSW5kZXgoKSA+PSAwKQor
ICAgICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydGluZ05vZGU7IG47IG4gPSBSZWlmaWVkVHJlZVRy
YXZlcnNhbDo6dHJhdmVyc2VQcmV2aW91c05vZGVXaXRob3V0Q3Jvc3NpbmdVcHBlckJvdW5kYXJ5
KG4pKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVmlzaXQobiwgZXZlbnQpICYmIGFkanVzdGVk
VGFiSW5kZXgobiwgZXZlbnQpID49IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIG47CisgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoTm9kZSogd2lubmVyID0gcHJldmlvdXNOb2RlV2l0aEV4
YWN0VGFiSW5kZXgoc3RhcnRpbmdOb2RlLCBzdGFydGluZ1RhYkluZGV4LCBldmVudCkpCisgICAg
aWYgKE5vZGUqIHdpbm5lciA9IGZpbmROb2RlV2l0aEV4YWN0VGFiSW5kZXgoc3RhcnRpbmdOb2Rl
LCBzdGFydGluZ1RhYkluZGV4LCBldmVudCwgRm9jdXNEaXJlY3Rpb25CYWNrd2FyZCkpCiAgICAg
ICAgIHJldHVybiB3aW5uZXI7CiAKICAgICAvLyBUaGVyZSBhcmUgbm8gbm9kZXMgYmVmb3JlIHN0
YXJ0IHdpdGggdGhlIHNhbWUgdGFiaW5kZXggYXMgc3RhcnQsIHNvIGxvb2sgZm9yIGEgbm9kZSB0
aGF0OgogICAgIC8vIDEpIGhhcyB0aGUgaGlnaGVzdCBub24temVybyB0YWJpbmRleCAodGhhdCBp
cyBsZXNzIHRoYW4gc3RhcnQncyB0YWJpbmRleCksIGFuZAogICAgIC8vIDIpIGNvbWVzIGxhc3Qg
aW4gdGhlIHNjb3BlLCBpZiB0aGVyZSdzIGEgdGllLgotICAgIHN0YXJ0aW5nVGFiSW5kZXggPSAo
c3RhcnQgJiYgc3RhcnQtPnRhYkluZGV4KCkpID8gc3RhcnQtPnRhYkluZGV4KCkgOiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCk7CisgICAgc3RhcnRpbmdUYWJJbmRleCA9IChzdGFy
dCAmJiBzdGFydGluZ1RhYkluZGV4KSA/IHN0YXJ0aW5nVGFiSW5kZXggOiBzdGQ6Om51bWVyaWNf
bGltaXRzPHNob3J0Pjo6bWF4KCk7CiAgICAgcmV0dXJuIHByZXZpb3VzTm9kZVdpdGhMb3dlclRh
YkluZGV4KGxhc3QsIHN0YXJ0aW5nVGFiSW5kZXgsIGV2ZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRm9jdXNDb250cm9sbGVyLmgKaW5kZXggM2I1NjM3N2JkNDMxM2M2NTljNWFkNjVmMTBiODRm
ZGU2Y2ZlNWUzMC4uODkwODllNzEwN2I2NWZjZjM5ZDRkZDJmYjkwMDFjMDUwZWQwOWQ1NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCkBAIC0zNSwxNCArMzUsMjkgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEZvY3VzQ2FuZGlkYXRlOworY2xhc3MgRG9jdW1l
bnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRnJhbWU7CitjbGFzcyBIVE1MRnJhbWVPd25lckVs
ZW1lbnQ7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKIGNsYXNzIE5vZGU7
CiBjbGFzcyBQYWdlOwogY2xhc3MgVHJlZVNjb3BlOwogCitjbGFzcyBGb2N1c1Njb3BlIHsKK3B1
YmxpYzoKKyAgICBOb2RlKiByb290Tm9kZSgpIGNvbnN0OworICAgIEVsZW1lbnQqIG93bmVyKCkg
Y29uc3Q7CisgICAgc3RhdGljIEZvY3VzU2NvcGUgZm9jdXNTY29wZU9mKE5vZGUqKTsKKyAgICBz
dGF0aWMgRm9jdXNTY29wZSBmb2N1c1Njb3BlT3duZWRCeVNoYWRvd0hvc3QoTm9kZSopOworICAg
IHN0YXRpYyBGb2N1c1Njb3BlIGZvY3VzU2NvcGVPd25lZEJ5SUZyYW1lKEhUTUxGcmFtZU93bmVy
RWxlbWVudCopOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEZvY3VzU2NvcGUoVHJlZVNjb3Bl
Kik7CisgICAgVHJlZVNjb3BlKiBtX3Jvb3RUcmVlU2NvcGU7Cit9OworCiBjbGFzcyBGb2N1c0Nv
bnRyb2xsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvY3VzQ29udHJvbGxlcik7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNjYsMTYgKzgxLDE1IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldENvbnRhaW5pbmdXaW5kb3dJc1Zpc2libGUoYm9vbCk7CiAgICAgYm9v
bCBjb250YWluaW5nV2luZG93SXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluaW5n
V2luZG93SXNWaXNpYmxlOyB9CiAKLSAgICBib29sIHRyYW5zZmVyRm9jdXNUb0VsZW1lbnRJblNo
YWRvd1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rp
b24pOwotCiBwcml2YXRlOgogICAgIEZvY3VzQ29udHJvbGxlcihQYWdlKik7CiAKICAgICBib29s
IGFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHkoRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQq
KTsKICAgICBib29sIGFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiwg
S2V5Ym9hcmRFdmVudCosIGJvb2wgaW5pdGlhbEZvY3VzKTsKIAotICAgIE5vZGUqIGZpbmRGb2N1
c2FibGVOb2RlQWNyb3NzVHJlZVNjb3BlKEZvY3VzRGlyZWN0aW9uLCBUcmVlU2NvcGUqIHN0YXJ0
U2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgTm9kZSogZmluZEZvY3Vz
YWJsZU5vZGVEZWNlbmRpbmdEb3duSW50b0ZyYW1lRG9jdW1lbnRPclNoYWRvd1Jvb3QoRm9jdXNE
aXJlY3Rpb24sIE5vZGUqLCBLZXlib2FyZEV2ZW50Kik7CisgICAgTm9kZSogZmluZEZvY3VzYWJs
ZU5vZGVBY3Jvc3NGb2N1c1Njb3BlKEZvY3VzRGlyZWN0aW9uLCBGb2N1c1Njb3BlIHN0YXJ0U2Nv
cGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7CisgICAgTm9kZSogZmluZEZvY3VzYWJs
ZU5vZGVSZWN1cnNpdmVseShGb2N1c0RpcmVjdGlvbiwgRm9jdXNTY29wZSwgTm9kZSogc3RhcnQs
IEtleWJvYXJkRXZlbnQqKTsKKyAgICBOb2RlKiBmaW5kRm9jdXNhYmxlTm9kZURlY2VuZGluZ0Rv
d25JbnRvRnJhbWVEb2N1bWVudChGb2N1c0RpcmVjdGlvbiwgTm9kZSosIEtleWJvYXJkRXZlbnQq
KTsKIAogICAgIC8vIFNlYXJjaGVzIHRocm91Z2ggdGhlIGdpdmVuIHRyZWUgc2NvcGUsIHN0YXJ0
aW5nIGZyb20gc3RhcnQgbm9kZSwgZm9yIHRoZSBuZXh0L3ByZXZpb3VzIHNlbGVjdGFibGUgZWxl
bWVudCB0aGF0IGNvbWVzIGFmdGVyL2JlZm9yZSBzdGFydCBub2RlLgogICAgIC8vIFRoZSBvcmRl
ciBmb2xsb3dlZCBpcyBhcyBzcGVjaWZpZWQgaW4gc2VjdGlvbiAxNy4xMS4xIG9mIHRoZSBIVE1M
NCBzcGVjLCB3aGljaCBpcyBlbGVtZW50cyB3aXRoIHRhYiBpbmRleGVzCkBAIC04NiwxMCArMTAw
LDEyIEBAIHByaXZhdGU6CiAgICAgLy8gQHJldHVybiBUaGUgZm9jdXMgbm9kZSB0aGF0IGNvbWVz
IGFmdGVyL2JlZm9yZSBzdGFydCBub2RlLgogICAgIC8vCiAgICAgLy8gU2VlIGh0dHA6Ly93d3cu
dzMub3JnL1RSL2h0bWw0L2ludGVyYWN0L2Zvcm1zLmh0bWwjaC0xNy4xMS4xCi0gICAgaW5saW5l
IE5vZGUqIGZpbmRGb2N1c2FibGVOb2RlKEZvY3VzRGlyZWN0aW9uLCBUcmVlU2NvcGUqLCBOb2Rl
KiBzdGFydCwgS2V5Ym9hcmRFdmVudCopOworICAgIGlubGluZSBOb2RlKiBmaW5kRm9jdXNhYmxl
Tm9kZShGb2N1c0RpcmVjdGlvbiwgRm9jdXNTY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZl
bnQqKTsKKworICAgIE5vZGUqIG5leHRGb2N1c2FibGVOb2RlKEZvY3VzU2NvcGUsIE5vZGUqIHN0
YXJ0LCBLZXlib2FyZEV2ZW50Kik7CisgICAgTm9kZSogcHJldmlvdXNGb2N1c2FibGVOb2RlKEZv
Y3VzU2NvcGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7CiAKLSAgICBOb2RlKiBuZXh0
Rm9jdXNhYmxlTm9kZShUcmVlU2NvcGUqLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCopOwot
ICAgIE5vZGUqIHByZXZpb3VzRm9jdXNhYmxlTm9kZShUcmVlU2NvcGUqLCBOb2RlKiBzdGFydCwg
S2V5Ym9hcmRFdmVudCopOworICAgIE5vZGUqIGZpbmROb2RlV2l0aEV4YWN0VGFiSW5kZXgoTm9k
ZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdmVudCosIEZvY3VzRGlyZWN0aW9uKTsK
IAogICAgIGJvb2wgYWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseUluQ29udGFpbmVyKE5vZGUqIGNv
bnRhaW5lciwgY29uc3QgTGF5b3V0UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwg
S2V5Ym9hcmRFdmVudCopOwogICAgIHZvaWQgZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIo
Tm9kZSogY29udGFpbmVyLCBjb25zdCBMYXlvdXRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzRGly
ZWN0aW9uLCBLZXlib2FyZEV2ZW50KiwgRm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDU2MTRiODRmODc4OTg5MzU3ZDk1OWI1YmQ4NDkwOTJjMmY1YTc0MWQuLjcyZTgyZTFlY2U3N2Iz
MmVmMGQ2ZTZmMmE3Y2EyM2YxNmYzZjY0ZGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMi0w
My0yOSAgaGF5YXRvQGNocm9taXVtLm9yZyAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgTGV0IGZvY3VzIG5hdmlnYXRpb24gYmUgY29tcGxpYW50IHdpdGggU2hhZG93IERPTSBzcGVj
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1ODgK
KworICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCisKKyAgICAgICAgKiBmYXN0
L2RvbS9zaGFkb3cvZm9jdXMtbmF2aWdhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZG9tL3NoYWRvdy9mb2N1cy1uYXZpZ2F0aW9uLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZG9tL3NoYWRvdy9yZXNvdXJjZXMvc2hhZG93LWRvbS5qczoKKyAgICAgICAgKGlz
U2hhZG93SG9zdCk6CisgICAgICAgIChpc0lmcmFtZUVsZW1lbnQpOgorICAgICAgICAoZ2V0Tm9k
ZUluU2hhZG93VHJlZVN0YWNrKToKKyAgICAgICAgKGR1bXBOb2RlKToKKyAgICAgICAgKGlubmVy
bW9zdEFjdGl2ZUVsZW1lbnQpOgorICAgICAgICAoaXNJbm5lcm1vc3RBY3RpdmVFbGVtZW50KToK
KyAgICAgICAgKHNob3VsZE5hdmlnYXRlRm9jdXMpOgorICAgICAgICAobmF2aWdhdGVGb2N1c0Zv
cndhcmQpOgorICAgICAgICAobmF2aWdhdGVGb2N1c0JhY2t3YXJkKToKKyAgICAgICAgKHRlc3RG
b2N1c05hdmlnYXRpb25Gb3dyYWQpOgorICAgICAgICAodGVzdEZvY3VzTmF2aWdhdGlvbkJhY2t3
YXJkKToKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvc2hhZG93LWhvc3QtdHJhbnNmZXItZm9j
dXMtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9zaGFk
b3ctaG9zdC10cmFuc2Zlci1mb2N1cy5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZG9t
L3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3ctZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGZhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3cuaHRtbDoKKwog
MjAxMi0wMy0yOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjExMjUwMC4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9mb2N1cy1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9mb2N1cy1uYXZpZ2F0aW9uLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wMTk1OGRlMzZlOTUwOTRlY2IzMGYwMWIzZmE0Y2YyOGI2ZGE0YzBkCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2ZvY3VzLW5hdmln
YXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTA2IEBACitUaGlzIHRlc3RzIHRoYXQgcHJl
c3NpbmcgVGFiIGtleSBzaG91bGQgdHJhdmVyc2UgaW50byBzaGFkb3cgRE9NIHN1YnRyZWVzLCBh
bmQgcHJlc3NpbmcgU2hpZnQtVGFiIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlci4KKworU2hvdWxk
IG1vdmUgZnJvbSBpbnB1dC1BLTEgdG8gaW5wdXQtQi0xIGluIGZvcndhcmQKK1BBU1MKK1Nob3Vs
ZCBtb3ZlIGZyb20gaW5wdXQtQi0xIHRvIGlucHV0LUMtMSBpbiBmb3J3YXJkCitQQVNTCitTaG91
bGQgbW92ZSBmcm9tIGlucHV0LUMtMSB0byBob3N0LUIgaW4gZm9yd2FyZAorUEFTUworU2hvdWxk
IG1vdmUgZnJvbSBob3N0LUIgdG8gaG9zdC1CLy95b3VuZ2VyLWlucHV0LUEtMSBpbiBmb3J3YXJk
CitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi8veW91bmdlci1pbnB1dC1BLTEgdG8gaG9z
dC1CL29sZGVyLWlucHV0LUEtMSBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhv
c3QtQi9vbGRlci1pbnB1dC1BLTEgdG8gbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMSBpbiBmb3J3YXJk
CitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGxpZ2h0LWNoaWxkLXNlbGVjdGVkLTEgdG8gaG9zdC1C
L29sZGVyLWlucHV0LUItMSBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3Qt
Qi9vbGRlci1pbnB1dC1CLTEgdG8gaG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMSBpbiBmb3J3YXJk
CitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi8veW91bmdlci1pbnB1dC1CLTEgdG8gaG9z
dC1CLy95b3VuZ2VyLWlucHV0LUEtMCBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9t
IGhvc3QtQi8veW91bmdlci1pbnB1dC1BLTAgdG8gaG9zdC1CL29sZGVyLWlucHV0LUEtMCBpbiBm
b3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi9vbGRlci1pbnB1dC1BLTAgdG8g
bGlnaHQtY2hpbGQtc2VsZWN0ZWQtMCBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9t
IGxpZ2h0LWNoaWxkLXNlbGVjdGVkLTAgdG8gaG9zdC1CL29sZGVyLWlucHV0LUItMCBpbiBmb3J3
YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi9vbGRlci1pbnB1dC1CLTAgdG8gaG9z
dC1CLy95b3VuZ2VyLWlucHV0LUItMCBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9t
IGhvc3QtQi8veW91bmdlci1pbnB1dC1CLTAgdG8gaW5wdXQtRC0xIGluIGZvcndhcmQKK1BBU1MK
K1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtRC0xIHRvIGlucHV0LUEtMCBpbiBmb3J3YXJkCitQQVNT
CitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUEtMCB0byBob3N0LUEvaW5wdXQtMSBpbiBmb3J3YXJk
CitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQS9pbnB1dC0xIHRvIGhvc3QtQS9pbnB1dC0y
MCBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQS9pbnB1dC0yMCB0byBo
b3N0LUEvbmVzdGVkLWhvc3QgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0
LUEvbmVzdGVkLWhvc3QgdG8gaG9zdC1BL25lc3RlZC1ob3N0L2lucHV0LTE1IGluIGZvcndhcmQK
K1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1BL25lc3RlZC1ob3N0L2lucHV0LTE1IHRvIGhv
c3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0yNSBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBm
cm9tIGhvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0yNSB0byBpbnB1dC1CLTAgaW4gZm9yd2FyZAor
UEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1CLTAgdG8gaW5wdXQtQy0wIGluIGZvcndhcmQK
K1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQy0wIHRvIGlucHV0LUQtMCBpbiBmb3J3YXJk
CitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUQtMCB0byBpbnB1dC1BLTEgaW4gZm9yd2Fy
ZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1BLTEgdG8gaW5wdXQtRC0wIGluIGJhY2t3
YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlucHV0LUQtMCB0byBpbnB1dC1DLTAgaW4gYmFj
a3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQy0wIHRvIGlucHV0LUItMCBpbiBi
YWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1CLTAgdG8gaG9zdC1BL25lc3Rl
ZC1ob3N0L2lucHV0LTI1IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3Qt
QS9uZXN0ZWQtaG9zdC9pbnB1dC0yNSB0byBob3N0LUEvbmVzdGVkLWhvc3QvaW5wdXQtMTUgaW4g
YmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1BL25lc3RlZC1ob3N0L2lucHV0
LTE1IHRvIGhvc3QtQS9uZXN0ZWQtaG9zdCBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBob3N0LUEvbmVzdGVkLWhvc3QgdG8gaG9zdC1BL2lucHV0LTIwIGluIGJhY2t3YXJkCitQ
QVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQS9pbnB1dC0yMCB0byBob3N0LUEvaW5wdXQtMSBp
biBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUEvaW5wdXQtMSB0byBpbnB1
dC1BLTAgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtQS0wIHRvIGlu
cHV0LUQtMSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC1ELTEgdG8g
aG9zdC1CLy95b3VuZ2VyLWlucHV0LUItMCBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBob3N0LUIvL3lvdW5nZXItaW5wdXQtQi0wIHRvIGhvc3QtQi9vbGRlci1pbnB1dC1CLTAg
aW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaG9zdC1CL29sZGVyLWlucHV0LUIt
MCB0byBsaWdodC1jaGlsZC1zZWxlY3RlZC0wIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92
ZSBmcm9tIGxpZ2h0LWNoaWxkLXNlbGVjdGVkLTAgdG8gaG9zdC1CL29sZGVyLWlucHV0LUEtMCBp
biBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvb2xkZXItaW5wdXQtQS0w
IHRvIGhvc3QtQi8veW91bmdlci1pbnB1dC1BLTAgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBt
b3ZlIGZyb20gaG9zdC1CLy95b3VuZ2VyLWlucHV0LUEtMCB0byBob3N0LUIvL3lvdW5nZXItaW5w
dXQtQi0xIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhvc3QtQi8veW91bmdl
ci1pbnB1dC1CLTEgdG8gaG9zdC1CL29sZGVyLWlucHV0LUItMSBpbiBiYWNrd2FyZAorUEFTUwor
U2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvb2xkZXItaW5wdXQtQi0xIHRvIGxpZ2h0LWNoaWxkLXNl
bGVjdGVkLTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gbGlnaHQtY2hpbGQt
c2VsZWN0ZWQtMSB0byBob3N0LUIvb2xkZXItaW5wdXQtQS0xIGluIGJhY2t3YXJkCitQQVNTCitT
aG91bGQgbW92ZSBmcm9tIGhvc3QtQi9vbGRlci1pbnB1dC1BLTEgdG8gaG9zdC1CLy95b3VuZ2Vy
LWlucHV0LUEtMSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBob3N0LUIvL3lv
dW5nZXItaW5wdXQtQS0xIHRvIGhvc3QtQiBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUg
ZnJvbSBob3N0LUIgdG8gaW5wdXQtQy0xIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBm
cm9tIGlucHV0LUMtMSB0byBpbnB1dC1CLTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3Zl
IGZyb20gaW5wdXQtQi0xIHRvIGlucHV0LUEtMSBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1v
dmUgZnJvbSBpbnB1dC1BLTEgdG8gaW5wdXQtRC0wIGluIGJhY2t3YXJkCitQQVNTCitUZXN0IGZp
bmlzaGVkLgorCisKKworCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRv
dy9mb2N1cy1uYXZpZ2F0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvZm9j
dXMtbmF2aWdhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlNzA5NTcwZGViZWMzMmQ2OThhYTY0ZjFh
MjZkMjdlNmRmYmY4NzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9z
aGFkb3cvZm9jdXMtbmF2aWdhdGlvbi5odG1sCkBAIC0wLDAgKzEsMTc5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhZG93LWRv
bS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdHMgdGhhdCBwcmVz
c2luZyBUYWIga2V5IHNob3VsZCB0cmF2ZXJzZSBpbnRvIHNoYWRvdyBET00gc3VidHJlZXMsIGFu
ZCBwcmVzc2luZyBTaGlmdC1UYWIgc2hvdWxkIHJldmVyc2UgdGhlIG9yZGVyLjwvcD4KKzxwcmUg
aWQ9ImNvbnNvbGUiPjwvcHJlPgorPHNjcmlwdD4KKworZnVuY3Rpb24gcHJlcGFyZURPTVRyZWUo
cGFyZW50KQoreworICAgIHBhcmVudC5hcHBlbmRDaGlsZCgKKyAgICAgICAgLy8gRklYTUU6IFVz
ZSBtb3JlIGRlc2NyaXB0aXZlIGlkcyBmb3IgZWFjaCBlbGVtZW50cy4KKyAgICAgICAgY3JlYXRl
RE9NKCdkaXYnLCB7J2lkJzogJ3RvcC1kaXYnfSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURP
TSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0LUEtMScsICd0YWJpbmRleCc6IDF9KSwKKyAgICAgICAg
ICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2lucHV0LUItMScsICd0YWJpbmRl
eCc6IDF9KSwKKyAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnZGl2JyksICAvLyBTaG91bGQg
bm90IGJlIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsn
aWQnOiAnaW5wdXQtQS0wJywgJ3RhYmluZGV4JzogMH0pLAorICAgICAgICAgICAgICAgICAgY3Jl
YXRlRE9NKCdkaXYnLCB7J2lkJzogJ2hvc3QtQScsICd0YWJpbmRleCc6IC0xfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdpbnB1dC0xJywgJ3RhYmlu
ZGV4JzogMX0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2Rp
dicsIHsnaWQnOiAnbmVzdGVkLWhvc3QnLCAndGFiaW5kZXgnOiAzMH0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7
J3RhYmluZGV4JzogLTF9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdpbnB1dC0xNScsICd0YWJpbmRleCc6
IDE1fSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtMjUnLCAndGFiaW5kZXgnOiAyNX0pKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzog
J2lucHV0LTIwJywgJ3RhYmluZGV4JzogMjB9KSkpLAorICAgICAgICAgICAgICAgICAgY3JlYXRl
RE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtQy0xJywgJ3RhYmluZGV4JzogMX0pLAorICAgICAg
ICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQtQi0wJywgJ3RhYmlu
ZGV4JzogMH0pLAorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdkaXYnLCB7J2lkJzogJ2hv
c3QtQicsICd0YWJpbmRleCc6IDF9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0
ZVNoYWRvd1Jvb3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgn
aW5wdXQnLCB7J2lkJzogJ29sZGVyLWlucHV0LUEtMCcsICd0YWJpbmRleCc6IDB9KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnb2xk
ZXItaW5wdXQtQS0xJywgJ3RhYmluZGV4JzogMX0pLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjcmVhdGVET00oJ2NvbnRlbnQnLCB7J3NlbGVjdCc6ICcjbGlnaHQtY2hpbGQtc2Vs
ZWN0ZWQtMCwgI2xpZ2h0LWNoaWxkLXNlbGVjdGVkLTEnfSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ29sZGVyLWlucHV0LUItMCcs
ICd0YWJpbmRleCc6IDB9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRl
RE9NKCdpbnB1dCcsIHsnaWQnOiAnb2xkZXItaW5wdXQtQi0xJywgJ3RhYmluZGV4JzogMX0pKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTaGFkb3dSb290KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICd5b3VuZ2Vy
LWlucHV0LUEtMCcsICd0YWJpbmRleCc6IDB9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAneW91bmdlci1pbnB1dC1BLTEnLCAndGFi
aW5kZXgnOiAxfSksICAvLyBUaGUgZmlyc3Qgbm9kZSBpbiB0aGUgZm9jdXNTY29wZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ3NoYWRvdycpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICd5b3VuZ2Vy
LWlucHV0LUItMCcsICd0YWJpbmRleCc6IDB9KSwgIC8vIFRoZSBsYXN0IG5vZGUgaW4gdGhlIGZv
Y3VzU2NvcGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1
dCcsIHsnaWQnOiAneW91bmdlci1pbnB1dC1CLTEnLCAndGFiaW5kZXgnOiAxfSkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J2lkJzogJ2xpZ2h0LWNo
aWxkLXNlbGVjdGVkLTAnLCAndGFiaW5kZXgnOiAwfSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMScs
ICd0YWJpbmRleCc6IDF9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVET00o
J2lucHV0JywgeydpZCc6ICdsaWdodC1jaGlsZC1ub24tc2VsZWN0ZWQtMScsICd0YWJpbmRleCc6
IDF9KSksCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lucHV0JywgeydpZCc6ICdpbnB1
dC1ELTEnLCAndGFiaW5kZXgnOiAxfSksCisgICAgICAgICAgICAgICAgICBjcmVhdGVET00oJ2lu
cHV0JywgeydpZCc6ICdpbnB1dC1DLTAnLCAndGFiaW5kZXgnOiAwfSksCisgICAgICAgICAgICAg
ICAgICBjcmVhdGVET00oJ2RpdicsIHsnaWQnOiAnaG9zdC1DJywgJ3RhYmluZGV4JzogLTF9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNoYWRvd1Jvb3QoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURPTSgnaW5wdXQnLCB7J3RhYmluZGV4JzogLTF9
KSkpLAorICAgICAgICAgICAgICAgICAgY3JlYXRlRE9NKCdpbnB1dCcsIHsnaWQnOiAnaW5wdXQt
RC0wJywgJ3RhYmluZGV4JzogMH0pKSk7CisKKyAgICBwYXJlbnQub2Zmc2V0TGVmdDsKK30KKwor
ZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICBpZiAoIXdp
bmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICB0ZXN0RmFpbGVkKCcnKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHByZXBhcmVET01UcmVlKGRvY3VtZW50LmJvZHkpOworCisgICAg
Ly8gRklYTUU6IE91dHB1dCBpbnNlcnRlZCBjb21tZW50cyBpbiB0aGlzIGFycmF5IHRvIGV4cGVj
dGVkLnR4dCBmb3IgcmVhZGFiaWxpdHkgb2YgdGhlIHJlc3VsdC4KKyAgICBlbGVtZW50c05hdmln
YXRlZEluRm9yd2FyZCA9IFsKKyAgICAgICAgJ2lucHV0LUEtMScsICdpbnB1dC1CLTEnLAorICAg
ICAgICAvLyBUcmF2ZXJzZSBlbGVtZW50cyB3aGljaCBoYXZlIHRhYmluZGV4PTEuCisgICAgICAg
IC8vIFNob3VsZCBza2lwIGV2ZXJ5IGVsZW1lbnRzLCBldmVuIHRob3VnaCB0aGV5IGhhdmUgdGhl
IHNhbWUgdGFiaW5kZXgsIGluIG5vbi1mb2N1c2FibGUgc2hhZG93IGhvc3QgKGlkPWhvc3QtQSkg
CisgICAgICAgIC8vIHNpbmNlIG5vbi1mb2N1c2FibGUgc2hhZG93IGhvc3QgYWN0ZWQgYXMgaWYg
dGhleSB3ZXJlIGFzc2luZ2VkIHRvIHRhYmluZGV4PTAgc28gaXQgd2FzIHNraXBwZWQgaW4gdGhp
cyB0dXJuLgorICAgICAgICAnaW5wdXQtQy0xJywKKworICAgICAgICAvLyBUcmF2ZXJzZSBhIGZv
Y3VzYWJsZSBzaGFkb3cgaG9zdC4KKyAgICAgICAgJ2hvc3QtQicsCisKKyAgICAgICAgLy8gRW50
ZXIgYSBmb2N1cyBzY29wZSBvZiB0aGUgc2hhZG93IGhvc3QgYW5kIHRyYXZlc2UgdGhlIGZpcnN0
IGZvY3VzYWJsZSBub2RlIGluIHNoYWRvdyBET00gbmF2aWdhdGlvbi4KKyAgICAgICAgJ2hvc3Qt
Qi8veW91bmdlci1pbnB1dC1BLTEnLAorCisgICAgICAgIC8vIEEgPHNoYWRvdz4gZWxlbWVudCBz
aG91bGQgYmUgcmVzb2x2ZWQuCisgICAgICAgICdob3N0LUIvb2xkZXItaW5wdXQtQS0xJywKKwor
ICAgICAgICAvLyBBIDxjb250ZW50PiBlbGVtZW50IHNob3VsZCBiZSByZXNvbHZlZC4KKyAgICAg
ICAgJ2xpZ2h0LWNoaWxkLXNlbGVjdGVkLTEnLAorICAgICAgICAnaG9zdC1CL29sZGVyLWlucHV0
LUItMScsCisgICAgICAgICdob3N0LUIvL3lvdW5nZXItaW5wdXQtQi0xJywKKworICAgICAgICAv
LyBBbGwgZWxlbWVudHMgd2l0aCB0YWJpbmRleD0xIGhhZCBiZWVuIHRyYXZlcnNlZC4gU28gZWxl
bWVudHMgd2l0aCB0YWJpbmRleD0wIHNob291ZCBmb2xsb3cuCisgICAgICAgICdob3N0LUIvL3lv
dW5nZXItaW5wdXQtQS0wJywKKyAgICAgICAgJ2hvc3QtQi9vbGRlci1pbnB1dC1BLTAnLAorICAg
ICAgICAnbGlnaHQtY2hpbGQtc2VsZWN0ZWQtMCcsCisgICAgICAgICdob3N0LUIvb2xkZXItaW5w
dXQtQi0wJywKKyAgICAgICAgJ2hvc3QtQi8veW91bmdlci1pbnB1dC1CLTAnLAorCisgICAgICAg
IC8vIEV4aXQgYSBmb2N1cyBzY29wZSBvZiB0aGUgc2hhZG93IGhvc3QgKGlkPWhvc3QtQikgYW5k
IHRyYXZlcnNlIHRoZSBuZXh0LgorICAgICAgICAnaW5wdXQtRC0xJywKKworICAgICAgICAvLyBB
bGwgZWxlbWVudHMgd2l0aCB0YWJpbmRleD0xIGhhZCBiZWVuIHRyYXZlcnNlZCBpbiB0aGUgb3V0
ZXJtb3N0IHNjb3BlLgorICAgICAgICAvLyBTbyB0cmF2ZXJzZSBlbGVtZW50cyB3aXRoIHRhYmlu
ZGV4PTAgaW4gbmV4dC4KKyAgICAgICAgJ2lucHV0LUEtMCcsCisKKyAgICAgICAgLy8gQSBub24t
Zm9jdXNhYmxlIHNoYWRvdyBob3N0IChpZD1ob3N0LUEpIHdpbGwgYmUgInJlcGxhY2VkIiB3aXRo
IGl0cyBzaGFkb3cgRE9NIG5hdmlnYXRpb24uCisgICAgICAgICdob3N0LUEvaW5wdXQtMScsCisg
ICAgICAgICdob3N0LUEvaW5wdXQtMjAnLAorICAgICAgICAnaG9zdC1BL25lc3RlZC1ob3N0JywK
KworICAgICAgICAvLyBFbnRlciBhIG5lc3RlZCBmb2N1cyBzY29wZSBpbnNpZGUgb2YgYSBzaGFk
b3cgaG9zdCAoaWQ9bmVzdGVkLWhvc3QpLgorICAgICAgICAnaG9zdC1BL25lc3RlZC1ob3N0L2lu
cHV0LTE1JywKKyAgICAgICAgJ2hvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0yNScsCisKKyAgICAg
ICAgLy8gRXhpdCBhIG5lc3RlZCBzaGFkb3cgaG9zdC4KKyAgICAgICAgJ2lucHV0LUItMCcsCisg
ICAgICAgICdpbnB1dC1DLTAnLAorCisgICAgICAgIC8vIEEgbm9uLWZvY3VzYWJsZSBzaGFkb3cg
aG9zdCAoaWQ9aG9zdC1DKSwgd2hpY2ggZG9lcyBub3QgaGF2ZSBmb2N1c2FibGUgZWxlbWVudHMs
IHNob3VsZCBiZSBza2lwcGVkIGVudGlyZWx5LgorICAgICAgICAnaW5wdXQtRC0wJywKKworICAg
ICAgICAvLyBXcmFwcyB0byB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgb3V0ZXJtb3N0IGZvY3Vz
IHNjb3BlLgorICAgICAgICAnaW5wdXQtQS0xJywKKyAgICBdOworCisKKyAgICBlbGVtZW50c05h
dmlnYXRlZEluQmFja3dhcmQgPSBbCisgICAgICAgICdpbnB1dC1BLTEnLAorICAgICAgICAnaW5w
dXQtRC0wJywKKyAgICAgICAgJ2lucHV0LUMtMCcsCisgICAgICAgICdpbnB1dC1CLTAnLAorCisg
ICAgICAgIC8vIFRyaWNreSBuYXZpZ2F0aW9uLiBUcmF2YXJzZSB0aGUgZGVlcGx5IGxhc3QgZWxl
bWVudCBpbiBuZXN0ZWQgc2hhZG93IERPTSBuYXZpZ2F0aW9uLgorICAgICAgICAnaG9zdC1BL25l
c3RlZC1ob3N0L2lucHV0LTI1JywKKyAgICAgICAgJ2hvc3QtQS9uZXN0ZWQtaG9zdC9pbnB1dC0x
NScsCisgICAgICAgICdob3N0LUEvbmVzdGVkLWhvc3QnLAorICAgICAgICAnaG9zdC1BL2lucHV0
LTIwJywKKyAgICAgICAgJ2hvc3QtQS9pbnB1dC0xJywKKworICAgICAgICAvLyBFeGl0IGEgc2hh
ZG8gaG9zdC4KKyAgICAgICAgJ2lucHV0LUEtMCcsCisKKyAgICAgICAgLy8gQWxsIGVsZW1lbnRz
IHdpdGggdGFiaW5kZXg9MCBoYWQgYmVlbiB0cmF2ZXJzZWQuIFNvIHRyYXZlcnNlIGVsZW1lbnRz
IHdpdGggdGFiaW5kZXg9MSBpbiByZXZlcnNlIG9yZGVyLgorICAgICAgICAnaW5wdXQtRC0xJywK
KworICAgICAgICAvLyBZZXQgYW5vdGhlciB0cmlja3kgbmF2aWdhdGlvbi4gU2hvdWxkIHRyYXZl
cnNlIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIHNoYWRvdyBET00gbmF2aWdhdGlvbi4KKyAgICAg
ICAgJ2hvc3QtQi8veW91bmdlci1pbnB1dC1CLTAnLAorICAgICAgICAnaG9zdC1CL29sZGVyLWlu
cHV0LUItMCcsCisgICAgICAgICdsaWdodC1jaGlsZC1zZWxlY3RlZC0wJywKKyAgICAgICAgJ2hv
c3QtQi9vbGRlci1pbnB1dC1BLTAnLAorICAgICAgICAnaG9zdC1CLy95b3VuZ2VyLWlucHV0LUEt
MCcsCisKKyAgICAgICAgJ2hvc3QtQi8veW91bmdlci1pbnB1dC1CLTEnLAorICAgICAgICAnaG9z
dC1CL29sZGVyLWlucHV0LUItMScsCisgICAgICAgICdsaWdodC1jaGlsZC1zZWxlY3RlZC0xJywK
KyAgICAgICAgJ2hvc3QtQi9vbGRlci1pbnB1dC1BLTEnLAorICAgICAgICAnaG9zdC1CLy95b3Vu
Z2VyLWlucHV0LUEtMScsCisKKyAgICAgICAgLy8gQSBzaGFkb3cgaG9zdCBzaG91bGQgYmUgc2Vs
ZWN0ZWQganVzdCBhZnRlciB0aGUgZmlyc3QgZWxlbWVudCBpbiBpdHMgc2hhZG93IERPTSBuYXZp
Z2F0aW9uLgorICAgICAgICAvLyBOb3RlIHRoYXQgYSAnZm9jdXMnIGV2ZW50IGlzIG5vdCBjYWxs
ZWQgaGVyZSBzaW5jZSBhIGZvY3VzIG1vdmVzIHdpdGhpbiB0aGUgc2FtZSBzaGFkb3cgaG9zdC4K
KyAgICAgICAgJ2hvc3QtQicsCisgICAgICAgICdpbnB1dC1DLTEnLAorICAgICAgICAnaW5wdXQt
Qi0xJywKKyAgICAgICAgJ2lucHV0LUEtMScsCisKKyAgICAgICAgLy8gV3JhcHMgdG8gdGhlIGxh
c3QgZWxlbWVudCBpbiB0aGUgb3V0ZXJtb3N0IGZvY3VzIHNjb3BlLgorICAgICAgICAnaW5wdXQt
RC0wJywKKyAgICBdOworCisgICAgdGVzdEZvY3VzTmF2aWdhdGlvbkZvd3JhZChlbGVtZW50c05h
dmlnYXRlZEluRm9yd2FyZCk7CisgICAgdGVzdEZvY3VzTmF2aWdhdGlvbkJhY2t3YXJkKGVsZW1l
bnRzTmF2aWdhdGVkSW5CYWNrd2FyZCk7CisKKyAgICBkZWJ1ZygnVGVzdCBmaW5pc2hlZC4nKTsK
K30KKwordGVzdCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9yZXNvdXJjZXMvc2hhZG93LWRvbS5qcyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9yZXNvdXJjZXMvc2hhZG93LWRvbS5qcwppbmRleCAx
NTU3NjAyMTI5OWUxM2YzOTBkNDMxMzQzMTBlNTViM2FhMTM0MDNlLi5jM2JlOGE3MWE2ZWRhYjFl
ZTdkMTlkYzc0ZDZkOGZiODA3YTY4ZTQ5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9zaGFkb3cvcmVzb3VyY2VzL3NoYWRvdy1kb20uanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vc2hhZG93L3Jlc291cmNlcy9zaGFkb3ctZG9tLmpzCkBAIC0zNCwxMiArMzQsMjIgQEAgZnVu
Y3Rpb24gY3JlYXRlRE9NKHRhZ05hbWUsIGF0dHJpYnV0ZXMpCiAgICAgcmV0dXJuIGVsZW1lbnQ7
CiB9CiAKK2Z1bmN0aW9uIGlzU2hhZG93SG9zdChub2RlKQoreworICAgIHJldHVybiB3aW5kb3cu
aW50ZXJuYWxzLm9sZGVzdFNoYWRvd1Jvb3Qobm9kZSk7Cit9CisKIGZ1bmN0aW9uIGlzU2hhZG93
Um9vdChub2RlKQogewogICAgIC8vIEZJWE1FOiB3aW5kb3cuaW50ZXJuYWxzIHNob3VsZCBoYXZl
IGludGVybmFscy5pc1NoYWRvd1Jvb3Qobm9kZSkuCiAgICAgcmV0dXJuIG5vZGUubm9kZU5hbWUg
PT0gIiNzaGFkb3ctcm9vdCIgfHwgbm9kZS5ob3N0OwogfQogCitmdW5jdGlvbiBpc0lmcmFtZUVs
ZW1lbnQoZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVOYW1l
ID09ICdJRlJBTUUnOworfQorCiAvLyBZb3UgY2FuIHNwZWZpZnkgeW91bmdlclNoYWRvd1Jvb3Qg
YnkgY29uc2VjdXRpdmUgc2xhc2hlcy4KIC8vIFNlZSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFk
b3cvZ2V0LWVsZW1lbnQtYnktaWQtaW4tc2hhZG93LXJvb3QuaHRtbCBmb3IgYWN0dWFsIHVzYWdl
cy4KIGZ1bmN0aW9uIGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhwYXRoKQpAQCAtNDcsMTMgKzU3
LDEwMSBAQCBmdW5jdGlvbiBnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2socGF0aCkKICAgICB2YXIg
aWRzID0gcGF0aC5zcGxpdCgnLycpOwogICAgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoaWRzWzBdKTsKICAgICBmb3IgKHZhciBpID0gMTsgbm9kZSAhPSBudWxsICYmIGkgPCBp
ZHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGlzSWZyYW1lRWxlbWVudChub2RlKSkgewor
ICAgICAgICAgICAgbm9kZSA9IG5vZGUuY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlk
c1tpXSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAoaXNT
aGFkb3dSb290KG5vZGUpKQogICAgICAgICAgICAgbm9kZSA9IGludGVybmFscy55b3VuZ2VyU2hh
ZG93Um9vdChub2RlKTsKLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIGlmIChpbnRlcm5hbHMu
b2xkZXN0U2hhZG93Um9vdChub2RlKSkKICAgICAgICAgICAgIG5vZGUgPSBpbnRlcm5hbHMub2xk
ZXN0U2hhZG93Um9vdChub2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG51
bGw7CiAgICAgICAgIGlmIChpZHNbaV0gIT0gJycpCiAgICAgICAgICAgICBub2RlID0gaW50ZXJu
YWxzLmdldEVsZW1lbnRCeUlkSW5TaGFkb3dSb290KG5vZGUsIGlkc1tpXSk7CiAgICAgfQogICAg
IHJldHVybiBub2RlOwogfQogCitmdW5jdGlvbiBkdW1wTm9kZShub2RlKQoreworICAgIGlmICgh
bm9kZSkKKyAgICAgIHJldHVybiAnbnVsbCc7CisgICAgdmFyIG91dHB1dCA9ICcnICsgbm9kZTsK
KyAgICBpZiAobm9kZS5pZCkKKyAgICAgICAgb3V0cHV0ICs9ICcgaWQ9JyArIG5vZGUuaWQ7Cisg
ICAgcmV0dXJuIG91dHB1dDsKK30KKworZnVuY3Rpb24gaW5uZXJtb3N0QWN0aXZlRWxlbWVudChl
bGVtZW50KQoreworICAgIGVsZW1lbnQgPSBlbGVtZW50IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1l
bnQ7CisgICAgaWYgKGlzSWZyYW1lRWxlbWVudChlbGVtZW50KSkgeworICAgICAgICBpZiAoZWxl
bWVudC5jb250ZW50RG9jdW1lbnQuYWN0aXZlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBp
bm5lcm1vc3RBY3RpdmVFbGVtZW50KGVsZW1lbnQuY29udGVudERvY3VtZW50LmFjdGl2ZUVsZW1l
bnQpOworICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9CisgICAgaWYgKGlzU2hhZG93SG9z
dChlbGVtZW50KSkgeworICAgICAgICB2YXIgc2hhZG93Um9vdCA9IHdpbmRvdy5pbnRlcm5hbHMu
b2xkZXN0U2hhZG93Um9vdChlbGVtZW50KTsKKyAgICAgICAgd2hpbGUgKHNoYWRvd1Jvb3QpIHsK
KyAgICAgICAgICAgIGlmIChzaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGlubmVybW9zdEFjdGl2ZUVsZW1lbnQoc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50
KTsKKyAgICAgICAgICAgIHNoYWRvd1Jvb3QgPSB3aW5kb3cuaW50ZXJuYWxzLnlvdW5nZXJTaGFk
b3dSb290KHNoYWRvd1Jvb3QpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBlbGVtZW50
OworfQorCitmdW5jdGlvbiBpc0lubmVybW9zdEFjdGl2ZUVsZW1lbnQoaWQpCit7CisgICAgdmFy
IGVsZW1lbnQgPSBnZXROb2RlSW5TaGFkb3dUcmVlU3RhY2soaWQpOworICAgIGlmICghZWxlbWVu
dCkgeworICAgICAgICBkZWJ1ZygnRkFJTDogVGhlcmUgaXMgbm8gc3VjaCBlbGVtZW50IHdpdGgg
aWQ6ICcrIGZyb20pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChlbGVt
ZW50ID09IGlubmVybW9zdEFjdGl2ZUVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZGVidWcoJ0V4cGVjdGVkIGlubmVybW9zdCBhY3RpdmVFbGVtZW50IGlzICcgKyBpZCArICcs
IGJ1dCBhY3R1YWwgaW5uZXJtb3N0IGFjdGl2ZUVsZW1lbnQgaXMgJyArIGR1bXBOb2RlKGlubmVy
bW9zdEFjdGl2ZUVsZW1lbnQoKSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24g
c2hvdWxkTmF2aWdhdGVGb2N1cyhmcm9tLCB0bywgZGlyZWN0aW9uKQoreworICAgIGRlYnVnKCdT
aG91bGQgbW92ZSBmcm9tICcgKyBmcm9tICsgJyB0byAnICsgdG8gKyAnIGluICcgKyBkaXJlY3Rp
b24pOworICAgIHZhciBmcm9tRWxlbWVudCA9IGdldE5vZGVJblNoYWRvd1RyZWVTdGFjayhmcm9t
KTsKKyAgICBpZiAoIWZyb21FbGVtZW50KSB7CisgICAgICBkZWJ1ZygnRkFJTDogVGhlcmUgaXMg
bm8gc3VjaCBlbGVtZW50IHdpdGggaWQ6ICcrIGZyb20pOworICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBmcm9tRWxlbWVudC5mb2N1cygpOworICAgIGlmIChkaXJlY3Rpb24gPT0gJ2ZvcndhcmQn
KQorICAgICAgICBuYXZpZ2F0ZUZvY3VzRm9yd2FyZCgpOworICAgIGVsc2UKKyAgICAgICAgbmF2
aWdhdGVGb2N1c0JhY2t3YXJkKCk7CisgICAgaWYgKGlzSW5uZXJtb3N0QWN0aXZlRWxlbWVudCh0
bykpCisgICAgICAgIGRlYnVnKCdQQVNTJyk7CisgICAgZWxzZQorICAgICAgICBkZWJ1ZygnRkFJ
TCcpOworfQorCitmdW5jdGlvbiBuYXZpZ2F0ZUZvY3VzRm9yd2FyZCgpCit7CisgICAgZXZlbnRT
ZW5kZXIua2V5RG93bignXHQnKTsKK30KKworZnVuY3Rpb24gbmF2aWdhdGVGb2N1c0JhY2t3YXJk
KCkKK3sKKyAgICBldmVudFNlbmRlci5rZXlEb3duKCdcdCcsIFsnc2hpZnRLZXknXSk7Cit9CisK
K2Z1bmN0aW9uIHRlc3RGb2N1c05hdmlnYXRpb25Gb3dyYWQoZWxlbWVudHMpCit7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgKyAxIDwgZWxlbWVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIHNob3Vs
ZE5hdmlnYXRlRm9jdXMoZWxlbWVudHNbaV0sIGVsZW1lbnRzW2kgKyAxXSwgJ2ZvcndhcmQnKTsK
K30KKworZnVuY3Rpb24gdGVzdEZvY3VzTmF2aWdhdGlvbkJhY2t3YXJkKGVsZW1lbnRzKQorewor
ICAgIGZvciAodmFyIGkgPSAwOyBpICsgMSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAg
ICBzaG91bGROYXZpZ2F0ZUZvY3VzKGVsZW1lbnRzW2ldLCBlbGVtZW50c1tpICsgMV0sICdiYWNr
d2FyZCcpOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRv
dy1ob3N0LXRyYW5zZmVyLWZvY3VzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy1leHBlY3RlZC50eHQKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ODFiMDlhNWIyY2ExOTY2NTYxODIyMTJiZjc4MmE3Yjdl
ZWI4NTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVyLWZvY3VzLWV4cGVj
dGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLVdoZW4gYSBzaGFkb3cgaG9z
dCBpcyBmb2N1c2VkLCB0aGUgc2hhZG93IGhvc3Qgc2hvdWxkIHRyYW5zZmVyIGZvY3VzIHRvIHRo
ZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBpbiB0aGUgc2hhZG93IHJvb3QgaWYgdGhlcmUgaXMg
YW4gc3VjaCBhbiBlbGVtZW50LgotCi1Gb2N1c2luZzogc2hhZG93MAotUEFTUyBlbGVtZW50V2Fz
Rm9jdXNlZChpbnB1dDApIGlzIGZhbHNlCi1QQVNTIGVsZW1lbnRXYXNGb2N1c2VkKGlucHV0MSkg
aXMgdHJ1ZQotUEFTUyBlbGVtZW50V2FzRm9jdXNlZChpbnB1dDIpIGlzIGZhbHNlCi1QQVNTIGlu
cHV0MC52YWx1ZSBpcyAiIgotUEFTUyBpbnB1dDEudmFsdWUgaXMgIiIKLVBBU1MgaW5wdXQyLnZh
bHVlIGlzICIiCi1QcmVzc2luZzogImEiCi1QQVNTIGlucHV0MC52YWx1ZSBpcyAiIgotUEFTUyBp
bnB1dDEudmFsdWUgaXMgImEiCi1QQVNTIGlucHV0Mi52YWx1ZSBpcyAiIgotUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9zaGFkb3ctaG9zdC10cmFuc2Zlci1mb2N1cy5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVyLWZvY3VzLmh0
bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYjZkYTc0Yzc5MTQ2YWZkZmI1MTI2
YmI5MTYwYzdkZjExY2U5N2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3NoYWRvdy1ob3N0LXRyYW5zZmVy
LWZvY3VzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi08IURPQ1RZUEUgaHRt
bD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPHA+Ci1XaGVuIGEgc2hhZG93
IGhvc3QgaXMgZm9jdXNlZCwgdGhlIHNoYWRvdyBob3N0IHNob3VsZCB0cmFuc2ZlciBmb2N1cyB0
byB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaW4gdGhlIHNoYWRvdyByb290IGlmIHRoZXJl
IGlzIGFuIHN1Y2ggYW4gZWxlbWVudC4KLTwvcD4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgot
PHNjcmlwdD4KLWlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Ci0gIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKLQotICBmdW5jdGlvbiBzaGFkb3dSb290KHNoYWRvd0hvc3QpIHsKLSAg
ICByZXR1cm4gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qoc2hhZG93SG9zdCk7Ci0gIH0KLQot
ICBmdW5jdGlvbiBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRvd0hvc3QsIGNoaWxkKSB7Ci0gICAg
cmV0dXJuIHNoYWRvd1Jvb3Qoc2hhZG93SG9zdCkuYXBwZW5kQ2hpbGQoY2hpbGQpCi0gIH0KLQot
ICBmdW5jdGlvbiBhcHBlbmRTaGFkb3dIb3N0KGRvYywgcGFyZW50KSB7Ci0gICAgdmFyIHNoYWRv
d0hvc3QgPSBkb2MuY3JlYXRlRWxlbWVudCgncCcpOwotICAgIHNoYWRvd0hvc3QudGFiSW5kZXgg
PSAxOyAgLy8gTWFrZXMgc3VyZSB0aGF0IHRoZSBzaGFkb3cgaG9zdCBpcyBmb2N1c2FibGUuCi0g
ICAgcGFyZW50ID0gcGFyZW50IHx8IGRvYy5ib2R5OwotICAgIHJldHVybiBwYXJlbnQuYXBwZW5k
Q2hpbGQoc2hhZG93SG9zdCk7Ci0gIH0KLQotICB2YXIgZm9jdXNlZEVsZW1lbWVudHMgPSBbXTsK
LQotICBmdW5jdGlvbiBmb2N1c2VkKGVsZW0pIHsKLSAgICBmb2N1c2VkRWxlbWVudHMucHVzaChl
bGVtKQotICB9Ci0KLSAgZnVuY3Rpb24gZG9Gb2N1cyhlbGVtKSB7Ci0gICAgZm9jdXNlZEVsZW1l
bnRzID0gW10KLSAgICBlbGVtLmZvY3VzKCkKLSAgfQotCi0gIGZ1bmN0aW9uIGVsZW1lbnRXYXNG
b2N1c2VkKGVsZW0pIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvY3VzZWRFbGVtZW50cy5s
ZW5ndGg7ICsraSkgewotICAgICAgaWYgKGZvY3VzZWRFbGVtZW50c1tpXSA9PSBlbGVtKSB7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH0KLQotICAvLyBGb3IgcmVhZGFiaWxpdHksIEkgbm90ZWQgdGhlIERPTSB0cmVlIHVuZGVyIHRo
ZSB0ZXN0IGhlcmUuCi0gIC8vCi0gIC8vIC0gZG9jdW1lbnQKLSAgLy8gICAtIHNoYWRvdzAgKHRh
YmluZGV4PTEpCi0gIC8vICAgICAtIGlucHV0MCAodGFiaW5kZXg9LTEpCi0gIC8vICAgICAtIGlu
cHV0MQotICAvLyAgICAgLSBpbnB1dDIKLSAgdmFyIHNoYWRvdzAgPSBhcHBlbmRTaGFkb3dIb3N0
KGRvY3VtZW50KTsKLSAgdmFyIGlucHV0MCA9IGFwcGVuZENoaWxkVG9TaGFkb3coc2hhZG93MCwg
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKSk7Ci0gIGlucHV0MC50YWJJbmRleCA9IC0x
Ci0gIHZhciBpbnB1dDEgPSBhcHBlbmRDaGlsZFRvU2hhZG93KHNoYWRvdzAsIGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2lucHV0JykpOwotICB2YXIgaW5wdXQyID0gYXBwZW5kQ2hpbGRUb1NoYWRv
dyhzaGFkb3cwLCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKLQotICB2YXIgZWxl
bWVudElkcyA9IFsnc2hhZG93MCcsICdpbnB1dDAnLCAnaW5wdXQxJywgJ2lucHV0MiddCi0gIGZv
ciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudElkcy5sZW5ndGg7IGkrKykgewotICAgIHZhciBpZCA9
IGVsZW1lbnRJZHNbaV07Ci0gICAgdmFyIGVsZW1lbnQgPSB3aW5kb3dbaWRdOwotICAgIGVsZW1l
bnQuaWQgPSBpZDsKLSAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZnVuY3Rp
b24oKSB7Zm9jdXNlZCh0aGlzKTt9LCBmYWxzZSk7Ci0gIH0KLQotICBkZWJ1ZygnRm9jdXNpbmc6
IHNoYWRvdzAnKTsKLSAgZG9Gb2N1cyhzaGFkb3cwKTsKLSAgLy8gQ29tbWVudGVkIG91dCBkdWUg
dG8gYnVnIDYxNDIxLgotICAvLyBzaG91bGRCZVRydWUoJ2VsZW1lbnRXYXNGb2N1c2VkKHNoYWRv
dzApJyk7Ci0gIHNob3VsZEJlRmFsc2UoJ2VsZW1lbnRXYXNGb2N1c2VkKGlucHV0MCknKTsKLSAg
c2hvdWxkQmVUcnVlKCdlbGVtZW50V2FzRm9jdXNlZChpbnB1dDEpJyk7Ci0gIHNob3VsZEJlRmFs
c2UoJ2VsZW1lbnRXYXNGb2N1c2VkKGlucHV0MiknKTsKLSAgaWYgKHdpbmRvdy5ldmVudFNlbmRl
cikgewotICAgIC8vIE1ha2VzIHN1cmUgdGhhdCB3ZSBjYW4gY2hhbmdlICdpbnB1dDEnIGVsZW1l
bnQncyB2YWx1ZSBieSBwcmVzc2luZyBhIGtleS4KLSAgICBzaG91bGRCZSgnaW5wdXQwLnZhbHVl
JywgJyIiJyk7Ci0gICAgc2hvdWxkQmUoJ2lucHV0MS52YWx1ZScsICciIicpOwotICAgIHNob3Vs
ZEJlKCdpbnB1dDIudmFsdWUnLCAnIiInKTsKLSAgICBkZWJ1ZygnUHJlc3Npbmc6ICJhIicpCi0g
ICAgZXZlbnRTZW5kZXIua2V5RG93bignYScpOwotICAgIHNob3VsZEJlKCdpbnB1dDAudmFsdWUn
LCAnIiInKTsKLSAgICBzaG91bGRCZSgnaW5wdXQxLnZhbHVlJywgJyJhIicpOwotICAgIHNob3Vs
ZEJlKCdpbnB1dDIudmFsdWUnLCAnIiInKTsKLSAgfQotfQotPC9zY3JpcHQ+Ci08c2NyaXB0IHNy
Yz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+
Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9y
ZGVyLWlmcmFtZS1hbmQtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3ctZXhwZWN0ZWQudHh0CmluZGV4IDkz
YTVlOGM4NzU2NjliZGJlMzViMjhiYmFjNDI4MTBkZjM4MDQyZGQuLmY4NmEzYTA2ZjdkNDljNTE2
ZDA4MmJhY2NjMTI1ZTVmZmI0NTgzODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3ctZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3ctZXhw
ZWN0ZWQudHh0CkBAIC0xLDM0ICsxLDU3IEBACi1UaGlzIHRlc3RzIHRoYXQgcHJlc3NpbmcgVGFi
IGtleSBzaG91bGQgdHJhdmVyc2UgaW50byBpZnJhbWUgYW5kIHNoYWRvdyB0cmVlLCBhbmQgcHJl
c3NpbmcgU2hpZnQtVGFiIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlci4gTWFrZXMgc3VyZSB0aGF0
IGEgc2hhZG93IGhvc3QgZWxlbWVudCBzaG91bGQgYWN0IGxpa2UgYSBpZnJhbWUgZWxlbWVudC4K
K0NPTlNPTEUgTUVTU0FHRTogbGluZSAxMDQ6IFVuY2F1Z2h0IFJlZmVyZW5jZUVycm9yOiBsb2cg
aXMgbm90IGRlZmluZWQKK1RoaXMgdGVzdHMgdGhhdCBwcmVzc2luZyBUYWIga2V5IHNob3VsZCB0
cmF2ZXJzZSBpbnRvIGlmcmFtZSBhbmQgc2hhZG93IHRyZWUsIGFuZCBwcmVzc2luZyBTaGlmdC1U
YWIgc2hvdWxkIHJldmVyc2UgdGhlIG9yZGVyLgogCi1Gb2N1cyBpbnB1dC0wMS4KLWlkOmlucHV0
LTAxKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi0KLVByZXNzIFRhYiAxMSB0aW1lcy4KLWlkOmlu
cHV0LTEzKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi1pZDppbnB1dC0xNSh0YWJJbmRleD0yKSBp
cyBmb2N1c2VkLgotaWQ6aW5wdXQtMDIodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KLWlkOmlucHV0
LTA0KHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCi1pZDppZnJhbWUtaW5wdXQtMDYodGFiSW5kZXg9
MSkgaXMgZm9jdXNlZC4KLWlkOmlmcmFtZS1zaGFkb3ctaW5wdXQtMDkodGFiSW5kZXg9MSkgaXMg
Zm9jdXNlZC4KLWlkOmlmcmFtZS1zaGFkb3ctaW5wdXQtMDgodGFiSW5kZXg9MCkgaXMgZm9jdXNl
ZC4KLWlkOmlmcmFtZS1pbnB1dC0xMih0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgotaWQ6aWZyYW1l
LWlucHV0LTExKHRhYkluZGV4PTIpIGlzIGZvY3VzZWQuCi1pZDppZnJhbWUtaW5wdXQtMDUodGFi
SW5kZXg9MCkgaXMgZm9jdXNlZC4KLWlkOmlucHV0LTE0KHRhYkluZGV4PTApIGlzIGZvY3VzZWQu
Ci0KLVByZXNzIFNoaWZ0LVRhYiAxMSB0aW1lcy4KLWlkOmlmcmFtZS1pbnB1dC0wNSh0YWJJbmRl
eD0wKSBpcyBmb2N1c2VkLgotaWQ6aWZyYW1lLWlucHV0LTExKHRhYkluZGV4PTIpIGlzIGZvY3Vz
ZWQuCi1pZDppZnJhbWUtaW5wdXQtMTIodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KLWlkOmlmcmFt
ZS1zaGFkb3ctaW5wdXQtMDgodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KLWlkOmlmcmFtZS1zaGFk
b3ctaW5wdXQtMDkodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KLWlkOmlmcmFtZS1pbnB1dC0wNih0
YWJJbmRleD0xKSBpcyBmb2N1c2VkLgotaWQ6aW5wdXQtMDQodGFiSW5kZXg9MCkgaXMgZm9jdXNl
ZC4KLWlkOmlucHV0LTAyKHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCi1pZDppbnB1dC0xNSh0YWJJ
bmRleD0yKSBpcyBmb2N1c2VkLgotaWQ6aW5wdXQtMTModGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4K
LWlkOmlucHV0LTAxKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCi0KLVRlc3QgZmluaXNoZWQuCitT
aG91bGQgbW92ZSBmcm9tIGlucHV0LTAxIHRvIGlucHV0LTEzIGluIGZvcndhcmQKK1BBU1MKK1No
b3VsZCBtb3ZlIGZyb20gaW5wdXQtMTMgdG8gaW5wdXQtMTUgaW4gZm9yd2FyZAorUEFTUworU2hv
dWxkIG1vdmUgZnJvbSBpbnB1dC0xNSB0byBpbnB1dC0wMiBpbiBmb3J3YXJkCitQQVNTCitTaG91
bGQgbW92ZSBmcm9tIGlucHV0LTAyIHRvIGhvc3QtMDEvaW5wdXQtMDMgaW4gZm9yd2FyZAorUEFT
UworU2hvdWxkIG1vdmUgZnJvbSBob3N0LTAxL2lucHV0LTAzIHRvIGlucHV0LTA0IGluIGZvcndh
cmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtMDQgdG8gaWZyYW1lL2lucHV0LTA2IGlu
IGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2lucHV0LTA2IHRvIGlmcmFt
ZS9ob3N0LTAyIGluIGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2hvc3Qt
MDIgdG8gaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDkgaW4gZm9yd2FyZAorUEFTUworU2hvdWxkIG1v
dmUgZnJvbSBpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOSB0byBpZnJhbWUvaG9zdC0wMi9pbnB1dC0w
OCBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9ob3N0LTAyL2lucHV0
LTA4IHRvIGlmcmFtZS9pbnB1dC0xMiBpbiBmb3J3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9t
IGlmcmFtZS9pbnB1dC0xMiB0byBpZnJhbWUvaW5wdXQtMTEgaW4gZm9yd2FyZAorUEFTUworU2hv
dWxkIG1vdmUgZnJvbSBpZnJhbWUvaW5wdXQtMTEgdG8gaWZyYW1lL2lucHV0LTA1IGluIGZvcndh
cmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2lucHV0LTA1IHRvIGlucHV0LTE0IGlu
IGZvcndhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaW5wdXQtMTQgdG8gaWZyYW1lL2lucHV0
LTA1IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9pbnB1dC0wNSB0
byBpZnJhbWUvaW5wdXQtMTEgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZy
YW1lL2lucHV0LTExIHRvIGlmcmFtZS9pbnB1dC0xMiBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxk
IG1vdmUgZnJvbSBpZnJhbWUvaW5wdXQtMTIgdG8gaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDggaW4g
YmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDgg
dG8gaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDkgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3Zl
IGZyb20gaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDkgdG8gaWZyYW1lL2hvc3QtMDIgaW4gYmFja3dh
cmQKK1BBU1MKK1Nob3VsZCBtb3ZlIGZyb20gaWZyYW1lL2hvc3QtMDIgdG8gaWZyYW1lL2lucHV0
LTA2IGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGlmcmFtZS9pbnB1dC0wNiB0
byBpbnB1dC0wNCBpbiBiYWNrd2FyZAorUEFTUworU2hvdWxkIG1vdmUgZnJvbSBpbnB1dC0wNCB0
byBob3N0LTAxL2lucHV0LTAzIGluIGJhY2t3YXJkCitQQVNTCitTaG91bGQgbW92ZSBmcm9tIGhv
c3QtMDEvaW5wdXQtMDMgdG8gaW5wdXQtMDIgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3Zl
IGZyb20gaW5wdXQtMDIgdG8gaW5wdXQtMTUgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3Zl
IGZyb20gaW5wdXQtMTUgdG8gaW5wdXQtMTMgaW4gYmFja3dhcmQKK1BBU1MKK1Nob3VsZCBtb3Zl
IGZyb20gaW5wdXQtMTMgdG8gaW5wdXQtMDEgaW4gYmFja3dhcmQKK1BBU1MKIAogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hh
ZG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1h
bmQtc2hhZG93Lmh0bWwKaW5kZXggMTBlOTE2MmU0YzQ4YzI5MDhiNTU3NWJhOTBlNjRmZTkyMDEy
NTFjZC4uNThiYmE4YTA4NTYwZmQ5YjQ1OGZhNmU1MTI3MjZjMWY1MTViNzFkZSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUtYW5kLXNoYWRv
dy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1l
LWFuZC1zaGFkb3cuaHRtbApAQCAtMSwzNyArMSwxOCBAQAogPCFET0NUWVBFIGh0bWw+CiA8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYWRvdy1kb20uanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgogPGJvZHk+Ci08cD5UaGlzIHRlc3RzIHRoYXQgcHJlc3NpbmcgVGFiIGtl
eSBzaG91bGQgdHJhdmVyc2UgaW50byBpZnJhbWUgYW5kIHNoYWRvdyB0cmVlLCBhbmQgcHJlc3Np
bmcgU2hpZnQtVGFiIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlci4KLSBNYWtlcyBzdXJlIHRoYXQg
YSBzaGFkb3cgaG9zdCBlbGVtZW50IHNob3VsZCBhY3QgbGlrZSBhIGlmcmFtZSBlbGVtZW50Ljwv
cD4KKzxwPlRoaXMgdGVzdHMgdGhhdCBwcmVzc2luZyBUYWIga2V5IHNob3VsZCB0cmF2ZXJzZSBp
bnRvIGlmcmFtZSBhbmQgc2hhZG93IHRyZWUsIGFuZCBwcmVzc2luZyBTaGlmdC1UYWIgc2hvdWxk
IHJldmVyc2UgdGhlIG9yZGVyLjwvcD4KIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgogPHNjcmlw
dD4KLWZ1bmN0aW9uIGxvZyhtc2cpIHsKLSAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjY29u
c29sZScpLnRleHRDb250ZW50ICs9IChtc2cgKyAnXG4nKTsKLX0KLQotZnVuY3Rpb24gZGVzY3Jp
cHRpb24oZWxlbWVudCkgewotICAgdmFyIG1zZyA9ICcnOwotICAgIGlmIChlbGVtZW50LmlkKSB7
Ci0gICAgICBtc2cgKz0gJ2lkOicgKyBlbGVtZW50LmlkOwotICAgIH0KLSAgICBtc2cgKz0gJyh0
YWJJbmRleD0nICsgZWxlbWVudC50YWJJbmRleCArICcpJzsKLSAgICByZXR1cm4gbXNnOwotfQot
Ci1mdW5jdGlvbiBvbkZvY3VzKGV2ZW50KSB7Ci0gICAgbG9nKGRlc2NyaXB0aW9uKGV2ZW50LnRh
cmdldCkgKyAnIGlzIGZvY3VzZWQuJyk7Ci19Ci0KLWZ1bmN0aW9uIGFkZEZvY3VzRXZlbnRMaXN0
ZW5lcihlbGVtZW50KSB7Ci0gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIG9u
Rm9jdXMsIGZhbHNlKTsKLX0KLQogZnVuY3Rpb24gY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2Ms
IGlkLCB0YWJJbmRleCkgewogICAgIHZhciBpbnB1dCA9IGRvYy5jcmVhdGVFbGVtZW50KCdpbnB1
dCcpOwogICAgIGlucHV0LnR5cGUgPSAndGV4dCc7CiAgICAgaW5wdXQuaWQgPSBpZDsKICAgICBp
bnB1dC50YWJJbmRleCA9IHRhYkluZGV4OwotICAgIGFkZEZvY3VzRXZlbnRMaXN0ZW5lcihpbnB1
dCk7CiAgICAgcmV0dXJuIGlucHV0OwogfQogCkBAIC00NCwxMCArMjUsMTEgQEAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogCiAgICAgZnVuY3Rpb24gYWRkU2hhZG93SG9zdChk
b2MpIHsKICAgICAgICAgdmFyIHNoYWRvd0hvc3QgPSBkb2MuY3JlYXRlRWxlbWVudCgncCcpOwot
ICAgICAgICBzaGFkb3dIb3N0LnRhYkluZGV4ID0gLTE7ICAvLyBUaGlzIHNoYWRvdyBob3N0IChh
bmQgYSBzaGFkb3cgdHJlZSBpbiB0aGF0KSBzaG91bGQgYmUgc2tpcHBlZC4KKyAgICAgICAgc2hh
ZG93SG9zdC5pZCA9ICdob3N0LTAxJzsKKyAgICAgICAgc2hhZG93SG9zdC50YWJJbmRleCA9IC0x
OwogICAgICAgICB2YXIgc2hhZG93ID0gaW50ZXJuYWxzLmVuc3VyZVNoYWRvd1Jvb3Qoc2hhZG93
SG9zdCk7CiAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHNoYWRvd0hvc3QpOwotICAgICAg
ICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdzaGFkb3ct
aW5wdXQtMDMnLCAwKSk7CisgICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5w
dXRFbGVtZW50KGRvYywgJ2lucHV0LTAzJywgMCkpOwogICAgIH0KICAgICBhZGRTaGFkb3dIb3N0
KGRvYyk7CiAKQEAgLTU1LDI3ICszNywyOSBAQCBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CiAKICAgICBmdW5jdGlvbiBhZGRJZnJhbWUoZG9jKSB7CiAgICAgICAgIHZhciBpZnJh
bWUgPSBkb2MuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgIGlmcmFtZS5pZCA9ICdp
ZnJhbWUnOwogICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOwogICAgICAgICBk
b2MgPSBpZnJhbWUuY29udGVudERvY3VtZW50OwogCi0gICAgICAgIGRvYy5ib2R5LmFwcGVuZENo
aWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaWZyYW1lLWlucHV0LTA1JywgMCkpOwot
ICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywg
J2lmcmFtZS1pbnB1dC0wNicsIDEpKTsKLSAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3Jl
YXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtaW5wdXQtMDcnLCAtMSkpOworICAgICAg
ICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0
LTA1JywgMCkpOworICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRF
bGVtZW50KGRvYywgJ2lucHV0LTA2JywgMSkpOworICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGls
ZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTA3JywgLTEpKTsKIAogICAgICAg
ICBmdW5jdGlvbiBhZGRTaGFkb3dIb3N0KGRvYykgewogICAgICAgICAgICAgdmFyIHNoYWRvd0hv
c3QgPSBkb2MuY3JlYXRlRWxlbWVudCgncCcpOworICAgICAgICAgICAgc2hhZG93SG9zdC5pZCA9
ICdob3N0LTAyJzsKICAgICAgICAgICAgIHNoYWRvd0hvc3QudGFiSW5kZXggPSAxOwogICAgICAg
ICAgICAgdmFyIHNoYWRvdyA9IGludGVybmFscy5lbnN1cmVTaGFkb3dSb290KHNoYWRvd0hvc3Qp
OwogICAgICAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc2hhZG93SG9zdCk7CiAKLSAgICAg
ICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lm
cmFtZS1zaGFkb3ctaW5wdXQtMDgnLCAwKSk7Ci0gICAgICAgICAgICBzaGFkb3cuYXBwZW5kQ2hp
bGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtc2hhZG93LWlucHV0LTA5Jywg
MSkpOwotICAgICAgICAgICAgc2hhZG93LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1l
bnQoZG9jLCAnaWZyYW1lLXNoYWRvdy1pbnB1dC0xMCcsIC0xKSk7CisgICAgICAgICAgICBzaGFk
b3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpbnB1dC0wOCcsIDAp
KTsKKyAgICAgICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50
KGRvYywgJ2lucHV0LTA5JywgMSkpOworICAgICAgICAgICAgc2hhZG93LmFwcGVuZENoaWxkKGNy
ZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMTAnLCAtMSkpOwogICAgICAgICB9CiAg
ICAgICAgIGFkZFNoYWRvd0hvc3QoZG9jKTsKIAotICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGls
ZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lmcmFtZS1pbnB1dC0xMScsIDIpKTsKLSAg
ICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdp
ZnJhbWUtaW5wdXQtMTInLCAxKSk7CisgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0
ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMTEnLCAyKSk7CisgICAgICAgIGRvYy5ib2R5
LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMTInLCAxKSk7
CiAgICAgfQogICAgIGFkZElmcmFtZShkb2MpOwogCkBAIC04MywyMCArNjcsNDAgQEAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNy
ZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMTQnLCAwKSk7CiAgICAgZG9jLmJvZHku
YXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpbnB1dC0xNScsIDIpKTsK
IAotICAgIGxvZygnRm9jdXMgaW5wdXQtMDEuJyk7Ci0gICAgZG9jLmdldEVsZW1lbnRCeUlkKCdp
bnB1dC0wMScpLmZvY3VzKCk7CisgICAgdGVzdEZvY3VzTmF2aWdhdGlvbkZvd3JhZChbCisgICAg
ICAgICdpbnB1dC0wMScsCisgICAgICAgICdpbnB1dC0xMycsCisgICAgICAgICdpbnB1dC0xNScs
CisgICAgICAgICdpbnB1dC0wMicsCisgICAgICAgICdob3N0LTAxL2lucHV0LTAzJywKKyAgICAg
ICAgJ2lucHV0LTA0JywKKyAgICAgICAgJ2lmcmFtZS9pbnB1dC0wNicsCisgICAgICAgICdpZnJh
bWUvaG9zdC0wMicsCisgICAgICAgICdpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOScsCisgICAgICAg
ICdpZnJhbWUvaG9zdC0wMi9pbnB1dC0wOCcsCisgICAgICAgICdpZnJhbWUvaW5wdXQtMTInLAor
ICAgICAgICAnaWZyYW1lL2lucHV0LTExJywKKyAgICAgICAgJ2lmcmFtZS9pbnB1dC0wNScsCisg
ICAgICAgICdpbnB1dC0xNCcsCisgICAgXSk7CisKKyAgICB0ZXN0Rm9jdXNOYXZpZ2F0aW9uQmFj
a3dhcmQoWworICAgICAgICAnaW5wdXQtMTQnLAorICAgICAgICAnaWZyYW1lL2lucHV0LTA1JywK
KyAgICAgICAgJ2lmcmFtZS9pbnB1dC0xMScsCisgICAgICAgICdpZnJhbWUvaW5wdXQtMTInLAor
ICAgICAgICAnaWZyYW1lL2hvc3QtMDIvaW5wdXQtMDgnLAorICAgICAgICAnaWZyYW1lL2hvc3Qt
MDIvaW5wdXQtMDknLAorICAgICAgICAnaWZyYW1lL2hvc3QtMDInLAorICAgICAgICAnaWZyYW1l
L2lucHV0LTA2JywKKyAgICAgICAgJ2lucHV0LTA0JywKKyAgICAgICAgJ2hvc3QtMDEvaW5wdXQt
MDMnLAorICAgICAgICAnaW5wdXQtMDInLAorICAgICAgICAnaW5wdXQtMTUnLAorICAgICAgICAn
aW5wdXQtMTMnLAorICAgICAgICAnaW5wdXQtMDEnLAorICAgIF0pOwogCi0gICAgaWYgKHdpbmRv
dy5ldmVudFNlbmRlcikgewotICAgICAgICB2YXIgcHJlc3NlZCA9IDExOwotICAgICAgICBsb2co
J1xuUHJlc3MgVGFiICcgKyBwcmVzc2VkICsgJyB0aW1lcy4nKTsKLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBwcmVzc2VkOyArK2kpIHsKLSAgICAgICAgICAgIGV2ZW50U2VuZGVyLmtleURv
d24oJ1x0Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgbG9nKCdcblByZXNzIFNoaWZ0LVRhYiAnICsg
cHJlc3NlZCArICcgdGltZXMuJyk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlc3Nl
ZDsgKytpKSB7Ci0gICAgICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCdcdCcsIFsnc2hpZnRL
ZXknXSk7Ci0gICAgICAgIH0KLSAgIH0KICAgIGxvZygnXG5UZXN0IGZpbmlzaGVkLicpOwogfQog
PC9zY3JpcHQ+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>