<?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>11920</bug_id>
          
          <creation_ts>2006-12-21 11:54:52 -0800</creation_ts>
          <short_desc>Web Inspector should have Firebug-like CSS editing</short_desc>
          <delta_ts>2007-11-07 10:02:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>420+</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>14377</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Matt Lilek">dev+webkit</reporter>
          <assigned_to name="Timothy Hatcher">timothy</assigned_to>
          <cc>aroben</cc>
    
    <cc>charles</cc>
    
    <cc>kevin.gc</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>40748</commentid>
    <comment_count>0</comment_count>
    <who name="Matt Lilek">dev+webkit</who>
    <bug_when>2006-12-21 11:54:52 -0800</bug_when>
    <thetext>I&apos;m working on implementing live CSS editing from the Web Inspector ala the latest Firebug.  I&apos;ve got some basic editing working, but it still needs a lot of work so a patch is at least a couple days away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6386</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-06-24 22:51:19 -0700</bug_when>
    <thetext>One part of this is implementing easy disabling of CSS properties, which is bug 14377.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6385</commentid>
    <comment_count>2</comment_count>
    <who name="Charles Gaudette">charles</who>
    <bug_when>2007-06-24 23:10:01 -0700</bug_when>
    <thetext>This feature request reads as if it is referring to  Firebug&apos;s Edit:CSS panel. 

But also note that inside Firebug&apos;s Inspect:CSS panel — the same place you can disable properties — it is possible to (temporarily?) insert a new property. You can do this by right-clicking on the CSS rule&apos;s name, as in &quot;body {&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60459</commentid>
    <comment_count>3</comment_count>
      <attachid>17072</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2007-11-06 17:43:59 -0800</bug_when>
    <thetext>Created attachment 17072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60536</commentid>
    <comment_count>4</comment_count>
      <attachid>17072</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-11-07 01:01:20 -0800</bug_when>
    <thetext>Comment on attachment 17072
Patch

+          and makes the code simplier in the inspector. This function was added for the inspector,

Typo: simplier -&gt; simpler

+          Shrink the toggle zone to 10px to better match the size of the arrow. Add and onattach call

Typo: and -&gt; an

+        if (!x &amp;&amp; this.onpopulate &amp;&amp; this._expanded) {
+            this.onpopulate(this);
+            this._populated = true;
+        }

Is that first check supposed to be &quot;x&quot; instead of &quot;!x&quot;?

+                // Default editable to true if it was omited.

Typo: omited -&gt; omitted

+        if (shorthand &amp;&amp; !used) {
+            // Find out if any of the individual longhand properties of the shorthand
+            // are used, if none are then the shorthand is overloaded too.
+            var longhandProperties = this.styleRule.style.getLonghandProperties(property);
+            for (var j = 0; j &lt; longhandProperties.length; ++j) {
+                var individualProperty = longhandProperties[j];
+                if (individualProperty in this.usedProperties)
+                    return false;
+            }
+
+            return true;
+        }
+
+        return !used;

You could reverse the if and turn this into an early return.

+        if (this.expanded)
+            this.collapse();

Is calling collapse() not just a no-op when this.expanded is false? If it is a no-op then there&apos;s no need for the if.

+        console.log(userInput + &quot; (&quot; + userInput.length + &quot;)&quot;);
+        console.log(parseElement.getAttribute(&quot;style&quot;) + &quot; (&quot; + parseElement.getAttribute(&quot;style&quot;).length + &quot;)&quot;);
+        console.log(parseElement.style.length);

Did you mean to leave these in?

+            if (this.getPropertyShorthand(individualProperty) !== shorthandProperty || individualProperty in foundProperties)

Assuming that the &quot;in&quot; check is faster than a call to getPropertyShorthand, you should reverse the order of this ||.

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60564</commentid>
    <comment_count>5</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2007-11-07 10:00:29 -0800</bug_when>
    <thetext>Landed in r27575. http://trac.webkit.org/projects/webkit/changeset/27575</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60565</commentid>
    <comment_count>6</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2007-11-07 10:02:46 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; +        if (!x &amp;&amp; this.onpopulate &amp;&amp; this._expanded) {
&gt; +            this.onpopulate(this);
&gt; +            this._populated = true;
&gt; +        }
&gt; 
&gt; Is that first check supposed to be &quot;x&quot; instead of &quot;!x&quot;?

It should be !x, since we want to re-populate right away if we are currently expanded.

Addressed the other comments.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17072</attachid>
            <date>2007-11-06 17:43:59 -0800</date>
            <delta_ts>2007-11-07 01:01:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>11920.patch</filename>
            <type>text/plain</type>
            <size>51245</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI3NDk1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMDctMTEt
MDYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAxMTkyMDogV2ViIEluc3BlY3Rv
ciBzaG91bGQgaGF2ZSBGaXJlYnVnLWxpa2UgQ1NTIGVkaXRpbmcKKyAgICAgICAgaHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5MjAKKworICAgICAgICAqIGNzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQpOiBSZXR1cm4gZmFsc2UuIEkn
bSBub3Qgc3VyZSB3aHkKKyAgICAgICAgICB0aGlzIHdhcyB0cnVlLCBidXQgY29tcHV0ZWQgc3R5
bGUgaGFzIG5vIGNvbmNlcHQgb2YgaW1wbGljdC4gU28gZmFsc2UgbWFrZXMgbW9yZSBzZW5zZQor
ICAgICAgICAgIGFuZCBtYWtlcyB0aGUgY29kZSBzaW1wbGllciBpbiB0aGUgaW5zcGVjdG9yLiBU
aGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBmb3IgdGhlIGluc3BlY3RvciwKKyAgICAgICAgICBzbyB0
aGlzIGlzbid0IGEgY29tcGF0aWJpbGl0eSBjaGFuZ2UuCisgICAgICAgICogcGFnZS9pbnNwZWN0
b3IvUHJvcGVydGllc1NlY3Rpb24uanM6IEFkZCBhIGdldHRlci9zZXR0ZXIgdG8gcmVzZXQgcG9w
dWxhdGVkIHN0YXR1cy4KKyAgICAgICAgKiBwYWdlL2luc3BlY3Rvci9TdHlsZXNTaWRlYmFyUGFu
ZS5qczogU29tZSByZWZhY3RvcmluZyBhbG9uZyB3aXRoIHRoZSBtYWluIHN1cHBvcnQgZm9yCisg
ICAgICAgICAgc3R5bGUgZWRpdGluZy4KKyAgICAgICAgKiBwYWdlL2luc3BlY3Rvci9pbnNwZWN0
b3IuY3NzOiBTdHlsZSBjaGFuZ2VzIGZvciBwcm9wZXJ5IGVkaXRpbmcgYW5kIGZvY3VzIGNvcnJl
Y3RuZXNzLgorICAgICAgICAqIHBhZ2UvaW5zcGVjdG9yL2luc3BlY3Rvci5qczogTG9vayBmb3Ig
YSBoYW5kbGVLZXlFdmVudCBmdW5jdGlvbiBvZiB0aGUgZm9jdXMgZWxlbWVudCBiZWZvcmUKKyAg
ICAgICAgICB0cnlpbmcgdG8gY2FsbCBhIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBlbGVtZW50J3Mg
aWQuIENhbGwgZm9jdXNlZCBhbmQgYmx1cnJlZCBvbiB0aGUgZm9jdXNlZAorICAgICAgICAgIGVs
ZW1lbnQgd2hlbiBjdXJyZW50Rm9jdXNFbGVtZW50IGlzIGNoYW5nZWQuIFVzZSB0aGUgbmV3IGxp
c3RJdGVtRWxlbWVudCBnZXR0ZXIgaW5zdGVhZCBvZgorICAgICAgICAgIHRoZSBwcml2YXRlIHBy
b3BlcnR5LgorICAgICAgICAqIHBhZ2UvaW5zcGVjdG9yL3RyZWVvdXRsaW5lLmpzOiBObyBsb25n
ZXIgZXhwYW5kIG9uIGRvdWJsZSBjbGljayBpZiBvbmRibGNsaWNrIGlzIGltcGxlbWVudGVkLgor
ICAgICAgICAgIFNocmluayB0aGUgdG9nZ2xlIHpvbmUgdG8gMTBweCB0byBiZXR0ZXIgbWF0Y2gg
dGhlIHNpemUgb2YgdGhlIGFycm93LiBBZGQgYW5kIG9uYXR0YWNoIGNhbGwKKyAgICAgICAgICB0
byBhbGxvdyBnZW5lcmF0aW9uIG9mIHRoZSB0aXRsZSB1c2luZyB0aGUgRE9NIGVsZW1lbnQuIEFk
ZCBsaXN0SXRlbUVsZW1lbnQgYW5kCisgICAgICAgICAgY2hpbGRyZW5MaXN0RWxlbWVudCBnZXR0
ZXJzLgorICAgICAgICAqIHBhZ2UvaW5zcGVjdG9yL3V0aWxpdGllcy5qczogQWRkIG5ldyBoZWxw
ZXIgcHJvdG90eXBlIG1ldGhvZHMgb24gQ1NTU3R5bGVEZWNsYXJhdGlvbi4KKyAgICAgICAgKiBw
YWdlL2luc3BlY3Rvci9Eb2N1bWVudFBhbmVsLmpzOiBVc2UgdGhlIG5ldyBsaXN0SXRlbUVsZW1l
bnQgZ2V0dGVyIGluc3RlYWQgb2YgdGhlIHByaXZhdGUKKyAgICAgICAgICBwcm9wZXJ0eS4gQWxz
byBleHBhbmQgdGhlIERPTSBub2RlIG9uIGRvdWJsZSBjbGljayBub3cgdGhhdCB0aGUgVHJlZU91
dGxpbmUgZG9zZW4ndCBkbyBpdC4KKyAgICAgICAgKiBwYWdlL2luc3BlY3Rvci9SZXNvdXJjZS5q
czogVXNlIHRoZSBuZXcgbGlzdEl0ZW1FbGVtZW50IGFuZCBjaGlsZHJlbkxpc3RFbGVtZW50IGdl
dHRlcnMKKyAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBwcml2YXRlIHByb3BlcnRpZXMuCisKIDIw
MDctMTEtMDYgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uaAkocmV2aXNpb24gMjc0OTUpCisrKyBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3Qg
eyByZXR1cm4gLTE7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCBw
cm9wZXJ0eUlEKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzUHJv
cGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gbWFrZU11dGFibGUoKTsKSW5kZXg6IHBhZ2UvaW5zcGVjdG9yL0RvY3VtZW50UGFuZWwuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcGFnZS9pbnNwZWN0b3IvRG9jdW1lbnRQYW5lbC5qcwkocmV2aXNpb24g
Mjc0OTUpCisrKyBwYWdlL2luc3BlY3Rvci9Eb2N1bWVudFBhbmVsLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0zOTYsMTYgKzM5NiwxNyBAQCBXZWJJbnNwZWN0b3IuRE9NTm9kZVRyZWVFbGVtZW50ID0g
ZnVuY3RpCiBXZWJJbnNwZWN0b3IuRE9NTm9kZVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAg
ICB1cGRhdGVTZWxlY3Rpb246IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGlmICghdGhpcy5f
bGlzdEl0ZW1Ob2RlKQorICAgICAgICB2YXIgbGlzdEl0ZW1FbGVtZW50ID0gdGhpcy5saXN0SXRl
bUVsZW1lbnQ7CisgICAgICAgIGlmICghbGlzdEl0ZW1FbGVtZW50KQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25FbGVtZW50KSB7CiAgICAgICAgICAg
ICB0aGlzLnNlbGVjdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
ICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRWxlbWVudC5jbGFzc05hbWUgPSAic2VsZWN0aW9u
IHNlbGVjdGVkIjsKLSAgICAgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5pbnNlcnRCZWZvcmUo
dGhpcy5zZWxlY3Rpb25FbGVtZW50LCB0aGlzLl9saXN0SXRlbU5vZGUuZmlyc3RDaGlsZCk7Cisg
ICAgICAgICAgICBsaXN0SXRlbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuc2VsZWN0aW9uRWxl
bWVudCwgbGlzdEl0ZW1FbGVtZW50LmZpcnN0Q2hpbGQpOwogICAgICAgICB9CiAKLSAgICAgICAg
dGhpcy5zZWxlY3Rpb25FbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuX2xpc3RJdGVtTm9kZS5v
ZmZzZXRIZWlnaHQgKyAicHgiOworICAgICAgICB0aGlzLnNlbGVjdGlvbkVsZW1lbnQuc3R5bGUu
aGVpZ2h0ID0gbGlzdEl0ZW1FbGVtZW50Lm9mZnNldEhlaWdodCArICJweCI7CiAgICAgfSwKIAog
ICAgIG9ucG9wdWxhdGU6IGZ1bmN0aW9uKCkKQEAgLTQ0MiwxMCArNDQzLDkgQEAgV2ViSW5zcGVj
dG9yLkRPTU5vZGVUcmVlRWxlbWVudC5wcm90b3R5cAogCiAgICAgb25yZXZlYWw6IGZ1bmN0aW9u
KCkKICAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fbGlzdEl0ZW1Ob2RlIHx8ICF0aGlzLnRyZWVP
dXRsaW5lIHx8ICF0aGlzLnRyZWVPdXRsaW5lLl9jaGlsZHJlbkxpc3ROb2RlKQorICAgICAgICBp
ZiAoIXRoaXMubGlzdEl0ZW1FbGVtZW50IHx8ICF0aGlzLnRyZWVPdXRsaW5lKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy50cmVlT3V0bGluZS5wYW5lbC52
aWV3cy5kb20udHJlZUNvbnRlbnRFbGVtZW50OwotICAgICAgICBwYXJlbnQuc2Nyb2xsVG9FbGVt
ZW50KHRoaXMuX2xpc3RJdGVtTm9kZSk7CisgICAgICAgIHRoaXMudHJlZU91dGxpbmUucGFuZWwu
dmlld3MuZG9tLnRyZWVDb250ZW50RWxlbWVudC5zY3JvbGxUb0VsZW1lbnQodGhpcy5saXN0SXRl
bUVsZW1lbnQpOwogICAgIH0sCiAKICAgICBvbnNlbGVjdDogZnVuY3Rpb24oKQpAQCAtNDY1LDYg
KzQ2NSw5IEBAIFdlYkluc3BlY3Rvci5ET01Ob2RlVHJlZUVsZW1lbnQucHJvdG90eXAKICAgICAg
ICAgdmFyIHBhbmVsID0gdGhpcy50cmVlT3V0bGluZS5wYW5lbDsKICAgICAgICAgcGFuZWwucm9v
dERPTU5vZGUgPSB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LnBhcmVudE5vZGU7CiAgICAgICAgIHBh
bmVsLmZvY3VzZWRET01Ob2RlID0gdGhpcy5yZXByZXNlbnRlZE9iamVjdDsKKworICAgICAgICBp
ZiAodGhpcy5oYXNDaGlsZHJlbiAmJiAhdGhpcy5leHBhbmRlZCkKKyAgICAgICAgICAgIHRoaXMu
ZXhwYW5kKCk7CiAgICAgfQogfQogCkluZGV4OiBwYWdlL2luc3BlY3Rvci9Qcm9wZXJ0aWVzU2Vj
dGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL2luc3BlY3Rvci9Qcm9wZXJ0aWVzU2VjdGlvbi5q
cwkocmV2aXNpb24gMjc0OTUpCisrKyBwYWdlL2luc3BlY3Rvci9Qcm9wZXJ0aWVzU2VjdGlvbi5q
cwkod29ya2luZyBjb3B5KQpAQCAtOTksMTcgKzk5LDMxIEBAIFdlYkluc3BlY3Rvci5Qcm9wZXJ0
aWVzU2VjdGlvbi5wcm90b3R5cGUKICAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTsKICAgICB9
LAogCisgICAgZ2V0IHBvcHVsYXRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcG9w
dWxhdGVkOworICAgIH0sCisKKyAgICBzZXQgcG9wdWxhdGVkKHgpCisgICAgeworICAgICAgICB0
aGlzLl9wb3B1bGF0ZWQgPSB4OworICAgICAgICBpZiAoIXggJiYgdGhpcy5vbnBvcHVsYXRlICYm
IHRoaXMuX2V4cGFuZGVkKSB7CisgICAgICAgICAgICB0aGlzLm9ucG9wdWxhdGUodGhpcyk7Cisg
ICAgICAgICAgICB0aGlzLl9wb3B1bGF0ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfSwKKwog
ICAgIGV4cGFuZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2V4cGFuZGVk
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB0aGlzLl9leHBhbmRlZCA9IHRydWU7Cisg
ICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJleHBhbmRlZCIpOwogCiAgICAgICAg
IGlmICghdGhpcy5fcG9wdWxhdGVkICYmIHRoaXMub25wb3B1bGF0ZSkgewogICAgICAgICAgICAg
dGhpcy5vbnBvcHVsYXRlKHRoaXMpOwogICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVkID0gdHJ1
ZTsKICAgICAgICAgfQotICAgICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygiZXhwYW5k
ZWQiKTsKICAgICB9LAogCiAgICAgY29sbGFwc2U6IGZ1bmN0aW9uKCkKSW5kZXg6IHBhZ2UvaW5z
cGVjdG9yL1Jlc291cmNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvaW5zcGVjdG9yL1Jlc291cmNl
LmpzCShyZXZpc2lvbiAyNzQ5NSkKKysrIHBhZ2UvaW5zcGVjdG9yL1Jlc291cmNlLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC02ODQsNyArNjg0LDcgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUVs
ZW1lbnQuZGVzZWxlYwogCiBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlRWxlbWVudC5yZXZlYWxl
ZCA9IGZ1bmN0aW9uKGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50Ll9saXN0SXRlbU5vZGUg
fHwgIWVsZW1lbnQudHJlZU91dGxpbmUgfHwgIWVsZW1lbnQudHJlZU91dGxpbmUuX2NoaWxkcmVu
TGlzdE5vZGUpCisgICAgaWYgKCFlbGVtZW50Lmxpc3RJdGVtRWxlbWVudCB8fCAhZWxlbWVudC50
cmVlT3V0bGluZSB8fCAhZWxlbWVudC50cmVlT3V0bGluZS5jaGlsZHJlbkxpc3RFbGVtZW50KQog
ICAgICAgICByZXR1cm47Ci0gICAgZWxlbWVudC50cmVlT3V0bGluZS5fY2hpbGRyZW5MaXN0Tm9k
ZS5zY3JvbGxUb0VsZW1lbnQoZWxlbWVudC5fbGlzdEl0ZW1Ob2RlKTsKKyAgICBlbGVtZW50LnRy
ZWVPdXRsaW5lLmNoaWxkcmVuTGlzdEVsZW1lbnQuc2Nyb2xsVG9FbGVtZW50KGVsZW1lbnQubGlz
dEl0ZW1FbGVtZW50KTsKIH0KSW5kZXg6IHBhZ2UvaW5zcGVjdG9yL1N0eWxlc1NpZGViYXJQYW5l
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHBhZ2UvaW5zcGVjdG9yL1N0eWxlc1NpZGViYXJQYW5lLmpzCShy
ZXZpc2lvbiAyNzQ5NSkKKysrIHBhZ2UvaW5zcGVjdG9yL1N0eWxlc1NpZGViYXJQYW5lLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwzNSArMzIsNTIgQEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGVi
YXJQYW5lID0gZnVuY3RpbwogfQogCiBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJv
dG90eXBlID0gewotICAgIHVwZGF0ZTogZnVuY3Rpb24obm9kZSkKKyAgICB1cGRhdGU6IGZ1bmN0
aW9uKG5vZGUsIGVkaXRlZFNlY3Rpb24pCiAgICAgewotICAgICAgICB2YXIgYm9keSA9IHRoaXMu
Ym9keUVsZW1lbnQ7CisgICAgICAgIHZhciByZWZyZXNoID0gZmFsc2U7CisKKyAgICAgICAgaWYg
KCFub2RlIHx8IG5vZGUgPT09IHRoaXMubm9kZSkKKyAgICAgICAgICAgIHJlZnJlc2ggPSB0cnVl
OworCisgICAgICAgIGlmIChub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RF
ICYmIG5vZGUucGFyZW50Tm9kZSkKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7
CiAKLSAgICAgICAgYm9keS5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICBpZiAobm9kZSAmJiBu
b2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkKKyAgICAgICAgICAgIG5vZGUgPSBu
dWxsOwogCi0gICAgICAgIHRoaXMuc2VjdGlvbnMgPSBbXTsKKyAgICAgICAgaWYgKG5vZGUpCisg
ICAgICAgICAgICB0aGlzLm5vZGUgPSBub2RlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBu
b2RlID0gdGhpcy5ub2RlOworCisgICAgICAgIHZhciBib2R5ID0gdGhpcy5ib2R5RWxlbWVudDsK
KyAgICAgICAgaWYgKCFyZWZyZXNoIHx8ICFub2RlKSB7CisgICAgICAgICAgICBib2R5LnJlbW92
ZUNoaWxkcmVuKCk7CisgICAgICAgICAgICB0aGlzLnNlY3Rpb25zID0gW107CisgICAgICAgIH0K
IAogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYg
KG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmIG5vZGUucGFyZW50Tm9kZSkKLSAg
ICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7Ci0KICAgICAgICAgdmFyIHN0eWxlUnVs
ZXMgPSBbXTsKLSAgICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IFtdOwotCi0gICAgICAgIGlm
IChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkgewotICAgICAgICAgICAgdmFy
IHByb3BlcnR5Q291bnQgPSBbXTsKIAorICAgICAgICBpZiAocmVmcmVzaCkgeworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNlY3Rpb25zLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLnNlY3Rpb25zW2ldOworICAgICAgICAgICAg
ICAgIGlmIChzZWN0aW9uLmNvbXB1dGVkU3R5bGUpCisgICAgICAgICAgICAgICAgICAgIHNlY3Rp
b24uc3R5bGVSdWxlLnN0eWxlID0gbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENv
bXB1dGVkU3R5bGUobm9kZSk7CisgICAgICAgICAgICAgICAgdmFyIHN0eWxlUnVsZSA9IHsgc2Vj
dGlvbjogc2VjdGlvbiwgc3R5bGU6IHNlY3Rpb24uc3R5bGVSdWxlLnN0eWxlLCBjb21wdXRlZFN0
eWxlOiBzZWN0aW9uLmNvbXB1dGVkU3R5bGUgfTsKKyAgICAgICAgICAgICAgICBzdHlsZVJ1bGVz
LnB1c2goc3R5bGVSdWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIHZhciBjb21wdXRlZFN0eWxlID0gbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3
LmdldENvbXB1dGVkU3R5bGUobm9kZSk7Ci0gICAgICAgICAgICBpZiAoY29tcHV0ZWRTdHlsZSAm
JiBjb21wdXRlZFN0eWxlLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBzdHlsZVJ1bGVzLnB1c2go
eyBjb21wdXRlZFN0eWxlOiB0cnVlLCBzZWxlY3RvclRleHQ6ICJDb21wdXRlZCBTdHlsZSIsIHN0
eWxlOiBjb21wdXRlZFN0eWxlIH0pOworICAgICAgICAgICAgc3R5bGVSdWxlcy5wdXNoKHsgY29t
cHV0ZWRTdHlsZTogdHJ1ZSwgc2VsZWN0b3JUZXh0OiAiQ29tcHV0ZWQgU3R5bGUiLCBzdHlsZTog
Y29tcHV0ZWRTdHlsZSwgZWRpdGFibGU6IGZhbHNlIH0pOwogCiAgICAgICAgICAgICB2YXIgbm9k
ZU5hbWUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG5vZGUuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAg
ICAgIHZhciBhdHRyID0gbm9kZS5hdHRyaWJ1dGVzW2ldOwogICAgICAgICAgICAgICAgIGlmIChh
dHRyLnN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyU3R5bGUgPSB7IHN0eWxl
OiBhdHRyLnN0eWxlIH07CisgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyU3R5bGUgPSB7IHN0
eWxlOiBhdHRyLnN0eWxlLCBlZGl0YWJsZTogZmFsc2UgfTsKICAgICAgICAgICAgICAgICAgICAg
YXR0clN0eWxlLnN1YnRpdGxlID0gImVsZW1lbnRcdTIwMTlzIFx1MjAxQyIgKyBhdHRyLm5hbWUg
KyAiXHUyMDFEIGF0dHJpYnV0ZSI7CiAgICAgICAgICAgICAgICAgICAgIGF0dHJTdHlsZS5zZWxl
Y3RvclRleHQgPSBub2RlTmFtZSArICJbIiArIGF0dHIubmFtZTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGF0dHIudmFsdWUubGVuZ3RoKQpAQCAtODIsODkgKzk5LDkzIEBAIFdlYkluc3BlY3Rv
ci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUKICAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gKG1hdGNoZWRTdHlsZVJ1bGVzLmxlbmd0aCAtIDEpOyBpID49IDA7IC0taSkKICAgICAgICAg
ICAgICAgICAgICAgc3R5bGVSdWxlcy5wdXNoKG1hdGNoZWRTdHlsZVJ1bGVzW2ldKTsKICAgICAg
ICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgdXNlZFByb3BlcnRpZXMgPSB7
fTsKLSAgICAgICAgICAgIHZhciBwcmlvcml0eVVzZWQgPSBmYWxzZTsKKyAgICAgICAgdmFyIHVz
ZWRQcm9wZXJ0aWVzID0ge307CisgICAgICAgIHZhciBwcmlvcml0eVVzZWQgPSBmYWxzZTsKIAot
ICAgICAgICAgICAgLy8gV2FsayB0aGUgc3R5bGUgcnVsZXMgYW5kIG1ha2UgYSBsaXN0IG9mIGFs
bCB1c2VkIGFuZCBvdmVybG9hZGVkIHByb3BlcnRpZXMuCi0gICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN0eWxlUnVsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgLy8gV2FsayB0aGUg
c3R5bGUgcnVsZXMgYW5kIG1ha2UgYSBsaXN0IG9mIGFsbCB1c2VkIGFuZCBvdmVybG9hZGVkIHBy
b3BlcnRpZXMuCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVSdWxlcy5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgdmFyIHN0eWxlUnVsZSA9IHN0eWxlUnVsZXNbaV07CisgICAg
ICAgICAgICBpZiAoc3R5bGVSdWxlLmNvbXB1dGVkU3R5bGUpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIHN0eWxlUnVsZS51c2VkUHJvcGVydGllcyA9IHt9OworCisg
ICAgICAgICAgICB2YXIgc3R5bGUgPSBzdHlsZVJ1bGUuc3R5bGU7CisgICAgICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IHN0eWxlLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgdmFy
IG5hbWUgPSBzdHlsZVtqXTsKKworICAgICAgICAgICAgICAgIGlmICghcHJpb3JpdHlVc2VkICYm
IHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSkubGVuZ3RoKQorICAgICAgICAgICAgICAg
ICAgICBwcmlvcml0eVVzZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBy
b3BlcnR5IG5hbWUgaXMgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgcnVsZSB0aGlzIGlzIHJ1bGUn
cworICAgICAgICAgICAgICAgIC8vIHByb3BlcnR5IGlzIG92ZXJsb2FkZWQsIHNvIGRvbid0IGFk
ZCBpdCB0byB0aGUgcnVsZSdzIHVzZWRQcm9wZXJ0aWVzLgorICAgICAgICAgICAgICAgIGlmICgh
KG5hbWUgaW4gdXNlZFByb3BlcnRpZXMpKQorICAgICAgICAgICAgICAgICAgICBzdHlsZVJ1bGUu
dXNlZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlOworCisgICAgICAgICAgICAgICAgaWYgKG5hbWUg
PT09ICJmb250IikgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZm9udCBwcm9wZXJ0eSBp
cyBub3QgcmVwb3J0ZWQgYXMgYSBzaG9ydGhhbmQuIFJlcG9ydCBmaW5kaW5nIHRoZSBpbmRpdmlk
dWFsCisgICAgICAgICAgICAgICAgICAgIC8vIHByb3BlcnRpZXMgc28gdGhleSBhcmUgdmlzaWJs
ZSBpbiBjb21wdXRlZCBzdHlsZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHJlbW92
ZSB0aGlzIHdoZW4gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1OTgg
aXMgZml4ZWQuCisgICAgICAgICAgICAgICAgICAgIHN0eWxlUnVsZS51c2VkUHJvcGVydGllc1si
Zm9udC1mYW1pbHkiXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHN0eWxlUnVsZS51c2Vk
UHJvcGVydGllc1siZm9udC1zaXplIl0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBzdHls
ZVJ1bGUudXNlZFByb3BlcnRpZXNbImZvbnQtc3R5bGUiXSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIHN0eWxlUnVsZS51c2VkUHJvcGVydGllc1siZm9udC12YXJpYW50Il0gPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBzdHlsZVJ1bGUudXNlZFByb3BlcnRpZXNbImZvbnQtd2VpZ2h0
Il0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBzdHlsZVJ1bGUudXNlZFByb3BlcnRpZXNb
ImxpbmUtaGVpZ2h0Il0gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gQWRkIGFsbCB0aGUgcHJvcGVydGllcyBmb3VuZCBpbiB0aGlzIHN0
eWxlIHRvIHRoZSB1c2VkIHByb3BlcnRpZXMgbGlzdC4KKyAgICAgICAgICAgIC8vIERvIHRoaXMg
aGVyZSBzbyBvbmx5IGZ1dHVyZSBydWxlcyBhcmUgYWZmZWN0IGJ5IHByb3BlcnRpZXMgdXNlZCBp
biB0aGlzIHJ1bGUuCisgICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHN0eWxlUnVsZXNbaV0u
dXNlZFByb3BlcnRpZXMpCisgICAgICAgICAgICAgICAgdXNlZFByb3BlcnRpZXNbbmFtZV0gPSB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHByaW9yaXR5VXNlZCkgeworICAgICAgICAg
ICAgLy8gV2FsayB0aGUgcHJvcGVydGllcyBhZ2FpbiBhbmQgYWNjb3VudCBmb3IgIWltcG9ydGFu
dC4KKyAgICAgICAgICAgIHZhciBmb3VuZFByaW9yaXR5UHJvcGVydGllcyA9IFtdOworCisgICAg
ICAgICAgICAvLyBXYWxrIGluIHJldmVyc2UgdG8gbWF0Y2ggdGhlIG9yZGVyICFpbXBvcnRhbnQg
b3ZlcnJpZGVzLgorICAgICAgICAgICAgZm9yICh2YXIgaSA9IChzdHlsZVJ1bGVzLmxlbmd0aCAt
IDEpOyBpID49IDA7IC0taSkgewogICAgICAgICAgICAgICAgIGlmIChzdHlsZVJ1bGVzW2ldLmNv
bXB1dGVkU3R5bGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAg
ICAgICAgc3R5bGVSdWxlc1tpXS5vdmVybG9hZGVkUHJvcGVydGllcyA9IHt9OwotCiAgICAgICAg
ICAgICAgICAgdmFyIGZvdW5kUHJvcGVydGllcyA9IHt9OwotCiAgICAgICAgICAgICAgICAgdmFy
IHN0eWxlID0gc3R5bGVSdWxlc1tpXS5zdHlsZTsKICAgICAgICAgICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IHN0eWxlLmxlbmd0aDsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIHZhciBu
YW1lID0gc3R5bGVbal07Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzaG9ydGhhbmQgPSBzdHls
ZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG92
ZXJsb2FkZWQgPSAobmFtZSBpbiB1c2VkUHJvcGVydGllcyk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFwcmlvcml0eVVzZWQgJiYgc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKS5s
ZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eVVzZWQgPSB0cnVlOwogCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChvdmVybG9hZGVkKQotICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGVSdWxlc1tpXS5vdmVybG9hZGVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFNraXAgZHVwbGljYXRlIHByb3BlcnRpZXMgaW4gdGhlIHNhbWUg
cnVsZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgaW4gZm91bmRQcm9wZXJ0aWVzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAgICAg
Zm91bmRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNo
b3J0aGFuZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kUHJvcGVydGllc1tzaG9ydGhh
bmRdID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gImZvbnQiKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZm9udCBwcm9wZXJ0eSBpcyBub3QgcmVw
b3J0ZWQgYXMgYSBzaG9ydGhhbmQuIFJlcG9ydCBmaW5kaW5nIHRoZSBpbmRpdmlkdWFsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIHNvIHRoZXkgYXJlIHZpc2libGUgaW4g
Y29tcHV0ZWQgc3R5bGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmVtb3Zl
IHRoaXMgd2hlbiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU5OCBp
cyBmaXhlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kUHJvcGVydGllc1siZm9udC1m
YW1pbHkiXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFByb3BlcnRpZXNb
ImZvbnQtc2l6ZSJdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kUHJvcGVy
dGllc1siZm9udC1zdHlsZSJdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
UHJvcGVydGllc1siZm9udC12YXJpYW50Il0gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmRQcm9wZXJ0aWVzWyJmb250LXdlaWdodCJdID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvdW5kUHJvcGVydGllc1sibGluZS1oZWlnaHQiXSA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLmdldFByb3BlcnR5
UHJpb3JpdHkobmFtZSkubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShu
YW1lIGluIGZvdW5kUHJpb3JpdHlQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHlsZVJ1bGVzW2ldLnVzZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUg
c3R5bGVSdWxlc1tpXS51c2VkUHJvcGVydGllc1tuYW1lXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kUHJpb3JpdHlQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChuYW1lIGluIGZvdW5kUHJpb3JpdHlQcm9wZXJ0aWVzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIHN0eWxlUnVsZXNbaV0udXNlZFByb3BlcnRpZXNbbmFt
ZV07CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQWRkIGFsbCB0aGUg
cHJvcGVydGllcyBmb3VuZCBpbiB0aGlzIHN0eWxlIHRvIHRoZSB1c2VkIHByb3BlcnRpZXMgbGlz
dC4KLSAgICAgICAgICAgICAgICAvLyBEbyB0aGlzIGhlcmUgc28gb25seSBmdXR1cmUgcnVsZXMg
YXJlIGFmZmVjdCBieSBwcm9wZXJ0aWVzIHVzZWQgaW4gdGhpcyBydWxlLgotICAgICAgICAgICAg
ICAgIGZvciAodmFyIG5hbWUgaW4gZm91bmRQcm9wZXJ0aWVzKQotICAgICAgICAgICAgICAgICAg
ICB1c2VkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7CiAgICAgICAgICAgICB9CisgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKHByaW9yaXR5VXNlZCkgewotICAgICAgICAgICAgICAgIC8vIFdh
bGsgdGhlIHByb3BlcnRpZXMgYWdhaW4gYW5kIGFjY291bnQgZm9yICFpbXBvcnRhbnQuCi0gICAg
ICAgICAgICAgICAgdmFyIGZvdW5kUHJpb3JpdHlQcm9wZXJ0aWVzID0gW107Ci0KLSAgICAgICAg
ICAgICAgICAvLyBXYWxrIGluIHJldmVyc2UgdG8gbWF0Y2ggdGhlIG9yZGVyICFpbXBvcnRhbnQg
b3ZlcnJpZGVzLgotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAoc3R5bGVSdWxlcy5sZW5n
dGggLSAxKTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlUnVs
ZXNbaV0uY29tcHV0ZWRTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZFByb3BlcnRpZXMgPSB7fTsKLSAgICAgICAg
ICAgICAgICAgICAgdmFyIHN0eWxlID0gc3R5bGVSdWxlc1tpXS5zdHlsZTsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdHlsZS5sZW5ndGg7ICsraikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBzdHlsZVtqXTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU2tpcCBkdXBsaWNhdGUgcHJvcGVydGllcyBpbiB0aGUgc2FtZSBydWxlLgot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgaW4gZm91bmRQcm9wZXJ0aWVzKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKS5sZW5ndGgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShuYW1lIGluIGZvdW5kUHJpb3JpdHlQcm9wZXJ0
aWVzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHN0eWxlUnVsZXNb
aV0ub3ZlcmxvYWRlZFByb3BlcnRpZXNbbmFtZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVJ1bGVzW2ldLm92
ZXJsb2FkZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZFByaW9yaXR5UHJvcGVydGllc1tuYW1lXSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgaW4gZm91bmRQcmlvcml0eVByb3BlcnRpZXMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVSdWxlc1tpXS5vdmVybG9hZGVkUHJvcGVy
dGllc1tuYW1lXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgIGlmIChyZWZyZXNoKSB7CisgICAgICAgICAgICAvLyBXYWxrIHRoZSBzdHls
ZSBydWxlcyBhbmQgdXBkYXRlIHRoZSBzZWN0aW9ucyB3aXRoIG5ldyBvdmVybG9hZGVkIGFuZCB1
c2VkIHByb3BlcnRpZXMuCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlUnVs
ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3R5bGVSdWxlID0gc3R5bGVS
dWxlc1tpXTsKKyAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbiA9IHN0eWxlUnVsZS5zZWN0aW9u
OworICAgICAgICAgICAgICAgIHNlY3Rpb24uX3VzZWRQcm9wZXJ0aWVzID0gKHN0eWxlUnVsZS51
c2VkUHJvcGVydGllcyB8fCB1c2VkUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgc2VjdGlv
bi51cGRhdGUoKHNlY3Rpb24gPT09IGVkaXRlZFNlY3Rpb24pIHx8IHN0eWxlUnVsZS5jb21wdXRl
ZFN0eWxlKTsKICAgICAgICAgICAgIH0KLQorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gTWFrZSBhIHByb3BlcnR5IHNlY3Rpb24gZm9yIGVhY2ggc3R5bGUgcnVsZS4KLSAgICAgICAg
ICAgIHZhciBzdHlsZVJ1bGVzTGVuZ3RoID0gc3R5bGVSdWxlcy5sZW5ndGg7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlUnVsZXNMZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZVJ1bGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAg
ICAgICAgICAgdmFyIHN0eWxlUnVsZSA9IHN0eWxlUnVsZXNbaV07CiAgICAgICAgICAgICAgICAg
dmFyIHN1YnRpdGxlID0gc3R5bGVSdWxlLnN1YnRpdGxlOwogICAgICAgICAgICAgICAgIGRlbGV0
ZSBzdHlsZVJ1bGUuc3VidGl0bGU7CkBAIC0xNzIsMzQgKzE5Myw0MiBAQCBXZWJJbnNwZWN0b3Iu
U3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlCiAgICAgICAgICAgICAgICAgdmFyIGNvbXB1dGVk
U3R5bGUgPSBzdHlsZVJ1bGUuY29tcHV0ZWRTdHlsZTsKICAgICAgICAgICAgICAgICBkZWxldGUg
c3R5bGVSdWxlLmNvbXB1dGVkU3R5bGU7CiAKLSAgICAgICAgICAgICAgICB2YXIgb3ZlcmxvYWRl
ZFByb3BlcnRpZXMgPSBzdHlsZVJ1bGUub3ZlcmxvYWRlZFByb3BlcnRpZXM7Ci0gICAgICAgICAg
ICAgICAgZGVsZXRlIHN0eWxlUnVsZS5vdmVybG9hZGVkUHJvcGVydGllczsKKyAgICAgICAgICAg
ICAgICB2YXIgcnVsZVVzZWRQcm9wZXJ0aWVzID0gc3R5bGVSdWxlLnVzZWRQcm9wZXJ0aWVzOwor
ICAgICAgICAgICAgICAgIGRlbGV0ZSBzdHlsZVJ1bGUudXNlZFByb3BlcnRpZXM7CisKKyAgICAg
ICAgICAgICAgICB2YXIgZWRpdGFibGUgPSBzdHlsZVJ1bGUuZWRpdGFibGU7CisgICAgICAgICAg
ICAgICAgZGVsZXRlIHN0eWxlUnVsZS5lZGl0YWJsZTsKIAotICAgICAgICAgICAgICAgIHZhciBz
ZWN0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uKHN0eWxlUnVs
ZSwgc3VidGl0bGUsIGNvbXB1dGVkU3R5bGUsIChvdmVybG9hZGVkUHJvcGVydGllcyB8fCB1c2Vk
UHJvcGVydGllcykpOworICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgZWRpdGFibGUgdG8gdHJ1
ZSBpZiBpdCB3YXMgb21pdGVkLgorICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZWRpdGFibGUg
PT09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZSA9IHRydWU7CisK
KyAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9w
ZXJ0aWVzU2VjdGlvbihzdHlsZVJ1bGUsIHN1YnRpdGxlLCBjb21wdXRlZFN0eWxlLCAocnVsZVVz
ZWRQcm9wZXJ0aWVzIHx8IHVzZWRQcm9wZXJ0aWVzKSwgZWRpdGFibGUpOwogICAgICAgICAgICAg
ICAgIHNlY3Rpb24uZXhwYW5kZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHNlY3Rpb24ucGFu
ZSA9IHRoaXM7CiAKICAgICAgICAgICAgICAgICBib2R5LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxl
bWVudCk7CiAgICAgICAgICAgICAgICAgdGhpcy5zZWN0aW9ucy5wdXNoKHNlY3Rpb24pOwogICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gY2FuJ3Qgc3R5bGUg
dGhpcyBub2RlCiAgICAgICAgIH0KICAgICB9CiB9CiAKIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRl
YmFyUGFuZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLnBy
b3RvdHlwZTsKIAotV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24gPSBmdW5jdGlv
bihzdHlsZVJ1bGUsIHN1YnRpdGxlLCBjb21wdXRlZFN0eWxlLCBvdmVybG9hZGVkT3JVc2VkUHJv
cGVydGllcykKK1dlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uID0gZnVuY3Rpb24o
c3R5bGVSdWxlLCBzdWJ0aXRsZSwgY29tcHV0ZWRTdHlsZSwgdXNlZFByb3BlcnRpZXMsIGVkaXRh
YmxlKQogewogICAgIFdlYkluc3BlY3Rvci5Qcm9wZXJ0aWVzU2VjdGlvbi5jYWxsKHRoaXMsIHN0
eWxlUnVsZS5zZWxlY3RvclRleHQpOwogCiAgICAgdGhpcy5zdHlsZVJ1bGUgPSBzdHlsZVJ1bGU7
CiAgICAgdGhpcy5jb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTsKKyAgICB0aGlzLmVkaXRh
YmxlID0gKGVkaXRhYmxlICYmICFjb21wdXRlZFN0eWxlKTsKIAotICAgIGlmIChjb21wdXRlZFN0
eWxlKQotICAgICAgICB0aGlzLnVzZWRQcm9wZXJ0aWVzID0gb3ZlcmxvYWRlZE9yVXNlZFByb3Bl
cnRpZXM7Ci0gICAgZWxzZQotICAgICAgICB0aGlzLm92ZXJsb2FkZWRQcm9wZXJ0aWVzID0gb3Zl
cmxvYWRlZE9yVXNlZFByb3BlcnRpZXMgfHwge307CisgICAgLy8gUHJldmVudCBlZGl0aW5nIHRo
ZSB1c2VyIGFnZW50IHJ1bGVzLgorICAgIGlmICh0aGlzLnN0eWxlUnVsZS5wYXJlbnRTdHlsZVNo
ZWV0ICYmICF0aGlzLnN0eWxlUnVsZS5wYXJlbnRTdHlsZVNoZWV0Lm93bmVyTm9kZSkKKyAgICAg
ICAgdGhpcy5lZGl0YWJsZSA9IGZhbHNlOworCisgICAgdGhpcy5fdXNlZFByb3BlcnRpZXMgPSB1
c2VkUHJvcGVydGllczsKIAogICAgIGlmIChjb21wdXRlZFN0eWxlKSB7CiAgICAgICAgIGlmIChQ
cmVmZXJlbmNlcy5zaG93SW5oZXJpdGVkQ29tcHV0ZWRTdHlsZVByb3BlcnRpZXMpCkBAIC0yNDIs
MjEwICsyNzEsMzk2IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uID0gZnUK
IH0KIAogV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewor
ICAgIGdldCB1c2VkUHJvcGVydGllcygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdXNl
ZFByb3BlcnRpZXMgfHwge307CisgICAgfSwKKworICAgIHNldCB1c2VkUHJvcGVydGllcyh4KQor
ICAgIHsKKyAgICAgICAgdGhpcy5fdXNlZFByb3BlcnRpZXMgPSB4OworICAgICAgICB0aGlzLnVw
ZGF0ZSgpOworICAgIH0sCisKKyAgICBpc1Byb3BlcnR5SW5oZXJpdGVkOiBmdW5jdGlvbihwcm9w
ZXJ0eSkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5jb21wdXRlZFN0eWxlIHx8ICF0aGlzLl91
c2VkUHJvcGVydGllcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gVGhl
c2UgcHJvcGVydGllcyBzaG91bGQgYWx3YXlzIHNob3cgZm9yIENvbXB1dGVkIFN0eWxlLgorICAg
ICAgICB2YXIgYWx3YXlzU2hvd0NvbXB1dGVkUHJvcGVydGllcyA9IHsgImRpc3BsYXkiOiB0cnVl
LCAiaGVpZ2h0IjogdHJ1ZSwgIndpZHRoIjogdHJ1ZSB9OworICAgICAgICByZXR1cm4gIShwcm9w
ZXJ0eSBpbiB0aGlzLnVzZWRQcm9wZXJ0aWVzKSAmJiAhKHByb3BlcnR5IGluIGFsd2F5c1Nob3dD
b21wdXRlZFByb3BlcnRpZXMpOworICAgIH0sCisKKyAgICBpc1Byb3BlcnR5T3ZlcmxvYWRlZDog
ZnVuY3Rpb24ocHJvcGVydHksIHNob3J0aGFuZCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLmNv
bXB1dGVkU3R5bGUgfHwgIXRoaXMuX3VzZWRQcm9wZXJ0aWVzKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHZhciB1c2VkID0gKHByb3BlcnR5IGluIHRoaXMudXNlZFByb3Bl
cnRpZXMpOworCisgICAgICAgIGlmIChzaG9ydGhhbmQgJiYgIXVzZWQpIHsKKyAgICAgICAgICAg
IC8vIEZpbmQgb3V0IGlmIGFueSBvZiB0aGUgaW5kaXZpZHVhbCBsb25naGFuZCBwcm9wZXJ0aWVz
IG9mIHRoZSBzaG9ydGhhbmQKKyAgICAgICAgICAgIC8vIGFyZSB1c2VkLCBpZiBub25lIGFyZSB0
aGVuIHRoZSBzaG9ydGhhbmQgaXMgb3ZlcmxvYWRlZCB0b28uCisgICAgICAgICAgICB2YXIgbG9u
Z2hhbmRQcm9wZXJ0aWVzID0gdGhpcy5zdHlsZVJ1bGUuc3R5bGUuZ2V0TG9uZ2hhbmRQcm9wZXJ0
aWVzKHByb3BlcnR5KTsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbG9uZ2hhbmRQ
cm9wZXJ0aWVzLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgdmFyIGluZGl2aWR1YWxQ
cm9wZXJ0eSA9IGxvbmdoYW5kUHJvcGVydGllc1tqXTsKKyAgICAgICAgICAgICAgICBpZiAoaW5k
aXZpZHVhbFByb3BlcnR5IGluIHRoaXMudXNlZFByb3BlcnRpZXMpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gIXVzZWQ7CisgICAgfSwKKworICAgIHVw
ZGF0ZTogZnVuY3Rpb24oZnVsbCkKKyAgICB7CisgICAgICAgIGlmIChmdWxsIHx8IHRoaXMuY29t
cHV0ZWRTdHlsZSkgeworICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUucmVt
b3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIHRoaXMucG9wdWxhdGVkID0gZmFsc2U7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLnByb3BlcnRpZXNUcmVl
T3V0bGluZS5jaGlsZHJlblswXTsKKyAgICAgICAgICAgIHdoaWxlIChjaGlsZCkgeworICAgICAg
ICAgICAgICAgIGNoaWxkLm92ZXJsb2FkZWQgPSB0aGlzLmlzUHJvcGVydHlPdmVybG9hZGVkKGNo
aWxkLm5hbWUsIGNoaWxkLnNob3J0aGFuZCk7CisgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGls
ZC50cmF2ZXJzZU5leHRUcmVlRWxlbWVudChmYWxzZSwgbnVsbCwgdHJ1ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9LAorCiAgICAgb25wb3B1bGF0ZTogZnVuY3Rpb24oKQogICAg
IHsKICAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5zdHlsZVJ1bGUuc3R5bGU7CiAgICAgICAgIGlm
ICghc3R5bGUubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZhciBmb3Vu
ZFByb3BlcnRpZXMgPSB7fTsKKyAgICAgICAgdmFyIGZvdW5kU2hvcnRoYW5kcyA9IHt9OworICAg
ICAgICB2YXIgdW5pcXVlUHJvcGVydGllcyA9IHN0eWxlLmdldFVuaXF1ZVByb3BlcnRpZXMoKTsK
KyAgICAgICAgdW5pcXVlUHJvcGVydGllcy5zb3J0KCk7CiAKLSAgICAgICAgLy8gQWRkIHByb3Bl
cnRpZXMgaW4gcmV2ZXJzZSBvcmRlciB0byBiZXR0ZXIgbWF0Y2ggaG93IHRoZSBzdHlsZQotICAg
ICAgICAvLyBzeXN0ZW0gcGlja3MgdGhlIHdpbm5pbmcgdmFsdWUgZm9yIGR1cGxpY2F0ZSBwcm9w
ZXJ0aWVzLgotICAgICAgICBmb3IgKHZhciBpID0gKHN0eWxlLmxlbmd0aCAtIDEpOyBpID49IDA7
IC0taSkgewotICAgICAgICAgICAgdmFyIG5hbWUgPSBzdHlsZVtpXTsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB1bmlxdWVQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICB2YXIgbmFtZSA9IHVuaXF1ZVByb3BlcnRpZXNbaV07CiAgICAgICAgICAgICB2YXIgc2hvcnRo
YW5kID0gc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CiAKLSAgICAgICAgICAgIGlm
IChuYW1lIGluIGZvdW5kUHJvcGVydGllcyB8fCAoc2hvcnRoYW5kICYmIHNob3J0aGFuZCBpbiBm
b3VuZFByb3BlcnRpZXMpKQorICAgICAgICAgICAgaWYgKHNob3J0aGFuZCAmJiBzaG9ydGhhbmQg
aW4gZm91bmRTaG9ydGhhbmRzKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICBmb3VuZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlOwotICAgICAgICAgICAgaWYgKHNob3J0
aGFuZCkKLSAgICAgICAgICAgICAgICBmb3VuZFByb3BlcnRpZXNbc2hvcnRoYW5kXSA9IHRydWU7
Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLmNvbXB1dGVkU3R5bGUpCi0gICAgICAgICAgICAgICAg
dmFyIGluaGVyaXRlZCA9ICh0aGlzLnVzZWRQcm9wZXJ0aWVzICYmICEoKHNob3J0aGFuZCB8fCBu
YW1lKSBpbiB0aGlzLnVzZWRQcm9wZXJ0aWVzKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICB2YXIgb3ZlcmxvYWRlZCA9ICgoc2hvcnRoYW5kIHx8IG5hbWUpIGluIHRoaXMu
b3ZlcmxvYWRlZFByb3BlcnRpZXMpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNob3J0aGFuZCAm
JiAhb3ZlcmxvYWRlZCkgewotICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIG91dCBpZiBhbGwg
dGhlIGluZGl2aWR1YWwgcHJvcGVydGllcyBvZiBhIHNob3J0aGFuZAotICAgICAgICAgICAgICAg
ICAgICAvLyBhcmUgb3ZlcmxvYWRlZCBhbmQgbWFyayB0aGUgc2hvcnRoYW5kIGFzIG92ZXJsb2Fk
ZWQgdG9vLgotCi0gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBvdmVybG9hZENvdW50ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCBzdHlsZS5sZW5ndGg7ICsraikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxlW2pdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0eWxlLmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0
eSkgIT09IHNob3J0aGFuZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5kaXZpZHVhbFByb3BlcnR5IGluIHRoaXMub3ZlcmxvYWRlZFByb3BlcnRpZXMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKytvdmVybG9hZENvdW50OwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWRlZCA9IChvdmVybG9hZENv
dW50ID49IGNvdW50KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2hvcnRo
YW5kKSB7CisgICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzW3Nob3J0aGFuZF0gPSB0cnVl
OworICAgICAgICAgICAgICAgIG5hbWUgPSBzaG9ydGhhbmQ7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHZhciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVs
ZW1lbnQoc3R5bGUsIChzaG9ydGhhbmQgfHwgbmFtZSksIHRoaXMuY29tcHV0ZWRTdHlsZSwgKHNo
b3J0aGFuZCA/IHRydWUgOiBmYWxzZSksIChvdmVybG9hZGVkIHx8IGluaGVyaXRlZCkpOwotICAg
ICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuaW5zZXJ0Q2hpbGQoaXRlbSwgMCk7
CisgICAgICAgICAgICB2YXIgaXNTaG9ydGhhbmQgPSAoc2hvcnRoYW5kID8gdHJ1ZSA6IGZhbHNl
KTsKKyAgICAgICAgICAgIHZhciBpbmhlcml0ZWQgPSB0aGlzLmlzUHJvcGVydHlJbmhlcml0ZWQo
bmFtZSk7CisgICAgICAgICAgICB2YXIgb3ZlcmxvYWRlZCA9IHRoaXMuaXNQcm9wZXJ0eU92ZXJs
b2FkZWQobmFtZSwgaXNTaG9ydGhhbmQpOworCisgICAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBX
ZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50KHN0eWxlLCBuYW1lLCBpc1Nob3J0
aGFuZCwgaW5oZXJpdGVkLCBvdmVybG9hZGVkKTsKKyAgICAgICAgICAgIHRoaXMucHJvcGVydGll
c1RyZWVPdXRsaW5lLmFwcGVuZENoaWxkKGl0ZW0pOwogICAgICAgICB9CiAgICAgfQogfQogCiBX
ZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuX19wcm90b19fID0g
V2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZTsKIAotV2ViSW5zcGVjdG9y
LlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHN0eWxlLCBuYW1lLCBjb21wdXRl
ZFN0eWxlLCBzaG9ydGhhbmQsIG92ZXJsb2FkZWRPckluaGVyaXRlZCkKK1dlYkluc3BlY3Rvci5T
dHlsZVByb3BlcnR5VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihzdHlsZSwgbmFtZSwgc2hvcnRoYW5k
LCBpbmhlcml0ZWQsIG92ZXJsb2FkZWQpCiB7Ci0gICAgLy8gVGhlc2UgcHJvcGVydGllcyBzaG91
bGQgYWx3YXlzIHNob3cgZm9yIENvbXB1dGVkIFN0eWxlCi0gICAgdmFyIGFsd2F5c1Nob3dDb21w
dXRlZFByb3BlcnRpZXMgPSB7ICJkaXNwbGF5IjogdHJ1ZSwgImhlaWdodCI6IHRydWUsICJ3aWR0
aCI6IHRydWUgfTsKLQotICAgIC8vICJOaWNrbmFtZXMiIGZvciBzb21lIGNvbW1vbiB2YWx1ZXMg
dGhhdCBhcmUgZWFzaWVyIHRvIHJlYWQuCi0gICAgdmFyIHZhbHVlTmlja25hbWVzID0gewotICAg
ICAgICAicmdiKDAsIDAsIDApIjogImJsYWNrIiwKLSAgICAgICAgIiMwMDAiOiAiYmxhY2siLAot
ICAgICAgICAiIzAwMDAwMCI6ICJibGFjayIsCi0gICAgICAgICJyZ2IoMjU1LCAyNTUsIDI1NSki
OiAid2hpdGUiLAotICAgICAgICAiI2ZmZiI6ICJ3aGl0ZSIsCi0gICAgICAgICIjZmZmZmZmIjog
IndoaXRlIiwKLSAgICAgICAgIiNGRkYiOiAid2hpdGUiLAotICAgICAgICAiI0ZGRkZGRiI6ICJ3
aGl0ZSIsCi0gICAgICAgICJyZ2JhKDAsIDAsIDAsIDApIjogInRyYW5zcGFyZW50IiwKLSAgICAg
ICAgInJnYigyNTUsIDAsIDApIjogInJlZCIsCi0gICAgICAgICJyZ2IoMCwgMjU1LCAwKSI6ICJs
aW1lIiwKLSAgICAgICAgInJnYigwLCAwLCAyNTUpIjogImJsdWUiLAotICAgICAgICAicmdiKDI1
NSwgMjU1LCAwKSI6ICJ5ZWxsb3ciLAotICAgICAgICAicmdiKDI1NSwgMCwgMjU1KSI6ICJtYWdl
bnRhIiwKLSAgICAgICAgInJnYigwLCAyNTUsIDI1NSkiOiAiY3lhbiIKLSAgICB9OwotCiAgICAg
dGhpcy5zdHlsZSA9IHN0eWxlOwogICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgdGhpcy5jb21w
dXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTsKICAgICB0aGlzLnNob3J0aGFuZCA9IHNob3J0aGFu
ZDsKLSAgICB0aGlzLm92ZXJsb2FkZWQgPSAoIWNvbXB1dGVkU3R5bGUgJiYgb3ZlcmxvYWRlZE9y
SW5oZXJpdGVkKTsKLSAgICB0aGlzLmluaGVyaXRlZCA9IChjb21wdXRlZFN0eWxlICYmIG92ZXJs
b2FkZWRPckluaGVyaXRlZCAmJiAhKG5hbWUgaW4gYWx3YXlzU2hvd0NvbXB1dGVkUHJvcGVydGll
cykpOworICAgIHRoaXMuX2luaGVyaXRlZCA9IGluaGVyaXRlZDsKKyAgICB0aGlzLl9vdmVybG9h
ZGVkID0gb3ZlcmxvYWRlZDsKIAotICAgIHZhciBwcmlvcml0eSA9IHN0eWxlLmdldFByb3BlcnR5
UHJpb3JpdHkobmFtZSk7Ci0gICAgdmFyIHZhbHVlID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShu
YW1lKTsKLSAgICB2YXIgaHRtbFZhbHVlID0gdmFsdWU7Ci0KLSAgICBpZiAocHJpb3JpdHkgJiYg
IXByaW9yaXR5Lmxlbmd0aCkKLSAgICAgICAgZGVsZXRlIHByaW9yaXR5OwotCi0gICAgaWYgKCFw
cmlvcml0eSAmJiBzaG9ydGhhbmQpIHsKLSAgICAgICAgLy8gUHJpb3JpdHkgaXMgbm90IHJldHVy
bmVkIGZvciBzaG9ydGhhbmRzLCBmaW5kIHRoZSBwcmlvcml0eSBmcm9tIGFuIGluZGl2aWR1YWwg
cHJvcGVydHkuCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGUubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIHZhciBpbmRpdmlkdWFsUHJvcGVydHkgPSBzdHlsZVtpXTsKLSAgICAg
ICAgICAgIGlmIChzdHlsZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkp
ICE9PSBuYW1lKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcHJpb3Jp
dHkgPSBzdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KGluZGl2aWR1YWxQcm9wZXJ0eSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKyAgICAvLyBQYXNzIGFuIGVtcHR5IHRp
dGxlLCB0aGUgdGl0bGUgZ2V0cyBtYWRlIGxhdGVyIGluIG9uYXR0YWNoLgorICAgIFRyZWVFbGVt
ZW50LmNhbGwodGhpcywgIiIsIG51bGwsIHNob3J0aGFuZCk7Cit9CisKK1dlYkluc3BlY3Rvci5T
dHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0geworICAgIGdldCBpbmhlcml0ZWQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2luaGVyaXRlZDsKKyAgICB9LAorCisgICAg
c2V0IGluaGVyaXRlZCh4KQorICAgIHsKKyAgICAgICAgaWYgKHggPT09IHRoaXMuX2luaGVyaXRl
ZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5faW5oZXJpdGVkID0geDsKKyAg
ICAgICAgdGhpcy51cGRhdGVTdGF0ZSgpOworICAgIH0sCisKKyAgICBnZXQgb3ZlcmxvYWRlZCgp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxvYWRlZDsKKyAgICB9LAorCisgICAg
c2V0IG92ZXJsb2FkZWQoeCkKKyAgICB7CisgICAgICAgIGlmICh4ID09PSB0aGlzLl9vdmVybG9h
ZGVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9vdmVybG9hZGVkID0geDsK
KyAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgpOworICAgIH0sCisKKyAgICBvbmF0dGFjaDogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy51cGRhdGVUaXRsZSgpOworICAgIH0sCisKKyAg
ICB1cGRhdGVUaXRsZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gIk5pY2tuYW1lcyIg
Zm9yIHNvbWUgY29tbW9uIHZhbHVlcyB0aGF0IGFyZSBlYXNpZXIgdG8gcmVhZC4KKyAgICAgICAg
dmFyIHZhbHVlTmlja25hbWVzID0geworICAgICAgICAgICAgInJnYigwLCAwLCAwKSI6ICJibGFj
ayIsCisgICAgICAgICAgICAiIzAwMCI6ICJibGFjayIsCisgICAgICAgICAgICAiIzAwMDAwMCI6
ICJibGFjayIsCisgICAgICAgICAgICAicmdiKDI1NSwgMjU1LCAyNTUpIjogIndoaXRlIiwKKyAg
ICAgICAgICAgICIjZmZmIjogIndoaXRlIiwKKyAgICAgICAgICAgICIjZmZmZmZmIjogIndoaXRl
IiwKKyAgICAgICAgICAgICIjRkZGIjogIndoaXRlIiwKKyAgICAgICAgICAgICIjRkZGRkZGIjog
IndoaXRlIiwKKyAgICAgICAgICAgICJyZ2JhKDAsIDAsIDAsIDApIjogInRyYW5zcGFyZW50IiwK
KyAgICAgICAgICAgICJyZ2IoMjU1LCAwLCAwKSI6ICJyZWQiLAorICAgICAgICAgICAgInJnYigw
LCAyNTUsIDApIjogImxpbWUiLAorICAgICAgICAgICAgInJnYigwLCAwLCAyNTUpIjogImJsdWUi
LAorICAgICAgICAgICAgInJnYigyNTUsIDI1NSwgMCkiOiAieWVsbG93IiwKKyAgICAgICAgICAg
ICJyZ2IoMjU1LCAwLCAyNTUpIjogIm1hZ2VudGEiLAorICAgICAgICAgICAgInJnYigwLCAyNTUs
IDI1NSkiOiAiY3lhbiIKKyAgICAgICAgfTsKIAotICAgIGlmICh2YWx1ZSkgewotICAgICAgICB2
YXIgdXJscyA9IHZhbHVlLm1hdGNoKC91cmxcKFteKV0rXCkvKTsKLSAgICAgICAgaWYgKHVybHMp
IHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgICAgIHZhciB1cmwgPSB1cmxzW2ldLnN1YnN0cmluZyg0LCB1cmxzW2ldLmxl
bmd0aCAtIDEpOwotICAgICAgICAgICAgICAgIGh0bWxWYWx1ZSA9IGh0bWxWYWx1ZS5yZXBsYWNl
KHVybHNbaV0sICJ1cmwoIiArIFdlYkluc3BlY3Rvci5saW5raWZ5VVJMKHVybCkgKyAiKSIpOwor
ICAgICAgICB2YXIgcHJpb3JpdHkgPSAodGhpcy5zaG9ydGhhbmQgPyB0aGlzLnN0eWxlLmdldFNo
b3J0aGFuZFByaW9yaXR5KHRoaXMubmFtZSkgOiB0aGlzLnN0eWxlLmdldFByb3BlcnR5UHJpb3Jp
dHkodGhpcy5uYW1lKSk7CisgICAgICAgIHZhciB2YWx1ZSA9ICh0aGlzLnNob3J0aGFuZCA/IHRo
aXMuc3R5bGUuZ2V0U2hvcnRoYW5kVmFsdWUodGhpcy5uYW1lKSA6IHRoaXMuc3R5bGUuZ2V0UHJv
cGVydHlWYWx1ZSh0aGlzLm5hbWUpKTsKKyAgICAgICAgdmFyIGh0bWxWYWx1ZSA9IHZhbHVlOwor
CisgICAgICAgIGlmIChwcmlvcml0eSAmJiAhcHJpb3JpdHkubGVuZ3RoKQorICAgICAgICAgICAg
ZGVsZXRlIHByaW9yaXR5OworICAgICAgICBpZiAocHJpb3JpdHkpCisgICAgICAgICAgICBwcmlv
cml0eSA9ICIhIiArIHByaW9yaXR5OworCisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAg
ICAgdmFyIHVybHMgPSB2YWx1ZS5tYXRjaCgvdXJsXChbXildK1wpLyk7CisgICAgICAgICAgICBp
ZiAodXJscykgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXJscy5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gdXJsc1tpXS5zdWJzdHJp
bmcoNCwgdXJsc1tpXS5sZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgaHRtbFZhbHVl
ID0gaHRtbFZhbHVlLnJlcGxhY2UodXJsc1tpXSwgInVybCgiICsgV2ViSW5zcGVjdG9yLmxpbmtp
ZnlVUkwodXJsKSArICIpIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW4gdmFsdWVOaWNrbmFtZXMpCisgICAgICAg
ICAgICAgICAgICAgIGh0bWxWYWx1ZSA9IHZhbHVlTmlja25hbWVzW3ZhbHVlXTsKKyAgICAgICAg
ICAgICAgICBodG1sVmFsdWUgPSBodG1sVmFsdWUuZXNjYXBlSFRNTCgpOwogICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHZhbHVlIGluIHZhbHVlTmlja25h
bWVzKQotICAgICAgICAgICAgICAgIGh0bWxWYWx1ZSA9IHZhbHVlTmlja25hbWVzW3ZhbHVlXTsK
LSAgICAgICAgICAgIGh0bWxWYWx1ZSA9IGh0bWxWYWx1ZS5lc2NhcGVIVE1MKCk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKHNob3J0aGFuZCkgewotICAgICAgICAvLyBTb21lIHNob3J0aGFu
ZHMgKGxpa2UgYm9yZGVyKSByZXR1cm4gYSBudWxsIHZhbHVlLCBzbyBjb21wdXRlIGEgc2hvcnRo
YW5kIHZhbHVlLgotICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgyMyBpcyBmaXhlZC4KLQotICAgICAgICB2
YWx1ZSA9ICIiOwotCi0gICAgICAgIHZhciBmb3VuZFByb3BlcnRpZXMgPSB7fTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZS5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFy
IGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxlW2ldOwotICAgICAgICAgICAgaWYgKHN0eWxlLmdl
dFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT09IG5hbWUgfHwgaW5kaXZp
ZHVhbFByb3BlcnR5IGluIGZvdW5kUHJvcGVydGllcykKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBodG1sVmFsdWUgPSB2YWx1ZSA9ICIiOwog
Ci0gICAgICAgICAgICB2YXIgaW5kaXZpZHVhbFZhbHVlID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1
ZShpbmRpdmlkdWFsUHJvcGVydHkpOwotICAgICAgICAgICAgaWYgKHN0eWxlLmlzUHJvcGVydHlJ
bXBsaWNpdChpbmRpdmlkdWFsUHJvcGVydHkpIHx8IGluZGl2aWR1YWxWYWx1ZSA9PT0gImluaXRp
YWwiKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB0aGlzLnVwZGF0ZVN0YXRl
KCk7CisKKyAgICAgICAgdmFyIG5hbWVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3BhbiIpOworICAgICAgICBuYW1lRWxlbWVudC5jbGFzc05hbWUgPSAibmFtZSI7CisgICAgICAg
IG5hbWVFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5uYW1lOworCisgICAgICAgIHZhciB2YWx1
ZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIHZhbHVl
RWxlbWVudC5jbGFzc05hbWUgPSAidmFsdWUiOworICAgICAgICB2YWx1ZUVsZW1lbnQuaW5uZXJI
VE1MID0gaHRtbFZhbHVlOworCisgICAgICAgIGlmIChwcmlvcml0eSkgeworICAgICAgICAgICAg
dmFyIHByaW9yaXR5RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAg
ICAgICAgICAgIHByaW9yaXR5RWxlbWVudC5jbGFzc05hbWUgPSAicHJpb3JpdHkiOworICAgICAg
ICAgICAgcHJpb3JpdHlFbGVtZW50LnRleHRDb250ZW50ID0gcHJpb3JpdHk7CisgICAgICAgIH0K
IAotICAgICAgICAgICAgZm91bmRQcm9wZXJ0aWVzW2luZGl2aWR1YWxQcm9wZXJ0eV0gPSB0cnVl
OworICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwogCi0gICAg
ICAgICAgICBpZiAodmFsdWUubGVuZ3RoKQotICAgICAgICAgICAgICAgIHZhbHVlICs9ICIgIjsK
LSAgICAgICAgICAgIHZhbHVlICs9IGluZGl2aWR1YWxWYWx1ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGh0bWxWYWx1ZSA9IHZhbHVlLmVzY2FwZUhUTUwoKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
aHRtbFZhbHVlID0gdmFsdWUgPSAiIjsKLQotICAgIHZhciBjbGFzc2VzID0gW107Ci0gICAgaWYg
KCFjb21wdXRlZFN0eWxlICYmIChzdHlsZS5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSkgfHwgdmFs
dWUgPT09ICJpbml0aWFsIikpCi0gICAgICAgIGNsYXNzZXMucHVzaCgiaW1wbGljaXQiKTsKLSAg
ICBpZiAodGhpcy5pbmhlcml0ZWQpCi0gICAgICAgIGNsYXNzZXMucHVzaCgiaW5oZXJpdGVkIik7
Ci0gICAgaWYgKHRoaXMub3ZlcmxvYWRlZCkKLSAgICAgICAgY2xhc3Nlcy5wdXNoKCJvdmVybG9h
ZGVkIik7Ci0KLSAgICB2YXIgdGl0bGUgPSAiIjsKLSAgICBpZiAoY2xhc3Nlcy5sZW5ndGgpCi0g
ICAgICAgIHRpdGxlICs9ICI8c3BhbiBjbGFzcz1cIiIgKyBjbGFzc2VzLmpvaW4oIiAiKSArICJc
Ij4iOwotCi0gICAgdGl0bGUgKz0gIjxzcGFuIGNsYXNzPVwibmFtZVwiPiIgKyBuYW1lLmVzY2Fw
ZUhUTUwoKSArICI8L3NwYW4+OiAiOwotICAgIHRpdGxlICs9ICI8c3BhbiBjbGFzcz1cInZhbHVl
XCI+IiArIGh0bWxWYWx1ZTsKLSAgICBpZiAocHJpb3JpdHkpCi0gICAgICAgIHRpdGxlICs9ICIg
ISIgKyBwcmlvcml0eTsKLSAgICB0aXRsZSArPSAiPC9zcGFuPjsiOwotCi0gICAgaWYgKHZhbHVl
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIGRvc2VuJ3QgY2F0Y2gga2V5d29yZCBiYXNlZCBj
b2xvcnMgbGlrZSBibGFjayBhbmQgd2hpdGUKLSAgICAgICAgdmFyIGNvbG9ycyA9IHZhbHVlLm1h
dGNoKC8oKHJnYnxoc2wpYT9cKFteKV0rXCkpfCgjWzAtOWEtZkEtRl17Nn0pfCgjWzAtOWEtZkEt
Rl17M30pL2cpOwotICAgICAgICBpZiAoY29sb3JzKSB7Ci0gICAgICAgICAgICB2YXIgY29sb3Jz
TGVuZ3RoID0gY29sb3JzLmxlbmd0aDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y29sb3JzTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgdGl0bGUgKz0gIjxzcGFuIGNsYXNz
PVwic3dhdGNoXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAiICsgY29sb3JzW2ldICsgIlwi
Pjwvc3Bhbj4iOworICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hcHBlbmRDaGlsZChuYW1l
RWxlbWVudCk7CisgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKCI6ICIpKTsKKyAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQu
YXBwZW5kQ2hpbGQodmFsdWVFbGVtZW50KTsKKworICAgICAgICBpZiAocHJpb3JpdHlFbGVtZW50
KSB7CisgICAgICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKKyAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50
LmFwcGVuZENoaWxkKHByaW9yaXR5RWxlbWVudCk7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBp
ZiAoY2xhc3Nlcy5sZW5ndGgpCi0gICAgICAgIHRpdGxlICs9ICI8L3NwYW4+IjsKKyAgICAgICAg
dGhpcy5saXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
IjsiKSk7CiAKLSAgICBUcmVlRWxlbWVudC5jYWxsKHRoaXMsIHRpdGxlLCBudWxsLCBzaG9ydGhh
bmQpOworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIGRv
c2VuJ3QgY2F0Y2gga2V5d29yZCBiYXNlZCBjb2xvcnMgbGlrZSBibGFjayBhbmQgd2hpdGUKKyAg
ICAgICAgICAgIHZhciBjb2xvcnMgPSB2YWx1ZS5tYXRjaCgvKChyZ2J8aHNsKWE/XChbXildK1wp
KXwoI1swLTlhLWZBLUZdezZ9KXwoI1swLTlhLWZBLUZdezN9KS9nKTsKKyAgICAgICAgICAgIGlm
IChjb2xvcnMpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29sb3JzTGVuZ3RoID0gY29sb3JzLmxl
bmd0aDsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yc0xlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzd2F0Y2hFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgICAgICAgICBzd2F0Y2hFbGVtZW50
LmNsYXNzTmFtZSA9ICJzd2F0Y2giOworICAgICAgICAgICAgICAgICAgICBzd2F0Y2hFbGVtZW50
LnN0eWxlLnNldFByb3BlcnR5KCJiYWNrZ3JvdW5kLWNvbG9yIiwgY29sb3JzW2ldKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hpbGQoc3dhdGNoRWxl
bWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAg
ICB0aGlzLnRvb2x0aXAgPSBuYW1lICsgIjogIiArICh2YWx1ZU5pY2tuYW1lc1t2YWx1ZV0gfHwg
dmFsdWUpICsgKHByaW9yaXR5ID8gIiAhIiArIHByaW9yaXR5IDogIiIpOwotfQorICAgICAgICB0
aGlzLnRvb2x0aXAgPSB0aGlzLm5hbWUgKyAiOiAiICsgKHZhbHVlTmlja25hbWVzW3ZhbHVlXSB8
fCB2YWx1ZSkgKyAocHJpb3JpdHkgPyAiICIgKyBwcmlvcml0eSA6ICIiKTsKKyAgICB9LAorCisg
ICAgdXBkYXRlU3RhdGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5saXN0
SXRlbUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHZhbHVlID0g
KHRoaXMuc2hvcnRoYW5kID8gdGhpcy5zdHlsZS5nZXRTaG9ydGhhbmRWYWx1ZSh0aGlzLm5hbWUp
IDogdGhpcy5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRoaXMubmFtZSkpOworICAgICAgICBpZiAo
dGhpcy5zdHlsZS5pc1Byb3BlcnR5SW1wbGljaXQodGhpcy5uYW1lKSB8fCB2YWx1ZSA9PT0gImlu
aXRpYWwiKQorICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVDbGFzcygi
aW1wbGljaXQiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1l
bnQucmVtb3ZlU3R5bGVDbGFzcygiaW1wbGljaXQiKTsKKworICAgICAgICBpZiAodGhpcy5pbmhl
cml0ZWQpCisgICAgICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJp
bmhlcml0ZWQiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1l
bnQucmVtb3ZlU3R5bGVDbGFzcygiaW5oZXJpdGVkIik7CisKKyAgICAgICAgaWYgKHRoaXMub3Zl
cmxvYWRlZCkKKyAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3Mo
Im92ZXJsb2FkZWQiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVs
ZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygib3ZlcmxvYWRlZCIpOworICAgIH0sCiAKLVdlYkluc3Bl
Y3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgIG9ucG9wdWxh
dGU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIC8vIE9ubHkgcG9wdWxhdGUgb25jZSBhbmQg
aWYgdGhpcyBwcm9wZXJ0eSBpcyBhIHNob3J0aGFuZC4KICAgICAgICAgaWYgKHRoaXMuY2hpbGRy
ZW4ubGVuZ3RoIHx8ICF0aGlzLnNob3J0aGFuZCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICB2YXIgZm91bmRQcm9wZXJ0aWVzID0ge307CisgICAgICAgIHZhciBsb25naGFuZFByb3Bl
cnRpZXMgPSB0aGlzLnN0eWxlLmdldExvbmdoYW5kUHJvcGVydGllcyh0aGlzLm5hbWUpOworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kUHJvcGVydGllcy5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgdmFyIG5hbWUgPSBsb25naGFuZFByb3BlcnRpZXNbaV07CisKKyAgICAg
ICAgICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICB2
YXIgaW5oZXJpdGVkID0gdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLmlzUHJvcGVydHlJbmhlcml0
ZWQobmFtZSk7CisgICAgICAgICAgICAgICAgdmFyIG92ZXJsb2FkZWQgPSB0aGlzLnRyZWVPdXRs
aW5lLnNlY3Rpb24uaXNQcm9wZXJ0eU92ZXJsb2FkZWQobmFtZSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZhciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJl
ZUVsZW1lbnQodGhpcy5zdHlsZSwgbmFtZSwgZmFsc2UsIGluaGVyaXRlZCwgb3ZlcmxvYWRlZCk7
CisgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGl0ZW0pOworICAgICAgICB9CisgICAgfSwK
IAotICAgICAgICAvLyBBZGQgcHJvcGVydGllcyBpbiByZXZlcnNlIG9yZGVyIHRvIGJldHRlciBt
YXRjaCBob3cgdGhlIHN0eWxlCi0gICAgICAgIC8vIHN5c3RlbSBwaWNrcyB0aGUgd2lubmluZyB2
YWx1ZSBmb3IgZHVwbGljYXRlIHByb3BlcnRpZXMuCi0gICAgICAgIGZvciAodmFyIGkgPSAodGhp
cy5zdHlsZS5sZW5ndGggLSAxKTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIHZhciBuYW1l
ID0gdGhpcy5zdHlsZVtpXTsKLSAgICAgICAgICAgIHZhciBzaG9ydGhhbmQgPSB0aGlzLnN0eWxl
LmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOworICAgIG9uZGJsY2xpY2s6IGZ1bmN0aW9uKGVs
ZW1lbnQsIGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5zdGFydEVkaXRpbmcoZXZlbnQudGFy
Z2V0KTsKKyAgICB9LAogCi0gICAgICAgICAgICBpZiAoc2hvcnRoYW5kICE9PSB0aGlzLm5hbWUg
fHwgbmFtZSBpbiBmb3VuZFByb3BlcnRpZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgc3RhcnRFZGl0aW5nOiBmdW5jdGlvbihzZWxlY3RFbGVtZW50KQorICAgIHsKKyAgICAgICAg
Ly8gRklYTUU6IHdlIGRvbid0IGFsbG93IGVkaXRpbmcgb2YgbG9uZ2hhbmQgcHJvcGVydGllcyB1
bmRlciBhIHNob3J0aGFuZCByaWdodCBub3cuCisgICAgICAgIGlmICh0aGlzLnBhcmVudC5zaG9y
dGhhbmQpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGZvdW5kUHJvcGVydGll
c1tuYW1lXSA9IHRydWU7CisgICAgICAgIGlmICh0aGlzLmVkaXRpbmcgfHwgKHRoaXMudHJlZU91
dGxpbmUuc2VjdGlvbiAmJiAhdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLmVkaXRhYmxlKSkKKyAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgaWYgKHRoaXMuY29tcHV0ZWRTdHlsZSkK
LSAgICAgICAgICAgICAgICB2YXIgaW5oZXJpdGVkID0gKHRoaXMudHJlZU91dGxpbmUuc2VjdGlv
bi51c2VkUHJvcGVydGllcyAmJiAhKG5hbWUgaW4gdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnVz
ZWRQcm9wZXJ0aWVzKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdmFyIG92
ZXJsb2FkZWQgPSAobmFtZSBpbiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24ub3ZlcmxvYWRlZFBy
b3BlcnRpZXMpOworICAgICAgICB0aGlzLmVkaXRpbmcgPSB0cnVlOworICAgICAgICB0aGlzLnBy
ZXZpb3VzVGV4dENvbnRlbnQgPSB0aGlzLmxpc3RJdGVtRWxlbWVudC50ZXh0Q29udGVudDsKIAot
ICAgICAgICAgICAgdmFyIGl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVl
RWxlbWVudCh0aGlzLnN0eWxlLCBuYW1lLCB0aGlzLmNvbXB1dGVkU3R5bGUsIGZhbHNlLCAoaW5o
ZXJpdGVkIHx8IG92ZXJsb2FkZWQpKTsKLSAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQoaXRl
bSwgMCk7CisgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3MoImZvY3Vz
YWJsZSIpOworICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJlZGl0
aW5nIik7CisgICAgICAgIHRoaXMud2FzRXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkOworICAgICAg
ICBpZiAodGhpcy5leHBhbmRlZCkKKyAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTsKKyAgICAg
ICAgLy8gTGllIGFib3V0IG91dCBjaGlsZHJlbiB0byBwcmV2ZW50IHRvZ2dsaW5nIG9uIGNsaWNr
LgorICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gZmFsc2U7CisKKyAgICAgICAgaWYgKCFzZWxl
Y3RFbGVtZW50KQorICAgICAgICAgICAgc2VsZWN0RWxlbWVudCA9IHRoaXMubGlzdEl0ZW1FbGVt
ZW50OworCisgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KHNl
bGVjdEVsZW1lbnQsIDAsIHNlbGVjdEVsZW1lbnQsIDEpOworCisgICAgICAgIHZhciB0cmVlRWxl
bWVudCA9IHRoaXM7CisgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmJsdXJyZWQgPSBmdW5j
dGlvbigpIHsgdHJlZUVsZW1lbnQuZW5kRWRpdGluZygpIH07CisgICAgICAgIHRoaXMubGlzdEl0
ZW1FbGVtZW50LmhhbmRsZUtleUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAg
IGlmIChldmVudC5rZXlJZGVudGlmaWVyID09PSAiRW50ZXIiKQorICAgICAgICAgICAgICAgIHRy
ZWVFbGVtZW50LmVuZEVkaXRpbmcoKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnByZXZp
b3VzRm9jdXNFbGVtZW50ID0gV2ViSW5zcGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQ7CisgICAg
ICAgIFdlYkluc3BlY3Rvci5jdXJyZW50Rm9jdXNFbGVtZW50ID0gdGhpcy5saXN0SXRlbUVsZW1l
bnQ7CisgICAgfSwKKworICAgIGVuZEVkaXRpbmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IC8vIFJldmVydCB0aGUgY2hhbmdlcyBkb25lIGluIHN0YXJ0RWRpdGluZygpLgorICAgICAgICBk
ZWxldGUgdGhpcy5saXN0SXRlbUVsZW1lbnQuYmx1cnJlZDsKKyAgICAgICAgZGVsZXRlIHRoaXMu
bGlzdEl0ZW1FbGVtZW50LmhhbmRsZUtleUV2ZW50OworCisgICAgICAgIFdlYkluc3BlY3Rvci5j
dXJyZW50Rm9jdXNFbGVtZW50ID0gdGhpcy5wcmV2aW91c0ZvY3VzRWxlbWVudDsKKyAgICAgICAg
ZGVsZXRlIHRoaXMucHJldmlvdXNGb2N1c0VsZW1lbnQ7CisKKyAgICAgICAgZGVsZXRlIHRoaXMu
ZWRpdGluZzsKKworICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNz
KCJmb2N1c2FibGUiKTsKKyAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQucmVtb3ZlU3R5bGVD
bGFzcygiZWRpdGluZyIpOworICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gKHRoaXMuY2hpbGRy
ZW4ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlKTsKKyAgICAgICAgaWYgKHRoaXMud2FzRXhwYW5kZWQp
IHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLndhc0V4cGFuZGVkOworICAgICAgICAgICAgdGhp
cy5leHBhbmQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBwcmV2aW91c0NvbnRlbnQgPSB0
aGlzLnByZXZpb3VzVGV4dENvbnRlbnQ7CisgICAgICAgIGRlbGV0ZSB0aGlzLnByZXZpb3VzVGV4
dENvbnRlbnQ7CisKKyAgICAgICAgdmFyIHVzZXJJbnB1dCA9IHRoaXMubGlzdEl0ZW1FbGVtZW50
LnRleHRDb250ZW50OworICAgICAgICBpZiAodXNlcklucHV0ID09PSBwcmV2aW91c0NvbnRlbnQp
CisgICAgICAgICAgICByZXR1cm47IC8vIG5vdGhpbmcgY2hhbmdlZCwgc28gZG8gbm90aGluZyBl
bHNlCisKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBmcm9tIHRoZSBy
ZWFsIHN0eWxlIGRlY2xhcmF0aW9uLCBpZiB0aGlzIHJlcHJlc2VudHMKKyAgICAgICAgLy8gYSBz
aG9ydGhhbmQgcmVtb3ZlIGFsbCB0aGUgbG9uZ2hhbmQgcHJvcGVydGllcy4KKyAgICAgICAgaWYg
KHRoaXMuc2hvcnRoYW5kKSB7CisgICAgICAgICAgICB2YXIgbG9uZ2hhbmRQcm9wZXJ0aWVzID0g
dGhpcy5zdHlsZS5nZXRMb25naGFuZFByb3BlcnRpZXModGhpcy5uYW1lKTsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2hhbmRQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobG9uZ2hhbmRQcm9wZXJ0aWVz
W2ldKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3Bl
cnR5KHRoaXMubmFtZSk7CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGVsZW1lbnQgdG8gcGFy
c2UgdGhlIHVzZXIgaW5wdXQgQ1NTLgorICAgICAgICB2YXIgcGFyc2VFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICBwYXJzZUVsZW1lbnQuc2V0QXR0cmli
dXRlKCJzdHlsZSIsIHVzZXJJbnB1dCk7CisKKyAgICAgICAgY29uc29sZS5sb2codXNlcklucHV0
ICsgIiAoIiArIHVzZXJJbnB1dC5sZW5ndGggKyAiKSIpOworICAgICAgICBjb25zb2xlLmxvZyhw
YXJzZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpICsgIiAoIiArIHBhcnNlRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoInN0eWxlIikubGVuZ3RoICsgIikiKTsKKyAgICAgICAgY29uc29sZS5sb2co
cGFyc2VFbGVtZW50LnN0eWxlLmxlbmd0aCk7CisKKyAgICAgICAgdmFyIHVzZXJJbnB1dFN0eWxl
ID0gcGFyc2VFbGVtZW50LnN0eWxlOworICAgICAgICBpZiAodXNlcklucHV0U3R5bGUubGVuZ3Ro
KSB7CisgICAgICAgICAgICAvLyBJdGVyYXRlIG9mIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSB0ZXN0
IGVsZW1lbnQncyBzdHlsZSBkZWNsYXJhdGlvbiBhbmQKKyAgICAgICAgICAgIC8vIGFkZCB0aGVt
IHRvIHRoZSByZWFsIHN0eWxlIGRlY2xhcmF0aW9uLiBXZSB0YWtlIGNhcmUgdG8gbW92ZSBzaG9y
dGhhbmRzLgorCisgICAgICAgICAgICB2YXIgZm91bmRTaG9ydGhhbmRzID0ge307CisgICAgICAg
ICAgICB2YXIgdW5pcXVlUHJvcGVydGllcyA9IHVzZXJJbnB1dFN0eWxlLmdldFVuaXF1ZVByb3Bl
cnRpZXMoKTsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlxdWVQcm9wZXJ0
aWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB1bmlxdWVQcm9w
ZXJ0aWVzW2ldOworICAgICAgICAgICAgICAgIHZhciBzaG9ydGhhbmQgPSB1c2VySW5wdXRTdHls
ZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKKworICAgICAgICAgICAgICAgIGlmIChzaG9y
dGhhbmQgJiYgc2hvcnRoYW5kIGluIGZvdW5kU2hvcnRoYW5kcykKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBpZiAoc2hvcnRoYW5kKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHVzZXJJbnB1dFN0eWxlLmdldFNob3J0aGFuZFZhbHVl
KHNob3J0aGFuZCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBwcmlvcml0eSA9IHVzZXJJbnB1
dFN0eWxlLmdldFNob3J0aGFuZFByaW9yaXR5KHNob3J0aGFuZCk7CisgICAgICAgICAgICAgICAg
ICAgIGZvdW5kU2hvcnRoYW5kc1tzaG9ydGhhbmRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB1c2VySW5wdXRTdHlsZS5n
ZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOworICAgICAgICAgICAgICAgICAgICB2YXIgcHJpb3JpdHkg
PSB1c2VySW5wdXRTdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgcHJvcGVydHkgb24gdGhlIHJlYWwg
c3R5bGUgZGVjbGFyYXRpb24uCisgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0
eSgoc2hvcnRoYW5kIHx8IG5hbWUpLCB2YWx1ZSwgcHJpb3JpdHkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAodGhpcy50cmVlT3V0bGluZS5zZWN0aW9uICYmIHRoaXMudHJlZU91
dGxpbmUuc2VjdGlvbi5wYW5lKQorICAgICAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUuc2Vj
dGlvbi5wYW5lLnVwZGF0ZShudWxsLCB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24pOworICAgICAg
ICAgICAgZWxzZSBpZiAodGhpcy50cmVlT3V0bGluZS5zZWN0aW9uKQorICAgICAgICAgICAgICAg
IHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi51cGRhdGUodHJ1ZSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUaXRsZSgpOyAvLyBGSVhNRTogdGhpcyB3aWxs
IG5vdCBzaG93IG5ldyBwcm9wZXJ0aWVzLiBCdXQgd2UgZG9uJ3QgaGl0IGhpcyBjYXNlIHlldC4K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lLnNlY3Rp
b24gJiYgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUpCisgICAgICAgICAgICAgICAgdGhp
cy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUudXBkYXRlKCk7CisgICAgICAgICAgICB0aGlzLnBh
cmVudC5yZW1vdmVDaGlsZCh0aGlzKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IHBhZ2Uv
aW5zcGVjdG9yL2luc3BlY3Rvci5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9pbnNwZWN0b3IvaW5z
cGVjdG9yLmNzcwkocmV2aXNpb24gMjc0OTUpCisrKyBwYWdlL2luc3BlY3Rvci9pbnNwZWN0b3Iu
Y3NzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIxLDcgKzEwMjEsNyBAQCBib2R5LmluYWN0aXZlICNz
aWRlYmFyIGxpLnNlbGVjdGVkIHsKICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKIH0K
IAotLmZvY3VzZWQgLmNvbnRlbnQudHJlZSBsaS5zZWxlY3RlZCAqIHsKK2JvZHk6bm90KC5pbmFj
dGl2ZSkgLmZvY3VzZWQgLmNvbnRlbnQudHJlZSBsaS5zZWxlY3RlZCAqIHsKICAgICBjb2xvcjog
aW5oZXJpdDsKIH0KIApAQCAtMTEwMyw2ICsxMTAzLDcgQEAgYm9keS5pbmFjdGl2ZSAjc2lkZWJh
ciBsaS5zZWxlY3RlZCB7CiAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgb3ZlcmZs
b3c6IGhpZGRlbjsKICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OworICAgIG91dGxpbmU6
IG5vbmU7CiB9CiAKIC5zZWN0aW9uIC5wcm9wZXJ0aWVzIGxpLnBhcmVudCB7CkBAIC0xMTM5LDIx
ICsxMTQwLDM4IEBAIGJvZHkuaW5hY3RpdmUgI3NpZGViYXIgbGkuc2VsZWN0ZWQgewogICAgIG1h
cmdpbi10b3A6IDFweDsKIH0KIAorLnNlY3Rpb24gLnByb3BlcnRpZXMgbGkuZWRpdGluZyB7Cisg
ICAgLXdlYmtpdC1ib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIC41KSAzcHggM3B4IDRweDsKKyAg
ICBvdXRsaW5lOiAxcHggc29saWQgcmdiKDY2JSwgNjYlLCA2NiUpOworICAgIGJhY2tncm91bmQt
Y29sb3I6IHdoaXRlOworICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGUtcGxhaW50
ZXh0LW9ubHk7CisgICAgdGV4dC1vdmVyZmxvdzogY2xpcDsKKyAgICBtYXJnaW4tbGVmdDogOHB4
OworICAgIHBhZGRpbmctbGVmdDogMnB4OworICAgIG1hcmdpbi1ib3R0b206IC0xcHg7CisgICAg
cGFkZGluZy1ib3R0b206IDFweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFu
dDsKKyAgICBvcGFjaXR5OiAxLjAgIWltcG9ydGFudDsKK30KKworLnNlY3Rpb24gLnByb3BlcnRp
ZXMgbGkuZWRpdGluZy5wYXJlbnQ6OmJlZm9yZSB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKwor
LnNlY3Rpb24gLnByb3BlcnRpZXMgbGkuZWRpdGluZyAqIHsKKyAgICBjb2xvcjogYmxhY2sgIWlt
cG9ydGFudDsKK30KKwogLnNlY3Rpb24gLnByb3BlcnRpZXMgLm92ZXJsb2FkZWQgewogICAgIHRl
eHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogfQogCi0uc2VjdGlvbiAucHJvcGVydGllcyAu
aW1wbGljaXQgeworLnNlY3Rpb24gLnByb3BlcnRpZXMgLmltcGxpY2l0LCAuc2VjdGlvbiAucHJv
cGVydGllcyAuaW5oZXJpdGVkIHsKICAgICBvcGFjaXR5OiAwLjU7CiB9CiAKLS5zZWN0aW9uIC5w
cm9wZXJ0aWVzIC5pbmhlcml0ZWQgeworLnNlY3Rpb246bm90KC5zaG93LWluaGVyaXRlZCkgLnBy
b3BlcnRpZXMgLmluaGVyaXRlZCB7CiAgICAgZGlzcGxheTogbm9uZTsKLSAgICBvcGFjaXR5OiAw
LjU7Ci19Ci0KLS5zZWN0aW9uLnNob3ctaW5oZXJpdGVkIC5wcm9wZXJ0aWVzIC5pbmhlcml0ZWQg
ewotICAgIGRpc3BsYXk6IGlubGluZTsKIH0KIAogLnNlY3Rpb24gLnByb3BlcnRpZXMgLm5hbWUg
ewpAQCAtMTE2NCw2ICsxMTgyLDEwIEBAIGJvZHkuaW5hY3RpdmUgI3NpZGViYXIgbGkuc2VsZWN0
ZWQgewogICAgIGNvbG9yOiBibHVlOwogfQogCisuc2VjdGlvbiAucHJvcGVydGllcyAucHJpb3Jp
dHkgeworICAgIGNvbG9yOiByZ2IoMTI4LCAwLCAwKTsKK30KKwogLnNlY3Rpb24gLnByb3BlcnRp
ZXMgLmtleXdvcmQgewogICAgIGNvbG9yOiByZ2IoMTM2LCAxOSwgNzkpOwogfQpJbmRleDogcGFn
ZS9pbnNwZWN0b3IvaW5zcGVjdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvaW5zcGVjdG9yL2lu
c3BlY3Rvci5qcwkocmV2aXNpb24gMjc0OTUpCisrKyBwYWdlL2luc3BlY3Rvci9pbnNwZWN0b3Iu
anMJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDggQEAgdmFyIFdlYkluc3BlY3RvciA9IHsK
ICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRGb2N1c0VsZW1lbnQpIHsKICAgICAgICAgICAgIHRo
aXMuX2N1cnJlbnRGb2N1c0VsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiZm9jdXNlZCIpOwogICAg
ICAgICAgICAgdGhpcy5fY3VycmVudEZvY3VzRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJibHVycmVk
Iik7CisgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudEZvY3VzRWxlbWVudC5ibHVycmVkKQor
ICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGb2N1c0VsZW1lbnQuYmx1cnJlZCgpOwogICAg
ICAgICB9CiAKICAgICAgICAgdGhpcy5fY3VycmVudEZvY3VzRWxlbWVudCA9IHg7CkBAIC05NSw2
ICs5Nyw4IEBAIHZhciBXZWJJbnNwZWN0b3IgPSB7CiAgICAgICAgIGlmICh4KSB7CiAgICAgICAg
ICAgICB4LmFkZFN0eWxlQ2xhc3MoImZvY3VzZWQiKTsKICAgICAgICAgICAgIHgucmVtb3ZlU3R5
bGVDbGFzcygiYmx1cnJlZCIpOworICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRGb2N1c0Vs
ZW1lbnQuZm9jdXNlZCkKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Rm9jdXNFbGVtZW50
LmZvY3VzZWQoKTsKICAgICAgICAgfQogICAgIH0sCiAKQEAgLTMxOSw5ICszMjMsMTEgQEAgV2Vi
SW5zcGVjdG9yLmRvY3VtZW50Q2xpY2sgPSBmdW5jdGlvbihldgogCiBXZWJJbnNwZWN0b3IuZG9j
dW1lbnRLZXlwcmVzcyA9IGZ1bmN0aW9uKGV2ZW50KQogewotICAgIGlmICghdGhpcy5jdXJyZW50
Rm9jdXNFbGVtZW50IHx8ICF0aGlzLmN1cnJlbnRGb2N1c0VsZW1lbnQuaWQgfHwgIXRoaXMuY3Vy
cmVudEZvY3VzRWxlbWVudC5pZC5sZW5ndGgpCisgICAgaWYgKCF0aGlzLmN1cnJlbnRGb2N1c0Vs
ZW1lbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAodGhpcy5jdXJyZW50Rm9jdXNFbGVtZW50
LmlkICsgIktleXByZXNzIiBpbiBXZWJJbnNwZWN0b3IpCisgICAgaWYgKHRoaXMuY3VycmVudEZv
Y3VzRWxlbWVudC5oYW5kbGVLZXlFdmVudCkKKyAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNFbGVt
ZW50LmhhbmRsZUtleUV2ZW50KGV2ZW50KTsKKyAgICBlbHNlIGlmICh0aGlzLmN1cnJlbnRGb2N1
c0VsZW1lbnQuaWQgJiYgdGhpcy5jdXJyZW50Rm9jdXNFbGVtZW50LmlkLmxlbmd0aCAmJiBXZWJJ
bnNwZWN0b3JbdGhpcy5jdXJyZW50Rm9jdXNFbGVtZW50LmlkICsgIktleXByZXNzIl0pCiAgICAg
ICAgIFdlYkluc3BlY3Rvclt0aGlzLmN1cnJlbnRGb2N1c0VsZW1lbnQuaWQgKyAiS2V5cHJlc3Mi
XShldmVudCk7CiB9CiAKQEAgLTM5MSw3ICszOTcsNyBAQCBXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0
eWxlID0gZnVuY3Rpb24oYW5pCiAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGFuaW1hdGlvbltr
ZXldOwogICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAic3RhcnQiKQogICAgICAgICAgICAg
ICAgIHN0YXJ0ID0gYW5pbWF0aW9uW2tleV07Ci0gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT0g
ImN1cnJlbnQiKQorICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSAiY3VycmVudCIpCiAgICAg
ICAgICAgICAgICAgY3VycmVudCA9IGFuaW1hdGlvbltrZXldOwogICAgICAgICAgICAgZWxzZSBp
ZiAoa2V5ID09PSAiZW5kIikKICAgICAgICAgICAgICAgICBlbmQgPSBhbmltYXRpb25ba2V5XTsK
QEAgLTgxNSwxNCArODIxLDE0IEBAIFdlYkluc3BlY3Rvci5wZXJmb3JtU2VhcmNoID0gZnVuY3Rp
b24ocXUKIAogICAgICAgICBXZWJJbnNwZWN0b3IubmF2aWdhdGVUb1BhbmVsKGVsZW1lbnQucmVw
cmVzZW50ZWRPYmplY3QucGFuZWwsICJzb3VyY2UiKTsKICAgICAgICAgZWxlbWVudC5yZXByZXNl
bnRlZE9iamVjdC5saW5lLnNjcm9sbEludG9WaWV3KHRydWUpOwotICAgICAgICByZXN1bHRzQ29u
dGFpbmVyLnNjcm9sbFRvRWxlbWVudChlbGVtZW50Ll9saXN0SXRlbU5vZGUpOworICAgICAgICBy
ZXN1bHRzQ29udGFpbmVyLnNjcm9sbFRvRWxlbWVudChlbGVtZW50Lmxpc3RJdGVtRWxlbWVudCk7
CiAgICAgfQogCiAgICAgdmFyIGRvbVJlc3VsdFNlbGVjdGVkID0gZnVuY3Rpb24oZWxlbWVudCkK
ICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5uYXZpZ2F0ZVRvUGFuZWwoZWxlbWVudC5yZXBy
ZXNlbnRlZE9iamVjdC5wYW5lbCwgImRvbSIpOwogICAgICAgICBlbGVtZW50LnJlcHJlc2VudGVk
T2JqZWN0LnBhbmVsLmZvY3VzZWRET01Ob2RlID0gZWxlbWVudC5yZXByZXNlbnRlZE9iamVjdC5u
b2RlOwotICAgICAgICByZXN1bHRzQ29udGFpbmVyLnNjcm9sbFRvRWxlbWVudChlbGVtZW50Ll9s
aXN0SXRlbU5vZGUpOworICAgICAgICByZXN1bHRzQ29udGFpbmVyLnNjcm9sbFRvRWxlbWVudChl
bGVtZW50Lmxpc3RJdGVtRWxlbWVudCk7CiAgICAgfQogCiAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBmaWxlcy5sZW5ndGg7ICsraSkgewpJbmRleDogcGFnZS9pbnNwZWN0b3IvdHJlZW91dGxpbmUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcGFnZS9pbnNwZWN0b3IvdHJlZW91dGxpbmUuanMJKHJldmlzaW9u
IDI3NDk1KQorKysgcGFnZS9pbnNwZWN0b3IvdHJlZW91dGxpbmUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTQwMSw2ICs0MDEsMTQgQEAgZnVuY3Rpb24gVHJlZUVsZW1lbnQodGl0bGUsIHJlcHJlc2Vu
dGVkTwogfQogCiBUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CisgICAgZ2V0IGxpc3RJdGVtRWxl
bWVudCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xpc3RJdGVtTm9kZTsKKyAgICB9LAorCisg
ICAgZ2V0IGNoaWxkcmVuTGlzdEVsZW1lbnQoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9jaGls
ZHJlbkxpc3ROb2RlOworICAgIH0sCisKICAgICBnZXQgdGl0bGUoKSB7CiAgICAgICAgIHJldHVy
biB0aGlzLl90aXRsZTsKICAgICB9LApAQCAtNDc0LDYgKzQ4Miw5IEBAIFRyZWVFbGVtZW50LnBy
b3RvdHlwZS5fYXR0YWNoID0gZnVuY3Rpb24KICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmFk
ZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIFRyZWVFbGVtZW50LnRyZWVFbGVtZW50U2VsZWN0
ZWQsIGZhbHNlKTsKICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgVHJlZUVsZW1lbnQudHJlZUVsZW1lbnRUb2dnbGVkLCBmYWxzZSk7CiAgICAgICAg
IHRoaXMuX2xpc3RJdGVtTm9kZS5hZGRFdmVudExpc3RlbmVyKCJkYmxjbGljayIsIFRyZWVFbGVt
ZW50LnRyZWVFbGVtZW50RG91YmxlQ2xpY2tlZCwgZmFsc2UpOworCisgICAgICAgIGlmICh0aGlz
Lm9uYXR0YWNoKQorICAgICAgICAgICAgdGhpcy5vbmF0dGFjaCh0aGlzKTsKICAgICB9CiAKICAg
ICB0aGlzLnBhcmVudC5fY2hpbGRyZW5MaXN0Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fbGlzdEl0
ZW1Ob2RlLCAodGhpcy5uZXh0U2libGluZyA/IHRoaXMubmV4dFNpYmxpbmcuX2xpc3RJdGVtTm9k
ZSA6IG51bGwpKTsKQEAgLTQ5OSw3ICs1MTAsNyBAQCBUcmVlRWxlbWVudC50cmVlRWxlbWVudFNl
bGVjdGVkID0gZnVuY3RpCiAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LnRyZWVFbGVtZW50
IHx8ICFlbGVtZW50LnRyZWVFbGVtZW50LnNlbGVjdGFibGUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChldmVudC5vZmZzZXRYID4gMjAgfHwgIWVsZW1lbnQudHJlZUVsZW1lbnQuaGFzQ2hp
bGRyZW4pCisgICAgaWYgKGV2ZW50Lm9mZnNldFggPiAxMCB8fCAhZWxlbWVudC50cmVlRWxlbWVu
dC5oYXNDaGlsZHJlbikKICAgICAgICAgZWxlbWVudC50cmVlRWxlbWVudC5zZWxlY3QoKTsKIH0K
IApAQCAtNTA5LDcgKzUyMCw3IEBAIFRyZWVFbGVtZW50LnRyZWVFbGVtZW50VG9nZ2xlZCA9IGZ1
bmN0aW8KICAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQudHJlZUVsZW1lbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChldmVudC5vZmZzZXRYIDw9IDIwICYmIGVsZW1lbnQudHJlZUVs
ZW1lbnQuaGFzQ2hpbGRyZW4pIHsKKyAgICBpZiAoZXZlbnQub2Zmc2V0WCA8PSAxMCAmJiBlbGVt
ZW50LnRyZWVFbGVtZW50Lmhhc0NoaWxkcmVuKSB7CiAgICAgICAgIGlmIChlbGVtZW50LnRyZWVF
bGVtZW50LmV4cGFuZGVkKSB7CiAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KQogICAgICAg
ICAgICAgICAgIGVsZW1lbnQudHJlZUVsZW1lbnQuY29sbGFwc2VSZWN1cnNpdmVseSgpOwpAQCAt
NTMwLDExICs1NDEsMTAgQEAgVHJlZUVsZW1lbnQudHJlZUVsZW1lbnREb3VibGVDbGlja2VkID0g
ZgogICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC50cmVlRWxlbWVudCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKGVsZW1lbnQudHJlZUVsZW1lbnQuaGFzQ2hpbGRyZW4gJiYgIWVsZW1l
bnQudHJlZUVsZW1lbnQuZXhwYW5kZWQpCi0gICAgICAgIGVsZW1lbnQudHJlZUVsZW1lbnQuZXhw
YW5kKCk7Ci0KICAgICBpZiAoZWxlbWVudC50cmVlRWxlbWVudC5vbmRibGNsaWNrKQotICAgICAg
ICBlbGVtZW50LnRyZWVFbGVtZW50Lm9uZGJsY2xpY2soZWxlbWVudC50cmVlRWxlbWVudCk7Cisg
ICAgICAgIGVsZW1lbnQudHJlZUVsZW1lbnQub25kYmxjbGljayhlbGVtZW50LnRyZWVFbGVtZW50
LCBldmVudCk7CisgICAgZWxzZSBpZiAoZWxlbWVudC50cmVlRWxlbWVudC5oYXNDaGlsZHJlbiAm
JiAhZWxlbWVudC50cmVlRWxlbWVudC5leHBhbmRlZCkKKyAgICAgICAgZWxlbWVudC50cmVlRWxl
bWVudC5leHBhbmQoKTsKIH0KIAogVHJlZUVsZW1lbnQucHJvdG90eXBlLmNvbGxhcHNlID0gZnVu
Y3Rpb24oKQpAQCAtNTgxLDEwICs1OTEsOCBAQCBUcmVlRWxlbWVudC5wcm90b3R5cGUuZXhwYW5k
ID0gZnVuY3Rpb24oCiAgICAgICAgIGlmICh0aGlzLm9ucG9wdWxhdGUpCiAgICAgICAgICAgICB0
aGlzLm9ucG9wdWxhdGUodGhpcyk7CiAKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
LmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNo
aWxkcmVuW2ldOwotICAgICAgICAgICAgY2hpbGQuX2F0dGFjaCgpOwotICAgICAgICB9CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIHRoaXMuY2hpbGRyZW5baV0uX2F0dGFjaCgpOwogCiAgICAgICAgIGRlbGV0ZSB0aGlz
LnJlZnJlc2hDaGlsZHJlbjsKICAgICB9CkluZGV4OiBwYWdlL2luc3BlY3Rvci91dGlsaXRpZXMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcGFnZS9pbnNwZWN0b3IvdXRpbGl0aWVzLmpzCShyZXZpc2lvbiAy
NzQ5NSkKKysrIHBhZ2UvaW5zcGVjdG9yL3V0aWxpdGllcy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MjQ0LDYgKzI0NCw4MiBAQCBTdHJpbmcucHJvdG90eXBlLnRyaW1VUkwgPSBmdW5jdGlvbihiYXNl
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUu
Z2V0U2hvcnRoYW5kVmFsdWUgPSBmdW5jdGlvbihzaG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICB2
YXIgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoc2hvcnRoYW5kUHJvcGVydHkpOworICAg
IGlmICghdmFsdWUpIHsKKyAgICAgICAgLy8gU29tZSBzaG9ydGhhbmRzIChsaWtlIGJvcmRlcikg
cmV0dXJuIGEgbnVsbCB2YWx1ZSwgc28gY29tcHV0ZSBhIHNob3J0aGFuZCB2YWx1ZS4KKyAgICAg
ICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU4MjMgaXMgZml4ZWQuCisKKyAgICAgICAgdmFyIGZvdW5kUHJvcGVydGll
cyA9IHt9OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgIHZhciBpbmRpdmlkdWFsUHJvcGVydHkgPSB0aGlzW2ldOworICAgICAgICAg
ICAgaWYgKHRoaXMuZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAhPT0g
c2hvcnRoYW5kUHJvcGVydHkgfHwgaW5kaXZpZHVhbFByb3BlcnR5IGluIGZvdW5kUHJvcGVydGll
cykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdmFyIGluZGl2aWR1
YWxWYWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShpbmRpdmlkdWFsUHJvcGVydHkpOworICAg
ICAgICAgICAgaWYgKHRoaXMuaXNQcm9wZXJ0eUltcGxpY2l0KGluZGl2aWR1YWxQcm9wZXJ0eSkg
fHwgaW5kaXZpZHVhbFZhbHVlID09PSAiaW5pdGlhbCIpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIGZvdW5kUHJvcGVydGllc1tpbmRpdmlkdWFsUHJvcGVydHldID0g
dHJ1ZTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9
ICIiOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoKQorICAgICAgICAgICAgICAg
IHZhbHVlICs9ICIgIjsKKyAgICAgICAgICAgIHZhbHVlICs9IGluZGl2aWR1YWxWYWx1ZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK0NTU1N0eWxlRGVjbGFyYXRp
b24ucHJvdG90eXBlLmdldFNob3J0aGFuZFByaW9yaXR5ID0gZnVuY3Rpb24oc2hvcnRoYW5kUHJv
cGVydHkpCit7CisgICAgdmFyIHByaW9yaXR5ID0gdGhpcy5nZXRQcm9wZXJ0eVByaW9yaXR5KHNo
b3J0aGFuZFByb3BlcnR5KTsKKyAgICBpZiAoIXByaW9yaXR5KSB7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGluZGl2aWR1
YWxQcm9wZXJ0eSA9IHRoaXNbaV07CisgICAgICAgICAgICBpZiAodGhpcy5nZXRQcm9wZXJ0eVNo
b3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9PSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHByaW9yaXR5ID0gdGhpcy5nZXRQcm9w
ZXJ0eVByaW9yaXR5KGluZGl2aWR1YWxQcm9wZXJ0eSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcHJpb3JpdHk7Cit9CisKK0NTU1N0eWxlRGVjbGFy
YXRpb24ucHJvdG90eXBlLmdldExvbmdoYW5kUHJvcGVydGllcyA9IGZ1bmN0aW9uKHNob3J0aGFu
ZFByb3BlcnR5KQoreworICAgIHZhciBwcm9wZXJ0aWVzID0gW107CisgICAgdmFyIGZvdW5kUHJv
cGVydGllcyA9IHt9OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgIHZhciBpbmRpdmlkdWFsUHJvcGVydHkgPSB0aGlzW2ldOworICAgICAgICBp
ZiAodGhpcy5nZXRQcm9wZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9PSBzaG9y
dGhhbmRQcm9wZXJ0eSB8fCBpbmRpdmlkdWFsUHJvcGVydHkgaW4gZm91bmRQcm9wZXJ0aWVzKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvdW5kUHJvcGVydGllc1tpbmRpdmlkdWFs
UHJvcGVydHldID0gdHJ1ZTsKKyAgICAgICAgcHJvcGVydGllcy5wdXNoKGluZGl2aWR1YWxQcm9w
ZXJ0eSk7CisgICAgfQorCisgICAgcmV0dXJuIHByb3BlcnRpZXM7Cit9CisKK0NTU1N0eWxlRGVj
bGFyYXRpb24ucHJvdG90eXBlLmdldFVuaXF1ZVByb3BlcnRpZXMgPSBmdW5jdGlvbigpCit7Cisg
ICAgdmFyIHByb3BlcnRpZXMgPSBbXTsKKyAgICB2YXIgZm91bmRQcm9wZXJ0aWVzID0ge307CisK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFy
IHByb3BlcnR5ID0gdGhpc1tpXTsKKyAgICAgICAgaWYgKHByb3BlcnR5IGluIGZvdW5kUHJvcGVy
dGllcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3VuZFByb3BlcnRpZXNbcHJv
cGVydHldID0gdHJ1ZTsKKyAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsKKyAgICB9
CisKKyAgICByZXR1cm4gcHJvcGVydGllczsKK30KKwogZnVuY3Rpb24gaXNOb2RlV2hpdGVzcGFj
ZSgpCiB7CiAgICAgaWYgKCF0aGlzIHx8IHRoaXMubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RF
KQo=
</data>
<flag name="review"
          id="7264"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>